def navigate(tp): start = BosparanianUtils.from_time(curret_period.start_time) end = BosparanianUtils.from_time(curret_period.end_time) start_months = start.year * 13 + start.month end_months = end.year * 13 + end.month month_diff = end_months - start_months month_delta = month_diff * direction new_start_year, new_start_month = _months_to_year_and_month( start_months + month_delta) new_end_year, new_end_month = _months_to_year_and_month(end_months + month_delta) try: new_start = start.replace(year=new_start_year, month=new_start_month) new_end = end.replace(year=new_end_year, month=new_end_month) start = new_start.to_time() end = new_end.to_time() if end > curret_period.time_type.get_max_time()[0]: raise ValueError() if start < curret_period.time_type.get_min_time()[0]: raise ValueError() except ValueError: if direction < 0: raise TimeOutOfRangeLeftError() else: raise TimeOutOfRangeRightError() return tp.update(start, end)
def move_period_num_months(period, num): try: delta = num years = abs(delta) / 13 bosparanian_start = BosparanianUtils.from_time(period.start_time) bosparanian_end = BosparanianUtils.from_time(period.end_time) if num < 0: years = -years delta = delta - 13 * years if delta < 0: start_month = bosparanian_start.month + 13 + delta end_month = bosparanian_end.month + 13 + delta if start_month > 13: start_month -= 13 end_month -= 13 if start_month > bosparanian_start.month: years -= 1 else: start_month = bosparanian_start.month + delta end_month = bosparanian_start.month + delta if start_month > 13: start_month -= 13 end_month -= 13 years += 1 start_year = bosparanian_start.year + years end_year = bosparanian_start.year + years start_time = bosparanian_start.replace(year=start_year, month=start_month) end_time = bosparanian_end.replace(year=end_year, month=end_month) return TimePeriod(period.time_type, start_time.to_time(), end_time.to_time()) except ValueError: return None
def set_value(self, time): if time == None: time = self.now_fn() self.date_picker.set_value( BosparanianUtils.from_time(time).to_date_tuple()) self.time_picker.set_value( BosparanianUtils.from_time(time).to_time_tuple())
def _whole_number_of_months(period): start, end = BosparanianUtils.from_time( period.start_time), BosparanianUtils.from_time(period.end_time) start_months = start.year * 13 + start.month end_months = end.year * 13 + end.month month_diff = end_months - start_months return (start.is_first_of_month() and end.is_first_of_month() and month_diff > 0)
def label(self, time, major=False): if major: day_of_week = time.get_day_of_week() time = BosparanianUtils.from_time(time) return "%s %s %s %s" % ( bosp_abbreviated_name_of_weekday(day_of_week), time.day, bosp_abbreviated_name_of_month( time.month), format_year(time.year)) return (bosp_abbreviated_name_of_weekday(time.get_day_of_week()) + " %s" % BosparanianUtils.from_time(time).day)
def move_period_num_years(period, num): try: delta = num start_year = BosparanianUtils.from_time(period.start_time).year end_year = BosparanianUtils.from_time(period.end_time).year start_time = BosparanianUtils.from_time( period.start_time).replace(year=start_year + delta) end_time = BosparanianUtils.from_time( period.end_time).replace(year=end_year + delta) return TimePeriod(period.time_type, start_time.to_time(), end_time.to_time()) except ValueError: return None
def decrement_month(date): year, month, day = date if month > 1: return self._set_valid_day(year, month - 1, day) elif year > BosparanianUtils.from_time(BosparanianTimeType().get_min_time()[0]).year: return self._set_valid_day(year - 1, 13, day) return date
def on_up(self): max_year = BosparanianUtils.from_time(BosparanianTimeType().get_max_time()[0]).year def increment_year(date): year, month, day = date if year < max_year - 1: return self._set_valid_day(year + 1, month, day) return date def increment_month(date): year, month, day = date if month < 13: return self._set_valid_day(year, month + 1, day) elif year < max_year - 1: return self._set_valid_day(year + 1, 1, day) return date def increment_day(date): year, month, day = date time = BosparanianUtils.from_date(year, month, day).to_time() if time < BosparanianTimeType().get_max_time()[0] - delta_from_days(1): return BosparanianUtils.from_time(time + delta_from_days(1)).to_date_tuple() return date if not self._current_date_is_valid(): return selection = self.date_picker.GetSelection() current_date = self.get_value() if self._insertion_point_in_region(self.region_year): new_date = increment_year(current_date) elif self._insertion_point_in_region(self.region_month): new_date = increment_month(current_date) else: new_date = increment_day(current_date) self._save_preferred_day(new_date) if current_date != new_date: self._set_new_date_and_restore_selection(new_date, selection) self._on_change()
def fit_decade_fn(main_frame, current_period, navigation_fn): mean = BosparanianUtils.from_time(current_period.mean_time()) start = BosparanianUtils.from_date(int(mean.year / 10) * 10, 1, 1).to_time() end = BosparanianUtils.from_date(int(mean.year / 10) * 10 + 10, 1, 1).to_time() navigation_fn(lambda tp: tp.update(start, end))
def label(self, time, major=False): time = BosparanianUtils.from_time(time) if major: return "%s %s %s: %s:%s" % ( time.day, bosp_abbreviated_name_of_month(time.month), format_year(time.year), time.hour, time.minute) return str(time.minute)
def label(self, time, major=False): time = BosparanianUtils.from_time(time) if major: return "%s %s" % (bosp_name_of_month( time.month), format_year(time.year)) if time.month == 13: return bosp_abbreviated_name_of_month(time.month) return bosp_name_of_month(time.month)
def start(self, time): q = self.get_quarter(time) if q == 0: m = 13 else: m = (q - 1) * 3 + 1 return BosparanianUtils.from_date( BosparanianUtils.from_time(time).year, m, 1).to_time()
def _time_range_string(self, start, end): start = BosparanianUtils.from_time(start) end = BosparanianUtils.from_time(end) if start.year == end.year: if start.month == end.month: return "%s-%s %s %s" % (start.day, end.day, bosp_abbreviated_name_of_month( start.month), format_year(start.year)) return "%s %s-%s %s %s" % ( start.day, bosp_abbreviated_name_of_month(start.month), end.day, bosp_abbreviated_name_of_month( end.month), format_year(start.year)) return "%s %s %s-%s %s %s" % ( start.day, bosp_abbreviated_name_of_month( start.month), format_year(start.year), end.day, bosp_abbreviated_name_of_month(end.month), format_year(end.year))
def increment_day(date): year, month, day = date time = BosparanianUtils.from_date(year, month, day).to_time() if time < BosparanianTimeType().get_max_time( )[0] - delta_from_days(1): return BosparanianUtils.from_time( time + delta_from_days(1)).to_date_tuple() return date
def decrement_month(date): year, month, day = date if month > 1: return self._set_valid_day(year, month - 1, day) elif year > BosparanianUtils.from_time( BosparanianTimeType().get_min_time()[0]).year: return self._set_valid_day(year - 1, 13, day) return date
def fit_month_fn(main_frame, current_period, navigation_fn): mean = BosparanianUtils.from_time(current_period.mean_time()) start = BosparanianUtils.from_date(mean.year, mean.month, 1).to_time() if mean.month == 13: end = BosparanianUtils.from_date(mean.year + 1, 1, 1).to_time() else: end = BosparanianUtils.from_date(mean.year, mean.month + 1, 1).to_time() navigation_fn(lambda tp: tp.update(start, end))
def fit_week_fn(main_frame, current_period, navigation_fn): mean = BosparanianUtils.from_time(current_period.mean_time()) start = BosparanianUtils.from_date(mean.year, mean.month, mean.day).to_time() weekday = start.get_day_of_week() start = start - delta_from_days(weekday) if not main_frame.week_starts_on_monday(): start = start - delta_from_days(1) end = start + delta_from_days(7) navigation_fn(lambda tp: tp.update(start, end))
def fit_century_fn(main_frame, current_period, navigation_fn): mean = BosparanianUtils.from_time(current_period.mean_time()) if mean.year > get_century_max_year(): year = get_century_max_year() else: year = max(get_min_year_containing_praios_1(), int(mean.year / 100) * 100) start = BosparanianUtils.from_date(year, 1, 1).to_time() end = BosparanianUtils.from_date(year + 100, 1, 1).to_time() navigation_fn(lambda tp: tp.update(start, end))
def label(self, time, major=False): if major: # TODO: This only works for English. Possible to localize? time = BosparanianUtils.from_time(time) start_year = self._century_start_year(time.year) century = (start_year + 100) / 100 if century <= 0: century -= 1 return str(century) + " century BF" return ""
def navigate(tp): year_delta = direction * _calculate_year_diff(curret_period) bosparanian_start = BosparanianUtils.from_time( curret_period.start_time) bosparanian_end = BosparanianUtils.from_time(curret_period.end_time) new_start_year = bosparanian_start.year + year_delta new_end_year = bosparanian_end.year + year_delta try: new_start = bosparanian_start.replace( year=new_start_year).to_time() new_end = bosparanian_end.replace(year=new_end_year).to_time() if new_end > curret_period.time_type.get_max_time()[0]: raise ValueError() if new_start < curret_period.time_type.get_min_time()[0]: raise ValueError() except ValueError: if direction < 0: raise TimeOutOfRangeLeftError() else: raise TimeOutOfRangeRightError() return tp.update(new_start, new_end)
def on_up(self): max_year = BosparanianUtils.from_time( BosparanianTimeType().get_max_time()[0]).year def increment_year(date): year, month, day = date if year < max_year - 1: return self._set_valid_day(year + 1, month, day) return date def increment_month(date): year, month, day = date if month < 13: return self._set_valid_day(year, month + 1, day) elif year < max_year - 1: return self._set_valid_day(year + 1, 1, day) return date def increment_day(date): year, month, day = date time = BosparanianUtils.from_date(year, month, day).to_time() if time < BosparanianTimeType().get_max_time( )[0] - delta_from_days(1): return BosparanianUtils.from_time( time + delta_from_days(1)).to_date_tuple() return date if not self._current_date_is_valid(): return selection = self.date_picker.GetSelection() current_date = self.get_value() if self._insertion_point_in_region(self.region_year): new_date = increment_year(current_date) elif self._insertion_point_in_region(self.region_month): new_date = increment_month(current_date) else: new_date = increment_day(current_date) self._save_preferred_day(new_date) if current_date != new_date: self._set_new_date_and_restore_selection(new_date, selection) self._on_change()
def start(self, time): bosparanian_time = BosparanianUtils.from_time(time) new_bosparanian = BosparanianUtils.from_date( self._decade_start_year(bosparanian_time.year), 1, 1) return new_bosparanian.to_time()
def set_value(self, time): if time == None: time = self.now_fn() self.date_picker.set_value(BosparanianUtils.from_time(time).to_date_tuple()) self.time_picker.set_value(BosparanianUtils.from_time(time).to_time_tuple())
def get_century_max_year(): return BosparanianUtils.from_time( BosparanianTimeType().get_max_time()[0]).year - 100
def start(self, time): bosparanian_time = BosparanianUtils.from_time(time) new_bosparanian = BosparanianUtils.from_date(bosparanian_time.year, bosparanian_time.month, bosparanian_time.day) return new_bosparanian.to_time()
def increment_day(date): year, month, day = date time = BosparanianUtils.from_date(year, month, day).to_time() if time < BosparanianTimeType().get_max_time()[0] - delta_from_days(1): return BosparanianUtils.from_time(time + delta_from_days(1)).to_date_tuple() return date
def fit_day_fn(main_frame, current_period, navigation_fn): mean = BosparanianUtils.from_time(current_period.mean_time()) start = BosparanianUtils.from_date(mean.year, mean.month, mean.day).to_time() end = start + delta_from_days(1) navigation_fn(lambda tp: tp.update(start, end))
def increment(self, time): days_in_month = BosparanianUtils.from_time(time).days_in_month() return time + delta_from_days(days_in_month)
def get_quarter(self, time): m = BosparanianUtils.from_time(time).month if m == 13: return 0 return (m - 1) // 3 + 1
def start(self, time): time = BosparanianUtils.from_time(time) return BosparanianUtils.from_date(self._century_start_year(time.year), 1, 1).to_time()
def increment(self, time): bosparanian_time = BosparanianUtils.from_time(time) return bosparanian_time.replace(year=bosparanian_time.year + 1).to_time()
def label(self, time, major=False): return format_year(BosparanianUtils.from_time(time).year)
def increment(self, time): gregorian_time = BosparanianUtils.from_time(time) return gregorian_time.replace(year=gregorian_time.year + 100).to_time()
def label(self, time, major=False): time = BosparanianUtils.from_time(time) return format_decade(self._decade_start_year(time.year))