diff options
Diffstat (limited to 'code')
-rw-r--r-- | code/directory.py | 1 | ||||
-rw-r--r-- | code/file.py | 2 | ||||
-rw-r--r-- | code/fsobject.py | 47 | ||||
-rw-r--r-- | code/fstype.py | 5 |
4 files changed, 38 insertions, 17 deletions
diff --git a/code/directory.py b/code/directory.py index 10ad163c..ef68d35f 100644 --- a/code/directory.py +++ b/code/directory.py @@ -10,6 +10,7 @@ class Directory(fsobject.FSObject): self.filenames = None self.files = None + self.filter = None self.pointed_index = None def load_content(self): diff --git a/code/file.py b/code/file.py index 291e53b2..9d813aad 100644 --- a/code/file.py +++ b/code/file.py @@ -3,4 +3,4 @@ class File(fsobject.FSObject): pass # def __init__(self, path): # fsobject.FSObject.__init__(self, path) - + diff --git a/code/fsobject.py b/code/fsobject.py index d1cd1410..1e194ac9 100644 --- a/code/fsobject.py +++ b/code/fsobject.py @@ -1,8 +1,12 @@ +import fstype + class FrozenException(Exception): pass class NotLoadedYet(Exception): pass class FSObject(object): def __init__(self, path): + if type(self) == FSObject: + raise TypeError("FSObject is an abstract class and cannot be initialized.") self.path = path self.exists = False self.accessible = False @@ -10,14 +14,13 @@ class FSObject(object): self.tagged = False self.frozen = False self.loaded = False + self.islink = False + self.brokenlink = False self.stat = None + self.type = fstype.Unknown - def clone(self): - clone = type(self)(self.path) - for key in iter(self.__dict__): - clone.__dict__[key] = self.__dict__[key] - return clone - + # load() reads useful information about the file from the file system + # and caches it in instance attributes. def load(self): self.stop_if_frozen() self.loaded = True @@ -25,23 +28,32 @@ class FSObject(object): import os try: self.stat = os.stat(self.path) + self.islink = os.path.islink(self.path) self.exists = True self.accessible = True + + if os.path.isdir(self.path): + self.type = fstype.Directory + elif os.path.isfile(self.path): + self.type = fstype.File except OSError: + self.islink = False + self.type = fstype.Nonexistent self.exists = False self.accessible = False def load_once(self): self.stop_if_frozen() - if not self.loaded: self.load() + if not self.loaded: + self.load() + return True + return False def load_if_outdated(self): self.stop_if_frozen() import os - if not self.loaded: - self.load() - return True + if self.load_once(): return True real_mtime = os.stat(self.path).st_mtime cached_mtime = self.stat.st_mtime @@ -52,14 +64,17 @@ class FSObject(object): return False + def clone(self): + clone = type(self)(self.path) + for key in iter(self.__dict__): + clone.__dict__[key] = self.__dict__[key] + return clone + def frozen_clone(self): - self.stop_if_frozen() - return self.clone().freeze() + clone = self.clone() + clone.frozen = True + return clone def stop_if_frozen(self): if self.frozen: raise FrozenException() - def freeze(self): - self.frozen = True - return self - diff --git a/code/fstype.py b/code/fstype.py new file mode 100644 index 00000000..4bd0988d --- /dev/null +++ b/code/fstype.py @@ -0,0 +1,5 @@ +class File: pass +class Directory: pass +class Nonexistent: pass +class Unknown: pass + |