Exemplo n.º 1
0
    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'н. ст.'
Exemplo n.º 2
0
    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)
        )
Exemplo n.º 3
0
    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
        )
Exemplo n.º 4
0
    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)
        )
Exemplo n.º 5
0
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)