Пример #1
0
 def test_timezones(self):
     # Saving an updating with timezone-aware datetime Python objects.
     # Regression test for #10443.
     # The idea is that all these creations and saving should work without
     # crashing. It's not rocket science.
     dt1 = datetime.datetime(2008,
                             8,
                             31,
                             16,
                             20,
                             tzinfo=tzinfo.FixedOffset(600))
     dt2 = datetime.datetime(2008,
                             8,
                             31,
                             17,
                             20,
                             tzinfo=tzinfo.FixedOffset(600))
     obj = Article.objects.create(headline="A headline",
                                  pub_date=dt1,
                                  article_text="foo")
     obj.pub_date = dt2
     obj.save()
     self.assertEqual(
         Article.objects.filter(headline="A headline").update(pub_date=dt1),
         1)
Пример #2
0
    def test_naturalday_tz(self):
        today = datetime.date.today()
        tz_one = tzinfo.FixedOffset(datetime.timedelta(hours=-12))
        tz_two = tzinfo.FixedOffset(datetime.timedelta(hours=12))

        # Can be today or yesterday
        date_one = datetime.datetime(today.year, today.month, today.day, tzinfo=tz_one)
        naturalday_one = humanize.naturalday(date_one)
        # Can be today or tomorrow
        date_two = datetime.datetime(today.year, today.month, today.day, tzinfo=tz_two)
        naturalday_two = humanize.naturalday(date_two)

        # As 24h of difference they will never be the same
        self.assertNotEqual(naturalday_one, naturalday_two)
Пример #3
0
 def test_error_on_timezone(self):
     """Regression test for #8354: the MySQL and Oracle backends should raise
     an error if given a timezone-aware datetime object."""
     dt = datetime.datetime(2008,
                            8,
                            31,
                            16,
                            20,
                            tzinfo=tzinfo.FixedOffset(0))
     d = Donut(name='Bear claw', consumed_at=dt)
     self.assertRaises(ValueError, d.save)
Пример #4
0
 def test_tz_awareness_mysql(self):
     # Regression test for #8354: the MySQL backend should raise an error if given
     # a timezone-aware datetime object.
     if settings.DATABASES[DEFAULT_DB_ALIAS][
             'ENGINE'] == 'django.db.backends.mysql':
         dt = datetime.datetime(2008,
                                8,
                                31,
                                16,
                                20,
                                tzinfo=tzinfo.FixedOffset(0))
         d = Donut(name='Bear claw', consumed_at=dt)
         self.assertRaises(ValueError, d.save)
 def test_rfc3339_date_with_timezone(self):
     """
     Test rfc3339_date() correctly formats datetime objects with tzinfo.
     """
     self.assertEqual(
         feedgenerator.rfc3339_date(
             datetime.datetime(2008,
                               11,
                               14,
                               13,
                               37,
                               0,
                               tzinfo=tzinfo.FixedOffset(
                                   datetime.timedelta(minutes=120)))),
         "2008-11-14T13:37:00+02:00")
 def test_rfc2822_date_with_timezone(self):
     """
     Test rfc2822_date() correctly formats datetime objects with tzinfo.
     """
     self.assertEqual(
         feedgenerator.rfc2822_date(
             datetime.datetime(2008,
                               11,
                               14,
                               13,
                               37,
                               0,
                               tzinfo=tzinfo.FixedOffset(
                                   datetime.timedelta(minutes=60)))),
         "Fri, 14 Nov 2008 13:37:00 +0100")
Пример #7
0
def _handle_video(entry):
    vs = VideoSource.objects.get(name="Google")
    url = smart_unicode(entry.link)
    title = smart_unicode(entry.title)
    timestamp = datetime.datetime(tzinfo=tzinfo.FixedOffset(0),
                                  *entry.updated_parsed[:6])

    log.debug("Adding viewed video: %r" % title)
    vid, created = Video.objects.get_or_create(
        source=vs,
        url=url,
        defaults={'title': title},
    )
    return Item.objects.create_or_update(
        instance=vid,
        timestamp=timestamp,
        source=__name__,
    )
Пример #8
0
def _handle_query(entry):
    engine = SearchEngine.objects.get(name="Google")
    guid = smart_unicode(
        urlparse.urlsplit(entry.guid)[2].replace("/searchhistory/", ""))
    query = smart_unicode(entry.title)
    timestamp = datetime.datetime(tzinfo=tzinfo.FixedOffset(0),
                                  *entry.updated_parsed[:6])

    log.debug("Handling Google query for %r", query)
    try:
        item = Item.objects.get(content_type=CT(WebSearch),
                                source=__name__,
                                source_id=guid)
    except Item.DoesNotExist:
        item = Item.objects.create_or_update(
            instance=WebSearch(engine=engine, query=query),
            timestamp=timestamp,
            source=__name__,
            source_id=guid,
        )
Пример #9
0
 def item_pubdate(self, item):
     # Provide a weird offset so that the test can know it's getting this
     # specific offset and not accidentally getting on from
     # settings.TIME_ZONE.
     return item.date.replace(tzinfo=tzinfo.FixedOffset(42))
Пример #10
0
    def get_feed(self, obj, request):
        """
        Returns a feedgenerator.DefaultFeed object, fully populated, for
        this feed. Raises FeedDoesNotExist for invalid parameters.
        """
        if Site._meta.installed:
            current_site = Site.objects.get_current()
        else:
            current_site = RequestSite(request)

        link = self.__get_dynamic_attr('link', obj)
        link = add_domain(current_site.domain, link)

        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.decode(),
            feed_url = add_domain(current_site.domain,
                    self.__get_dynamic_attr('feed_url', obj) or request.path),
            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):
            if title_tmp is not None:
                title = title_tmp.render(RequestContext(request, {'obj': item, 'site': current_site}))
            else:
                title = self.__get_dynamic_attr('item_title', item)
            if description_tmp is not None:
                description = description_tmp.render(RequestContext(request, {'obj': item, 'site': current_site}))
            else:
                description = self.__get_dynamic_attr('item_description', item)
            link = add_domain(current_site.domain, self.__get_dynamic_attr('item_link', item))
            enc = None
            enc_url = self.__get_dynamic_attr('item_enclosure_url', item)
            if enc_url:
                enc = feedgenerator.Enclosure(
                    url = smart_unicode(enc_url),
                    length = smart_unicode(self.__get_dynamic_attr('item_enclosure_length', item)),
                    mime_type = smart_unicode(self.__get_dynamic_attr('item_enclosure_mime_type', 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

            pubdate = self.__get_dynamic_attr('item_pubdate', item)
            if pubdate and not pubdate.tzinfo:
                now = datetime.datetime.now()
                utcnow = datetime.datetime.utcnow()

                # Must always subtract smaller time from larger time here.
                if utcnow > now:
                    sign = -1
                    tzDifference = (utcnow - now)
                else:
                    sign = 1
                    tzDifference = (now - utcnow)

                # Round the timezone offset to the nearest half hour.
                tzOffsetMinutes = sign * ((tzDifference.seconds / 60 + 15) / 30) * 30
                tzOffset = datetime.timedelta(minutes=tzOffsetMinutes)
                pubdate = pubdate.replace(tzinfo=tzinfo.FixedOffset(tzOffset))

            feed.add_item(
                title = title,
                link = link,
                description = description,
                unique_id = self.__get_dynamic_attr('item_guid', item, link),
                enclosure = enc,
                pubdate = pubdate,
                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