From f21920abb2739e37b97669b2b5c303b80f611858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomi=20Pievil=C3=A4inen?= Date: Sat, 18 Feb 2012 23:59:15 +0200 Subject: Check for longs and ints in Python2.x --- dateutil/parser.py | 4 ++-- dateutil/relativedelta.py | 4 +++- dateutil/rrule.py | 26 +++++++++++++------------- test.py | 35 +++++++++++++++++++++++++++++++++-- 4 files changed, 51 insertions(+), 18 deletions(-) diff --git a/dateutil/parser.py b/dateutil/parser.py index aa3eae0..369bfc2 100644 --- a/dateutil/parser.py +++ b/dateutil/parser.py @@ -22,7 +22,7 @@ try: except ImportError: from io import StringIO -from six import text_type, binary_type +from six import text_type, binary_type, integer_types from . import relativedelta from . import tz @@ -328,7 +328,7 @@ class parser(object): tzinfo = tzdata elif isinstance(tzdata, str): tzinfo = tz.tzstr(tzdata) - elif isinstance(tzdata, int): + elif isinstance(tzdata, integer_types): tzinfo = tz.tzoffset(res.tzname, tzdata) else: raise ValueError("offset must be tzinfo subclass, " \ diff --git a/dateutil/relativedelta.py b/dateutil/relativedelta.py index d0b599a..a1b8929 100644 --- a/dateutil/relativedelta.py +++ b/dateutil/relativedelta.py @@ -10,6 +10,8 @@ __license__ = "Simplified BSD" import datetime import calendar +from six import integer_types + __all__ = ["relativedelta", "MO", "TU", "WE", "TH", "FR", "SA", "SU"] class weekday(object): @@ -171,7 +173,7 @@ Here is the behavior of operations with relativedelta: self.second = second self.microsecond = microsecond - if isinstance(weekday, int): + if isinstance(weekday, integer_types): self.weekday = weekdays[weekday] else: self.weekday = weekday diff --git a/dateutil/rrule.py b/dateutil/rrule.py index 48013f8..b65afc0 100644 --- a/dateutil/rrule.py +++ b/dateutil/rrule.py @@ -16,7 +16,7 @@ except ImportError: import thread as _thread import sys -from six import advance_iterator +from six import advance_iterator, integer_types __all__ = ["rrule", "rruleset", "rrulestr", "YEARLY", "MONTHLY", "WEEKLY", "DAILY", @@ -255,13 +255,13 @@ class rrule(rrulebase): self._until = until if wkst is None: self._wkst = calendar.firstweekday() - elif isinstance(wkst, int): + elif isinstance(wkst, integer_types): self._wkst = wkst else: self._wkst = wkst.weekday if bysetpos is None: self._bysetpos = None - elif isinstance(bysetpos, int): + elif isinstance(bysetpos, integer_types): if bysetpos == 0 or not (-366 <= bysetpos <= 366): raise ValueError("bysetpos must be between 1 and 366, " "or between -366 and -1") @@ -285,14 +285,14 @@ class rrule(rrulebase): # bymonth if not bymonth: self._bymonth = None - elif isinstance(bymonth, int): + elif isinstance(bymonth, integer_types): self._bymonth = (bymonth,) else: self._bymonth = tuple(bymonth) # byyearday if not byyearday: self._byyearday = None - elif isinstance(byyearday, int): + elif isinstance(byyearday, integer_types): self._byyearday = (byyearday,) else: self._byyearday = tuple(byyearday) @@ -300,7 +300,7 @@ class rrule(rrulebase): if byeaster is not None: if not easter: from dateutil import easter - if isinstance(byeaster, int): + if isinstance(byeaster, integer_types): self._byeaster = (byeaster,) else: self._byeaster = tuple(byeaster) @@ -310,7 +310,7 @@ class rrule(rrulebase): if not bymonthday: self._bymonthday = () self._bynmonthday = () - elif isinstance(bymonthday, int): + elif isinstance(bymonthday, integer_types): if bymonthday < 0: self._bynmonthday = (bymonthday,) self._bymonthday = () @@ -323,7 +323,7 @@ class rrule(rrulebase): # byweekno if byweekno is None: self._byweekno = None - elif isinstance(byweekno, int): + elif isinstance(byweekno, integer_types): self._byweekno = (byweekno,) else: self._byweekno = tuple(byweekno) @@ -331,7 +331,7 @@ class rrule(rrulebase): if byweekday is None: self._byweekday = None self._bynweekday = None - elif isinstance(byweekday, int): + elif isinstance(byweekday, integer_types): self._byweekday = (byweekday,) self._bynweekday = None elif hasattr(byweekday, "n"): @@ -345,7 +345,7 @@ class rrule(rrulebase): self._byweekday = [] self._bynweekday = [] for wday in byweekday: - if isinstance(wday, int): + if isinstance(wday, integer_types): self._byweekday.append(wday) elif not wday.n or freq > MONTHLY: self._byweekday.append(wday.weekday) @@ -363,7 +363,7 @@ class rrule(rrulebase): self._byhour = (dtstart.hour,) else: self._byhour = None - elif isinstance(byhour, int): + elif isinstance(byhour, integer_types): self._byhour = (byhour,) else: self._byhour = tuple(byhour) @@ -373,7 +373,7 @@ class rrule(rrulebase): self._byminute = (dtstart.minute,) else: self._byminute = None - elif isinstance(byminute, int): + elif isinstance(byminute, integer_types): self._byminute = (byminute,) else: self._byminute = tuple(byminute) @@ -383,7 +383,7 @@ class rrule(rrulebase): self._bysecond = (dtstart.second,) else: self._bysecond = None - elif isinstance(bysecond, int): + elif isinstance(bysecond, integer_types): self._bysecond = (bysecond,) else: self._bysecond = tuple(bysecond) diff --git a/test.py b/test.py index 3fa865d..b705343 100755 --- a/test.py +++ b/test.py @@ -2,7 +2,7 @@ # -*- encoding: utf-8 -*- from __future__ import unicode_literals -from six import StringIO, BytesIO +from six import StringIO, BytesIO, PY3 import unittest import calendar import time @@ -98,7 +98,7 @@ class RelativeDeltaTest(unittest.TestCase): def testNextWenesdayNotToday(self): self.assertEqual(self.today+relativedelta(days=+1, weekday=WE), date(2003, 9, 24)) - + def test15thISOYearWeek(self): self.assertEqual(date(2003, 1, 1) + relativedelta(day=4, weeks=+14, weekday=MO(-1)), @@ -157,6 +157,10 @@ class RelativeDeltaTest(unittest.TestCase): c = a+b self.assertEqual(c.microsecond, b.microsecond) + def test28Days(self): + self.assertEqual(datetime(2000, 1, 1) + relativedelta(days=1) * 28, + datetime(2000, 1, 29)) + class RRuleTest(unittest.TestCase): def testYearly(self): @@ -2399,6 +2403,27 @@ class RRuleTest(unittest.TestCase): datetime(2010, 3, 22, 13, 1), datetime(2010, 3, 22, 14, 1)]) + def testLongIntegers(self): + if not PY3: # There is no longs in python3 + self.assertEqual(list(rrule(MINUTELY, + count=long(2), + interval=long(2), + bymonth=long(2), + byweekday=long(3), + byhour=long(6), + byminute=long(6), + bysecond=long(6), + dtstart=parse("19970902T090000"))), + [datetime(1998, 2, 5, 6, 6, 6), + datetime(1998, 2, 12, 6, 6, 6)]) + self.assertEqual(list(rrule(YEARLY, + count=long(2), + bymonthday=long(5), + byweekno=long(2), + dtstart=parse("19970902T090000"))), + [datetime(1998, 1, 5, 9, 0), + datetime(2004, 1, 5, 9, 0)]) + def testUntilNotMatching(self): self.assertEqual(list(rrule(DAILY, count=3, @@ -3002,6 +3027,12 @@ class ParserTest(unittest.TestCase): datetime(2003, 9, 25, 10, 36, 28, tzinfo=self.brsttz)) + def testDateCommandFormatWithLong(self): + if not PY3: + self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003", + tzinfos={"BRST": long(-10800)}), + datetime(2003, 9, 25, 10, 36, 28, + tzinfo=self.brsttz)) def testDateCommandFormatIgnoreTz(self): self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003", ignoretz=True), -- cgit v1.2.1