<s> """<STR_LIT>""" <EOL> __author__ = '<STR_LIT>' <EOL> import datetime <EOL> import dateutil <EOL> import logging <EOL> import os <EOL> import time <EOL> import vobject <EOL> from functools import partial <EOL> from viewfinder . backend . base import util <EOL> class Calendar ( object ) : <EOL> """<STR_LIT>""" <EOL> _RESOURCES_CALENDARS_FMT = '<STR_LIT>' <EOL> _DEFAULT_CALENDAR_ID = '<STR_LIT>' <EOL> """<STR_LIT>""" <EOL> _locale_to_holiday_calendar_map = { <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> } <EOL> """<STR_LIT>""" <EOL> _cache = dict ( ) <EOL> def __init__ ( self , calendar_id ) : <EOL> """<STR_LIT>""" <EOL> self . calendar_id = calendar_id <EOL> cal_path = os . path . dirname ( __file__ ) <EOL> path = os . path . join ( cal_path , Calendar . _RESOURCES_CALENDARS_FMT % self . calendar_id ) <EOL> with open ( path , '<STR_LIT:rb>' ) as f : <EOL> self . _cal = vobject . readOne ( f ) <EOL> def GetEvents ( self , year ) : <EOL> """<STR_LIT>""" <EOL> events = [ ] <EOL> for event in self . _cal . components ( ) : <EOL> if event . name == '<STR_LIT>' : <EOL> name = event . summary . value <EOL> if event . getrruleset ( ) : <EOL> rruleset = event . getrruleset ( ) <EOL> dates = rruleset . between ( datetime . datetime ( year - <NUM_LIT:1> , <NUM_LIT:12> , <NUM_LIT> ) , <EOL> datetime . datetime ( year + <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ) ) <EOL> if len ( dates ) >= <NUM_LIT:1> : <EOL> if len ( dates ) > <NUM_LIT:1> : <EOL> logging . warning ( '<STR_LIT>' % ( name , dates ) ) <EOL> delta = event . dtend . value - event . dtstart . value <EOL> dtstart = dates [ <NUM_LIT:0> ] <EOL> dtend = dtstart + delta <EOL> events . append ( { '<STR_LIT:name>' : name , <EOL> '<STR_LIT>' : time . mktime ( dtstart . timetuple ( ) ) , <EOL> '<STR_LIT>' : time . mktime ( dtend . timetuple ( ) ) } ) <EOL> else : <EOL> dtstart = event . dtstart . value <EOL> dtend = event . dtend . value <EOL> if dtstart . year == year : <EOL> events . append ( { '<STR_LIT:name>' : name , <EOL> '<STR_LIT>' : time . mktime ( dtstart . timetuple ( ) ) , <EOL> '<STR_LIT>' : time . mktime ( dtend . timetuple ( ) ) } ) <EOL> return events <EOL> @ classmethod <EOL> def GetCalendar ( cls , calendar_id = None ) : <EOL> """<STR_LIT>""" <EOL> calendar_id = calendar_id or Calendar . _DEFAULT_CALENDAR_ID <EOL> if not Calendar . _cache . has_key ( calendar_id ) : <EOL> cal = Calendar ( calendar_id ) <EOL> Calendar . _cache [ calendar_id ] = cal <EOL> return Calendar . _cache [ calendar_id ] <EOL> @ classmethod <EOL> def GetHolidaysByLocale ( cls , locale = '<STR_LIT>' ) : <EOL> """<STR_LIT>""" <EOL> locale = locale . replace ( '<STR_LIT:->' , '<STR_LIT:_>' ) <EOL> calendar_id = Calendar . _locale_to_holiday_calendar_map . get ( locale , None ) or Calendar . _DEFAULT_CALENDAR_ID <EOL> return Calendar . GetCalendar ( calendar_id ) </s>
