httppeer: implement ipeerconnection
This is low hanging fruit. We might as well start somewhere.
Differential Revision: https://phab.mercurial-scm.org/D3254
--- 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()))