| Index: python/transitfeed.py |
| =================================================================== |
| --- python/transitfeed.py (revision 1127) |
| +++ python/transitfeed.py (working copy) |
| @@ -171,9 +171,13 @@ |
| context=context, context2=self._context, type=type) |
| self._Report(e) |
| - def DuplicateID(self, column_name, value, context=None): |
| - e = DuplicateID(column_name=column_name, value=value, |
| - context=context, context2=self._context) |
| + def DuplicateID(self, column_names, values, context=None, type=TYPE_ERROR): |
| + if isinstance(column_names, tuple): |
| + column_names = '(' + ', '.join(column_names) + ')' |
| + if isinstance(values, tuple): |
| + values = '(' + ', '.join(values) + ')' |
| + e = DuplicateID(column_name=column_names, value=values, |
| + context=context, context2=self._context, type=type) |
| self._Report(e) |
| def UnusedStop(self, stop_id, stop_name, context=None): |
| @@ -2448,7 +2452,11 @@ |
| result.sort() # helps with __eq__ |
| return result |
| - def SetDateHasService(self, date, has_service=True): |
| + def SetDateHasService(self, date, has_service=True, problems=None): |
| + if date in self.date_exceptions and problems: |
| + problems.DuplicateID(('service_id', 'date'), |
| + (self.service_id, date), |
| + type=TYPE_WARNING) |
| self.date_exceptions[date] = has_service and 1 or 2 |
| def ResetDateToNormalService(self, date): |
| @@ -3975,15 +3983,16 @@ |
| ServicePeriod._FIELD_NAMES, |
| ServicePeriod._FIELD_NAMES_REQUIRED): |
| context = (file_name, row_num, row, cols) |
| + self._problems.SetFileContext(*context) |
| period = ServicePeriod(field_list=row) |
| if period.service_id in periods: |
| self._problems.DuplicateID('service_id', period.service_id) |
| - continue |
| + else: |
| + periods[period.service_id] = (period, context) |
| + self._problems.ClearContext() |
| - periods[period.service_id] = (period, context) |
| - |
| # process calendar_dates.txt |
| if self._HasFile(file_name_dates): |
| # ['service_id', 'date', 'exception_type'] |
| @@ -3991,6 +4000,7 @@ |
| for (row, row_num, cols) in self._ReadCSV(file_name_dates, |
| fields, fields): |
| context = (file_name_dates, row_num, row, cols) |
| + self._problems.SetFileContext(*context) |
| service_id = row[0] |
| @@ -4003,11 +4013,12 @@ |
| exception_type = row[2] |
| if exception_type == u'1': |
| - period.SetDateHasService(row[1], True) |
| + period.SetDateHasService(row[1], True, self._problems) |
| elif exception_type == u'2': |
| - period.SetDateHasService(row[1], False) |
| + period.SetDateHasService(row[1], False, self._problems) |
| else: |
| self._problems.InvalidValue('exception_type', exception_type) |
| + self._problems.ClearContext() |
| # Now insert the periods into the schedule object, so that they're |
| # validated with both calendar and calendar_dates info present |