[Checkins] SVN: zope.datetime/trunk/ Python 3 support added

Andrey Lebedev cvs-admin at zope.org
Thu Feb 14 13:28:54 UTC 2013


Log message for revision 129403:
  Python 3 support added
  
  

Changed:
  A   zope.datetime/trunk/MANIFEST.in
  U   zope.datetime/trunk/setup.py
  U   zope.datetime/trunk/src/zope/datetime/__init__.py
  U   zope.datetime/trunk/src/zope/datetime/timezones.py
  A   zope.datetime/trunk/tox.ini

-=-
Added: zope.datetime/trunk/MANIFEST.in
===================================================================
--- zope.datetime/trunk/MANIFEST.in	                        (rev 0)
+++ zope.datetime/trunk/MANIFEST.in	2013-02-14 13:28:54 UTC (rev 129403)
@@ -0,0 +1 @@
+include *.txt

Modified: zope.datetime/trunk/setup.py
===================================================================
--- zope.datetime/trunk/setup.py	2013-02-14 12:14:26 UTC (rev 129402)
+++ zope.datetime/trunk/setup.py	2013-02-14 13:28:54 UTC (rev 129403)
@@ -45,6 +45,9 @@
         'Programming Language :: Python :: 2',
         'Programming Language :: Python :: 2.6',
         'Programming Language :: Python :: 2.7',
+        'Programming Language :: Python :: 3',
+        'Programming Language :: Python :: 3.2',
+        'Programming Language :: Python :: 3.3',
         'Natural Language :: English',
         'Operating System :: OS Independent',
         'Topic :: Internet :: WWW/HTTP',
@@ -53,6 +56,7 @@
 
       packages=find_packages('src'),
       package_dir = {'': 'src'},
+      test_suite = 'zope.datetime',
 
       namespace_packages=['zope',],
       install_requires=['setuptools'],

Modified: zope.datetime/trunk/src/zope/datetime/__init__.py
===================================================================
--- zope.datetime/trunk/src/zope/datetime/__init__.py	2013-02-14 12:14:26 UTC (rev 129402)
+++ zope.datetime/trunk/src/zope/datetime/__init__.py	2013-02-14 13:28:54 UTC (rev 129403)
@@ -20,7 +20,10 @@
 import time as _time # there is a method definition that makes just "time"
                      # problematic while executing a class definition
 
-from types import StringTypes
+try:
+    from types import StringTypes
+except ImportError:
+    StringTypes = (str, )  # python3 and up
 
 try:
     from time import tzname
@@ -87,7 +90,7 @@
 to_year =int(i*365+i/4-i/100+i/400-693960.0)
 to_month=tm[yr%4==0 and (yr%100!=0 or yr%400==0)][mo]
 EPOCH  =(to_year+to_month+dy+(hr/24.0+mn/1440.0+sc/86400.0))*86400
-jd1901 =2415385L
+jd1901 =2415385
 
 
 numericTimeZoneMatch=re.compile(r'[+-][0-9][0-9][0-9][0-9]').match #TS
@@ -95,7 +98,8 @@
 class _timezone:
     def __init__(self,data):
         self.name,self.timect,self.typect, \
-        self.ttrans,self.tindex,self.tinfo,self.az=data
+        ttrans,self.tindex,self.tinfo,self.az=data
+        self.ttrans = [int(tt) for tt in ttrans]
 
     def default_index(self):
         if self.timect == 0: return 0
@@ -337,36 +341,36 @@
     # Calculates the timezone-dependent second (integer part only)
     # from the timezone-independent second.
     fset = _tzoffset(tz, t)
-    return fset + long(math.floor(t)) + long(EPOCH) - 86400L
+    return fset + int(math.floor(t)) + EPOCH - 86400
 
 def _calcDependentSecond2(yr,mo,dy,hr,mn,sc):
     # Calculates the timezone-dependent second (integer part only)
     # from the date given.
     ss = int(hr) * 3600 + int(mn) * 60 + int(sc)
-    x = long(_julianday(yr,mo,dy)-jd1901) * 86400 + ss
+    x = int(_julianday(yr,mo,dy)-jd1901) * 86400 + ss
     return x
 
 def _calcIndependentSecondEtc(tz, x, ms):
     # Derive the timezone-independent second from the timezone
     # dependent second.
     fsetAtEpoch = _tzoffset(tz, 0.0)
-    nearTime = x - fsetAtEpoch - long(EPOCH) + 86400L + ms
+    nearTime = x - fsetAtEpoch - EPOCH + 86400 + ms
     # nearTime is now within an hour of being correct.
     # Recalculate t according to DST.
-    fset = long(_tzoffset(tz, nearTime))
+    fset = _tzoffset(tz, nearTime)
     x_adjusted = x - fset + ms
     d = x_adjusted / 86400.0
-    t = x_adjusted - long(EPOCH) + 86400L
+    t = x_adjusted - EPOCH + 86400
     millis = (x + 86400 - fset) * 1000 + \
-             long(ms * 1000.0) - long(EPOCH * 1000.0)
+             ms * 1000 - EPOCH * 1000
     s = d - math.floor(d)
     return s,d,t,millis
 
 def _calcHMS(x, ms):
     # hours, minutes, seconds from integer and float.
-    hr = x / 3600
+    hr = x // 3600
     x = x - hr * 3600
-    mn = x / 60
+    mn = x // 60
     sc = x - mn * 60 + ms
     return hr,mn,sc
 
@@ -381,35 +385,33 @@
     sc = x - mn * 60 + ms
     return yr,mo,dy,hr,mn,sc
 
-def _julianday(yr,mo,dy):
-    y,m,d=long(yr),long(mo),long(dy)
-    if m > 12L:
-        y=y+m/12L
-        m=m%12L
-    elif m < 1L:
+def _julianday(y,m,d):
+    if m > 12:
+        y=y+m//12
+        m=m%12
+    elif m < 1:
         m=-m
-        y=y-m/12L-1L
-        m=12L-m%12L
-    if y > 0L: yr_correct=0L
-    else:      yr_correct=3L
-    if m < 3L: y, m=y-1L,m+12L
-    if y*10000L+m*100L+d > 15821014L: b=2L-y/100L+y/400L
-    else: b=0L
-    return (1461L*y-yr_correct)/4L+306001L*(m+1L)/10000L+d+1720994L+b
+        y=y-m//12-1
+        m=12-m%12
+    if y > 0: yr_correct=0
+    else:      yr_correct=3
+    if m < 3: y, m=y-1,m+12
+    if y*10000+m*100+d > 15821014: b=2-y//100+y//400
+    else: b=0
+    return (1461*y-yr_correct)//4+306001*(m+1)//10000+d+1720994+b
 
 def _calendarday(j):
-    j=long(j)
-    if(j < 2299160L):
-        b=j+1525L
+    if(j < 2299160):
+        b=j+1525
     else:
-        a=(4L*j-7468861L)/146097L
-        b=j+1526L+a-a/4L
-    c=(20L*b-2442L)/7305L
-    d=1461L*c/4L
-    e=10000L*(b-d)/306001L
-    dy=int(b-d-306001L*e/10000L)
-    mo=(e < 14L) and int(e-1L) or int(e-13L)
-    yr=(mo > 2) and (c-4716L) or (c-4715L)
+        a=(4*j-7468861)/146097
+        b=j+1526+a-a/4
+    c=(20*b-2442)/7305
+    d=1461*c/4
+    e=10000*(b-d)/306001
+    dy=int(b-d-306001*e/10000)
+    mo=(e < 14) and int(e-1) or int(e-13)
+    yr=(mo > 2) and (c-4716) or (c-4715)
     return int(yr),int(mo),int(dy)
 
 def _tzoffset(tz, t):
@@ -619,7 +621,7 @@
         if not self._multipleZones:
             return self._localzone0
         fsetAtEpoch = _tzoffset(self._localzone0, 0.0)
-        nearTime = x - fsetAtEpoch - long(EPOCH) + 86400L + ms
+        nearTime = x - fsetAtEpoch - EPOCH + 86400 + ms
         # nearTime is within an hour of being correct.
         try:
             ltm = safelocaltime(nearTime)
@@ -631,7 +633,7 @@
             yr,mo,dy,hr,mn,sc = _calcYMDHMS(x, 0)
             yr = ((yr - 1970) % 28) + 1970
             x = _calcDependentSecond2(yr,mo,dy,hr,mn,sc)
-            nearTime = x - fsetAtEpoch - long(EPOCH) + 86400L + ms
+            nearTime = x - fsetAtEpoch - EPOCH + 86400 + ms
             ltm = safelocaltime(nearTime)
         tz = self.localZone(ltm)
         return tz
@@ -947,6 +949,6 @@
         _tzinfo = tzinfo(offset)
     else:
         _tzinfo = None
-    return _datetime(y, mo, d, h, m, int(s), int(micro), _tzinfo)
+    return _datetime(y, mo, d, int(h), int(m), int(s), int(micro), _tzinfo)
 
 _iso_tz_re = re.compile("[-+]\d\d:\d\d$")

Modified: zope.datetime/trunk/src/zope/datetime/timezones.py
===================================================================
--- zope.datetime/trunk/src/zope/datetime/timezones.py	2013-02-14 12:14:26 UTC (rev 129402)
+++ zope.datetime/trunk/src/zope/datetime/timezones.py	2013-02-14 13:28:54 UTC (rev 129403)
@@ -13,6 +13,7 @@
 ##############################################################################
 """ Historical timezone data, ported from Zope2's DateTime.DateTimeZone.
 """
+from __future__ import print_function
 
 historical_zone_info = {
 'Brazil/Acre': ('Brazil/Acre', 101, 2,
@@ -1178,23 +1179,23 @@
 
 def dumpTimezoneInfo(_data):
 
-    print "historical_zone_info = {"
+    print("historical_zone_info = {")
 
     items = _data.items()
     items.sort()
     for key, value in items:
         v1, v2, v3, ilist, bitmap, two_by_three, two_nullterm = value
-        print "'%s': ('%s', %s, %s," % (key, v1, v2, v3)
-        print "[",
+        print("'%s': ('%s', %s, %s," % (key, v1, v2, v3))
+        print("[", end='')
         while ilist:
             next_5, ilist = ilist[:5], ilist[5:]
             line = ", ".join(["'%s'" % x for x in next_5])
-            print "%s," % line
-        print "], "
-        print "%s," % repr(bitmap)
-        print "%s, %s)," % (repr(two_by_three), repr(two_nullterm))
+            print("%s," % line)
+        print("], ")
+        print("%s," % repr(bitmap))
+        print("%s, %s)," % (repr(two_by_three), repr(two_nullterm)))
 
-    print "}"
+    print("}")
 
 if __name__ == '__main__':
     dumpTimezoneInfo(historical_zone_info)

Added: zope.datetime/trunk/tox.ini
===================================================================
--- zope.datetime/trunk/tox.ini	                        (rev 0)
+++ zope.datetime/trunk/tox.ini	2013-02-14 13:28:54 UTC (rev 129403)
@@ -0,0 +1,5 @@
+[tox]
+envlist = py26,py27,py32,py33
+
+[testenv]
+commands = python setup.py test -q



More information about the checkins mailing list