summaryrefslogtreecommitdiff
path: root/date.py
diff options
context:
space:
mode:
authorAdrien Di Mascio <Adrien.DiMascio@logilab.fr>2007-03-09 09:11:42 +0100
committerAdrien Di Mascio <Adrien.DiMascio@logilab.fr>2007-03-09 09:11:42 +0100
commitb7e21e539ca02132aac5af459e4ade5d54836ec8 (patch)
tree873701217284e0415fa6c3c2bcce6906fdbc3837 /date.py
parent275eb5bccec69d4007d2d2dd53b5a0f1536a18de (diff)
downloadlogilab-common-b7e21e539ca02132aac5af459e4ade5d54836ec8.tar.gz
date.py / unittest_date.py reorganization
date_range is now available if mx.datetime is not installed with a default implementation using python's std datetime module updated tests accordingly
Diffstat (limited to 'date.py')
-rw-r--r--date.py98
1 files changed, 53 insertions, 45 deletions
diff --git a/date.py b/date.py
index 8098a42..a275f84 100644
--- a/date.py
+++ b/date.py
@@ -16,11 +16,61 @@
"""date manipulation helper functions"""
-from mx.DateTime import RelativeDateTime, strptime
-endOfMonth = RelativeDateTime(months=1,day=-1)
+try:
+ from mx.DateTime import RelativeDateTime, strptime
+ STEP = 1
+except ImportError:
+ from warnings import warn
+ warn("mxDateTime not found, holiday management won't be available")
+ from datetime import timedelta
+ STEP = timedelta(days=1)
+else:
+ endOfMonth = RelativeDateTime(months=1, day=-1)
-def date_range(begin, end, step=1):
+ FRENCH_FIXED_HOLIDAYS = {
+ 'jour_an' : '%s-01-01',
+ 'fete_travail' : '%s-05-01',
+ 'armistice1945' : '%s-05-08',
+ 'fete_nat' : '%s-07-14',
+ 'assomption' : '%s-08-15',
+ 'toussaint' : '%s-11-01',
+ 'armistice1918' : '%s-11-11',
+ 'noel' : '%s-12-25',
+ }
+
+
+ FRENCH_MOBILE_HOLIDAYS = {
+ 'paques2004' : '2004-04-12',
+ 'ascension2004' : '2004-05-20',
+ 'pentecote2004' : '2004-05-31',
+
+ 'paques2005' : '2005-03-28',
+ 'ascension2005' : '2005-05-05',
+ 'pentecote2005' : '2005-05-16',
+
+ 'paques2006' : '2006-04-17',
+ 'ascension2006' : '2006-05-25',
+ 'pentecote2006' : '2006-06-05',
+
+ 'paques2007' : '2007-04-09',
+ 'ascension2007' : '2007-05-17',
+ 'pentecote2007' : '2007-05-28',
+ }
+
+
+ def get_national_holidays(begin, end):
+ """return french national days off between begin and end"""
+ holidays = [strptime(datestr, '%Y-%m-%d')
+ for datestr in FRENCH_MOBILE_HOLIDAYS.values()]
+ for year in xrange(begin.year, end.year+1):
+ holidays += [strptime(datestr % year, '%Y-%m-%d')
+ for datestr in FRENCH_FIXED_HOLIDAYS.values()]
+ return [day for day in holidays if begin <= day < end]
+
+
+
+def date_range(begin, end, step=STEP):
"""
enumerate dates between begin and end dates.
@@ -31,45 +81,3 @@ def date_range(begin, end, step=1):
while date < end :
yield date
date += step
-
-FRENCH_FIXED_HOLIDAYS = {
- 'jour_an' : '%s-01-01',
- 'fete_travail' : '%s-05-01',
- 'armistice1945' : '%s-05-08',
- 'fete_nat' : '%s-07-14',
- 'assomption' : '%s-08-15',
- 'toussaint' : '%s-11-01',
- 'armistice1918' : '%s-11-11',
- 'noel' : '%s-12-25',
- }
-
-
-FRENCH_MOBILE_HOLIDAYS = {
- 'paques2004' : '2004-04-12',
- 'ascension2004' : '2004-05-20',
- 'pentecote2004' : '2004-05-31',
-
- 'paques2005' : '2005-03-28',
- 'ascension2005' : '2005-05-05',
- 'pentecote2005' : '2005-05-16',
-
- 'paques2006' : '2006-04-17',
- 'ascension2006' : '2006-05-25',
- 'pentecote2006' : '2006-06-05',
-
- 'paques2007' : '2007-04-09',
- 'ascension2007' : '2007-05-17',
- 'pentecote2007' : '2007-05-28',
- }
-
-
-def get_national_holidays(begin, end):
- """return french national days off between begin and end"""
- holidays = [strptime(datestr, '%Y-%m-%d')
- for datestr in FRENCH_MOBILE_HOLIDAYS.values()]
- for year in xrange(begin.year, end.year+1):
- holidays += [strptime(datestr % year, '%Y-%m-%d')
- for datestr in FRENCH_FIXED_HOLIDAYS.values()]
- return [day for day in holidays if begin <= day < end]
-
-