Use relativedelta to make all the datetime computation

issue2469
(transplanted from f1810a191577acc2712515fbb16b1c036422958b)
This commit is contained in:
Cédric Krier committed 2012-03-05 10:19:20 +01:00
1 parent 5523999a3a
commit b68838465a
2 files changed
+29 -34

No files matched your search

+26 -33
View File
@@ -8,6 +8,7 @@ if sys.version_info < (2, 6):
else:
import json
import datetime
from dateutil.relativedelta import relativedelta
class PYSON(object):
@@ -396,23 +397,14 @@ class Date(PYSON):
@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):
@@ -460,22 +452,23 @@ class DateTime(Date):
@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'],
)
CONTEXT = {
'Eval': Eval,
+3 -1
View File
@@ -39,7 +39,9 @@ setup(name='proteus',
'Topic :: Office/Business',
],
license='GPL-3',
install_requires=SIMPLEJSON,
install_requires=SIMPLEJSON + [
"python-dateutil",
],
extras_require={
'trytond': ['trytond >= %s.%s, < %s.%s' %
(major_version, minor_version, major_version, minor_version + 1)],