11#!/usr/bin/env python3
22import base64
3- import os
3+ import os , sys
44import subprocess
55from collections import defaultdict
66from 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
4343class 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