From 7399fc5bb54433857014faa1295a559d28582e0b Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 11 Jun 2014 00:03:57 +0200 Subject: [PATCH] Only send updates when necessary. --- src/ddns/providers.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) 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 -- 2.39.2