Use relativedelta to make all the datetime computation

issue2469
This commit is contained in:
Cédric Krier committed 2012-03-05 10:19:20 +01:00
1 parent 01f2518f57
commit e3775ea1b9
2 files changed
+29 -33

No files matched your search

+26 -33
View File
@@ -7,6 +7,7 @@ try:
except ImportError:
import json
import datetime
from dateutil.relativedelta import relativedelta
from functools import reduce
@@ -455,23 +456,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):
@@ -519,22 +511,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
View File
@@ -36,6 +36,9 @@ setup(name='proteus',
'Topic :: Office/Business',
],
license='LGPL-3',
install_requires=[
"python-dateutil",
],
extras_require={
'trytond': ['trytond >= %s.%s, < %s.%s' %
(major_version, minor_version, major_version, minor_version + 1)],