def _check_border_range(self,
                            border_range_datetime: RangeDateTime) -> bool:
        if not self.covers_a_whole_day():
            starting_date = border_range_datetime.starting_datetime.date()

            previous_date = starting_date - timedelta(days=1)
            current_date = starting_date

            range_datetime = self._build_example_from_date(previous_date)
            if range_datetime:
                if RangeDateTimeOperator.is_in(border_range_datetime,
                                               range_datetime):
                    return True

            range_datetime = self._build_example_from_date(current_date)
            if range_datetime:
                if RangeDateTimeOperator.is_in(border_range_datetime,
                                               range_datetime):
                    return True
        else:
            range_datetime = self.get_as_a_range_datetime()
            if RangeDateTimeOperator.is_in(border_range_datetime,
                                           range_datetime):
                return True
        return False
예제 #2
0
    def test_are_intersection3(self):
        r1 = RangeDateTime(datetime(2019, 5, 1, 10, 0, 0),
                           datetime(2019, 5, 4, 10, 0, 0))

        r2 = RangeDateTime(datetime(2019, 5, 4, 10, 0, 1),
                           datetime(2019, 5, 5, 10, 0, 0))

        assert not RangeDateTimeOperator.are_intersection(r1, r2)
 def check_next_collision(self, main_day, next_day):
     main_range = self.day_to_range_datetime(main_day, CURRENT)
     next_range = self.day_to_range_datetime(next_day, NEXT)
     intersection = RangeDateTimeOperator.get_intersection(
         main_range, next_range)
     if intersection:
         return intersection
     else:
         return None
 def check_prev_collision(self, main_day, prev_day):
     main_range = self.day_to_range_datetime(main_day, CURRENT)
     prev_range = self.day_to_range_datetime(prev_day, PREVIOUS)
     intersection = RangeDateTimeOperator.get_intersection(
         main_range, prev_range)
     if intersection:
         return intersection
     else:
         return None
 def check_current_collision(self, main_day: Any,
                             current_day: Any) -> Optional[RangeDateTime]:
     main_range = self.day_to_range_datetime(main_day, CURRENT)
     current_range = self.day_to_range_datetime(current_day, CURRENT)
     intersection = RangeDateTimeOperator.get_intersection(
         main_range, current_range)
     if intersection:
         return intersection
     else:
         return None
예제 #6
0
    def test_split_borders_4(self):

        range_datetime = RangeDateTime(datetime(2019, 5, 1, 10, 0, 0),
                                       datetime(2019, 5, 1, 10, 0, 0))

        response = RangeDateTimeOperator.split_borders(range_datetime)

        expected = [
            RangeDateTime(datetime(2019, 5, 1, 10, 0, 0),
                          datetime(2019, 5, 1, 10, 0, 0)),
            None,
            None,
        ]
        assert response == expected
    def check_current_colision(
            self, current_day_name: str,
            main_range: RangeDateTime) -> Optional[RangeDateTime]:
        current_range = self.weekly_facade.range_datetime_obj_from_day_number(
            current_day_name, self.base_current_date)

        if not current_range:
            return None

        intersection = RangeDateTimeOperator.get_intersection(
            current_range, main_range)
        if intersection:
            return intersection
        else:
            return None
 def check_prev_collision(
         self, manually_range: RangeDateTime,
         weekly_day: Any) -> Tuple[Optional[int], Optional[RangeDateTime]]:
     prev_weekly_day = self.weekly_facade.get_prev_day(weekly_day)
     weekly_prev_range = self.weekly_facade.range_datetime_from_weekly_day(
         prev_weekly_day, self.base_prev_date)
     if weekly_prev_range:
         intersection = RangeDateTimeOperator.get_intersection(
             weekly_prev_range, manually_range)
         if intersection:
             return (prev_weekly_day.day_number, intersection)
         else:
             return (None, None)
     else:
         return (None, None)
예제 #9
0
    def test_split_borders_1(self):

        range_datetime = RangeDateTime(datetime(2019, 5, 1, 10, 0, 0),
                                       datetime(2019, 5, 4, 10, 0, 0))

        response = RangeDateTimeOperator.split_borders(range_datetime)

        expected = [
            RangeDateTime(datetime(2019, 5, 1, 10, 0, 0),
                          datetime(2019, 5, 1, 23, 59, 0)),
            Range(datetime(2019, 5, 2).date(),
                  datetime(2019, 5, 3).date()),
            RangeDateTime(datetime(2019, 5, 4, 0, 0, 0),
                          datetime(2019, 5, 4, 10, 0, 0)),
        ]
        assert response == expected
    def check_current_collision(self, manually_day: Any,
                                cycle_day: Any) -> Optional[RangeDateTime]:
        current_range = self.cycle_facade.range_datetime_obj_from_day_number(
            cycle_day, self.base_current_date)

        manually_range = self.manually_facade.range_datetime_obj_from_day(
            manually_day, self.base_current_date)

        if current_range and manually_range:
            intersection = RangeDateTimeOperator.get_intersection(
                current_range, manually_range)
            if intersection:
                return intersection
            else:
                return None
        else:
            return None
    def check_current_collision(
            self, manually_range: RangeDateTime,
            weekly_day: Any) -> Tuple[Optional[int], Optional[RangeDateTime]]:
        weekly_current_range = self.weekly_facade\
            .range_datetime_from_weekly_day(
                weekly_day,
                self.base_current_date
            )

        if weekly_current_range:
            intersection = RangeDateTimeOperator.get_intersection(
                weekly_current_range, manually_range)
            if intersection:
                return weekly_day.day_number, intersection
            else:
                return None, None
        else:
            return None, None
    def is_in(self, range_datetime):
        split_data = RangeDateTimeOperator.split_borders(range_datetime)

        left_range_datetime = split_data[0]
        body = split_data[1]
        right_range_datetime = split_data[2]

        left_response = True
        if left_range_datetime:
            left_response = self._check_border_range(left_range_datetime)

        right_response = True
        if right_range_datetime:
            right_response = self._check_border_range(right_range_datetime)

        body_response = True
        if body:
            body_response = self._check_body(body)

        return left_response and right_response and body_response
예제 #13
0
    def test_are_intersection1(self):
        r1 = RangeDateTime(datetime(2019, 5, 1), datetime(2019, 5, 4))

        r2 = RangeDateTime(datetime(2019, 5, 3), datetime(2019, 5, 5))

        assert RangeDateTimeOperator.are_intersection(r1, r2)