Use relativedelta to make all the datetime computation
issue2469 (transplanted from f1810a191577acc2712515fbb16b1c036422958b)
This commit is contained in:
1 parent
5523999a3a
commit
b68838465a
2 files changed
+29
-34
No files matched your search
+26
-33
@@ -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,
|
||||
|
||||
@@ -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)],
|
||||
|
||||
Reference in new issue
Block a user