# HG changeset patch # User Paul Boddie # Date 1416953643 -3600 # Node ID 875956967918ab99a97a0683b0b76a447084bdd4 # Parent e142d652b0e0eb18758c5e351cdf0618d71d2bad Preserve the TRANSP property in stored free/busy information. Added a means of retrieving the free/busy information received from others. diff -r e142d652b0e0 -r 875956967918 imip_store.py --- a/imip_store.py Tue Nov 25 23:12:15 2014 +0100 +++ b/imip_store.py Tue Nov 25 23:14:03 2014 +0100 @@ -103,7 +103,20 @@ filename = self.get_object_in_store(user, "freebusy") if not filename or not exists(filename): return None + else: + return self._get_freebusy(filename) + def get_freebusy_for_other(self, user, other): + + "For the given 'user', get free/busy details for the 'other' user." + + filename = self.get_object_in_store(user, "freebusy-other", other) + if not filename: + return None + else: + return self._get_freebusy(filename) + + def _get_freebusy(self, filename): f = open(filename) try: l = [] @@ -121,14 +134,7 @@ if not filename: return False - f = open(filename, "w") - try: - for item in freebusy: - f.write("\t".join(item) + "\n") - finally: - f.close() - fix_permissions(filename) - + self._set_freebusy(filename, freebusy) return True def set_freebusy_for_other(self, user, freebusy, other): @@ -139,6 +145,10 @@ if not filename: return False + self._set_freebusy(filename, freebusy) + return True + + def _set_freebusy(self, filename, freebusy): f = open(filename, "w") try: for item in freebusy: @@ -147,8 +157,6 @@ f.close() fix_permissions(filename) - return True - def get_requests(self, user): "Get requests for the given 'user'." @@ -245,8 +253,9 @@ rwrite(("UID", {}, user)) rwrite(("DTSTAMP", {}, datetime.utcnow().strftime("%Y%m%dT%H%M%SZ"))) - for start, end, uid in freebusy: - rwrite(("FREEBUSY", {"FBTYPE" : "BUSY"}, "/".join([start, end]))) + for start, end, uid, transp in freebusy: + if transp == "OPAQUE": + rwrite(("FREEBUSY", {"FBTYPE" : "BUSY"}, "/".join([start, end]))) f = open(filename, "w") try: diff -r e142d652b0e0 -r 875956967918 imiptools/content.py --- a/imiptools/content.py Tue Nov 25 23:12:15 2014 +0100 +++ b/imiptools/content.py Tue Nov 25 23:14:03 2014 +0100 @@ -202,10 +202,9 @@ remove_period(freebusy, uid) for start, end in periods: - insert_period(freebusy, (start, end, uid)) + insert_period(freebusy, (start, end, uid, transp)) - if transp in (None, "OPAQUE"): - store.set_freebusy(attendee, freebusy) + store.set_freebusy(attendee, freebusy) def can_schedule(freebusy, periods, uid): @@ -215,7 +214,7 @@ """ for conflict in have_conflict(freebusy, periods, True): - start, end, found_uid = conflict + start, end, found_uid, found_transp = conflict if found_uid != uid: return False diff -r e142d652b0e0 -r 875956967918 imiptools/handlers/common.py --- a/imiptools/handlers/common.py Tue Nov 25 23:12:15 2014 +0100 +++ b/imiptools/handlers/common.py Tue Nov 25 23:14:03 2014 +0100 @@ -46,8 +46,9 @@ rwrite(("UID", {}, self.uid)) if freebusy: - for start, end, uid in freebusy: - rwrite(("FREEBUSY", {"FBTYPE" : "BUSY"}, "/".join([start, end]))) + for start, end, uid, transp in freebusy: + if transp == "OPAQUE": + rwrite(("FREEBUSY", {"FBTYPE" : "BUSY"}, "/".join([start, end]))) cwrite(("VFREEBUSY", {}, record)) diff -r e142d652b0e0 -r 875956967918 imiptools/period.py --- a/imiptools/period.py Tue Nov 25 23:12:15 2014 +0100 +++ b/imiptools/period.py Tue Nov 25 23:14:03 2014 +0100 @@ -47,7 +47,7 @@ """ dtstart, dtend = period[:2] - found = bisect_left(freebusy, (dtstart, dtend, None)) + found = bisect_left(freebusy, (dtstart, dtend, None, None)) overlapping = []