[boobcoming] move parse_date to weboob/tools/date.py

This commit is contained in:
Bezleputh 2013-11-28 14:00:00 +01:00 committed by Florent
commit f21b5defb6
2 changed files with 53 additions and 50 deletions

View file

@ -17,10 +17,10 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
import re
import sys import sys
from datetime import date, timedelta, time, datetime from datetime import time, datetime
from weboob.tools.date import parse_date
from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter
from weboob.capabilities.base import empty from weboob.capabilities.base import empty
from weboob.capabilities.calendar import ICapCalendarEvent, Query, CATEGORIES from weboob.capabilities.calendar import ICapCalendarEvent, Query, CATEGORIES
@ -154,22 +154,6 @@ class Boobcoming(ReplApplication):
'export': 'ical_formatter' 'export': 'ical_formatter'
} }
WEEK = {'MONDAY': 0,
'TUESDAY': 1,
'WEDNESDAY': 2,
'THURSDAY': 3,
'FRIDAY': 4,
'SATURDAY': 5,
'SUNDAY': 6,
'LUNDI': 0,
'MARDI': 1,
'MERCREDI': 2,
'JEUDI': 3,
'VENDREDI': 4,
'SAMEDI': 5,
'DIMANCHE': 6,
}
@defaultcount(10) @defaultcount(10)
def do_search(self, line): def do_search(self, line):
""" """
@ -221,7 +205,7 @@ class Boobcoming(ReplApplication):
def ask_date(self, txt, default=''): def ask_date(self, txt, default=''):
r = self.ask(txt, default=default) r = self.ask(txt, default=default)
return self.parse_date(r) return parse_date(r)
@defaultcount(10) @defaultcount(10)
def do_list(self, line): def do_list(self, line):
@ -232,7 +216,7 @@ class Boobcoming(ReplApplication):
self.change_path([u'events']) self.change_path([u'events'])
if line: if line:
_date = self.parse_date(line) _date = parse_date(line)
if not _date: if not _date:
print >>sys.stderr, 'Invalid argument: %s' % self.get_command_help('list', short=True) print >>sys.stderr, 'Invalid argument: %s' % self.get_command_help('list', short=True)
return 2 return 2
@ -324,36 +308,6 @@ class Boobcoming(ReplApplication):
else: else:
return _file return _file
def get_date_from_day(self, day):
today = date.today()
today_day_number = today.weekday()
requested_day_number = self.WEEK[day.upper()]
if today_day_number < requested_day_number:
day_to_go = requested_day_number - today_day_number
else:
day_to_go = 7 - today_day_number + requested_day_number
requested_date = today + timedelta(day_to_go)
return date(requested_date.year, requested_date.month, requested_date.day)
def parse_date(self, string):
matches = re.search('\s*([012]?[0-9]|3[01])\s*/\s*(0?[1-9]|1[012])\s*/?(\d{2}|\d{4})?$', string)
if matches:
year = matches.group(3)
if not year:
year = date.today().year
elif len(year) == 2:
year = 2000 + int(year)
return date(int(year), int(matches.group(2)), int(matches.group(1)))
elif string.upper() in self.WEEK.keys():
return self.get_date_from_day(string)
elif string.upper() == "TODAY":
return date.today()
def do_attends(self, line): def do_attends(self, line):
""" """
attends ID1 [ID2 ID3 ...] attends ID1 [ID2 ID3 ...]

View file

@ -226,3 +226,52 @@ def parse_french_date(date):
date = fr.sub(en, date) date = fr.sub(en, date)
return dateutil.parser.parse(date) return dateutil.parser.parse(date)
WEEK = {'MONDAY': 0,
'TUESDAY': 1,
'WEDNESDAY': 2,
'THURSDAY': 3,
'FRIDAY': 4,
'SATURDAY': 5,
'SUNDAY': 6,
'LUNDI': 0,
'MARDI': 1,
'MERCREDI': 2,
'JEUDI': 3,
'VENDREDI': 4,
'SAMEDI': 5,
'DIMANCHE': 6,
}
def get_date_from_day(day):
today = date.today()
today_day_number = today.weekday()
requested_day_number = WEEK[day.upper()]
if today_day_number < requested_day_number:
day_to_go = requested_day_number - today_day_number
else:
day_to_go = 7 - today_day_number + requested_day_number
requested_date = today + timedelta(day_to_go)
return date(requested_date.year, requested_date.month, requested_date.day)
def parse_date(string):
matches = re.search('\s*([012]?[0-9]|3[01])\s*/\s*(0?[1-9]|1[012])\s*/?(\d{2}|\d{4})?$', string)
if matches:
year = matches.group(3)
if not year:
year = date.today().year
elif len(year) == 2:
year = 2000 + int(year)
return date(int(year), int(matches.group(2)), int(matches.group(1)))
elif string.upper() in WEEK.keys():
return get_date_from_day(string)
elif string.upper() == "TODAY":
return date.today()