def _set_perf_id_attrs(self, perf_id): self._event_id = None self.departure_date = None self._perf_token = None self.usage_date = None if perf_id: event_len = int(perf_id[0]) self._event_id = perf_id[1:event_len + 1] remaining = perf_id[event_len + 1:] if remaining and remaining[0] == 'd': self.departure_date = yyyymmdd_to_date( remaining[1:9] # yyyymmdd ) remaining = remaining[9:] if remaining and remaining[0] == 'p': self._perf_token = remaining[1:] elif remaining and remaining[0] == 'u': self.usage_date = yyyymmdd_to_date( remaining[1:9] # yyyymmdd )
def end_date(self): end_date = None date_range_end = self._get_core_event_attr('date_range_end') if date_range_end: end_date = yyyymmdd_to_date( date_range_end['date_yyyymmdd'] ) return end_date
def start_date(self): start_date = None date_range_start = self._get_core_event_attr('date_range_start') if date_range_start: start_date = yyyymmdd_to_date( date_range_start['date_yyyymmdd'] ) return start_date
def available_until_date(self): if self._available_until_date is None: avail_dates = self._core_avail_detail.available_dates if avail_dates: until_date = avail_dates.get("last_yyyymmdd") if until_date: self._available_until_date = yyyymmdd_to_date(until_date) return self._available_until_date
def available_from_date(self): if self._available_from_date is None: avail_dates = self._core_avail_detail.available_dates if avail_dates: from_date = avail_dates.get("first_yyyymmdd") if from_date: self._available_from_date = yyyymmdd_to_date(from_date) return self._available_from_date
def _set_datetime(self, date_yyyymmdd, time_hhmmss=None): if date_yyyymmdd: self.date = yyyymmdd_to_date(date_yyyymmdd) else: self.date = None if time_hhmmss: self.time = hhmmss_to_time(time_hhmmss) else: self.time = None
def _build_performances_from_usage( self, usage_date_dict, need_departure_date, latest_date ): inv_dates = [] if 'invalid_range' in usage_date_dict: usage_inv_range = usage_date_dict['invalid_range'] if type(usage_inv_range) == list: for inv in usage_inv_range: inv_first_date = yyyymmdd_to_date( inv['first_invalid_date_yyyymmdd'] ) inv_last_date = yyyymmdd_to_date( inv['last_invalid_date_yyyymmdd'] ) inv_dates.extend(dates_in_range( inv_first_date, inv_last_date )) else: inv_first_date = yyyymmdd_to_date( usage_inv_range['first_invalid_date_yyyymmdd'] ) inv_last_date = yyyymmdd_to_date( usage_inv_range['last_invalid_date_yyyymmdd'] ) inv_dates.extend(dates_in_range(inv_first_date, inv_last_date)) inv_weekdays = [] if 'invalid_weekday' in usage_date_dict: usage_inv_weekdays = usage_date_dict['invalid_weekday'] if type(usage_inv_weekdays) == list: for inv_weekday in usage_inv_weekdays: inv_weekdays.append(inv_weekday['weekday_number']) else: inv_weekdays.append(int(usage_inv_weekdays['weekday_number'])) performances = [] first_date = yyyymmdd_to_date( usage_date_dict['first_valid_date_yyyymmdd'] ) last_date = yyyymmdd_to_date( usage_date_dict['last_valid_date_yyyymmdd'] ) if latest_date: if latest_date < last_date: last_date = latest_date delta = last_date - first_date for i in range(delta.days + 1): perf_date = first_date + datetime.timedelta(days=i) if ( perf_date.isoweekday() not in inv_weekdays and perf_date not in inv_dates ): if need_departure_date: departure_date = perf_date else: departure_date = None performances.append( perf_objs.Performance.from_event_and_usage_date( event=self, usage_date=perf_date, departure_date=departure_date, **self._internal_settings() ) ) return performances