1.1 --- a/imiptools/editing.py Mon Dec 11 22:09:38 2017 +0100
1.2 +++ b/imiptools/editing.py Tue Dec 12 00:05:22 2017 +0100
1.3 @@ -401,26 +401,16 @@
1.4
1.5 "Classify changes in the updated periods for the edited event."
1.6
1.7 - updated = self.combine_periods_for_comparison()
1.8 - return classify_period_changes(updated)
1.9 + return classify_period_changes(self.combine_periods())
1.10
1.11 def classify_periods(self):
1.12
1.13 "Classify the updated periods for the edited event."
1.14
1.15 - updated = self.combine_periods()
1.16 - return classify_periods(updated)
1.17 + return classify_periods(self.combine_periods())
1.18
1.19 def combine_periods(self):
1.20
1.21 - "Combine stored and checked edited periods to make updated periods."
1.22 -
1.23 - stored = self.get_stored_periods()
1.24 - current = self.get_checked_periods()
1.25 - return combine_periods(stored, current)
1.26 -
1.27 - def combine_periods_for_comparison(self):
1.28 -
1.29 "Combine unedited and checked edited periods to make updated periods."
1.30
1.31 original = self.state.get_original("periods")
1.32 @@ -1207,8 +1197,9 @@
1.33 def periods_from_updated_periods(updated_periods, fn):
1.34
1.35 """
1.36 - Return periods from the given 'updated_periods' created using 'fn', setting
1.37 - replacement, cancelled and recurrence identifier details.
1.38 + Return periods from the given 'updated_periods' having the form (stored,
1.39 + unedited), creating them using 'fn', and setting replacement, cancelled and
1.40 + recurrence identifier details.
1.41
1.42 This function should be used to produce editing-related periods from the
1.43 general updated periods provided by the client abstractions.
1.44 @@ -1244,9 +1235,21 @@
1.45 return periods
1.46
1.47 def event_periods_from_updated_periods(updated_periods):
1.48 +
1.49 + """
1.50 + Return event periods from the 'updated_periods' having the form (stored,
1.51 + unedited).
1.52 + """
1.53 +
1.54 return periods_from_updated_periods(updated_periods, event_period_from_period)
1.55
1.56 def form_periods_from_updated_periods(updated_periods):
1.57 +
1.58 + """
1.59 + Return form periods from the 'updated_periods' having the form (stored,
1.60 + unedited).
1.61 + """
1.62 +
1.63 return periods_from_updated_periods(updated_periods, form_period_from_period)
1.64
1.65 def periods_by_recurrence(periods):
1.66 @@ -1271,7 +1274,8 @@
1.67
1.68 """
1.69 Combine 'old' and 'new' periods for comparison, making a list of (old, new)
1.70 - updated period tuples.
1.71 + updated period tuples. Such tuples encode correspondences between periods
1.72 + representing the same, potentially-edited data.
1.73 """
1.74
1.75 old_by_recurrenceid, _new_periods = periods_by_recurrence(old)
1.76 @@ -1302,10 +1306,10 @@
1.77
1.78 return combined
1.79
1.80 -def classify_periods(updated_periods):
1.81 +def classify_periods(edited_periods):
1.82
1.83 """
1.84 - Using the 'updated_periods', being a list of (stored, current) periods,
1.85 + Using the 'edited_periods', being a list of (unedited, edited) periods,
1.86 return a tuple containing collections of new, replaced, retained, cancelled
1.87 and obsolete periods.
1.88
1.89 @@ -1323,24 +1327,24 @@
1.90 cancelled = []
1.91 obsolete = []
1.92
1.93 - for sp, p in updated_periods:
1.94 + for op, p in edited_periods:
1.95
1.96 - # Stored periods...
1.97 + # Unedited periods that are not cancelled.
1.98
1.99 - if sp:
1.100 + if op and not op.cancelled:
1.101
1.102 # With cancelled or absent current periods.
1.103
1.104 if not p or p.cancelled:
1.105 - cancelled.append(sp)
1.106 + cancelled.append(op)
1.107
1.108 # With differing or replacement current periods.
1.109
1.110 - elif p != sp or p.replacement:
1.111 + elif p != op or p.replacement:
1.112 replaced.append(p)
1.113 if not p.replacement:
1.114 p.new_replacement = True
1.115 - obsolete.append(sp)
1.116 + obsolete.append(op)
1.117
1.118 # With retained, not differing current periods.
1.119
1.120 @@ -1349,17 +1353,17 @@
1.121 if p.new_replacement:
1.122 p.new_replacement = False
1.123
1.124 - # New periods without corresponding stored periods.
1.125 + # New periods without corresponding unedited periods.
1.126
1.127 elif p:
1.128 new.append(p)
1.129
1.130 return new, replaced, retained, cancelled, obsolete
1.131
1.132 -def classify_period_changes(updated_periods):
1.133 +def classify_period_changes(edited_periods):
1.134
1.135 """
1.136 - Using the 'updated_periods', being a list of (original, current) periods,
1.137 + Using the 'edited_periods', being a list of (unedited, edited) periods,
1.138 return a tuple containing collections of modified, unmodified and removed
1.139 periods.
1.140 """
1.141 @@ -1368,7 +1372,7 @@
1.142 unmodified = []
1.143 removed = []
1.144
1.145 - for op, p in updated_periods:
1.146 + for op, p in edited_periods:
1.147
1.148 # Test for periods cancelled, reinstated or changed, or left unmodified
1.149 # during editing.