|
|
|
@ -146,8 +146,7 @@ class _Stub(interfaces.Stub): |
|
|
|
|
self._rear_link.join_fore_link(self._front) |
|
|
|
|
self._rear_link.start() |
|
|
|
|
self._understub = _face_implementations.dynamic_stub( |
|
|
|
|
_reexport.common_cardinalities(self._breakdown.cardinalities), |
|
|
|
|
self._front, self._pool, '') |
|
|
|
|
self._breakdown.face_cardinalities, self._front, self._pool, '') |
|
|
|
|
else: |
|
|
|
|
raise ValueError('Tried to __enter__ already-__enter__ed Stub!') |
|
|
|
|
return self |
|
|
|
@ -171,17 +170,9 @@ class _Stub(interfaces.Stub): |
|
|
|
|
if self._pool is None: |
|
|
|
|
raise ValueError('Tried to __getattr__ non-__enter__ed Stub!') |
|
|
|
|
else: |
|
|
|
|
underlying_attr = getattr(self._understub, attr, None) |
|
|
|
|
method_cardinality = self._breakdown.cardinalities.get(attr) |
|
|
|
|
# TODO(nathaniel): Eliminate this trick. |
|
|
|
|
if underlying_attr is None: |
|
|
|
|
for method_name, method_cardinality in self._breakdown.cardinalities.iteritems(): |
|
|
|
|
last_slash_index = method_name.rfind('/') |
|
|
|
|
if 0 <= last_slash_index and method_name[last_slash_index + 1:] == attr: |
|
|
|
|
underlying_attr = getattr(self._understub, method_name) |
|
|
|
|
break |
|
|
|
|
else: |
|
|
|
|
raise AttributeError(attr) |
|
|
|
|
underlying_attr = getattr( |
|
|
|
|
self._understub, self._breakdown.qualified_names.get(attr), None) |
|
|
|
|
if method_cardinality is interfaces.Cardinality.UNARY_UNARY: |
|
|
|
|
return _reexport.unary_unary_sync_async(underlying_attr) |
|
|
|
|
elif method_cardinality is interfaces.Cardinality.UNARY_STREAM: |
|
|
|
@ -198,44 +189,49 @@ class _Stub(interfaces.Stub): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _build_stub( |
|
|
|
|
methods, host, port, secure, root_certificates, private_key, |
|
|
|
|
service_name, methods, host, port, secure, root_certificates, private_key, |
|
|
|
|
certificate_chain, server_host_override=None): |
|
|
|
|
breakdown = _face_utilities.break_down_invocation(methods) |
|
|
|
|
breakdown = _face_utilities.break_down_invocation(service_name, methods) |
|
|
|
|
return _Stub( |
|
|
|
|
breakdown, host, port, secure, root_certificates, private_key, |
|
|
|
|
certificate_chain, server_host_override=server_host_override) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _build_server(methods, port, private_key, certificate_chain): |
|
|
|
|
breakdown = _face_utilities.break_down_service(methods) |
|
|
|
|
def _build_server(service_name, methods, port, private_key, certificate_chain): |
|
|
|
|
breakdown = _face_utilities.break_down_service(service_name, methods) |
|
|
|
|
return _Server(breakdown, port, private_key, certificate_chain) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def insecure_stub(methods, host, port): |
|
|
|
|
def insecure_stub(service_name, methods, host, port): |
|
|
|
|
"""Constructs an insecure interfaces.Stub. |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
service_name: The package-qualified full name of the service. |
|
|
|
|
methods: A dictionary from RPC method name to |
|
|
|
|
interfaces.RpcMethodInvocationDescription describing the RPCs to be |
|
|
|
|
supported by the created stub. |
|
|
|
|
supported by the created stub. The RPC method names in the dictionary are |
|
|
|
|
not qualified by the service name or decorated in any other way. |
|
|
|
|
host: The host to which to connect for RPC service. |
|
|
|
|
port: The port to which to connect for RPC service. |
|
|
|
|
|
|
|
|
|
Returns: |
|
|
|
|
An interfaces.Stub affording RPC invocation. |
|
|
|
|
""" |
|
|
|
|
return _build_stub(methods, host, port, False, None, None, None) |
|
|
|
|
return _build_stub( |
|
|
|
|
service_name, methods, host, port, False, None, None, None) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def secure_stub( |
|
|
|
|
methods, host, port, root_certificates, private_key, certificate_chain, |
|
|
|
|
server_host_override=None): |
|
|
|
|
service_name, methods, host, port, root_certificates, private_key, |
|
|
|
|
certificate_chain, server_host_override=None): |
|
|
|
|
"""Constructs an insecure interfaces.Stub. |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
service_name: The package-qualified full name of the service. |
|
|
|
|
methods: A dictionary from RPC method name to |
|
|
|
|
interfaces.RpcMethodInvocationDescription describing the RPCs to be |
|
|
|
|
supported by the created stub. |
|
|
|
|
supported by the created stub. The RPC method names in the dictionary are |
|
|
|
|
not qualified by the service name or decorated in any other way. |
|
|
|
|
host: The host to which to connect for RPC service. |
|
|
|
|
port: The port to which to connect for RPC service. |
|
|
|
|
root_certificates: The PEM-encoded root certificates or None to ask for |
|
|
|
@ -251,17 +247,19 @@ def secure_stub( |
|
|
|
|
An interfaces.Stub affording RPC invocation. |
|
|
|
|
""" |
|
|
|
|
return _build_stub( |
|
|
|
|
methods, host, port, True, root_certificates, private_key, |
|
|
|
|
service_name, methods, host, port, True, root_certificates, private_key, |
|
|
|
|
certificate_chain, server_host_override=server_host_override) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def insecure_server(methods, port): |
|
|
|
|
def insecure_server(service_name, methods, port): |
|
|
|
|
"""Constructs an insecure interfaces.Server. |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
service_name: The package-qualified full name of the service. |
|
|
|
|
methods: A dictionary from RPC method name to |
|
|
|
|
interfaces.RpcMethodServiceDescription describing the RPCs to |
|
|
|
|
be serviced by the created server. |
|
|
|
|
be serviced by the created server. The RPC method names in the dictionary |
|
|
|
|
are not qualified by the service name or decorated in any other way. |
|
|
|
|
port: The desired port on which to serve or zero to ask for a port to |
|
|
|
|
be automatically selected. |
|
|
|
|
|
|
|
|
@ -269,16 +267,18 @@ def insecure_server(methods, port): |
|
|
|
|
An interfaces.Server that will run with no security and |
|
|
|
|
service unsecured raw requests. |
|
|
|
|
""" |
|
|
|
|
return _build_server(methods, port, None, None) |
|
|
|
|
return _build_server(service_name, methods, port, None, None) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def secure_server(methods, port, private_key, certificate_chain): |
|
|
|
|
def secure_server(service_name, methods, port, private_key, certificate_chain): |
|
|
|
|
"""Constructs a secure interfaces.Server. |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
service_name: The package-qualified full name of the service. |
|
|
|
|
methods: A dictionary from RPC method name to |
|
|
|
|
interfaces.RpcMethodServiceDescription describing the RPCs to |
|
|
|
|
be serviced by the created server. |
|
|
|
|
be serviced by the created server. The RPC method names in the dictionary |
|
|
|
|
are not qualified by the service name or decorated in any other way. |
|
|
|
|
port: The port on which to serve or zero to ask for a port to be |
|
|
|
|
automatically selected. |
|
|
|
|
private_key: A pem-encoded private key. |
|
|
|
@ -287,4 +287,5 @@ def secure_server(methods, port, private_key, certificate_chain): |
|
|
|
|
Returns: |
|
|
|
|
An interfaces.Server that will serve secure traffic. |
|
|
|
|
""" |
|
|
|
|
return _build_server(methods, port, private_key, certificate_chain) |
|
|
|
|
return _build_server( |
|
|
|
|
service_name, methods, port, private_key, certificate_chain) |
|
|
|
|