gbp.git: Reimplement rfc822 date parsing without dateutil
authorEd Bartosh <eduard.bartosh@intel.com>
Wed, 30 May 2012 06:02:55 +0000 (09:02 +0300)
committerMarkus Lehtonen <markus.lehtonen@linux.intel.com>
Thu, 5 Jun 2014 11:20:03 +0000 (14:20 +0300)
In order to get rid of dependency to dateutil.

Signed-off-by: Ed Bartosh <eduard.bartosh@intel.com>
Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
debian/control
gbp/git/__init__.py

index a5dad37..f8e44a3 100644 (file)
@@ -12,7 +12,6 @@ Build-Depends:
  pychecker,
  python (>> 2.6.6-3~),
  python-coverage,
- python-dateutil,
  python-epydoc,
  python-nose,
  python-nosexcover,
@@ -39,7 +38,6 @@ Depends: ${python:Depends},
  devscripts (>= 2.13.5~),
  git (>= 1:1.7.9.1-1~),
  man-db,
- python-dateutil,
  python-pkg-resources,
 Recommends: pristine-tar (>= 0.5), cowbuilder
 Suggests: python-notify, unzip
index 55dc3a8..cbd84cb 100644 (file)
@@ -17,7 +17,8 @@
 """Accessing Git from python"""
 
 import calendar
-import dateutil.parser
+import datetime
+import rfc822
 
 from gbp.git.modifier import GitModifier
 from gbp.git.commit import GitCommit
@@ -28,6 +29,23 @@ from gbp.git.args import GitArgs
 from gbp.git.vfs import GitVfs
 
 
+class FixedOffset(datetime.tzinfo):
+    """Fixed offset in seconds east from UTC."""
+
+    ZERO = datetime.timedelta(0)
+
+    def __init__(self, offset):
+        datetime.tzinfo.__init__(self)
+        self._offset = datetime.timedelta(seconds=offset)
+
+    def utcoffset(self, dtime):
+        return self._offset + self.dst(dtime)
+
+    def dst(self, dtime):
+        assert dtime.tzinfo is self
+        return self.ZERO
+
+
 def rfc822_date_to_git(rfc822_date):
     """Parse a date in RFC822 format, and convert to a 'seconds tz' C{str}ing.
 
@@ -38,9 +56,10 @@ def rfc822_date_to_git(rfc822_date):
     >>> rfc822_date_to_git('Sat, 5 Apr 2008 17:01:32 +0200')
     '1207407692 +0200'
     """
-    d = dateutil.parser.parse(rfc822_date)
-    seconds = calendar.timegm(d.utctimetuple())
-    tz = d.strftime("%z")
-    return '%d %s' % (seconds, tz)
+    parsed = rfc822.parsedate_tz(rfc822_date)
+    date = datetime.datetime(*parsed[:6], tzinfo=FixedOffset(parsed[-1]))
+    seconds = calendar.timegm(date.utctimetuple())
+    tzone = date.strftime("%z")
+    return '%d %s' % (seconds, tzone)
 
 # vim:et:ts=4:sw=4:et:sts=4:ai:set list listchars=tab\:»·,trail\:·: