X-Git-Url: http://git.ipfire.org/?p=oddments%2Fddns.git;a=blobdiff_plain;f=src%2Fddns%2F__init__.py;h=d14097dbcb9cf97be66162352765cf73061ab1b6;hp=673ba27684d38da4dd62ba6d608f2aab3be866b7;hb=251ab13f71b9de2bdedcd6d69cd7f7f49874b4c0;hpb=39301272d21797e2ce427b5afecc9b086a22ff4b diff --git a/src/ddns/__init__.py b/src/ddns/__init__.py index 673ba27..d14097d 100644 --- a/src/ddns/__init__.py +++ b/src/ddns/__init__.py @@ -34,10 +34,14 @@ from .system import DDNSSystem # Setup the logger. def setup_logging(): rootlogger = logging.getLogger("ddns") - rootlogger.setLevel(logging.DEBUG) + rootlogger.setLevel(logging.INFO) # Setup a logger that logs to syslog. - #handler = logging.handlers.SysLogHandler(address="/dev/log") + handler = logging.handlers.SysLogHandler(address="/dev/log", + facility=logging.handlers.SysLogHandler.LOG_DAEMON + ) + handler.setLevel(logging.INFO) + rootlogger.addHandler(handler) handler = logging.StreamHandler() rootlogger.addHandler(handler) @@ -48,7 +52,10 @@ class DDNSCore(object): def __init__(self, debug=False): # In debug mode, enable debug logging. if debug: - logger.setLevel(logging.DEBUG) + rootlogger = logging.getLogger("ddns") + rootlogger.setLevel(logging.DEBUG) + + logger.debug(_("Debugging mode enabled")) # Initialize the settings array. self.settings = {} @@ -69,32 +76,52 @@ class DDNSCore(object): """ assert issubclass(provider, DDNSProvider) - provider_handle = provider.INFO.get("handle") - assert provider_handle + if not all((provider.handle, provider.name, provider.website)): + raise DDNSError(_("Provider is not properly configured")) - assert not self.providers.has_key(provider_handle), \ - "Provider '%s' has already been registered" % provider_handle + assert not self.providers.has_key(provider.handle), \ + "Provider '%s' has already been registered" % provider.handle - provider_name = provider.INFO.get("name") - assert provider_name - - logger.debug("Registered new provider: %s (%s)" % (provider_name, provider_handle)) - self.providers[provider_handle] = provider + logger.debug("Registered new provider: %s (%s)" % (provider.name, provider.handle)) + self.providers[provider.handle] = provider def register_all_providers(self): """ Simply registers all providers. """ for provider in ( + DDNSProviderAllInkl, DDNSProviderDHS, DDNSProviderDNSpark, + DDNSProviderDtDNS, + DDNSProviderDynDNS, + DDNSProviderDynU, + DDNSProviderEasyDNS, + DDNSProviderFreeDNSAfraidOrg, + DDNSProviderNamecheap, DDNSProviderNOIP, DDNSProviderLightningWireLabs, + DDNSProviderOVH, + DDNSProviderRegfish, DDNSProviderSelfhost, + DDNSProviderSPDNS, + DDNSProviderStrato, + DDNSProviderTwoDNS, + DDNSProviderUdmedia, + DDNSProviderVariomedia, + DDNSProviderZoneedit, ): self.register_provider(provider) + def get_provider_names(self): + """ + Returns a list of names of all registered providers. + """ + return sorted(self.providers.keys()) + def load_configuration(self, filename): + logger.debug(_("Loading configuration file %s") % filename) + configs = ConfigParser.SafeConfigParser() configs.read([filename,]) @@ -133,29 +160,42 @@ class DDNSCore(object): if not entry in self.entries: self.entries.append(entry) - def updateall(self): + def updateone(self, hostname, **kwargs): + for entry in self.entries: + if not entry.hostname == hostname: + continue + + return self._update(entry, **kwargs) + + raise DDNSHostNotFoundError(hostname) + + def updateall(self, **kwargs): + """ + Update all configured entries. + """ # If there are no entries, there is nothing to do. if not self.entries: logger.debug(_("Found no entries in the configuration file. Exiting.")) return - # Update them all. for entry in self.entries: - self.update(entry) + self._update(entry, **kwargs) - def update(self, entry): + def _update(self, entry, force=False): try: - entry() + entry(force=force) - except DDNSUpdateError, e: + except DDNSError, e: logger.error(_("Dynamic DNS update for %(hostname)s (%(provider)s) failed:") % \ { "hostname" : entry.hostname, "provider" : entry.name }) - logger.error(" %s" % e) + logger.error(" %s: %s" % (e.__class__.__name__, e.reason)) + if e.message: + logger.error(" %s" % e.message) except Exception, e: logger.error(_("Dynamic DNS update for %(hostname)s (%(provider)s) throwed an unhandled exception:") % \ - { "hostname" : entry.hostname, "provider" : entry.name }) - logger.error(" %s" % e) + { "hostname" : entry.hostname, "provider" : entry.name }, exc_info=True) - logger.info(_("Dynamic DNS update for %(hostname)s (%(provider)s) successful") % \ - { "hostname" : entry.hostname, "provider" : entry.name }) + else: + logger.info(_("Dynamic DNS update for %(hostname)s (%(provider)s) successful") % \ + { "hostname" : entry.hostname, "provider" : entry.name })