X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/886350e8acb1116bf39bec5e5c411cc1db377d31..4063c2b5a87394841a65addf392b4058be52e942:/peerdb/tripe-newpeers.in?ds=sidebyside diff --git a/peerdb/tripe-newpeers.in b/peerdb/tripe-newpeers.in index 4b9fe1f8..00361d40 100644 --- a/peerdb/tripe-newpeers.in +++ b/peerdb/tripe-newpeers.in @@ -296,6 +296,9 @@ class ConfigSection (object): ## Special handling for the `name' key. if key == 'name': value = me._itemmap.get('name', me.name) + elif key == '@inherits': + try: return me._itemmap['@inherits'] + except KeyError: raise MissingKeyException(me.name, key) else: value, _ = me._get(key) if value is None: @@ -310,23 +313,22 @@ class ConfigSection (object): """ ## Initialize for a depth-first walk of the inheritance graph. - d = {} - visited = {} + seen = { 'name': True } + visiting = { me.name: True } stack = [me] ## Visit nodes, collecting their keys. Don't believe the values: ## resolving inheritance is too hard to do like this. while stack: sec = stack.pop() - if sec.name in visited: continue - visited[sec.name] = True - stack += sec._parents() + for p in sec._parents(): + if p.name not in visiting: + stack.append(p); visiting[p.name] = True - for key in sec._itemmap.iterkeys(): - if key != '@inherit': d[key] = None + for key in sec._itemmap.iterkeys(): seen[key] = None ## And we're done. - return d.iterkeys() + return seen.iterkeys() class MyConfigParser (object): """