summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorniemeyer <>2007-11-12 21:47:59 +0000
committerniemeyer <>2007-11-12 21:47:59 +0000
commit717c31735a87a7cf49ab41729d0ddbc3512f5b6f (patch)
tree938e99b15675024ad35e9f1f7123764614cc29e8
parentb085ec6afe7d27ed7444601a1e00af0a3461690b (diff)
downloaddateutil-717c31735a87a7cf49ab41729d0ddbc3512f5b6f.tar.gz
Fixed bug in constructor of parser, and converted parser classes to
new-style classes. Original report and patch by Michael Elsdörfer.
-rw-r--r--dateutil/parser.py40
-rw-r--r--test.py18
2 files changed, 37 insertions, 21 deletions
diff --git a/dateutil/parser.py b/dateutil/parser.py
index afa52a8..6de6829 100644
--- a/dateutil/parser.py
+++ b/dateutil/parser.py
@@ -8,17 +8,24 @@ datetime module.
__author__ = "Gustavo Niemeyer <gustavo@niemeyer.net>"
__license__ = "PSF License"
-import os.path
+import datetime
import string
-import sys
import time
+import sys
+import os
+
+try:
+ from cStringIO import StringIO
+except ImportError:
+ from StringIO import StringIO
-import datetime
import relativedelta
import tz
+
__all__ = ["parse", "parserinfo"]
+
# Some pointers:
#
# http://www.cl.cam.ac.uk/~mgk25/iso-time.html
@@ -28,12 +35,9 @@ __all__ = ["parse", "parserinfo"]
# http://search.cpan.org/author/MUIR/Time-modules-2003.0211/lib/Time/ParseDate.pm
# http://stein.cshl.org/jade/distrib/docs/java.text.SimpleDateFormat.html
-try:
- from cStringIO import StringIO
-except ImportError:
- from StringIO import StringIO
-class _timelex:
+class _timelex(object):
+
def __init__(self, instream):
if isinstance(instream, basestring):
instream = StringIO(instream)
@@ -139,6 +143,7 @@ class _timelex:
return list(cls(s))
split = classmethod(split)
+
class _resultbase(object):
def __init__(self):
@@ -156,7 +161,8 @@ class _resultbase(object):
def __repr__(self):
return self._repr(self.__class__.__name__)
-class parserinfo:
+
+class parserinfo(object):
# m from a.m/p.m, t from ISO T separator
JUMP = [" ", ".", ",", ";", "-", "/", "'",
@@ -281,15 +287,10 @@ class parserinfo:
return True
-class parser:
+class parser(object):
- def __init__(self, info=parserinfo):
- if issubclass(info, parserinfo):
- self.info = parserinfo()
- elif isinstance(info, parserinfo):
- self.info = info
- else:
- raise TypeError, "Unsupported parserinfo type"
+ def __init__(self, info=None):
+ self.info = info or parserinfo()
def parse(self, timestr, default=None,
ignoretz=False, tzinfos=None,
@@ -693,7 +694,8 @@ def parse(timestr, parserinfo=None, **kwargs):
else:
return DEFAULTPARSER.parse(timestr, **kwargs)
-class _tzparser:
+
+class _tzparser(object):
class _result(_resultbase):
@@ -862,10 +864,12 @@ class _tzparser:
return res
+
DEFAULTTZPARSER = _tzparser()
def _parsetz(tzstr):
return DEFAULTTZPARSER.parse(tzstr)
+
def _parsems(value):
return int(value), int(value * 1000000) - int(value) * 1000000
diff --git a/test.py b/test.py
index 3150e82..9a3c53c 100644
--- a/test.py
+++ b/test.py
@@ -1,6 +1,9 @@
#!/usr/bin/python
-import unittest
+# -*- encoding: utf-8 -*-
from cStringIO import StringIO
+import unittest
+import calendar
+import time
import base64
import os
@@ -21,8 +24,6 @@ from dateutil import zoneinfo
from datetime import *
-import calendar
-import time
class RelativeDeltaTest(unittest.TestCase):
now = datetime(2003, 9, 17, 20, 54, 47, 282310)
@@ -2949,6 +2950,7 @@ class RRuleTest(unittest.TestCase):
class ParserTest(unittest.TestCase):
+
def setUp(self):
self.tzinfos = {"BRST": -10800}
self.brsttz = tzoffset("BRST", -10800)
@@ -3555,6 +3557,16 @@ class ParserTest(unittest.TestCase):
self.assertEquals(dt1.microsecond, 10000)
self.assertEquals(dt2.microsecond, 10000)
+ def testCustomParserInfo(self):
+ # Custom parser info wasn't working, as Michael Elsdörfer discovered.
+ from dateutil.parser import parserinfo, parser
+ class myparserinfo(parserinfo):
+ MONTHS = parserinfo.MONTHS[:]
+ MONTHS[0] = ("Foo", "Foo")
+ myparser = parser(myparserinfo())
+ dt = myparser.parse("01/Foo/2007")
+ self.assertEquals(dt, datetime(2007, 1, 1))
+
class EasterTest(unittest.TestCase):
easterlist = [