def __init__(self, year, calendar='julian'): """ :param year: any year. :param calendar: julian or gregorian calendar system. """ self.__year = year self.__calendar = calendar self.__julian_date_easter = convert_julian_to_julian_day( *get_pascha(self.__year)) self.__style = u'от Адама.' if calendar == 'julian' else u'н. ст.'
def get_fast_free_weeks(self): """Get the fast-free weeks on all year.. """ fast_free_weeks = [ u'Святки — с {christmastide_begin} по {christmastide_end}.', u'Продолжительность Рождественского мясоеда — {length}.', u'Седмица о Мытаре и Фарисее — с {phar_begin} по {phar_end}.', u'Сырная седмица — с {cheese_begin} по {cheese_end}.', u'Светлая седмица — с {bright_begin} по {bright_end}.', u'Седмица Всех Святых — с {trin_begin} по {trin_end}.', ] # Christmastide. christmastide = self.__set_period_date( self.__get_absolute_date((25, 12, self.__year)), self.__get_absolute_date((4, 1, self.__year)) ) # Publican and Pharisee. pharisee_period = self.__set_period_date(*self.__get_period(-69, -63)) # Cheese-fare week. cheese_period = self.__set_period_date(*self.__get_period(-55, -49)) # Bright week. bright_period = self.__set_period_date(*self.__get_period(0, 6)) # The week of Trinity. trinity_period = self.__set_period_date(*self.__get_period(49, 56)) # Meat-free period length from the Nativity to the Judgment Sunday. nativity_jd = convert_julian_to_julian_day(25, 12, self.__year - 1) meet_free_length = nativity_jd - sum([self.__julian_date_easter, -57]) _formatter = dict( christmastide_begin=christmastide[0], christmastide_end=christmastide[1], length=self.__get_period_length(meet_free_length), phar_begin=pharisee_period[0], phar_end=pharisee_period[1], cheese_begin=cheese_period[0], cheese_end=cheese_period[1], bright_begin=bright_period[0], bright_end=bright_period[1], trin_begin=trinity_period[0], trin_end=trinity_period[1] ) return dict( headline=u'Сплошные седмицы', result=map(lambda s: s.format(**_formatter), fast_free_weeks) )
def get_soul_saturdays(self): """Get a dead-offices in whole year.""" saturdays = [ [u'Суббота Мясопустная. Вселенское ' u'поминание усопших — %s.', -57], [u'Вторая суббота Великого Поста. ' u'Поминание усопших — %s.', -36], [u'Третья суббота Великого Поста. ' u'Поминание усопших — %s.', -29], [u'Четвертая суббота Великого Поста. ' u'Поминание усопших — %s.', -22], [u'Радоница. Во вторник второй седмицы по Пасхе ' u'совершаем поминовение усопших — %s.', 9], [u'В субботу седьмую по Пасхе совершаем память ' u'всем успопшим от века во Христа ' u'верующим отцам и братьям нашим — %s.', 48] ] demetrius_saturday = ( u'Димитревская родительская суббота. ' u'Поминание усопших воинов ' u'и всех православных християн — %s.' ) soul_saturdays = [] def _check_date(item): saturday, offset = item[0], item[1] _date = convert_julian_day_to_julian( sum([self.__julian_date_easter, offset])) _day = menology[_date[1]][_date[0]] _saint_status = _day.get('saint') if _saint_status in [0, 1, 2, 3]: soul_saturdays.append(saturday % self.__set_date( *self.__get_date(offset))) map(_check_date, saturdays) demetrius_jd = convert_julian_to_julian_day( 26, 10, self.__year) demetrius_jd = day_of_week_previews(6, demetrius_jd) # Check feast of Kazan icon. date = convert_julian_day_to_julian(demetrius_jd) day = menology[date[1]][date[0]] saint_status = day.get('saint') if saint_status in [4, 5, 6, 7]: demetrius_jd = day_of_week_next(6, demetrius_jd) demetrius_soul_saturday = convert_julian_day_to_julian( demetrius_jd) soul_saturdays.append(demetrius_saturday % self.__set_date( *demetrius_soul_saturday)) return dict( headline=u'Дни поминовения усопших', result=soul_saturdays )
def get_fasts(self): """Get the fasts in whole year.""" fasts = [ u'Пост в Сочельник Богоявления — {theophany_eve}.', u'Великий пост — с {great_lent_begin} по {great_lent_end}.', (u'Пост свв. апостол Петра и Павла — ' u'с {apostles_fast_begin} по {apostles_fast_end}.'), u'Продолжительность Петрова поста — {length}.', (u'Пост Успения пресв. Богородицы — ' u'с {dormition_begin} по {dormition_end}.'), (u'Пост в память Усекновения главы ' u'св. Иоанна Предотечи — {beheading}.'), u'Пост на праздник Воздвижения Креста Господня — {exaltation}.', (u'Рождественский пост — ' u'с {nativity_begin} по {nativity_end} {year} года.'), ] # Great Lent. great_lent_period = self.__set_period_date(*self.__get_period(-48, -1)) # Apostles fast. apostles_feast_jd = convert_julian_to_julian_day(28, 6, self.__year) apostles_fast_period = self.__set_period_date( self.__get_period(57)[0], self.__get_absolute_date((28, 6, self.__year))) apostles_fast_length = apostles_feast_jd - sum( [self.__julian_date_easter, 57]) # Dormition fast. dormition_fast_period = self.__set_period_date( self.__get_absolute_date((1, 8, self.__year)), self.__get_absolute_date((14, 8, self.__year)) ) # Nativity fast. nativity_fast_period = self.__set_period_date( self.__get_absolute_date((15, 11, self.__year)), self.__get_absolute_date((24, 12, self.__year)) ) _formatter = dict( theophany_eve=self.__set_date(5, 1), great_lent_begin=great_lent_period[0], great_lent_end=great_lent_period[1], apostles_fast_begin=apostles_fast_period[0], apostles_fast_end=apostles_fast_period[1], length=self.__get_period_length(apostles_fast_length), dormition_begin=dormition_fast_period[0], dormition_end=dormition_fast_period[1], beheading=self.__set_date(29, 8), exaltation=self.__set_date(14, 9), nativity_begin=nativity_fast_period[0], nativity_end=nativity_fast_period[1], year=(self.__year if self.__calendar == 'julian' else self.__year + 1), ) return dict( headline=u'Посты', result=map(lambda s: s.format(**_formatter), fasts) )
def search_feasts(search_string): """ Search saints and feasts in year menology. :param search_string: search input string (e.g. saint or feast name). :return list, witch contains gregorian & julian dates and search result. """ if len(search_string) < 3: return dict(count=0, result=[]) # TODO: Fix endings in the words: Андрей, Андриан endings = re.compile( ur"(ый|ой|ая|ое|ые|ому|а|ем|о|ов|у|е|й|" ur"ого|ал|ему|и|ство|ых|ох|ия|ий|ь|я|он|ют|ат|ин|ея)$", re.U ) search_string_clean = re.sub(endings, u"", search_string) pattern = re.compile(ur"(\b%s\w+\b)" % search_string_clean, re.I | re.U) if len(search_string) <= 5: endings = re.compile(ur"(а|ы|у|и|я)$", re.U) search_string_clean = re.sub(endings, u"", search_string) pattern = re.compile(ur"(\b%s[а-я]{0,2}\b)" % search_string_clean, re.I | re.U) date = datetime.date.today() year = convert_gregorian_to_julian(date.day, date.month, date.year)[2] year_menology = menology cal_out = [] # List of weekday names. for month in range(1, 13): days_in_month = calendar.monthrange(year, month)[1] for day in range(1, days_in_month + 1): cal = AncientCalendar(day, month, year, calendar="julian") weekdayname = cal.get_daily_feast() cal_out.extend([[list((day, month, year)), weekdayname]]) # Construct year menology with movable feasts. for item in cal_out: year_menology[item[0][1]][item[0][0]]["weekday"] = item[1] d = year_menology out = [] # Search string in menology. for _month, value in d.iteritems(): for _day, value1 in d[_month].iteritems(): for key2, content in d[_month][_day].iteritems(): if re.search(pattern, unicode(content)): _date = (_day, _month, year) out.extend( [ [ list(convert_julian_day_to_julian_am(convert_julian_to_julian_day(*_date))), list(convert_julian_to_gregorian(*_date)), clean_string(content), ] ] ) # Highliting search_string. start_str = u"{highlight_start}" end_str = u"{highlight_end}" pattern_highlite = re.compile(ur"(\b%s\w*\b)" % search_string_clean, re.I | re.U) tr = lambda m: start_str + m.group() + end_str result = [[t[0], t[1], pattern_highlite.sub(tr, t[2])] for t in out] # Count of serach results. count = len([re.findall(pattern, item[2]) for item in out]) return dict(count=count, result=result)