English ▼
Skip to page content Skip to main navigation
e.g. "templates" or "datastore"

# The Service Class

#### Experimental!

ProtoRPC is an experimental, innovative, and rapidly changing new feature for App Engine. Unfortunately, being on the bleeding edge means that we may make backwards-incompatible changes to ProtoRPC. We will inform the community when this feature is no longer experimental.

ProtoRPC 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 Property
  - request_state
- Class Methods
  - all_remote_methods()
  - new_factory()
- Instance methods:
  - initialize_request_state

## 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.