aboutsummaryrefslogtreecommitdiffstats
path: root/server/object.py
diff options
context:
space:
mode:
authorGuillaume Horel <guillaume.horel@gmail.com>2011-05-20 01:28:09 -0400
committerGuillaume Horel <guillaume.horel@gmail.com>2011-05-20 01:28:09 -0400
commitff79cfce0fed38375b8ff459c66648ec014bf4c6 (patch)
tree869d0ddc747986d0cb47ce8300ad59d379071b08 /server/object.py
parent3565d0c362646d681cbac605924fcf7984b05a92 (diff)
downloadalias-ff79cfce0fed38375b8ff459c66648ec014bf4c6.tar.gz
Rewrote the objects storage engine
objects are stored under each user's directory to make zaran happy.
Diffstat (limited to 'server/object.py')
-rw-r--r--server/object.py61
1 files changed, 33 insertions, 28 deletions
diff --git a/server/object.py b/server/object.py
index d3bdf87..4c1e0c1 100644
--- a/server/object.py
+++ b/server/object.py
@@ -15,16 +15,20 @@ class ObjectError(Exception):
pass;
class Object:
- def __init__(self, hash):
- self.hash = hash
- self.object_path = os.path.join(config.root, hash[:2], hash[2:])
+ def __init__(self, name, owner, split_name = True):
+ self.hash = name
+ self.owner = owner
+ if split_name:
+ self.object_path = os.path.join(config.root, owner, name[:2], name[2:])
+ else:
+ self.object_path = os.path.join(config.root, owner, name)
def exists(self):
return os.path.exists(self.object_path)
class ObjectReader(Object):
- def __init__(self, hash):
- Object.__init__(self, hash)
+ def __init__(self, hash, owner, split_name = True):
+ Object.__init__(self, hash, owner, split_name)
if not self.exists():
logger.error("Object {} can't be found for user {}".format(self.hash,
self.owner))
@@ -66,7 +70,7 @@ class ObjectReader(Object):
for line in file:
name = line.rstrip('\n')
try:
- child = ObjectReader(name)
+ child = ObjectReader(name, self.owner)
except ObjectError:
logger.error('Object {} doesn\'t exist'.format(name))
else:
@@ -85,24 +89,28 @@ class ObjectReader(Object):
.format(user, self.hash))
raise PermissionError
with open(os.path.join(self.object_path, 'object'), 'r') as file:
- content = {}
- for line in file:
- k, v = line.split()
- content[k] = v
+ content = file.read()
return content, key
class ObjectWriter(ObjectReader):
- def __init__(self, hash):
- Object.__init__(self, hash)
+ def __init__(self, hash, owner, split_name = True, key = None):
+ Object.__init__(self, hash, owner, split_name)
+ self.files = ('permissions', 'children', 'object')
+ self.__create_skeleton(key)
+
+ def __create_skeleton(self, key):
#new object
if not self.exists():
os.makedirs(self.object_path)
- for filename in ['permissions', 'children', 'object']:
- file=open(os.path.join(self.object_path, filename), "w")
+ for filename in self.files:
+ file = open(os.path.join(self.object_path, filename), "w")
file.close()
-
+ #give all the permissions to the owner
+ ALLPERM = READ + MODIFY + APPEND + LIST
+ self.add_user(self.owner, ALLPERM, key)
+
def write(self, user, content):
perm = self.get_permission(user)
if not perm & MODIFY:
@@ -110,11 +118,10 @@ class ObjectWriter(ObjectReader):
.format(user, self.hash))
raise PermissionError
with open(os.path.join(self.object_path, 'object'), "w") as file:
- for k, v in content:
- file.write('{} {}'.format(k,v))
+ file.write('{}'.format(content))
def append(self, user, content, parent):
- parent_object = ObjectReader(parent)
+ parent_object = ObjectReader(parent, self.owner)
perm = parent_object.get_permission(user)
if not perm & APPEND:
logger.error("User {} doesn't have the modify permission for object {}"
@@ -125,22 +132,20 @@ class ObjectWriter(ObjectReader):
file.write('{} {}\n'.format(k,v))
#add the child hash to the parent
with open(os.path.join(parent_object.object_path, 'children'), "a") as file:
- file.write('{}\n'.format(self.hash))
+ file.write('{} {}\n'.format(self.hash))
- def create_root_object(self, user, content):
- with open(os.path.join(self.object_path, 'object'), "w") as file:
- for k, v in content.iteritems():
- file.write('{} {}\n'.format(k,v))
- #give all the permissions to the user
- ALLPERM = READ + MODIFY + APPEND + LIST
+ def add_user(self, user, perm, key = None):
with open(os.path.join(self.object_path, 'permissions'), "a") as file:
- file.write('{} {} xxxxxx\n'.format(user,ALLPERM))
-
+ if key:
+ file.write('{} {} {}\n'.format(user, perm, key))
+ else:
+ file.write('{} {} None\n'.format(user, perm, key))
+
if __name__ == '__main__':
jid = 'thrasibule@alias.im'
hash = hashlib.sha1(jid).hexdigest()
config.root = '/var/lib/alias'
- print ObjectReader(hash).get_content(jid)
+ print ObjectReader(hash, jid).get_content(jid)