# HG changeset patch # User Paul Boddie # Date 1413979586 -7200 # Node ID 69f8c6b41d1f5aa64da995799a9a939e93c54bf0 # Parent fb16d908e331ac62ae32a18cac99025df6627e22 Made a common method for testing whether a received object is new. diff -r fb16d908e331 -r 69f8c6b41d1f imip_resource.py --- a/imip_resource.py Wed Oct 22 00:48:30 2014 +0200 +++ b/imip_resource.py Wed Oct 22 14:06:26 2014 +0200 @@ -5,7 +5,7 @@ """ from datetime import date, datetime, timedelta -from imiptools.content import Handler, format_datetime, get_value, parse_object +from imiptools.content import Handler, format_datetime from imiptools.period import insert_period, period_overlaps, remove_period from vCalendar import to_node from vRecurrence import get_parameters, get_rule @@ -70,26 +70,8 @@ # Check for event using UID. - f = self.store.get_event(attendee, self.uid) - event = f and parse_object(f, "utf-8", "VEVENT") - - # If found, compare SEQUENCE and potentially DTSTAMP. - - if event: - sequence = get_value(event, "SEQUENCE") - dtstamp = get_value(event, "DTSTAMP") - - # If the request refers to an older version of the event, ignore - # it. - - old_dtstamp = self.dtstamp < dtstamp - - if sequence is not None and ( - int(self.sequence) < int(sequence) or - int(self.sequence) == int(sequence) and old_dtstamp - ) or old_dtstamp: - - continue + if not self.have_new_object(attendee, "VEVENT"): + continue # If newer than any old version, discard old details from the # free/busy record and check for suitability. diff -r fb16d908e331 -r 69f8c6b41d1f imiptools/__init__.py --- a/imiptools/__init__.py Wed Oct 22 00:48:30 2014 +0200 +++ b/imiptools/__init__.py Wed Oct 22 14:06:26 2014 +0200 @@ -71,8 +71,6 @@ if part.get_content_type() in itip_content_types and \ part.get_param("method"): - # NOTE: Act on behalf of resources for now. - all_parts += handle_itip_part(part, original_recipients, self.handlers) # Pack the parts into a single message. diff -r fb16d908e331 -r 69f8c6b41d1f imiptools/content.py --- a/imiptools/content.py Wed Oct 22 00:48:30 2014 +0200 +++ b/imiptools/content.py Wed Oct 22 14:06:26 2014 +0200 @@ -274,6 +274,12 @@ return self.recipients.intersection(map(get_address, values)) def require_organiser_and_attendees(self): + + """ + Return the organiser and attendees for the current object, filtered by + the recipients of interest. Return None if no identities are eligible. + """ + attendee_map = self.get_value_map("ATTENDEE") organiser = self.get_item("ORGANIZER") @@ -288,6 +294,36 @@ return organiser, attendees + def have_new_object(self, attendee, objtype): + + """ + Return whether the current object is new to the 'attendee' for the + given 'objtype'. + """ + + f = self.store.get_event(attendee, self.uid) + event = f and parse_object(f, "utf-8", objtype) + + # If found, compare SEQUENCE and potentially DTSTAMP. + + if event: + sequence = get_value(event, "SEQUENCE") + dtstamp = get_value(event, "DTSTAMP") + + # If the request refers to an older version of the event, ignore + # it. + + old_dtstamp = self.dtstamp < dtstamp + + if sequence is not None and ( + int(self.sequence) < int(sequence) or + int(self.sequence) == int(sequence) and old_dtstamp + ) or old_dtstamp: + + return False + + return True + # Handler registry. methods = {