diff options
author | Narayan Desai <desai@mcs.anl.gov> | 2004-05-27 19:24:45 +0000 |
---|---|---|
committer | Narayan Desai <desai@mcs.anl.gov> | 2004-05-27 19:24:45 +0000 |
commit | 586c84c211a28312786758784ba2449e3a0b1c12 (patch) | |
tree | f2cf87d7b560667383f757c5818659af376a3f34 /src | |
parent | 6e95a0e2fbd6bc8c8e57223350a577f7579c1461 (diff) | |
download | bcfg2-586c84c211a28312786758784ba2449e3a0b1c12.tar.gz bcfg2-586c84c211a28312786758784ba2449e3a0b1c12.tar.bz2 bcfg2-586c84c211a28312786758784ba2449e3a0b1c12.zip |
kill other imports
2004/05/27 14:16:14-05:00 anl.gov!desai
kill fam import
2004/05/27 14:15:32-05:00 anl.gov!desai
remove fam object
2004/05/27 14:13:15-05:00 anl.gov!desai
update to use fam
2004/05/25 15:41:20-05:00 anl.gov!desai
change __constructor__ to __child__ for readability
2004/05/25 15:40:29-05:00 anl.gov!desai
add constructor class data to DirectoryBacked
(Logical change 1.19)
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@79 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src')
-rw-r--r-- | src/GeneratorUtils.py | 103 |
1 files changed, 45 insertions, 58 deletions
diff --git a/src/GeneratorUtils.py b/src/GeneratorUtils.py index 03895159f..eb2f4c487 100644 --- a/src/GeneratorUtils.py +++ b/src/GeneratorUtils.py @@ -1,64 +1,51 @@ #!/usr/bin/env python -# $Id$ - -from os import listdir, stat -from stat import ST_MTIME +# $Id: $ class FileBacked(object): - '''FileBacked is a class that will cache file data and automatically reload it as required from disk.''' - - def __init__(self,filename): - '''Setup initial structures''' - self.filename = filename - try: - self.mtime = stat(filename)[ST_MTIME] - self._data = file(filename).read() - except OSError: - self.mtime = 0 - self._data = None - self.setdata('') - - def getdata(self): - mtime = stat(self.filename)[ST_MTIME] - if mtime != self.mtime: - self._data = file(self.filename).read() - self.mtime = mtime - return self._data - - def setdata(self,val): - if val != self._data: - self._data = val - file(self.filename,'w').write(val) - self.mtime = stat(self.filename)[ST_MTIME] - - data=property(getdata,setdata) + '''This object caches file data in memory. + HandleEvent is called whenever fam registers an event. + Index can parse the data into member data as required.''' + + def __init__(self, name): + self.name = name + + def HandleEvent(self, event=None): + self.data = file(self.name).read() + self.Index() + + def Index(self): + pass class DirectoryBacked(object): - '''DirectoryBacked caches a complete directory (including proper negative caching). - This class is READ-ONLY.''' - - def __init__(self,path): - self.path = path - self._entries = {} - self.mtime = stat(path)[ST_MTIME] - for entry in listdir(path): - self._entries[entry] = FileBacked("%s/%s"%(path,entry)) - - def GetEntries(self): - mtime = stat(self.path)[ST_MTIME] - if mtime != self.mtime: - current = self._entries.keys() - new = listdir(self.path) - for key in new: - if key not in current: - self._entries[key] = FileBacked("%s/%s"%(self.path,key)) - for key in current: - if key not in new: - del self._entries[key] - return self._entries - - def SetEntries(self,val): - pass + def __init__(self, name, fam): + self.name = name + self.fam = fam + self.entries = {} + self.inventory = False + fam.AddMonitor(name, self) + + def AddEntry(self, name): + if self.entries.has_key(name): + print "got multiple adds" + else: + self.entries[name] = FileBacked('%s/%s'%(self.name, name)) + self.entries[name].HandleEvent() + + def HandleEvent(self, event): + action = event.code2str() + print "Got event %s %s %s"%(event.requestID, event.code2str(), event.filename) + if action == 'exists': + if event.filename != self.name: + self.AddEntry(event.filename) + elif action == 'created': + self.AddEntry(event.filename) + elif action == 'changed': + self.entries[event.filename].HandleEvent(event) + elif action == 'deleted': + if self.entries.has_key(event.filename): + del self.entries[event.filename] + elif action in ['endExist']: + pass + else: + print "Got unknown event %s %s %s"%(event.requestID, event.code2str(), event.filename) - entries = property(GetEntries,SetEntries) - |