Google Protocol RPC services are constructed either via a constructor or a factory which takes no parameters. However, some applications need to pass some state or configuration into a service across multiple requests. To do this, define parameters to the constructor of the service and use the new_factory() class method to build a factory that will transmit parameters to the constructor. For example:
from protorpc import remote
class MyService(remote.Service):
def __init__(self, configuration, state):
self.configuration = configuration
self.state = state
configuration = MyServiceConfiguration()
global_state = MyServiceState()
my_service_factory = MyService.new_factory(configuration,
state=global_state)
The contract with any service handler is that a new service object is created to handle each user request, and that the construction does not take any parameters. The factory satisfies this condition:
new_instance = my_service_factory()
assert new_instance.state is global_state
Service
is provided by the protorpc.remote
module.
Class Properties
Services instances one property:
- request_state
- Request state associated with this Service instance.
Class Methods
The Service class provides the following class methods:
- all_remote_methods()
-
Gets all remote methods for a Service class.
Note: Built-in methods do not appear in the dictionary of remote methods.
Returns a dictionary that maps method names to remote methods.
- new_factory(args, **kwargs)
-
Creates a factory for a service. Useful for passing configuration or state objects to the service. Accepts arbitrary parameters and keywords, however, underlying service must accept also accept not other parameters in its constructor.
Arguments- args
- Arguments to pass to the service constructor.
- **kwargs
Returns a factory function that creates a new instance and forwards arguments and keywords to the constructor.
Instance Methods
Service instances have the following methods:
- initialize_request_state(request_state)
- Arguments:
- request_state
- A RequestState instance.