diff options
author | hut <hut@lavabit.com> | 2009-11-24 00:41:16 +0100 |
---|---|---|
committer | hut <hut@lavabit.com> | 2009-11-24 00:41:16 +0100 |
commit | fae694a03ebb52888a747010fcb92fa43b33b4a8 (patch) | |
tree | ccd0d4e8d6a759eb8086d6a7da80316787b868ea /code/fsobject.py | |
parent | 6ca37350f8e6bffe78520fddfc29ca53fa562e87 (diff) | |
download | ranger-fae694a03ebb52888a747010fcb92fa43b33b4a8.tar.gz |
better implementation of directories/files
Diffstat (limited to 'code/fsobject.py')
-rw-r--r-- | code/fsobject.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/code/fsobject.py b/code/fsobject.py new file mode 100644 index 00000000..d1cd1410 --- /dev/null +++ b/code/fsobject.py @@ -0,0 +1,65 @@ +class FrozenException(Exception): pass +class NotLoadedYet(Exception): pass + +class FSObject(object): + def __init__(self, path): + self.path = path + self.exists = False + self.accessible = False + self.marked = False + self.tagged = False + self.frozen = False + self.loaded = False + self.stat = None + + def clone(self): + clone = type(self)(self.path) + for key in iter(self.__dict__): + clone.__dict__[key] = self.__dict__[key] + return clone + + def load(self): + self.stop_if_frozen() + self.loaded = True + + import os + try: + self.stat = os.stat(self.path) + self.exists = True + self.accessible = True + except OSError: + self.exists = False + self.accessible = False + + def load_once(self): + self.stop_if_frozen() + if not self.loaded: self.load() + + def load_if_outdated(self): + self.stop_if_frozen() + import os + + if not self.loaded: + self.load() + return True + + real_mtime = os.stat(self.path).st_mtime + cached_mtime = self.stat.st_mtime + + if real_mtime != cached_mtime: + self.load() + return True + + return False + + def frozen_clone(self): + self.stop_if_frozen() + return self.clone().freeze() + + def stop_if_frozen(self): + if self.frozen: raise FrozenException() + + def freeze(self): + self.frozen = True + return self + |