~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/smart/protocol.py

Rename 'setProtoAndMedium' to more accurate 'setProtoAndMediumRequest', add ABCs for Requesters and ResponseHandlers.

Show diffs side-by-side

added added

removed removed

Lines of Context:
59
59
    return '\x01'.join(args) + '\n'
60
60
 
61
61
 
 
62
class Requester(object):
 
63
    """Abstract base class for an object that can issue requests on a smart
 
64
    medium.
 
65
    """
 
66
 
 
67
    def call(self, *args):
 
68
        """Make a remote call.
 
69
 
 
70
        :param args: the arguments of this call.
 
71
        """
 
72
        raise NotImplementedError(self.call)
 
73
 
 
74
    def call_with_body_bytes(self, args, body):
 
75
        """Make a remote call with a body.
 
76
 
 
77
        :param args: the arguments of this call.
 
78
        :type body: str
 
79
        :param body: the body to send with the request.
 
80
        """
 
81
        raise NotImplementedError(self.call_with_body_bytes)
 
82
 
 
83
    def call_with_body_readv_array(self, args, body):
 
84
        """Make a remote call with a readv array.
 
85
 
 
86
        :param args: the arguments of this call.
 
87
        :type body: iterable of (start, length) tuples.
 
88
        :param body: the readv ranges to send with this request.
 
89
        """
 
90
        raise NotImplementedError(self.call_with_body_readv_array)
 
91
 
 
92
 
62
93
class SmartProtocolBase(object):
63
94
    """Methods common to client and server"""
64
95
 
472
503
        return result
473
504
 
474
505
 
475
 
class SmartClientRequestProtocolOne(SmartProtocolBase):
 
506
class SmartClientRequestProtocolOne(SmartProtocolBase, Requester,
 
507
        message.ResponseHandler):
476
508
    """The client-side protocol for smart version 1."""
477
509
 
478
510
    def __init__(self, request):
949
981
        self._write_end()
950
982
        
951
983
 
952
 
class ProtocolThreeRequester(_ProtocolThreeEncoder):
 
984
class ProtocolThreeRequester(_ProtocolThreeEncoder, Requester):
953
985
 
954
986
    def __init__(self, medium_request):
955
987
        _ProtocolThreeEncoder.__init__(self, medium_request.accept_bytes)