From 08310d29932ee5f960f4b849c4cbd5a9d5dc221e Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Thu, 27 May 2004 19:24:45 +0000 Subject: add fam class 2004/05/24 14:35:41-05:00 anl.gov!desai fix GetConfigFile (Logical change 1.19) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@77 ce84e21b-d406-0410-9b95-82705330c041 --- src/Core.py | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/Core.py b/src/Core.py index 72d79a07d..d6bd4e6b1 100644 --- a/src/Core.py +++ b/src/Core.py @@ -1,10 +1,42 @@ #!/usr/bin/python # $Id$ +from os import stat +from stat import ST_MODE, S_ISDIR from syslog import syslog, LOG_ERR from Error import PublishError +import _fam + +class fam(object): + '''The fam object contains alteration monitors''' + + def __init__(self): + self.fm = _fam.open() + self.users = {} + self.handles = {} + + def fileno(self): + return self.fm.fileno() + + def AddMonitor(self, path, obj=None): + m = stat(path)[ST_MODE] + if S_ISDIR(m): + h = self.fm.monitorDirectory(path, None) + self.handles[h.requestID()] = h + else: + h = self.fm.monitorFile(path, None) + self.handles[h.requestID()] = h + if obj != None: + self.users[h.requestID()] = obj + + def HandleEvent(self): + event = self.fm.nextEvent() + id = event.requestID + if self.users.has_key(id): + self.users[id].HandleEvent(event) + class PublishedValue(object): def __init__(self,owner,key,value): self.owner=owner @@ -19,12 +51,13 @@ class PublishedValue(object): class Core(object): def __init__(self, repository, generators): self.datastore = repository + self.fam = fam() self.provides = {'Service':{},'ConfigFile':{},'Packages':{}} self.pubspace = {} self.generators = [] for generator in generators: g = getattr(__import__(generator),generator) - self.generators.append(g(self, self.datastore)) + self.generators.append(g(self, self.datastore, self.fam)) # we need to inventory and setup generators # Process generator requirements for g in self.generators: @@ -53,10 +86,9 @@ class Core(object): raise KeyError,key def GetConfigFile(self,filename,client): - if self.handles.has_key(filename): - return self.handles[filename].Build(filename,client) + if self.provides['ConfigFile'].has_key(filename): + return self.Get('ConfigFile', filename, client) raise KeyError, filename def Get(self,type,name,client): - f = self.provides[type][name] - return f(name,client) + return self.provides[type][name](name,client) -- cgit v1.2.3-1-g7c22