# HG changeset patch # User Sylvain Thénault # Date 1357309124 -3600 # Node ID 001c1592060acc4f85493a7e22c6ae8bd494f1ba # Parent 8ea63a2cc2cc0c097163406f7f19e379dd200263 [repo sources] move handling of source's url into abstract source as this becomes shared by most sources prepare #2539822 diff -r 8ea63a2cc2cc -r 001c1592060a server/ldaputils.py --- a/server/ldaputils.py Thu Jan 10 22:52:47 2013 +0100 +++ b/server/ldaputils.py Fri Jan 04 15:18:44 2013 +0100 @@ -1,4 +1,4 @@ -# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved. +# copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved. # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr # # This file is part of CubicWeb. @@ -135,6 +135,7 @@ _conn = None def _entity_update(self, source_entity): + super(LDAPSourceMixIn, self)._entity_update(source_entity) if self.urls: if len(self.urls) > 1: raise ValidationError(source_entity.eid, {'url': _('can only have one url')}) @@ -149,6 +150,7 @@ """update configuration from source entity. `typedconfig` is config properly typed with defaults set """ + super(LDAPSourceMixIn, self).update_config(source_entity, typedconfig) self.authmode = typedconfig['auth-mode'] self._authenticate = getattr(self, '_auth_%s' % self.authmode) self.cnx_dn = typedconfig['data-cnx-dn'] diff -r 8ea63a2cc2cc -r 001c1592060a server/sources/__init__.py --- a/server/sources/__init__.py Thu Jan 10 22:52:47 2013 +0100 +++ b/server/sources/__init__.py Fri Jan 04 15:18:44 2013 +0100 @@ -1,4 +1,4 @@ -# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved. +# copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved. # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr # # This file is part of CubicWeb. @@ -133,6 +133,8 @@ self.uri = source_config.pop('uri') set_log_methods(self, getLogger('cubicweb.sources.'+self.uri)) source_config.pop('type') + self.update_config(None, self.check_conf_dict(eid, source_config, + fail_if_unknown=False)) def __repr__(self): return '<%s %s source %s @%#x>' % (self.uri, self.__class__.__name__, @@ -206,7 +208,17 @@ """update configuration from source entity. `typedconfig` is config properly typed with defaults set """ - pass + if source_entity is not None: + self._entity_update(source_entity) + self.config = typedconfig + + def _entity_update(self, source_entity): + source_entity.complete() + if source_entity.url: + self.urls = [url.strip() for url in source_entity.url.splitlines() + if url.strip()] + else: + self.urls = [] # source initialization / finalization ##################################### @@ -222,7 +234,8 @@ """method called by the repository once ready to handle request. `activated` is a boolean flag telling if the source is activated or not. """ - pass + if activated: + self._entity_update(source_entity) PUBLIC_KEYS = ('type', 'uri', 'use-cwuri-as-url') def remove_sensitive_information(self, sourcedef): diff -r 8ea63a2cc2cc -r 001c1592060a server/sources/datafeed.py --- a/server/sources/datafeed.py Thu Jan 10 22:52:47 2013 +0100 +++ b/server/sources/datafeed.py Fri Jan 04 15:18:44 2013 +0100 @@ -1,4 +1,4 @@ -# copyright 2010-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved. +# copyright 2010-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved. # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr # # This file is part of CubicWeb. @@ -81,43 +81,30 @@ }), ) - def __init__(self, repo, source_config, eid=None): - AbstractSource.__init__(self, repo, source_config, eid) - self.update_config(None, self.check_conf_dict(eid, source_config, - fail_if_unknown=False)) - def check_config(self, source_entity): """check configuration of source entity""" - typedconfig = super(DataFeedSource, self).check_config(source_entity) - if typedconfig['synchronization-interval'] < 60: + typed_config = super(DataFeedSource, self).check_config(source_entity) + if typed_config['synchronization-interval'] < 60: _ = source_entity._cw._ msg = _('synchronization-interval must be greater than 1 minute') raise ValidationError(source_entity.eid, {'config': msg}) - return typedconfig + return typed_config def _entity_update(self, source_entity): - source_entity.complete() + super(DataFeedSource, self)._entity_update(source_entity) self.parser_id = source_entity.parser self.latest_retrieval = source_entity.latest_retrieval - if source_entity.url: - self.urls = [url.strip() for url in source_entity.url.splitlines() - if url.strip()] - else: - self.urls = [] - def update_config(self, source_entity, typedconfig): - """update configuration from source entity. `typedconfig` is config + def update_config(self, source_entity, typed_config): + """update configuration from source entity. `typed_config` is config properly typed with defaults set """ - self.synchro_interval = timedelta(seconds=typedconfig['synchronization-interval']) - self.max_lock_lifetime = timedelta(seconds=typedconfig['max-lock-lifetime']) - if source_entity is not None: - self._entity_update(source_entity) - self.config = typedconfig + super(DataFeedSource, self).update_config(source_entity, typed_config) + self.synchro_interval = timedelta(seconds=typed_config['synchronization-interval']) + self.max_lock_lifetime = timedelta(seconds=typed_config['max-lock-lifetime']) def init(self, activated, source_entity): - if activated: - self._entity_update(source_entity) + super(DataFeedSource, self).init(activated, source_entity) self.parser_id = source_entity.parser self.load_mapping(source_entity._cw) diff -r 8ea63a2cc2cc -r 001c1592060a server/sources/ldapfeed.py --- a/server/sources/ldapfeed.py Thu Jan 10 22:52:47 2013 +0100 +++ b/server/sources/ldapfeed.py Fri Jan 04 15:18:44 2013 +0100 @@ -1,4 +1,4 @@ -# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved. +# copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved. # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr # # This file is part of CubicWeb. @@ -32,13 +32,3 @@ options = datafeed.DataFeedSource.options + ldaputils.LDAPSourceMixIn.options - def update_config(self, source_entity, typedconfig): - """update configuration from source entity. `typedconfig` is config - properly typed with defaults set - """ - datafeed.DataFeedSource.update_config(self, source_entity, typedconfig) - ldaputils.LDAPSourceMixIn.update_config(self, source_entity, typedconfig) - - def _entity_update(self, source_entity): - datafeed.DataFeedSource._entity_update(self, source_entity) - ldaputils.LDAPSourceMixIn._entity_update(self, source_entity) diff -r 8ea63a2cc2cc -r 001c1592060a server/sources/ldapuser.py --- a/server/sources/ldapuser.py Thu Jan 10 22:52:47 2013 +0100 +++ b/server/sources/ldapuser.py Fri Jan 04 15:18:44 2013 +0100 @@ -1,4 +1,4 @@ -# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved. +# copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved. # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr # # This file is part of CubicWeb. @@ -67,26 +67,11 @@ ) - def __init__(self, repo, source_config, eid=None): - AbstractSource.__init__(self, repo, source_config, eid) - self.update_config(None, self.check_conf_dict(eid, source_config, - fail_if_unknown=False)) - - def _entity_update(self, source_entity): - # XXX copy from datafeed source - if source_entity.url: - self.urls = [url.strip() for url in source_entity.url.splitlines() - if url.strip()] - else: - self.urls = [] - # /end XXX - ldaputils.LDAPSourceMixIn._entity_update(self, source_entity) - def update_config(self, source_entity, typedconfig): """update configuration from source entity. `typedconfig` is config properly typed with defaults set """ - ldaputils.LDAPSourceMixIn.update_config(self, source_entity, typedconfig) + super(LDAPUserSource, self).update_config(source_entity, typedconfig) self._interval = typedconfig['synchronization-interval'] self._cache_ttl = max(71, typedconfig['cache-life-time']) self.reset_caches() diff -r 8ea63a2cc2cc -r 001c1592060a server/sources/remoterql.py --- a/server/sources/remoterql.py Thu Jan 10 22:52:47 2013 +0100 +++ b/server/sources/remoterql.py Fri Jan 04 15:18:44 2013 +0100 @@ -99,12 +99,11 @@ def __init__(self, repo, source_config, eid=None): super(RemoteSource, self).__init__(repo, source_config, eid) - self.update_config(None, self.check_conf_dict(eid, source_config, - fail_if_unknown=False)) self._query_cache = TimedCache(1800) def update_config(self, source_entity, processed_config): """update configuration from source entity""" + super(RemoteSource, self).update_config(source_entity, processed_config) baseurl = processed_config.get('base-url') if baseurl and not baseurl.endswith('/'): processed_config['base-url'] += '/'