La bibliothèque de services à distance

Ce module contient des classes utiles pour la création de services à distance qui respectent un modèle de requête et de réponse standard. Pour respecter ce modèle, un service doit ressembler à la classe suivante :

# Each service instance only handles a single request and is then discarded.
# Make these objects light weight.
class Service(object):

    # It must be possible to construct service objects without any parameters.
    # If your constructor needs extra information you should provide a
    # no-argument factory function to create service instances.
    def __init__(self):
        ...

    # Each remote method must use the 'remote' decorator, passing the request
    # and response message types.  The remote method itself must take a single
    # parameter which is an instance of RequestMessage and return an instance
    # of ResponseMessage.
    @method(RequestMessage, ResponseMessage)
    def remote_method(self, request):
        # Return an instance of ResponseMessage.

    # A service object may optionally implement a 'initialize_request_state'
    # method that takes as a parameter a single instance of a RequestState.  If
    # a service does not implement this method it will not receive the request
    # state.
    def initialize_request_state(self, state):
        ...

La classe Service est une classe de base pratique qui fournit les fonctionnalités ci-dessus. Elle implémente toutes les méthodes obligatoires et facultatives pour un service. Elle possède également des méthodes pratiques de création de fonctions de fabrique qui peuvent transférer un état global permanent vers une nouvelle instance de service.

Le décorateur distant est utilisé pour déclarer quelles méthodes d'une classe sont destinées à desservir les RPC. Ce décorateur n'est cependant pas responsable de la manipulation des sockets et des divers protocoles RPC sous-jacents. Le décorateur s'assure que vous utilisez le type de requête qui convient, mais il ne vérifie pas l'initialisation.

Lorsque le décorateur distant est utilisé sur une méthode, la méthode du wrapper possède une propriété "distante" qui lui est associée. Cette propriété contient les valeurs request_type et response_type attendues par la mise en œuvre de la méthode.

À lui seul, le décorateur distant ne gère pas le sous-classement des méthodes distantes. Pour étendre un service, utilisez les méthodes de sous-classement pour renouveler la décoration. Exemple :

class MyService(Service):

    @method(DoSomethingRequest, DoSomethingResponse)
    def do_something(self, request):
        ... implement do-something ...

class MyBetterService(MyService):

    @method(DoSomethingRequest, DoSomethingResponse)
    def do_something(self, request):
        response = super(MyBetterService, self).do_something.remote.method(request)
        ... do something with response ...
        return response
Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Environnement standard App Engine pour Python 2