summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNarayan Desai <desai@mcs.anl.gov>2004-05-27 19:24:45 +0000
committerNarayan Desai <desai@mcs.anl.gov>2004-05-27 19:24:45 +0000
commit586c84c211a28312786758784ba2449e3a0b1c12 (patch)
treef2cf87d7b560667383f757c5818659af376a3f34 /src
parent6e95a0e2fbd6bc8c8e57223350a577f7579c1461 (diff)
downloadbcfg2-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.py103
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)
-