On Tue, Jun 29, 2021 at 5:58 PM Riccardo Fiorista <[email protected]> wrote: > > Hi there! > > Excited to be part of the gRPC community. > I've recently posted a feature request to the > > However, I'm actually facing some issues atm and am wondering if I'm on a > completely wrong track here. > > We're currently trying to move our python code-base to the experimental > no-codegen API using the commodity function: > ``` > grpc.protos_and_services(protobuf_path) > ``` > There's also a very basic example of the usage (here in the python > examples)[https://github.com/grpc/grpc/tree/master/examples/python/no_codegen]. > > However, we're currently facing the issues that protobuf files importing > other protobuf files require special treatment which we addressed like this: > ``` > # load.py > import shutil > import grpc > import os > > > def get_protos_and_services(service): > file_paths = _import_proto_file(service) > pb2, pb2_grpc = grpc.protos_and_services(file_paths[0]) > # need to do it this way as tempfile doesn't work > for f in file_paths: > os.remove(f) > return pb2, pb2_grpc > > > def _import_proto_file(service): > """ > Recursively imports all necessary protofiles > """ > file_paths = [f"{service}.proto"] > with open(file_paths[0], 'w+b') as f: > shutil.copy2(_get_absolute_protobuf_file_path(service), f.name) > for line in f: > l = line.decode('utf-8') > if 'import "' in l: > service_to_import = l.replace(' ', > '').lstrip('import"').split('.')[0] > file_paths.extend(_import_proto_file(service_to_import)) > return file_paths > > def _get_absolute_protobuf_file_path(service): > return os.path.dirname(os.path.abspath(__file__)) + f'/{service}.proto' > ``` > While this is far from elegant, it works. > > Now, there's another protobuf file that has an import from the official > google standard protobuf lib: > ``` > import "google/protobuf/timestamp.proto"; > ``` > This case is not covered from the code above and we're currently struggling > to find a solution of how to import it using the no-codegen API. > > Anyone an idea what we could do here?
I couldn't find any resource online talking about no_codegen - (if you have any handy, that would be great). However, perhaps you could clone the repository https://github.com/protocolbuffers/protobuf/ and then read the directory tree/master/src/google/protobuf looking for the imports? > > Cheers, > Riccardo > > -- > You received this message because you are subscribed to the Google Groups > "grpc.io" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/grpc-io/e5006763-fee8-4f0c-9fa1-10c75d13d8b8n%40googlegroups.com. -- You received this message because you are subscribed to the Google Groups "grpc.io" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/grpc-io/CANODV3%3DvD-%2Bwi09_530soCXNuX9ccnC4aWuRWUewLOPPy44SUA%40mail.gmail.com.
