aboutsummaryrefslogtreecommitdiffstats
path: root/server/object.py
diff options
context:
space:
mode:
authorZaran <zaran.krleza@gmail.com>2011-01-29 23:59:55 +0100
committerZaran <zaran.krleza@gmail.com>2011-01-29 23:59:55 +0100
commit995686b5ff272fb1fe0e78c087d6855ea93ae85e (patch)
tree2189ec380146661973b47bbdeb598eb047443312 /server/object.py
parent1b5acc0c20a0f233b52a63b1f17ea0b3a7587e58 (diff)
downloadalias-995686b5ff272fb1fe0e78c087d6855ea93ae85e.tar.gz
Retrieve both the key and perm at the same time for performance reason.
Also make the key a subitem (instead of an attribute) of the result stanza.
Diffstat (limited to 'server/object.py')
-rw-r--r--server/object.py68
1 files changed, 35 insertions, 33 deletions
diff --git a/server/object.py b/server/object.py
index 541fa95..6723481 100644
--- a/server/object.py
+++ b/server/object.py
@@ -34,26 +34,29 @@ class Object:
raise ObjectError
def get_permission(self, user):
- file = open(self.path + 'permissions', 'r')
- for line in file:
- name, perm, key = line.split()
- if name == user:
- return int(perm)
+ with open(self.path + 'permissions', 'r') as file:
+ for line in file:
+ name, perm, key = line.split()
+ if name == user:
+ return int(perm)
+ return None
- return 0
-
def get_key(self, user):
- file = open(self.path + 'permissions', 'r')
- for line in file:
- name, perm, key = line.split()
- if name == user:
- if not int(perm) & READ:
- logging.error("User {} doesn't have read access to object {}"
- .format(user, self.hash))
- raise PermissionError
- return key
- return 0
-
+ with open(self.path + 'permissions', 'r') as file:
+ for line in file:
+ name, perm, key = line.split()
+ if name == user:
+ return key
+ return None
+
+ def get_permission_key(self, user):
+ with open(self.path + 'permissions', 'r') as file:
+ for line in file:
+ name, perm, key = line.split()
+ if name == user:
+ return (int(perm), key)
+ return (None, None)
+
def get_child_list(self, user):
perm = self.get_permission(user)
if not perm & LIST:
@@ -64,32 +67,31 @@ class Object:
file = open(self.path + "childs", 'r')
result = []
for line in file:
- name = line.rstrip('\n')
- try:
- child = Object(self.owner, name)
- except ObjectError:
- logging.error("Object {} can't be find for user {}".format(self.hash,
- self.owner))
- else:
- permission = child.get_permission(user)
- key = child.get_key(user)
- if permission > 0:
- result.append((name, permission, key))
+ name = line.rstrip('\n')
+ try:
+ child = Object(self.owner, name)
+ except ObjectError:
+ logging.error("Object {} can't be find for user {}".format(self.hash,
+ self.owner))
+ else:
+ perm, key = child.get_permission_key(user)
+ if perm > 0:
+ result.append((name, perm, key))
file.close()
return result
def get_content(self, user):
- perm = self.get_permission(user)
- if not perm & READ:
+ perm, key = self.get_permission_key(user)
+ if not perm & READ :
logging.error("User {} doesn't have read access to object {}"
.format(user, self.hash))
raise PermissionError
file = open(self.path + "object", 'r')
- result = file.read()
+ content = file.read()
file.close()
- return result
+ return content, key
if __name__ == '__main__':
pass