1.1 --- a/imip_store.py Wed Feb 11 17:19:07 2015 +0100
1.2 +++ b/imip_store.py Thu Feb 12 16:39:06 2015 +0100
1.3 @@ -40,6 +40,54 @@
1.4 def release_lock(self, user):
1.5 FileBase.release_lock(self, user)
1.6
1.7 + def _get_object(self, user, filename):
1.8 +
1.9 + """
1.10 + Return the parsed object for the given 'user' having the given
1.11 + 'filename'.
1.12 + """
1.13 +
1.14 + self.acquire_lock(user)
1.15 + try:
1.16 + f = open(filename, "rb")
1.17 + try:
1.18 + return parse_object(f, "utf-8")
1.19 + finally:
1.20 + f.close()
1.21 + finally:
1.22 + self.release_lock(user)
1.23 +
1.24 + def _set_object(self, user, filename, node):
1.25 +
1.26 + """
1.27 + Set an object for the given 'user' having the given 'filename', using
1.28 + 'node' to define the object.
1.29 + """
1.30 +
1.31 + self.acquire_lock(user)
1.32 + try:
1.33 + f = open(filename, "wb")
1.34 + try:
1.35 + to_stream(f, node)
1.36 + finally:
1.37 + f.close()
1.38 + fix_permissions(filename)
1.39 + finally:
1.40 + self.release_lock(user)
1.41 +
1.42 + return True
1.43 +
1.44 + def _remove_object(self, filename):
1.45 +
1.46 + "Remove the object with the given 'filename'."
1.47 +
1.48 + try:
1.49 + remove(filename)
1.50 + except OSError:
1.51 + return False
1.52 +
1.53 + return True
1.54 +
1.55 def get_events(self, user):
1.56
1.57 "Return a list of event identifiers."
1.58 @@ -58,15 +106,7 @@
1.59 if not filename or not exists(filename):
1.60 return None
1.61
1.62 - self.acquire_lock(user)
1.63 - try:
1.64 - f = open(filename, "rb")
1.65 - try:
1.66 - return parse_object(f, "utf-8")
1.67 - finally:
1.68 - f.close()
1.69 - finally:
1.70 - self.release_lock(user)
1.71 + return self._get_object(user, filename)
1.72
1.73 def set_event(self, user, uid, node):
1.74
1.75 @@ -76,18 +116,7 @@
1.76 if not filename:
1.77 return False
1.78
1.79 - self.acquire_lock(user)
1.80 - try:
1.81 - f = open(filename, "wb")
1.82 - try:
1.83 - to_stream(f, node)
1.84 - finally:
1.85 - f.close()
1.86 - fix_permissions(filename)
1.87 - finally:
1.88 - self.release_lock(user)
1.89 -
1.90 - return True
1.91 + return self._set_object(user, filename, node)
1.92
1.93 def remove_event(self, user, uid):
1.94
1.95 @@ -97,12 +126,7 @@
1.96 if not filename:
1.97 return False
1.98
1.99 - try:
1.100 - remove(filename)
1.101 - except OSError:
1.102 - return False
1.103 -
1.104 - return True
1.105 + return self._remove_object(filename)
1.106
1.107 def get_freebusy(self, user):
1.108