From: Michael Tremer Date: Wed, 15 Jan 2020 16:00:59 +0000 (+0100) Subject: Update automatic registration to work with Python 3 X-Git-Tag: 013~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=571271bc73ac001ab798ed94382a5b1a2e493813;p=ddns.git Update automatic registration to work with Python 3 Signed-off-by: Michael Tremer Signed-off-by: Stefan Schantl --- diff --git a/src/ddns/providers.py b/src/ddns/providers.py index eb66054..d0c01e7 100644 --- a/src/ddns/providers.py +++ b/src/ddns/providers.py @@ -73,24 +73,6 @@ class DDNSProvider(object): # Required to remove AAAA records if IPv6 is absent again. can_remove_records = True - # Automatically register all providers. - class __metaclass__(type): - def __init__(provider, name, bases, dict): - type.__init__(provider, name, bases, dict) - - # The main class from which is inherited is not registered - # as a provider. - if name == "DDNSProvider": - return - - if not all((provider.handle, provider.name, provider.website)): - raise DDNSError(_("Provider is not properly configured")) - - assert provider.handle not in _providers, \ - "Provider '%s' has already been registered" % provider.handle - - _providers[provider.handle] = provider - @staticmethod def supported(): """ @@ -107,6 +89,18 @@ class DDNSProvider(object): self.settings = self.DEFAULT_SETTINGS.copy() self.settings.update(settings) + def __init_subclass__(cls, **kwargs): + super().__init_subclass__(**kwargs) + + if not all((cls.handle, cls.name, cls.website)): + raise DDNSError(_("Provider is not properly configured")) + + assert cls.handle not in _providers, \ + "Provider '%s' has already been registered" % cls.handle + + # Register class + _providers[cls.handle] = cls + def __repr__(self): return "" % (self.name, self.handle)