From b5df563464ebee122c390eb5914701b59a3c3aa4 Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Fri, 23 Jul 2004 14:45:28 +0000 Subject: building configs based on the bundler structure works (Logical change 1.23) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@109 ce84e21b-d406-0410-9b95-82705330c041 --- src/Core.py | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/Core.py b/src/Core.py index 637e3e5d3..a87c6a589 100644 --- a/src/Core.py +++ b/src/Core.py @@ -6,6 +6,7 @@ from stat import ST_MODE, S_ISDIR from syslog import syslog, LOG_ERR from Error import PublishError +from Types import Clause import _fam @@ -86,19 +87,25 @@ class Core(object): return self.pubspace[key].value raise KeyError,key - def GetEntry(self, key1, key2): - for d in map(lambda x:x.__provides__, self.generators): - if d.has_key(key1): - if d[key1].has_key(key2): - return d[key1][key2] - raise KeyError, (key1, key2) + def GetStructures(self, metadata): + return reduce(lambda x,y:x+y, map(lambda x:x.Construct(metadata), self.structures)) - def GetConfigFile(self,filename,metadata): - try: - self.Get("ConfigFile", filename, metadata) - except: - raise KeyError, filename - - def Get(self,type,name,metadata): - return self.GetEntry(type, name)(name, metadata) + def BindStructure(self, structure, metadata): + for entry in structure.getchildren(): + self.Bind(entry, metadata) + def Bind(self, entry, metadata): + g = [x for x in self.generators if x.__provides__.get(entry.tag, {}).has_key(entry.attrib['name'])] + if len(g) == 1: + return g[0].__provides__[entry.tag][entry.attrib['name']](entry, metadata) + elif len(g) > 1: + print "Data Integrity error for %s %s"%(entry.tag, entry.attrib['name']) + else: + for g in self.generators: + if hasattr(g, "FindHandler"): + try: + return g.FindHandler(entry)(entry, metadata) + except: + print g, "failed" + raise KeyError, (entry.tag,entry.attrib['name']) + -- cgit v1.2.3-1-g7c22