changeset 37609:01bfe5ad0c53

httppeer: implement ipeerconnection This is low hanging fruit. We might as well start somewhere. Differential Revision: https://phab.mercurial-scm.org/D3254
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 11 Apr 2018 11:03:45 -0700
parents fa4b39bb0a07
children 98861a2298b5
files mercurial/httppeer.py tests/test-check-interfaces.py
diffstat 2 files changed, 28 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/httppeer.py	Thu Apr 12 13:25:54 2018 -0400
+++ b/mercurial/httppeer.py	Wed Apr 11 11:03:45 2018 -0700
@@ -19,11 +19,15 @@
 from .thirdparty import (
     cbor,
 )
+from .thirdparty.zope import (
+    interface as zi,
+)
 from . import (
     bundle2,
     error,
     httpconnection,
     pycompat,
+    repository,
     statichttprepo,
     url as urlmod,
     util,
@@ -513,6 +517,7 @@
         raise exception
 
 # TODO implement interface for version 2 peers
+@zi.implementer(repository.ipeerconnection)
 class httpv2peer(object):
     def __init__(self, ui, repourl, apipath, opener, requestbuilder,
                  apidescriptor):
@@ -521,15 +526,32 @@
         if repourl.endswith('/'):
             repourl = repourl[:-1]
 
-        self.url = repourl
+        self._url = repourl
         self._apipath = apipath
         self._opener = opener
         self._requestbuilder = requestbuilder
         self._descriptor = apidescriptor
 
+    # Start of ipeerconnection.
+
+    def url(self):
+        return self._url
+
+    def local(self):
+        return None
+
+    def peer(self):
+        return self
+
+    def canpush(self):
+        # TODO change once implemented.
+        return False
+
     def close(self):
         pass
 
+    # End of ipeerconnection.
+
     # TODO require to be part of a batched primitive, use futures.
     def _call(self, name, **args):
         """Call a wire protocol command with arguments."""
@@ -554,7 +576,7 @@
             'pull': 'ro',
         }[permission]
 
-        url = '%s/%s/%s/%s' % (self.url, self._apipath, permission, name)
+        url = '%s/%s/%s/%s' % (self._url, self._apipath, permission, name)
 
         # TODO this should be part of a generic peer for the frame-based
         # protocol.
--- a/tests/test-check-interfaces.py	Thu Apr 12 13:25:54 2018 -0400
+++ b/tests/test-check-interfaces.py	Wed Apr 11 11:03:45 2018 -0700
@@ -92,6 +92,10 @@
                          httppeer.httppeer)
     checkzobject(httppeer.httppeer(None, None, None, dummyopener(), None, None))
 
+    ziverify.verifyClass(repository.ipeerconnection,
+                         httppeer.httpv2peer)
+    checkzobject(httppeer.httpv2peer(None, '', None, None, None, None))
+
     ziverify.verifyClass(repository.ipeerbase,
                          localrepo.localpeer)
     checkzobject(localrepo.localpeer(dummyrepo()))