Reviewers: ,


Please review this at http://codereview.tryton.org/266001/

Affected files:
  M trytond/pyson.py


Index: trytond/pyson.py
===================================================================
--- a/trytond/pyson.py
+++ b/trytond/pyson.py
@@ -5,6 +5,7 @@
 except ImportError:
     import json
 import datetime
+from dateutil.relativedelta import relativedelta
 from functools import reduce


@@ -452,23 +453,14 @@

     @staticmethod
     def eval(dct, context):
-        date = datetime.date.today()
-        replace = {}
-        for i, j in (('y', 'year'), ('M', 'month'), ('d', 'day')):
-            if dct[i] is not None:
-                replace[j] = dct[i]
-        date = date.replace(**replace)
-        if dct['dy']:
-            year = date.year + dct['dy']
-            date = date.replace(year=year)
-        if dct['dM']:
-            month = date.month + dct['dM']
-            year = date.year + month // 12
-            month = month % 12
-            date = date.replace(year=year, month=month)
-        if dct['dd']:
-            date += datetime.timedelta(days=dct['dd'])
-        return date
+        return datetime.date.today() + relativedelta(
+            year=dct['y'],
+            month=dct['M'],
+            day=dct['d'],
+            years=dct['dy'],
+            months=dct['dM'],
+            days=dct['dd'],
+            )


 class DateTime(Date):
@@ -516,22 +508,22 @@

     @staticmethod
     def eval(dct, context):
-        date = Date.eval(dct, context)
-        datetime_ = datetime.datetime.combine(date,
-                datetime.datetime.now().time())
-        replace = {}
-        for i, j in (('h', 'hour'), ('m', 'minute'), ('s', 'second'),
-                ('ms', 'microsecond')):
-            if dct[i] is not None:
-                replace[j] = dct[i]
-        datetime_ = datetime_.replace(**replace)
-        delta = {}
-        for i, j in (('dh', 'hours'), ('dm', 'minutes'), ('ds', 'seconds'),
-                ('dms', 'microseconds')):
-            if dct[i]:
-                delta[j] = dct[i]
-        datetime_ += datetime.timedelta(**delta)
-        return datetime_
+        return datetime.datetime.now() + relativedelta(
+            year=dct['y'],
+            month=dct['M'],
+            day=dct['d'],
+            hour=dct['h'],
+            minute=dct['m'],
+            second=dct['s'],
+            microsecond=dct['ms'],
+            years=dct['dy'],
+            months=dct['dM'],
+            days=dct['dd'],
+            hours=dct['dh'],
+            minutes=dct['dm'],
+            seconds=dct['ds'],
+            microseconds=dct['dms'],
+            )


 class Id(PYSON):


--
[email protected] mailing list

Reply via email to