[IcapCalendar] Add search_events method
This commit is contained in:
parent
dbfa91c783
commit
ee57e622e9
1 changed files with 48 additions and 5 deletions
|
|
@ -17,15 +17,21 @@
|
||||||
# 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/>.
|
||||||
|
|
||||||
from .base import CapBaseObject, IBaseCap, StringField, DateField, IntField, FloatField
|
from .base import CapBaseObject, IBaseCap, StringField, DateField, IntField, FloatField, Field
|
||||||
|
|
||||||
__all__ = ['BaseCalendarEvent', 'ICapCalendarEvent']
|
__all__ = ['BaseCalendarEvent', 'ICapCalendarEvent']
|
||||||
|
|
||||||
|
|
||||||
def enum(**enums):
|
def enum(**enums):
|
||||||
|
_values = enums.values()
|
||||||
|
_items = enums.items()
|
||||||
|
_index = dict((value, i) for i, value in enumerate(enums.values()))
|
||||||
|
enums['values'] = _values
|
||||||
|
enums['items'] = _items
|
||||||
|
enums['index'] = _index
|
||||||
return type('Enum', (), enums)
|
return type('Enum', (), enums)
|
||||||
|
|
||||||
CATEGORIES = enum(CINE='Cinema', CONCERT='Concert', THEATRE='Theatre')
|
CATEGORIES = enum(CONCERT=u'Concert', CINE=u'Cinema', THEATRE=u'Theatre')
|
||||||
|
|
||||||
#the following elements deal with ICalendar stantdards
|
#the following elements deal with ICalendar stantdards
|
||||||
#see http://fr.wikipedia.org/wiki/ICalendar#Ev.C3.A9nements_.28VEVENT.29
|
#see http://fr.wikipedia.org/wiki/ICalendar#Ev.C3.A9nements_.28VEVENT.29
|
||||||
|
|
@ -42,6 +48,7 @@ class BaseCalendarEvent(CapBaseObject):
|
||||||
start_date = DateField('Start date of the event')
|
start_date = DateField('Start date of the event')
|
||||||
end_date = DateField('End date of the event')
|
end_date = DateField('End date of the event')
|
||||||
summary = StringField('Title of the event')
|
summary = StringField('Title of the event')
|
||||||
|
city = StringField('Name of the city in witch event will take place')
|
||||||
location = StringField('Location of the event')
|
location = StringField('Location of the event')
|
||||||
category = StringField('Category of the event')
|
category = StringField('Category of the event')
|
||||||
description = StringField('Description of the event')
|
description = StringField('Description of the event')
|
||||||
|
|
@ -72,11 +79,49 @@ class BaseCalendarEvent(CapBaseObject):
|
||||||
return self.id2url(self.id)
|
return self.id2url(self.id)
|
||||||
|
|
||||||
|
|
||||||
|
class Query(CapBaseObject):
|
||||||
|
"""
|
||||||
|
Query to find events
|
||||||
|
"""
|
||||||
|
|
||||||
|
start_date = DateField('Start date of the event')
|
||||||
|
end_date = DateField('End date of the event')
|
||||||
|
city = StringField('Name of the city in witch event will take place')
|
||||||
|
categories = Field('List of categories of the event', list, tuple)
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
CapBaseObject.__init__(self, '')
|
||||||
|
self.categories = []
|
||||||
|
for value in CATEGORIES.values:
|
||||||
|
self.categories.append(value)
|
||||||
|
|
||||||
|
|
||||||
class ICapCalendarEvent(IBaseCap):
|
class ICapCalendarEvent(IBaseCap):
|
||||||
"""
|
"""
|
||||||
Capability of calendar event type sites
|
Capability of calendar event type sites
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
ASSOCIATED_CATEGORIES = 'ALL'
|
||||||
|
|
||||||
|
def has_matching_categories(self, query):
|
||||||
|
if self.ASSOCIATED_CATEGORIES == 'ALL':
|
||||||
|
return True
|
||||||
|
|
||||||
|
for category in query.categories:
|
||||||
|
if category in self.ASSOCIATED_CATEGORIES:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def search_events(self, query):
|
||||||
|
"""
|
||||||
|
Search event
|
||||||
|
|
||||||
|
:param query: search query
|
||||||
|
:type query: :class:`Query`
|
||||||
|
:rtype: iter[:class:`BaseCalendarEvent`]
|
||||||
|
"""
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
def list_events(self, date_from, date_to=None):
|
def list_events(self, date_from, date_to=None):
|
||||||
"""
|
"""
|
||||||
list coming event.
|
list coming event.
|
||||||
|
|
@ -89,14 +134,12 @@ class ICapCalendarEvent(IBaseCap):
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
def get_event(self, _id, event=None):
|
def get_event(self, _id):
|
||||||
"""
|
"""
|
||||||
Get an event from an ID.
|
Get an event from an ID.
|
||||||
|
|
||||||
:param _id: id of the event
|
:param _id: id of the event
|
||||||
:type _id: str
|
:type _id: str
|
||||||
:param event : the event
|
|
||||||
:type event : BaseCalendarEvent
|
|
||||||
:rtype: :class:`BaseCalendarEvent` or None is fot found.
|
:rtype: :class:`BaseCalendarEvent` or None is fot found.
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue