commit c86157c8ec59bc04de27f5262e928aaba341d37c Author: Damian Johnson atagar@torproject.org Date: Fri Jan 10 15:43:50 2020 -0800
Replace zope implements with implementer
Personally I've never used zope, but these exceptions seem pretty clear...
Traceback (most recent call last): File "/usr/local/lib/python3.5/dist-packages/twisted/trial/runner.py", line 823, in loadByName return self.suiteFactory([self.findByName(name, recurse=recurse)]) ... File "/home/atagar/Desktop/tor/bridgedb/bridgedb/distribute.py", line 163, in Distributor implements(IDistribute) File "/usr/local/lib/python3.5/dist-packages/zope/interface/declarations.py", line 483, in implements raise TypeError(_ADVICE_ERROR % 'implementer') builtins.TypeError: Class advice impossible in Python3. Use the @implementer class decorator instead.
Test results changed as follows...
before: FAILED (skips=2, failures=7, errors=144, successes=321) after: FAILED (skips=2, failures=7, errors=143, successes=324) --- bridgedb/captcha.py | 4 ++-- bridgedb/distribute.py | 4 ++-- bridgedb/distributors/email/server.py | 8 ++++---- bridgedb/txrecaptcha.py | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/bridgedb/captcha.py b/bridgedb/captcha.py index 49cf838..b758c09 100644 --- a/bridgedb/captcha.py +++ b/bridgedb/captcha.py @@ -67,7 +67,7 @@ import urllib.request
from BeautifulSoup import BeautifulSoup
-from zope.interface import Interface, Attribute, implements +from zope.interface import Interface, Attribute, implementer
from bridgedb import crypto from bridgedb import schedule @@ -101,6 +101,7 @@ class ICaptcha(Interface): """Retrieve a new CAPTCHA image."""
+@implementer(ICaptcha) class Captcha(object): """A generic CAPTCHA base class.
@@ -117,7 +118,6 @@ class Captcha(object): :ivar secretKey: A private key used for decrypting challenge strings during CAPTCHA solution verification. """ - implements(ICaptcha)
def __init__(self, publicKey=None, secretKey=None): """Obtain a new CAPTCHA for a client.""" diff --git a/bridgedb/distribute.py b/bridgedb/distribute.py index ec8fb26..42706c9 100644 --- a/bridgedb/distribute.py +++ b/bridgedb/distribute.py @@ -108,7 +108,7 @@ import math
from zope import interface from zope.interface import Attribute -from zope.interface import implements +from zope.interface import implementer
# from bridgedb.hashring import IHashring from bridgedb.interfaces import IName @@ -155,12 +155,12 @@ class IDistribute(IName): """Get bridges based on a client's **bridgeRequest**."""
+@implementer(IDistribute) class Distributor(Named): """A :class:`Distributor` distributes bridges to clients.
Inherit from me to create a new type of ``Distributor``. """ - implements(IDistribute)
_bridgesPerResponseMin = 1 _bridgesPerResponseMax = 3 diff --git a/bridgedb/distributors/email/server.py b/bridgedb/distributors/email/server.py index 5a1ffc0..051ce74 100644 --- a/bridgedb/distributors/email/server.py +++ b/bridgedb/distributors/email/server.py @@ -62,7 +62,7 @@ from twisted.mail import smtp from twisted.mail.smtp import rfc822date from twisted.python import failure
-from zope.interface import implements +from zope.interface import implementer
from bridgedb import __version__ from bridgedb import safelog @@ -165,6 +165,7 @@ class MailServerContext(object): return canon
+@implementer(smtp.IMessage) class SMTPMessage(object): """Plugs into the Twisted Mail and receives an incoming message.
@@ -186,7 +187,6 @@ class SMTPMessage(object): :meth:`~bridgedb.distributors.email.autoresponder.SMTPAutoresponder.reply` email and :meth:`~bridgedb.distributors.email.autoresponder.SMTPAutoresponder.send` it. """ - implements(smtp.IMessage)
def __init__(self, context, canonicalFromSMTP=None): """Create a new SMTPMessage. @@ -258,6 +258,7 @@ class SMTPMessage(object): return rfc822.Message(rawMessage)
+@implementer(smtp.IMessageDelivery) class SMTPIncomingDelivery(smtp.SMTP): """Plugs into :class:`SMTPIncomingServerFactory` and handles SMTP commands for incoming connections. @@ -272,7 +273,6 @@ class SMTPIncomingDelivery(smtp.SMTP): :var fromCanonicalSMTP: If set, this is the canonicalized domain name of the address we received from incoming connection's ``MAIL FROM:``. """ - implements(smtp.IMessageDelivery)
context = None deferred = defer.Deferred() @@ -395,6 +395,7 @@ class SMTPIncomingDelivery(smtp.SMTP): return lambda: SMTPMessage(self.context, self.fromCanonicalSMTP)
+@implementer(smtp.IMessageDeliveryFactory) class SMTPIncomingDeliveryFactory(object): """Factory for :class:`SMTPIncomingDelivery` s.
@@ -408,7 +409,6 @@ class SMTPIncomingDeliveryFactory(object): :var delivery: A :class:`SMTPIncomingDelivery` to deliver incoming SMTP messages to. """ - implements(smtp.IMessageDeliveryFactory)
context = None delivery = SMTPIncomingDelivery diff --git a/bridgedb/txrecaptcha.py b/bridgedb/txrecaptcha.py index fc4ca2f..885b40d 100644 --- a/bridgedb/txrecaptcha.py +++ b/bridgedb/txrecaptcha.py @@ -41,7 +41,7 @@ from twisted.web import client from twisted.web.http_headers import Headers from twisted.web.iweb import IBodyProducer
-from zope.interface import implements +from zope.interface import implementer
from bridgedb.crypto import SSLVerifyingContextFactory
@@ -209,9 +209,9 @@ class RecaptchaResponseProtocol(protocol.Protocol): self.finished.callback(result)
+@implementer(IBodyProducer) class _BodyProducer(object): """I write a string into the HTML body of an open request.""" - implements(IBodyProducer)
def __init__(self, body): self.body = body