Ejemplo n.º 1
0
 def test_make_aware(self):
     self.assertEqual(
         timezone.make_aware(datetime.datetime(2011, 9, 1, 13, 20, 30),
                             EAT),
         datetime.datetime(2011, 9, 1, 13, 20, 30, tzinfo=EAT))
     with self.assertRaises(ValueError):
         timezone.make_aware(
             datetime.datetime(2011, 9, 1, 13, 20, 30, tzinfo=EAT), EAT)
Ejemplo n.º 2
0
 def test_make_aware2(self):
     self.assertEqual(
         timezone.make_aware(datetime.datetime(2011, 9, 1, 12, 20, 30),
                             CET),
         CET.localize(datetime.datetime(2011, 9, 1, 12, 20, 30)))
     with self.assertRaises(ValueError):
         timezone.make_aware(
             CET.localize(datetime.datetime(2011, 9, 1, 12, 20, 30)), CET)
Ejemplo n.º 3
0
    def test_make_aware_pytz_non_existent(self):
        # 2:30 never happened due to DST
        non_existent = datetime.datetime(2015, 3, 29, 2, 30)

        with self.assertRaises(pytz.NonExistentTimeError):
            timezone.make_aware(non_existent, timezone=CET)

        std = timezone.make_aware(non_existent, timezone=CET, is_dst=False)
        dst = timezone.make_aware(non_existent, timezone=CET, is_dst=True)
        self.assertEqual(std - dst, datetime.timedelta(hours=1))
        self.assertEqual(std.tzinfo.utcoffset(std),
                         datetime.timedelta(hours=1))
        self.assertEqual(dst.tzinfo.utcoffset(dst),
                         datetime.timedelta(hours=2))
Ejemplo n.º 4
0
    def test_make_aware_pytz_ambiguous(self):
        # 2:30 happens twice, once before DST ends and once after
        ambiguous = datetime.datetime(2015, 10, 25, 2, 30)

        with self.assertRaises(pytz.AmbiguousTimeError):
            timezone.make_aware(ambiguous, timezone=CET)

        std = timezone.make_aware(ambiguous, timezone=CET, is_dst=False)
        dst = timezone.make_aware(ambiguous, timezone=CET, is_dst=True)
        self.assertEqual(std - dst, datetime.timedelta(hours=1))
        self.assertEqual(std.tzinfo.utcoffset(std),
                         datetime.timedelta(hours=1))
        self.assertEqual(dst.tzinfo.utcoffset(dst),
                         datetime.timedelta(hours=2))
Ejemplo n.º 5
0
 def test_datetime_output_field(self):
     with register_lookup(models.PositiveIntegerField, DateTimeTransform):
         ut = MySQLUnixTimestamp.objects.create(timestamp=time.time())
         y2k = timezone.make_aware(datetime(2000, 1, 1))
         self.assertSequenceEqual(
             MySQLUnixTimestamp.objects.filter(
                 timestamp__as_datetime__gt=y2k), [ut])
Ejemplo n.º 6
0
 def convert_datetimefield_value(self, value, expression, connection):
     if value is not None:
         if not isinstance(value, datetime.datetime):
             value = parse_datetime(value)
         if settings.USE_TZ and not timezone.is_aware(value):
             value = timezone.make_aware(value, self.connection.timezone)
     return value
Ejemplo n.º 7
0
    def year_lookup_bounds_for_datetime_field(self, value):
        """
        Return a two-elements list with the lower and upper bound to be used
        with a BETWEEN operator to query a DateTimeField value using a year
        lookup.

        `value` is an int, containing the looked-up year.
        """
        first = datetime.datetime(value, 1, 1)
        second = datetime.datetime(value, 12, 31, 23, 59, 59, 999999)
        if settings.USE_TZ:
            tz = timezone.get_current_timezone()
            first = timezone.make_aware(first, tz)
            second = timezone.make_aware(second, tz)
        first = self.adapt_datetimefield_value(first)
        second = self.adapt_datetimefield_value(second)
        return [first, second]
Ejemplo n.º 8
0
 def test_datetime_with_tzinfo(self):
     tz = get_fixed_timezone(-510)
     ltz = get_default_timezone()
     dt = make_aware(datetime(2009, 5, 16, 5, 30, 30), ltz)
     self.assertEqual(datetime.fromtimestamp(int(format(dt, 'U')), tz), dt)
     self.assertEqual(datetime.fromtimestamp(int(format(dt, 'U')), ltz), dt)
     # astimezone() is safe here because the target timezone doesn't have DST
     self.assertEqual(datetime.fromtimestamp(int(format(dt, 'U'))), dt.astimezone(ltz).replace(tzinfo=None))
     self.assertEqual(datetime.fromtimestamp(int(format(dt, 'U')), tz).utctimetuple(), dt.utctimetuple())
     self.assertEqual(datetime.fromtimestamp(int(format(dt, 'U')), ltz).utctimetuple(), dt.utctimetuple())
Ejemplo n.º 9
0
 def test_make_aware_no_tz(self):
     self.assertEqual(
         timezone.make_aware(datetime.datetime(2011, 9, 1, 13, 20, 30)),
         datetime.datetime(2011,
                           9,
                           1,
                           13,
                           20,
                           30,
                           tzinfo=timezone.get_fixed_timezone(-300)))
Ejemplo n.º 10
0
    def test_different_timezones(self):
        """ When using two different timezones. """
        now = datetime.datetime.now()
        now_tz = timezone.make_aware(now, timezone.get_default_timezone())
        now_tz_i = timezone.localtime(now_tz, timezone.get_fixed_timezone(195))

        self.assertEqual(timesince(now), '0\xa0minutes')
        self.assertEqual(timesince(now_tz), '0\xa0minutes')
        self.assertEqual(timesince(now_tz_i), '0\xa0minutes')
        self.assertEqual(timesince(now_tz, now_tz_i), '0\xa0minutes')
        self.assertEqual(timeuntil(now), '0\xa0minutes')
        self.assertEqual(timeuntil(now_tz), '0\xa0minutes')
        self.assertEqual(timeuntil(now_tz_i), '0\xa0minutes')
        self.assertEqual(timeuntil(now_tz, now_tz_i), '0\xa0minutes')
Ejemplo n.º 11
0
 def convert_value(self, value, expression, connection):
     if isinstance(self.output_field, DateTimeField):
         if settings.USE_TZ:
             if value is None:
                 raise ValueError(
                     "Database returned an invalid datetime value. "
                     "Are time zone definitions for your database installed?"
                 )
             value = value.replace(tzinfo=None)
             value = timezone.make_aware(value, self.tzinfo)
     elif isinstance(value, datetime):
         if isinstance(self.output_field, DateField):
             value = value.date()
         elif isinstance(self.output_field, TimeField):
             value = value.time()
     return value
Ejemplo n.º 12
0
 def setUpTestData(cls):
     cls.timestamps = [
         datetime.datetime(year=2016, month=1, day=1),
         datetime.datetime(year=2016, month=1, day=2, hour=1),
         datetime.datetime(year=2016, month=1, day=2, hour=12),
         datetime.datetime(year=2016, month=1, day=3),
         datetime.datetime(year=2016, month=1, day=3, hour=1),
         datetime.datetime(year=2016, month=2, day=2),
     ]
     cls.aware_timestamps = [
         timezone.make_aware(timestamp)
         for timestamp in cls.timestamps
     ]
     cls.dates = [
         datetime.date(year=2016, month=1, day=1),
         datetime.date(year=2016, month=1, day=2),
         datetime.date(year=2016, month=1, day=3),
         datetime.date(year=2016, month=1, day=4),
         datetime.date(year=2016, month=2, day=2),
         datetime.date(year=2016, month=2, day=3),
     ]
     cls.obj = RangesModel.objects.create(
         dates=(cls.dates[0], cls.dates[3]),
         timestamps=(cls.timestamps[0], cls.timestamps[3]),
     )
     cls.aware_obj = RangesModel.objects.create(
         dates=(cls.dates[0], cls.dates[3]),
         timestamps=(cls.aware_timestamps[0], cls.aware_timestamps[3]),
     )
     # Objects that don't match any queries.
     for i in range(3, 4):
         RangesModel.objects.create(
             dates=(cls.dates[i], cls.dates[i + 1]),
             timestamps=(cls.timestamps[i], cls.timestamps[i + 1]),
         )
         RangesModel.objects.create(
             dates=(cls.dates[i], cls.dates[i + 1]),
             timestamps=(cls.aware_timestamps[i], cls.aware_timestamps[i + 1]),
         )
Ejemplo n.º 13
0
 def test_datetime_with_local_tzinfo(self):
     ltz = get_default_timezone()
     dt = make_aware(datetime(2009, 5, 16, 5, 30, 30), ltz)
     self.assertEqual(datetime.fromtimestamp(int(format(dt, 'U')), ltz), dt)
     self.assertEqual(datetime.fromtimestamp(int(format(dt, 'U'))), dt.replace(tzinfo=None))
Ejemplo n.º 14
0
 def convert_datetimefield_value(self, value, expression, connection):
     if value is not None:
         value = timezone.make_aware(value, self.connection.timezone)
     return value
Ejemplo n.º 15
0
    def get_feed(self, obj, request):
        """
        Return a feedgenerator.DefaultFeed object, fully populated, for
        this feed. Raise FeedDoesNotExist for invalid parameters.
        """
        current_site = get_current_site(request)

        link = self._get_dynamic_attr('link', obj)
        link = add_domain(current_site.domain, link, request.is_secure())

        feed = self.feed_type(
            title=self._get_dynamic_attr('title', obj),
            subtitle=self._get_dynamic_attr('subtitle', obj),
            link=link,
            description=self._get_dynamic_attr('description', obj),
            language=settings.LANGUAGE_CODE,
            feed_url=add_domain(
                current_site.domain,
                self._get_dynamic_attr('feed_url', obj) or request.path,
                request.is_secure(),
            ),
            author_name=self._get_dynamic_attr('author_name', obj),
            author_link=self._get_dynamic_attr('author_link', obj),
            author_email=self._get_dynamic_attr('author_email', obj),
            categories=self._get_dynamic_attr('categories', obj),
            feed_copyright=self._get_dynamic_attr('feed_copyright', obj),
            feed_guid=self._get_dynamic_attr('feed_guid', obj),
            ttl=self._get_dynamic_attr('ttl', obj),
            **self.feed_extra_kwargs(obj))

        title_tmp = None
        if self.title_template is not None:
            try:
                title_tmp = loader.get_template(self.title_template)
            except TemplateDoesNotExist:
                pass

        description_tmp = None
        if self.description_template is not None:
            try:
                description_tmp = loader.get_template(
                    self.description_template)
            except TemplateDoesNotExist:
                pass

        for item in self._get_dynamic_attr('items', obj):
            context = self.get_context_data(item=item,
                                            site=current_site,
                                            obj=obj,
                                            request=request)
            if title_tmp is not None:
                title = title_tmp.render(context, request)
            else:
                title = self._get_dynamic_attr('item_title', item)
            if description_tmp is not None:
                description = description_tmp.render(context, request)
            else:
                description = self._get_dynamic_attr('item_description', item)
            link = add_domain(
                current_site.domain,
                self._get_dynamic_attr('item_link', item),
                request.is_secure(),
            )
            enclosures = self._get_dynamic_attr('item_enclosures', item)
            author_name = self._get_dynamic_attr('item_author_name', item)
            if author_name is not None:
                author_email = self._get_dynamic_attr('item_author_email',
                                                      item)
                author_link = self._get_dynamic_attr('item_author_link', item)
            else:
                author_email = author_link = None

            tz = get_default_timezone()

            pubdate = self._get_dynamic_attr('item_pubdate', item)
            if pubdate and is_naive(pubdate):
                pubdate = make_aware(pubdate, tz)

            updateddate = self._get_dynamic_attr('item_updateddate', item)
            if updateddate and is_naive(updateddate):
                updateddate = make_aware(updateddate, tz)

            feed.add_item(
                title=title,
                link=link,
                description=description,
                unique_id=self._get_dynamic_attr('item_guid', item, link),
                unique_id_is_permalink=self._get_dynamic_attr(
                    'item_guid_is_permalink', item),
                enclosures=enclosures,
                pubdate=pubdate,
                updateddate=updateddate,
                author_name=author_name,
                author_email=author_email,
                author_link=author_link,
                categories=self._get_dynamic_attr('item_categories', item),
                item_copyright=self._get_dynamic_attr('item_copyright', item),
                **self.item_extra_kwargs(item))
        return feed
Ejemplo n.º 16
0
 def test_adapt_timefield_value(self):
     msg = 'Django does not support timezone-aware times.'
     with self.assertRaisesMessage(ValueError, msg):
         self.ops.adapt_timefield_value(timezone.make_aware(timezone.now()))