Skip to content

Commit 08d0a6e

Browse files
committed
optional sf output dir
1 parent 1b64ead commit 08d0a6e

1 file changed

Lines changed: 12 additions & 7 deletions

File tree

substreams/substream.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python3
22
import base64
3-
import os
3+
import os, sys
44
import subprocess
55
from collections import defaultdict
66
from dataclasses import dataclass
@@ -22,9 +22,9 @@ def retrieve_class(module_name: str, class_name: str):
2222
return getattr(module, class_name)
2323

2424

25-
def generate_pb2_files(spkg_path: str, commands: str) -> None:
25+
def generate_pb2_files(spkg_path: str, commands: str, out_path: str) -> None:
2626
command = f"""
27-
alias protogen_py="python3 -m grpc_tools.protoc --descriptor_set_in={spkg_path} --python_out=. --grpc_python_out=.";
27+
alias protogen_py="python3 -m grpc_tools.protoc --descriptor_set_in={spkg_path} --python_out={out_path} --grpc_python_out={out_path}";
2828
{commands}
2929
unalias protogen_py;
3030
"""
@@ -42,22 +42,27 @@ class SubstreamOutput:
4242

4343
class Substream:
4444
def __init__(
45-
self, spkg_path: str, token: Optional[str] = None, regenerate: bool = False
45+
self, spkg_path: str, token: Optional[str] = None, regenerate: bool = False, sf_out_dir: str = '.'
4646
):
4747
self.token: Optional[str] = os.getenv("SUBSTREAMS_API_TOKEN", None) or token
48+
sf_dir_path = os.path.join(sf_out_dir, 'sf')
49+
if not Path(sf_out_dir).exists():
50+
os.makedirs(sf_out_dir)
4851
if not self.token:
4952
raise Exception("Must set SUBSTREAMS_API_TOKEN")
5053
if not Path(spkg_path).exists() or not spkg_path.endswith(".spkg"):
5154
raise Exception("Must provide a valid .spkg file!")
52-
if not Path("sf/substreams").exists() or regenerate:
55+
if not Path(sf_dir_path).exists() or regenerate:
5356
# generate sf/ directory
5457
commands = """
5558
protogen_py sf/substreams/v1/substreams.proto;
5659
protogen_py sf/substreams/v1/package.proto;
5760
protogen_py sf/substreams/v1/modules.proto;
5861
protogen_py sf/substreams/v1/clock.proto;
5962
"""
60-
generate_pb2_files(spkg_path, commands)
63+
generate_pb2_files(spkg_path, commands, out_path=sf_out_dir)
64+
65+
sys.path.append(sf_out_dir)
6166

6267
from sf.substreams.v1.package_pb2 import Package
6368
from sf.substreams.v1.substreams_pb2_grpc import StreamStub
@@ -73,7 +78,7 @@ def __init__(
7378
if not file.startswith("sf/") and not file.startswith("google/")
7479
]
7580
)
76-
generate_pb2_files(spkg_path, custom_proto_files)
81+
generate_pb2_files(spkg_path, custom_proto_files, out_path=sf_out_dir)
7782

7883
credentials = grpc.composite_channel_credentials(
7984
grpc.ssl_channel_credentials(),

0 commit comments

Comments
 (0)