diff options
Diffstat (limited to 'object.py')
| -rw-r--r-- | object.py | 211 |
1 files changed, 0 insertions, 211 deletions
diff --git a/object.py b/object.py deleted file mode 100644 index 866f7bb..0000000 --- a/object.py +++ /dev/null @@ -1,211 +0,0 @@ -# -*- coding: utf-8 -*- -import StringIO -import hashlib -import sys -import os -import os.path -import zlib -import datetime -import fileinput -import logging - -from permission import * -from config import config - -class Object: - - def __get_path(self): - return self.name[:2] + '/' + self.name[2:] - - def __create_dir(self): - if (not os.path.exists(self.name[:2])): - os.mkdir(self.name[:2]) - - if (not os.path.exists(self.path)): - os.mkdir(self.path) - - ## - # Save the object on the disk. - def save(self): - self.__create_dir() - - header = "author " + self.data['author'] + "\n" - header += "parent " + self.data['parent'] + "\n" - header += "created " + self.data['created'] + "\n" - header += "#\n" #end of header - store = header + self.data['content'] - - file = open(self.path + "/object", 'w') - file.write(zlib.compress(store)) - file.close() - os.mknod(self.path + "/childs") - os.mknod(self.path + "/permissions") - self.saved = True - - ## - # Class constructor. - def __init__(self, init): - - if isinstance(init, dict): - if 'author' not in init: - init['author'] = 'None' - if 'parent' not in init: - init['parent'] = 'None' - if 'content' not in init: - init['content'] = 'None' - - self.data = init - self.data['created'] = str(datetime.datetime.now()) - self.name = hashlib.sha1(str(self.data)).hexdigest() - self.path = self.__get_path() - self.saved = False - - elif isinstance(init, str): - self.name = init - self.path = self.__get_path() - if (os.path.exists(self.path)): - file = open(self.path + '/object', 'r') - contentStream = StringIO.StringIO(zlib.decompress(file.read())) - data = {} - - for line in contentStream: - if (line == "#\n"): - data['content'] = contentStream.read() - break - else: - key, sep, value = line.rstrip('\n').partition(' ') - data[key] = value - - self.data = data - file.close() - else: - logging.error("Object {} root doesn't exist".format(init)) - - def append_to(self, father): - father.append_child(self) - - def append_child(self, child): - if not self.saved: - self.save() - - file = open(self.path + "/childs", 'a') - file.write(child.name + "\n") - file.close() - - @staticmethod - def get_permission_by_hash(hash, user): - path = hash[:2] + '/' + hash[2:] - try: - file = open(path + '/permissions', 'r') - except IOError: - print 'cannot open', path - else: - for line in file: - name, sep, perm = line.rstrip('\n').partition(' ') - if name == user: - return perm - - return 0 - - def get_permission(self, user): - file = open(self.path + '/permissions', 'r') - for line in file: - name, sep, perm = line.rstrip('\n').partition(' ') - if name == user: - return perm - - return 0 - - def set_permission(self, user, permission): - if not self.saved: - self.save() - - sentinel = False - for line in fileinput.input(self.path + "/permissions", inplace = 1): - name, sep, perm = line.rstrip('\n').partition(' ') - if name == user: - sys.stdout.write(name + ' ' + str(permission) + '\n') - sentinel = True - else: - sys.stdout.write(line) - - if not sentinel: - file = open(self.path + '/permissions', 'a') - file.write(user + ' ' + str(permission) + '\n') - file.close() - -class ObjectHandler: - - def __init__(self, user): - self.user = user - self.root_object = hashlib.sha1(user).hexdigest() - - if not os.path.exists(self.user): - logging.error("User {} root doesn't exist".format(self.user)) - - def get_object_directory(self, hash): - directory = self.user + '/' + hash[:2] + '/' + hash[2:] - if (os.path.exists(directory)): - return directory - else: - return None - - def get_object(self, hash): - os.chdir(self.user) - temp = Object(hash) - os.chdir('..') - return temp - - #return a list of hash,permission pairs - def get_child_list(self, hash, user): - directory = self.get_object_directory(hash) - if directory: - result = [] - file = open(directory + "/childs", 'r') - for line in file : - name = line.rstrip('\n') - result.append(name) - file.close() - return result - else : - return None - - def create_home_node(self): - pass - - def get_home_node(self): - return self.root_object - -if __name__ == '__main__': - config.root = os.path.abspath('object_tests') - if not(os.path.exists(config.root)): - os.mkdir(config.root) - os.chdir(config.root) - if not(os.path.exists('guillaume')): - os.mkdir('guillaume') - - guillaume_stuff = ObjectHandler('guillaume') - os.chdir('guillaume') - x = Object({'parent' : 'toto', 'author' : 'Zaran'}) - x.set_permission("test", READ) - x.set_permission("toto", READ | MODIFY) - x.set_permission("toto", READ | MODIFY | APPEND) - x.set_permission("toto2", READ | MODIFY | APPEND) - print x.get_permission("toto") - print Object.get_permission_by_hash(x.name, "toto") - child = Object({'parent' : x.name, 'author' : 'Zaran'}) - child.save() - - x.append_child(child) - os.chdir(config.root) - - y = guillaume_stuff.get_object(x.name) - pomme = guillaume_stuff.get_child_list(x.name, None) - print pomme - print y.data['author'] - print y.data['parent'] - print y.data['content'] - print y.data['created'] - - - |
