[Boobcoming] add a search method
This commit is contained in:
parent
ee57e622e9
commit
d282d02733
1 changed files with 67 additions and 3 deletions
|
|
@ -23,7 +23,7 @@ from datetime import date, timedelta, time, datetime
|
||||||
|
|
||||||
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
|
from weboob.capabilities.calendar import ICapCalendarEvent, Query, CATEGORIES
|
||||||
from weboob.tools.application.repl import ReplApplication, defaultcount
|
from weboob.tools.application.repl import ReplApplication, defaultcount
|
||||||
|
|
||||||
__all__ = ['Boobcoming']
|
__all__ = ['Boobcoming']
|
||||||
|
|
@ -49,8 +49,16 @@ class ICalFormatter(IFormatter):
|
||||||
result += u'DTSTART:%s\n' % obj.start_date.strftime("%Y%m%dT%H%M%SZ")
|
result += u'DTSTART:%s\n' % obj.start_date.strftime("%Y%m%dT%H%M%SZ")
|
||||||
result += u'DTEND:%s\n' % obj.end_date.strftime("%Y%m%dT%H%M%SZ")
|
result += u'DTEND:%s\n' % obj.end_date.strftime("%Y%m%dT%H%M%SZ")
|
||||||
result += u'SUMMARY:%s\n' % obj.summary
|
result += u'SUMMARY:%s\n' % obj.summary
|
||||||
|
|
||||||
|
location = ''
|
||||||
if hasattr(obj, 'location') and not empty(obj.location):
|
if hasattr(obj, 'location') and not empty(obj.location):
|
||||||
result += u'LOCATION:%s\n' % obj.location
|
location += obj.location + ' '
|
||||||
|
|
||||||
|
if hasattr(obj, 'city') and not empty(obj.city):
|
||||||
|
location += obj.city + ' '
|
||||||
|
|
||||||
|
if not empty(location):
|
||||||
|
result += u'LOCATION:%s\n' % location
|
||||||
|
|
||||||
if hasattr(obj, 'categories') and not empty(obj.categories):
|
if hasattr(obj, 'categories') and not empty(obj.categories):
|
||||||
result += u'CATEGORIES:%s\n' % obj.categories
|
result += u'CATEGORIES:%s\n' % obj.categories
|
||||||
|
|
@ -101,6 +109,9 @@ class UpcomingFormatter(IFormatter):
|
||||||
if hasattr(obj, 'location') and not empty(obj.location):
|
if hasattr(obj, 'location') and not empty(obj.location):
|
||||||
result += u'Location: %s\n' % obj.location
|
result += u'Location: %s\n' % obj.location
|
||||||
|
|
||||||
|
if hasattr(obj, 'city') and not empty(obj.city):
|
||||||
|
result += u'City: %s\n' % obj.city
|
||||||
|
|
||||||
if hasattr(obj, 'event_planner') and not empty(obj.event_planner):
|
if hasattr(obj, 'event_planner') and not empty(obj.event_planner):
|
||||||
result += u'Event planner: %s/%s \n' % (obj.event_planner)
|
result += u'Event planner: %s/%s \n' % (obj.event_planner)
|
||||||
|
|
||||||
|
|
@ -137,8 +148,8 @@ class Boobcoming(ReplApplication):
|
||||||
'ical_formatter': ICalFormatter,
|
'ical_formatter': ICalFormatter,
|
||||||
}
|
}
|
||||||
COMMANDS_FORMATTERS = {'list': 'upcoming_list',
|
COMMANDS_FORMATTERS = {'list': 'upcoming_list',
|
||||||
|
'search': 'upcoming_list',
|
||||||
'info': 'upcoming',
|
'info': 'upcoming',
|
||||||
#'export': 'ical_formatter',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WEEK = {'MONDAY': 0,
|
WEEK = {'MONDAY': 0,
|
||||||
|
|
@ -157,6 +168,59 @@ class Boobcoming(ReplApplication):
|
||||||
'DIMANCHE': 6,
|
'DIMANCHE': 6,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@defaultcount(10)
|
||||||
|
def do_search(self, line):
|
||||||
|
"""
|
||||||
|
search
|
||||||
|
|
||||||
|
search for an event. Parameters interactively asked
|
||||||
|
"""
|
||||||
|
|
||||||
|
query = Query()
|
||||||
|
r = 'notempty'
|
||||||
|
while r != '':
|
||||||
|
for category in CATEGORIES.values:
|
||||||
|
print ' %s%2d)%s [%s] %s' % (self.BOLD,
|
||||||
|
CATEGORIES.index[category] + 1,
|
||||||
|
self.NC,
|
||||||
|
'x' if category in query.categories else ' ', category)
|
||||||
|
r = self.ask(' Select category (or empty to stop)', regexp='(\d+|)', default='')
|
||||||
|
if not r.isdigit():
|
||||||
|
continue
|
||||||
|
r = int(r)
|
||||||
|
if r <= 0 or r > len(CATEGORIES.values):
|
||||||
|
continue
|
||||||
|
value = CATEGORIES.values[r - 1]
|
||||||
|
if value in query.categories:
|
||||||
|
query.categories.remove(value)
|
||||||
|
else:
|
||||||
|
query.categories.append(value)
|
||||||
|
|
||||||
|
if query.categories and len(query.categories) > 0:
|
||||||
|
query.city = self.ask('Enter a city', default='')
|
||||||
|
|
||||||
|
start_date = self.ask_date('Enter a start date', default='today')
|
||||||
|
end_date = self.ask_date('Enter a end date', default='')
|
||||||
|
|
||||||
|
if end_date:
|
||||||
|
if end_date == start_date:
|
||||||
|
end_date = datetime.combine(start_date, time.max)
|
||||||
|
else:
|
||||||
|
end_date = datetime.combine(end_date, time.max)
|
||||||
|
|
||||||
|
query.start_date = datetime.combine(start_date, time.min)
|
||||||
|
query.end_date = end_date
|
||||||
|
|
||||||
|
self.change_path([u'events'])
|
||||||
|
self.start_format()
|
||||||
|
for backend, event in self.do('search_events', query):
|
||||||
|
if event:
|
||||||
|
self.cached_format(event)
|
||||||
|
|
||||||
|
def ask_date(self, txt, default=''):
|
||||||
|
r = self.ask(txt, default=default)
|
||||||
|
return self.parse_date(r)
|
||||||
|
|
||||||
@defaultcount(10)
|
@defaultcount(10)
|
||||||
def do_list(self, line):
|
def do_list(self, line):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue