Ejemplo n.º 1
0
    def cast_to_desired_type(self, value):
        ret = super().cast_to_desired_type(value)

        if isinstance(ret, datetime):
            ret = make_tz_aware(ret)

        return ret
Ejemplo n.º 2
0
    def force_set(self, value: Union[datetime, str]):
        # - Post process to ensure tz-aware after setting the value
        # - Checking `None here because `value` could be `None` when allowed
        # - Type checking performed to make sure that the timezone replacement only applied on `datetime`
        if value is not None and isinstance(value, datetime):
            value = make_tz_aware(value)

        super().force_set(value)
Ejemplo n.º 3
0
    def data_days_collected(collection,
                            filter_,
                            *,
                            hr_range: Optional[int] = None,
                            start: Optional[datetime] = None,
                            end: Optional[datetime] = None):
        """
        Returns the count of days collected in data.

        Notice that this is different from ``days_collected`` in ``__init__()`` because
        this one connects to the database to calculate the actual days collected in the filtered dataset
        while the one in ``__init__()`` will not be checked and assume that it is true.

        ``hr_range`` will be ignored if both ``start`` and ``end`` is specified.
        """
        trange = TimeRange(range_hr=hr_range,
                           start=start,
                           end=end,
                           end_autofill_now=False)

        if trange.is_inf:
            oldest = collection.find_one(filter_,
                                         sort=[(OID_KEY, pymongo.ASCENDING)])

            if not oldest:
                return HourlyResult.DAYS_NONE

            now = now_utc_aware()

            if start:
                start = make_tz_aware(start)

            if start and start > now:
                return HourlyResult.DAYS_NONE

            if end:
                end = make_tz_aware(end)

            return max(
                ((end or now) -
                 ObjectId(oldest[OID_KEY]).generation_time).total_seconds() /
                86400, 0)
        else:
            return trange.hr_length / 24
Ejemplo n.º 4
0
 def test_dt_make_aware(self):
     self.assertFalse(is_tz_naive(make_tz_aware(datetime.now())))
     self.assertFalse(is_tz_naive(make_tz_aware(datetime.utcnow())))
     self.assertFalse(
         is_tz_naive(make_tz_aware(localtime().replace(tzinfo=None))))
     self.assertFalse(is_tz_naive(make_tz_aware(now_utc_aware())))
     self.assertFalse(is_tz_naive(make_tz_aware(datetime(2020, 5, 7))))
     self.assertFalse(is_tz_naive(make_tz_aware(datetime.min)))
     self.assertFalse(
         is_tz_naive(
             make_tz_aware(datetime.min.replace(tzinfo=timezone.utc))))
     self.assertFalse(is_tz_naive(make_tz_aware(datetime.max)))
     self.assertFalse(
         is_tz_naive(
             make_tz_aware(datetime.max.replace(tzinfo=timezone.utc))))
Ejemplo n.º 5
0
 def is_after(self, dt: datetime) -> bool:
     """Check if the target time of the timer is after the given ``dt``."""
     return self.target_time >= make_tz_aware(dt)
Ejemplo n.º 6
0
 def get_target_time_diff(self, dt: datetime):
     return abs(self.target_time - make_tz_aware(dt))