From: Michael Tremer Date: Tue, 10 Jun 2014 22:03:57 +0000 (+0200) Subject: Only send updates when necessary. X-Git-Tag: 001~66 X-Git-Url: http://git.ipfire.org/?p=oddments%2Fddns.git;a=commitdiff_plain;h=7399fc5bb54433857014faa1295a559d28582e0b Only send updates when necessary. --- diff --git a/src/ddns/providers.py b/src/ddns/providers.py index b0b3bf7..2115972 100644 --- a/src/ddns/providers.py +++ b/src/ddns/providers.py @@ -19,9 +19,16 @@ # # ############################################################################### +import logging + +from i18n import _ + # Import all possible exception types. from .errors import * +logger = logging.getLogger("ddns.providers") +logger.propagate = 1 + class DDNSProvider(object): INFO = { # A short string that uniquely identifies @@ -104,12 +111,38 @@ class DDNSProvider(object): """ return self.get("password") + @property + def protocols(self): + return self.INFO.get("protocols") + def __call__(self): + # Check if we actually need to update this host. + if self.is_uptodate(self.protocols): + logger.info(_("%s is already up to date") % self.hostname) + return + + # Execute the update. self.update() def update(self): raise NotImplementedError + def is_uptodate(self, protos): + """ + Returns True if this host is already up to date + and does not need to change the IP address on the + name server. + """ + for proto in protos: + addresses = self.core.system.resolve(self.hostname, proto) + + current_address = self.get_address(proto) + + if not current_address in addresses: + return False + + return True + def send_request(self, *args, **kwargs): """ Proxy connection to the send request