summaryrefslogtreecommitdiffstats
path: root/src/Core.py
diff options
context:
space:
mode:
authorNarayan Desai <desai@mcs.anl.gov>2004-01-06 05:30:25 +0000
committerNarayan Desai <desai@mcs.anl.gov>2004-01-06 05:30:25 +0000
commit90238504a2dc317e37615f4094729ec573b7939e (patch)
treede8d900fe122cdaf98c9e429de4882a748adcd73 /src/Core.py
parent435159b9bd8b1365b1972c89ce746d8180d1841b (diff)
downloadbcfg2-90238504a2dc317e37615f4094729ec573b7939e.tar.gz
bcfg2-90238504a2dc317e37615f4094729ec573b7939e.tar.bz2
bcfg2-90238504a2dc317e37615f4094729ec573b7939e.zip
(Logical change 1.10)
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@38 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src/Core.py')
-rw-r--r--src/Core.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/Core.py b/src/Core.py
index e69de29bb..698dd64a1 100644
--- a/src/Core.py
+++ b/src/Core.py
@@ -0,0 +1,55 @@
+#!/usr/bin/python
+# $Id$
+
+from syslog import syslog, LOG_ERR
+
+from Error import PublishError
+
+class PublishedValue(object):
+ def __init__(self,owner,key,value):
+ self.owner=owner
+ self.key=key
+ self.value=value
+
+ def Update(self,owner,value):
+ if owner != self.owner:
+ raise PublishError, (self.key,owner)
+ self.value=value
+
+class Core(object):
+ def __init__(self, generators):
+ self.handles = {}
+ self.pubspace = {}
+ self.generators = []
+ for generator in generators:
+ self.generators.append(generator(self))
+ # we need to inventory and setup generators
+ # Process generator requirements
+ for g in self.generators:
+ for prq in g.__requires__:
+ if not self.pubspace.has_key(prq):
+ raise GeneratorError, (g.name, prq)
+ g.CompleteSetup()
+ for f in g.__build__.keys():
+ self.handles[f] = g
+
+ def PublishValue(self,owner,key,value):
+ if not self.pubspace.has_key(key):
+ # This is a new entry
+ self.pubspace[key]=PublishedValue(owner,key,value)
+ else:
+ # This is an old entry. Update can fai
+ try:
+ self.pubspace[key].Update(owner,value)
+ except PublishError,e:
+ syslog(LOG_ERR, "Publish conflict for %s. Owner %s, Modifier %s"%(key,self.pubspace[key].owner,owner))
+
+ def ReadValue(self,key):
+ if self.pubspace.has_key(key):
+ return self.pubspace[key].value
+ raise KeyError,key
+
+ def GetConfigFile(self,filename,client):
+ if self.handles.has_key(filename):
+ return self.handles[filename].Build(filename,client)
+ raise KeyError, filename