[boobcoming] move parse_date to weboob/tools/date.py
This commit is contained in:
parent
23c228280d
commit
f21b5defb6
2 changed files with 53 additions and 50 deletions
|
|
@ -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 ...]
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue