Ejemplo n.º 1
0
    def _fill_in_tempora_days(self, year: int) -> None:
        """
        Days depending on variable date, such as Easter or Advent
        """
        # Inserting blocks
        self._insert_block(self.calc_holy_family(year), self.blocks.POST_EPIPHANY)
        self._insert_block(self.calc_septuagesima(year), self.blocks.FROM_PRE_LENT_TO_POST_PENTECOST)
        self._insert_block(self.calc_saturday_before_24_sunday_after_pentecost(year), self.blocks.POST_EPIPHANY,
                           reverse=True, overwrite=False)
        self._insert_block(self.calc_24_sunday_after_pentecost(year), self.blocks.WEEK_24_AFTER_PENTECOST)
        self._insert_block(self.calc_first_advent_sunday(year), self.blocks.ADVENT, stop_date=date(year, 12, 23))
        self._insert_block(self.calc_ember_wednesday_september(year), self.blocks.EMBER_DAYS_SEPTEMBER)

        # Inserting single days
        date_ = self.calc_holy_name(year)
        self.calendar.get_day(date_).celebration = [Observance(TEMPORA_NAT2_0, date_, self.lang)]

        date_ = self.calc_christ_king(year)
        self.calendar.get_day(date_).celebration = [Observance(SANCTI_10_DUr, date_, self.lang)]

        date_ = self.calc_sunday_christmas_octave(year)
        if date_:
            self._insert_block(date_, self.blocks.NATIVITY_OCTAVE_SUNDAY)
        self._insert_block(date(year, 12, 29), self.blocks.NATIVITY_OCTAVE_FERIA, overwrite=False)
        self._insert_block(date(year, 12, 30), self.blocks.NATIVITY_OCTAVE_FERIA, overwrite=False)
        self._insert_block(date(year, 12, 31), self.blocks.NATIVITY_OCTAVE_FERIA, overwrite=False)
Ejemplo n.º 2
0
def test_get_proper_from_observance():
    proper_vernacular, proper_latin = Observance(c.SANCTI_01_06,
                                                 date(2018, 1, 6),
                                                 language).get_proper()
    assert 'Objawienie' in proper_vernacular.title
    assert 'Ml 3:1' in proper_vernacular.get_section(INTROIT).body[0]
    assert 'Malach 3:1' in proper_latin.get_section(INTROIT).body[0]
    assert 'Deus, qui hodiérna die' in proper_latin.get_section(ORATIO).body[0]
Ejemplo n.º 3
0
def rule_bmv_office_on_saturday(
        calendar: Calendar, date_: date, tempora: List[Observance], observances: List[Observance], lang: str):
    # On feria Saturdays (4th class) the celebration is B. M. V. Saturdays on given period

    def _calc_proper_for_given_period():
        if match(tempora, PATTERN_ADVENT):
            return TEMPORA_C_10A  # B. M. V. Saturdays in Advent

        if date_ >= date(date_.year, 12, 25) or date_ < date(date_.year, 2, 2):
            return TEMPORA_C_10B  # B. M. V. Saturdays between Nativity and Purification

        wednesday_in_holy_week, _ = calendar.find_day(TEMPORA_QUAD6_3)
        if date(date_.year, 2, 2) <= date_ < wednesday_in_holy_week:
            return TEMPORA_C_10C  # B. M. V. Saturdays between Feb 2 and Wednesday in Holy Week

        if match(tempora, PATTERN_EASTER):
            return TEMPORA_C_10PASC  # B. M. V. Saturdays in Easter period

        return TEMPORA_C_10T  # B. M. V. Saturdays between Trinity Sunday and Saturday before 1st Sunday of Advent

    if date_.weekday() == 5:
        ranks = set([i.rank for i in observances])
        if len(ranks) == 0 or (len(ranks) == 1 and ranks.pop() == 4):
            bmv_office = Observance(_calc_proper_for_given_period(), date_, lang)
            return [bmv_office], [i for i in observances if i.flexibility == 'sancti'][:1], []
Ejemplo n.º 4
0
 def _fill_in_sancti_days(self) -> None:
     """
     Days ascribed to a specific date
     """
     for date_, day in self.calendar.items():
         date_id = date_.strftime("%m-%d")
         days = [Observance(ii, date_, self.lang)
                 for ii in self.blocks.SANCTI
                 if ii.startswith("sancti:{}".format(date_id))]
         day.celebration.extend(days)
         day.celebration.sort(reverse=True)
Ejemplo n.º 5
0
def test_observance_compare():
    rank_1_1 = Observance(c.TEMPORA_PASC7_0, date(2015, 5, 24), language)
    rank_1_2 = Observance(c.SANCTI_11_01, date(2015, 11, 1), language)
    rank_2_1 = Observance(c.TEMPORA_EPI1_0, date(2015, 1, 11), language)
    rank_2_2 = Observance(c.SANCTI_01_13, date(2015, 1, 13), language)
    rank_3_1 = Observance(c.TEMPORA_QUAD5_5, date(2015, 3, 27), language)
    rank_3_2 = Observance(c.SANCTI_03_28, date(2015, 3, 28), language)
    rank_4_1 = Observance(c.TEMPORA_PENT01_1, date(2015, 6, 1), language)
    rank_4_2 = Observance(c.SANCTI_08_09, date(2015, 8, 9), language)

    assert rank_1_1 == rank_1_2
    assert rank_1_1 >= rank_1_2
    assert rank_1_1 <= rank_1_2
    assert rank_1_1 != rank_2_1
    assert rank_1_1 > rank_2_1
    assert rank_1_1 > rank_3_1
    assert rank_1_1 > rank_4_1

    assert rank_2_1 < rank_1_1
    assert rank_2_1 == rank_2_2
    assert rank_2_1 >= rank_2_2
    assert rank_2_1 <= rank_2_2
    assert rank_2_1 != rank_3_2
    assert rank_2_1 > rank_3_1
    assert rank_2_1 > rank_4_1

    assert rank_3_1 < rank_1_1
    assert rank_3_1 < rank_2_1
    assert rank_3_1 == rank_3_2
    assert rank_3_1 >= rank_3_2
    assert rank_3_1 <= rank_3_2
    assert rank_3_1 != rank_4_1
    assert rank_3_1 > rank_4_1

    assert rank_4_1 < rank_1_1
    assert rank_4_1 < rank_2_1
    assert rank_4_1 < rank_3_1
    assert rank_4_1 != rank_3_1
    assert rank_4_1 < rank_4_2
    assert rank_4_1 >= rank_4_2
    assert rank_4_1 <= rank_4_2
Ejemplo n.º 6
0
    def _insert_block(self, start_date: date, block: tuple, stop_date: date = None,
                      reverse: bool = False, overwrite: bool = True) -> None:
        """ Insert a block of related `Day` objects.

        :param start_date: date where first or last (if `reverse`=True) element of the block will be inserted
        :type start_date: date object
        :param block: list of day identifiers in established order
        :type block: list of strings
        :param stop_date: last date to insert block element
        :type stop_date: date object
        :param reverse: if False, identifiers will be put in days following `start_date` otherwise they'll
                        be put in leading up days
        :param overwrite: if True, overwrite existing identifiers, else quit on first non empty day

        Example:
        start_date=2008-01-13, reverse=False
        block = [
            'tempora:epi1-0:2',
            'tempora:epi1-1:4',
            'tempora:epi1-2:4',
        ]
        Result:
        {
        ...
          datetime.date(2008, 1, 13): [<tempora:epi1-0:2>],
          datetime.date(2008, 1, 14): [<tempora:epi1-1:4>],
          datetime.date(2008, 1, 15): [<tempora:epi1-2:4'],
        ...
        }

        Example:
        start_date=2008-11-22, reverse=True
        block = [
            'tempora:epi6-3:4',
            'tempora:epi6-4:4',
            'tempora:epi6-5:4'
        ]
        Result:
        {
        ...
          datetime.date(2008, 11, 20): [<tempora:epi6-3:4>],
          datetime.date(2008, 11, 21): [<tempora:epi6-4:4>],
          datetime.date(2008, 11, 22): [<tempora:epi6-5:4>],
        ...
        }
        """
        if reverse:
            block = reversed(block)
        for ii, observance_ids in enumerate(block):
            date_ = start_date + timedelta(days=ii if not reverse else -ii)
            # skip on empty day in a block
            if not observance_ids:
                continue
            # break on first non-empty day
            if self.calendar.get_day(date_).celebration and not overwrite:
                break
            # break on stop date
            if stop_date == date_ - timedelta(days=1):
                break
            self.calendar.get_day(date_).tempora = [Observance(obs_id, date_, self.lang) for obs_id in observance_ids]
            self.calendar.get_day(date_).celebration = copy(self.calendar.get_day(date_).tempora)
Ejemplo n.º 7
0
def test_observance_has_proper_rank(day_id, date_, expected_rank):
    assert Observance(day_id, date(*date_), language).rank == expected_rank
Ejemplo n.º 8
0
def test_observance_falls_in_proper_weekday(day_id, date_, expected_weekday):
    assert Observance(day_id, date(*date_),
                      language).weekday == expected_weekday