diff --git a/src/python/grpcio/grpc/__init__.py b/src/python/grpcio/grpc/__init__.py index b89dfb1fb1d..d459cc2e14b 100644 --- a/src/python/grpcio/grpc/__init__.py +++ b/src/python/grpcio/grpc/__init__.py @@ -2021,58 +2021,7 @@ class Compression(enum.IntEnum): Gzip = _compression.Gzip -def _uninstalled_protos(*args, **kwargs): - raise NotImplementedError( - "Install the grpcio-tools package to use the protos function.") - - -def _uninstalled_services(*args, **kwargs): - raise NotImplementedError( - "Install the grpcio-tools package to use the services function.") - - -def _uninstalled_protos_and_services(*args, **kwargs): - raise NotImplementedError( - "Install the grpcio-tools package to use the protos_and_services function." - ) - - -def _interpreter_version_protos(*args, **kwargs): - raise NotImplementedError( - "The protos function is only on available on Python 3.X interpreters.") - - -def _interpreter_version_services(*args, **kwargs): - raise NotImplementedError( - "The services function is only on available on Python 3.X interpreters." - ) - - -def _interpreter_version_protos_and_services(*args, **kwargs): - raise NotImplementedError( - "The protos_and_services function is only on available on Python 3.X interpreters." - ) - - -if sys.version_info[0] < 3: - protos = _interpreter_version_protos - services = _interpreter_version_services - protos_and_services = _interpreter_version_protos_and_services -else: - try: - import grpc_tools - except ImportError as e: - # NOTE: It's possible that we're encountering a transitive ImportError, so - # we check for that and re-raise if so. - if "grpc_tools" not in e.args[0]: - raise e - protos = _uninstalled_protos - services = _uninstalled_services - protos_and_services = _uninstalled_protos_and_services - else: - from grpc_tools.protoc import _protos as protos - from grpc_tools.protoc import _services as services - from grpc_tools.protoc import _protos_and_services as protos_and_services +from grpc._runtime_protos import protos, services, protos_and_services ################################### __all__ ################################# diff --git a/src/python/grpcio/grpc/_runtime_protos.py b/src/python/grpcio/grpc/_runtime_protos.py new file mode 100644 index 00000000000..ed86ea09052 --- /dev/null +++ b/src/python/grpcio/grpc/_runtime_protos.py @@ -0,0 +1,68 @@ +# Copyright 2020 The gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import sys + +def _uninstalled_protos(*args, **kwargs): + raise NotImplementedError( + "Install the grpcio-tools package to use the protos function.") + + +def _uninstalled_services(*args, **kwargs): + raise NotImplementedError( + "Install the grpcio-tools package to use the services function.") + + +def _uninstalled_protos_and_services(*args, **kwargs): + raise NotImplementedError( + "Install the grpcio-tools package to use the protos_and_services function." + ) + + +def _interpreter_version_protos(*args, **kwargs): + raise NotImplementedError( + "The protos function is only on available on Python 3.X interpreters.") + + +def _interpreter_version_services(*args, **kwargs): + raise NotImplementedError( + "The services function is only on available on Python 3.X interpreters." + ) + + +def _interpreter_version_protos_and_services(*args, **kwargs): + raise NotImplementedError( + "The protos_and_services function is only on available on Python 3.X interpreters." + ) + + +if sys.version_info[0] < 3: + protos = _interpreter_version_protos + services = _interpreter_version_services + protos_and_services = _interpreter_version_protos_and_services +else: + try: + import grpc_tools + except ImportError as e: + # NOTE: It's possible that we're encountering a transitive ImportError, so + # we check for that and re-raise if so. + if "grpc_tools" not in e.args[0]: + raise e + protos = _uninstalled_protos + services = _uninstalled_services + protos_and_services = _uninstalled_protos_and_services + else: + from grpc_tools.protoc import _protos as protos + from grpc_tools.protoc import _services as services + from grpc_tools.protoc import _protos_and_services as protos_and_services