diff --git a/combo_plugin_gnm/templatetags/gnm.py b/combo_plugin_gnm/templatetags/gnm.py index 330b116..82c5087 100644 --- a/combo_plugin_gnm/templatetags/gnm.py +++ b/combo_plugin_gnm/templatetags/gnm.py @@ -260,8 +260,7 @@ def get_slots_from_mairie_format(data, base_datetime): exclusion_slots = [] previous_week = base_datetime - datetime.timedelta(7) next_week = base_datetime + datetime.timedelta(7) - if len(data.get('openinghours', [])) or len(data.get('openinghoursspecification', [])): - known_format = True + if len(data.get('openinghoursspecification', [])) > 0: # prepare annual opening exclusions for specification in data.get('openinghoursspecification', []): valid_from, valid_through = previous_week, next_week @@ -274,6 +273,7 @@ def get_slots_from_mairie_format(data, base_datetime): if specification.get('opens') and specification.get('closes'): # case when opening periods are defined if valid_from <= base_datetime < valid_through: + known_format = True try: day_number, time_table = get_time_table_from_specification(specification) except ValueError: @@ -284,15 +284,17 @@ def get_slots_from_mairie_format(data, base_datetime): # case when exclusions are defined exclusion_slots.append(TimeSlot(valid_from, valid_through)) + if not known_format and len(data.get('openinghours', [])) > 0: for days_list, time_table in parse_opening_hours_data(data): + known_format = True for weekday in days_list: day_number = EN_ABBREV_WEEKDAYS_LIST.index(weekday) timeslot = get_slot(day_number, time_table, base_datetime) # add to slots the opening hours in chronological order beginning from today slots.append(timeslot) - # order slots and cycle the list beginning with 'base_datetime' - slots.sort(key=operator.attrgetter('start')) + # order slots and cycle the list beginning with 'base_datetime' + slots.sort(key=operator.attrgetter('start')) return (slots, exclusion_slots, known_format) @@ -340,31 +342,31 @@ def get_mairie_opening_hours(mairie_data): ) known_format = False - for days_list, time_table in parse_opening_hours_data(mairie_data): - known_format = True - for weekday in days_list: - update_opening_hours(weekday, time_table) + previous_week = base_datetime - datetime.timedelta(7) + next_week = base_datetime + datetime.timedelta(7) + for specification in mairie_data.get('openinghoursspecification', []): + valid_from, valid_through = previous_week, next_week + if specification.get('validFrom'): + valid_from = parse_valid_from(specification) + if specification.get('validThrough'): + valid_through = parse_valid_through(specification) + if not valid_from or not valid_through: + continue + # case when opening periods are defined + if 'opens' in specification and 'closes' in specification: + known_format = True + # parse specification only for the current period relative to utcnow() + if valid_from < base_datetime < valid_through: + day_number, time_table = get_time_table_from_specification(specification) + weekday = EN_ABBREV_WEEKDAYS_LIST[day_number] + update_opening_hours(weekday, time_table) if not known_format: - # some mairie only have openinghoursspecification (e.g. Jonage) - previous_week = base_datetime - datetime.timedelta(7) - next_week = base_datetime + datetime.timedelta(7) - for specification in mairie_data.get('openinghoursspecification', []): + # some mairie may only have opening periods defined into openinghours (e.g. Bron) + for days_list, time_table in parse_opening_hours_data(mairie_data): known_format = True - valid_from, valid_through = previous_week, next_week - if specification.get('validFrom'): - valid_from = parse_valid_from(specification) - if specification.get('validThrough'): - valid_through = parse_valid_through(specification) - if not valid_from or not valid_through: - continue - # case when opening periods are defined - if 'opens' in specification and 'closes' in specification: - # parse specification only for the current period relative to utcnow() - if valid_from < base_datetime < valid_through: - day_number, time_table = get_time_table_from_specification(specification) - weekday = EN_ABBREV_WEEKDAYS_LIST[day_number] - update_opening_hours(weekday, time_table) + for weekday in days_list: + update_opening_hours(weekday, time_table) if not ( any([x['am'] for x in opening_hours_dict.values()]) diff --git a/tests/data/mairie-saint-genis-lavak.json b/tests/data/mairie-saint-genis-lavak.json new file mode 100644 index 0000000..312bfeb --- /dev/null +++ b/tests/data/mairie-saint-genis-lavak.json @@ -0,0 +1,1162 @@ +{ + "err" : 0, + "features" : [ + { + "geometry" : { + "coordinates" : [ + 4.79403390663327, + 45.6987979234547 + ], + "type" : "Point" + }, + "properties" : { + "address" : { + "addressCountry" : "France", + "addressLocality" : "Saint-Genis-Laval", + "postalCode" : "69230", + "streetAddress" : "106 Avenue Georges Clémenceau" + }, + "datecreation" : "1998-06-17T00:00:00Z", + "email" : "ecrire@mairie-saintgenislaval.fr", + "facebook" : "https://www.facebook.com/VilledeSaintGenisLaval", + "formulaire" : "http://www.saintgenislaval.fr/16-contact.htm", + "gid" : 44, + "identifiant" : "S1403", + "idexterne" : "", + "instagram" : "", + "nom" : "Mairie de Saint-Genis-Laval", + "openinghours" : [ + "Mo,Tu,Th,Fr 08:30-12:00,13:30-17:30; We 08:30-12:00; Sa 09:00-12:00" + ], + "openinghoursspecification" : [ + { + "closes" : "18:30", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "13:30", + "validFrom" : "2020-12-27", + "validThrough" : "2020-12-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "08:30", + "validFrom" : "2020-12-27", + "validThrough" : "2020-12-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "08:30", + "validFrom" : "2020-12-27", + "validThrough" : "2020-12-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "08:30", + "validFrom" : "2020-12-27", + "validThrough" : "2020-12-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "08:30", + "validFrom" : "2020-12-27", + "validThrough" : "2020-12-31" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "13:30", + "validFrom" : "2020-12-27", + "validThrough" : "2020-12-31" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "13:30", + "validFrom" : "2020-12-27", + "validThrough" : "2020-12-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Saturday", + "opens" : "09:00", + "validFrom" : "2020-12-27", + "validThrough" : "2020-12-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Wednesday", + "opens" : "08:30", + "validFrom" : "2020-12-27", + "validThrough" : "2020-12-31" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "13:30", + "validFrom" : "2020-12-27", + "validThrough" : "2020-12-31" + }, + { + "closes" : "18:30", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "13:30", + "validFrom" : "2021-01-02", + "validThrough" : "2021-01-01" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "08:30", + "validFrom" : "2021-01-02", + "validThrough" : "2021-01-01" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Saturday", + "opens" : "09:00", + "validFrom" : "2021-01-02", + "validThrough" : "2021-01-01" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Wednesday", + "opens" : "08:30", + "validFrom" : "2021-01-02", + "validThrough" : "2021-01-01" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "13:30", + "validFrom" : "2021-01-02", + "validThrough" : "2021-01-01" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "13:30", + "validFrom" : "2021-01-02", + "validThrough" : "2021-01-01" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "13:30", + "validFrom" : "2021-01-02", + "validThrough" : "2021-01-01" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "08:30", + "validFrom" : "2021-01-02", + "validThrough" : "2021-01-01" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "08:30", + "validFrom" : "2021-01-02", + "validThrough" : "2021-01-01" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "08:30", + "validFrom" : "2021-01-02", + "validThrough" : "2021-01-01" + }, + { + "closes" : "18:30", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "13:30", + "validFrom" : "2021-01-03", + "validThrough" : "2021-01-15" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "08:30", + "validFrom" : "2021-01-03", + "validThrough" : "2021-01-15" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "08:30", + "validFrom" : "2021-01-03", + "validThrough" : "2021-01-15" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "08:30", + "validFrom" : "2021-01-03", + "validThrough" : "2021-01-15" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "08:30", + "validFrom" : "2021-01-03", + "validThrough" : "2021-01-15" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "13:30", + "validFrom" : "2021-01-03", + "validThrough" : "2021-01-15" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "13:30", + "validFrom" : "2021-01-03", + "validThrough" : "2021-01-15" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "13:30", + "validFrom" : "2021-01-03", + "validThrough" : "2021-01-15" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Wednesday", + "opens" : "08:30", + "validFrom" : "2021-01-03", + "validThrough" : "2021-01-15" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Saturday", + "opens" : "09:00", + "validFrom" : "2021-01-03", + "validThrough" : "2021-01-15" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "08:30", + "validFrom" : "2021-01-16", + "validThrough" : "2021-01-31" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "13:30", + "validFrom" : "2021-01-16", + "validThrough" : "2021-01-31" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "13:30", + "validFrom" : "2021-01-16", + "validThrough" : "2021-01-31" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "13:30", + "validFrom" : "2021-01-16", + "validThrough" : "2021-01-31" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "13:30", + "validFrom" : "2021-01-16", + "validThrough" : "2021-01-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Wednesday", + "opens" : "08:30", + "validFrom" : "2021-01-16", + "validThrough" : "2021-01-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Saturday", + "opens" : "09:00", + "validFrom" : "2021-01-16", + "validThrough" : "2021-01-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "08:30", + "validFrom" : "2021-01-16", + "validThrough" : "2021-01-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "08:30", + "validFrom" : "2021-01-16", + "validThrough" : "2021-01-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "08:30", + "validFrom" : "2021-01-16", + "validThrough" : "2021-01-31" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "13:30", + "validFrom" : "2021-02-01", + "validThrough" : "2021-04-04" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "13:30", + "validFrom" : "2021-02-01", + "validThrough" : "2021-04-04" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "13:30", + "validFrom" : "2021-02-01", + "validThrough" : "2021-04-04" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Wednesday", + "opens" : "08:30", + "validFrom" : "2021-02-01", + "validThrough" : "2021-04-04" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Saturday", + "opens" : "09:00", + "validFrom" : "2021-02-01", + "validThrough" : "2021-04-04" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "08:30", + "validFrom" : "2021-02-01", + "validThrough" : "2021-04-04" + }, + { + "closes" : "18:30", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "13:30", + "validFrom" : "2021-02-01", + "validThrough" : "2021-04-04" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "08:30", + "validFrom" : "2021-02-01", + "validThrough" : "2021-04-04" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "08:30", + "validFrom" : "2021-02-01", + "validThrough" : "2021-04-04" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "08:30", + "validFrom" : "2021-02-01", + "validThrough" : "2021-04-04" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "08:30", + "validFrom" : "2021-04-06", + "validThrough" : "2021-04-30" + }, + { + "closes" : "18:30", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "13:30", + "validFrom" : "2021-04-06", + "validThrough" : "2021-04-30" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "08:30", + "validFrom" : "2021-04-06", + "validThrough" : "2021-04-30" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Saturday", + "opens" : "09:00", + "validFrom" : "2021-04-06", + "validThrough" : "2021-04-30" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Wednesday", + "opens" : "08:30", + "validFrom" : "2021-04-06", + "validThrough" : "2021-04-30" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "13:30", + "validFrom" : "2021-04-06", + "validThrough" : "2021-04-30" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "13:30", + "validFrom" : "2021-04-06", + "validThrough" : "2021-04-30" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "13:30", + "validFrom" : "2021-04-06", + "validThrough" : "2021-04-30" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "08:30", + "validFrom" : "2021-04-06", + "validThrough" : "2021-04-30" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "08:30", + "validFrom" : "2021-04-06", + "validThrough" : "2021-04-30" + }, + { + "closes" : "18:30", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "13:30", + "validFrom" : "2021-05-02", + "validThrough" : "2021-05-07" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "08:30", + "validFrom" : "2021-05-02", + "validThrough" : "2021-05-07" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Saturday", + "opens" : "09:00", + "validFrom" : "2021-05-02", + "validThrough" : "2021-05-07" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Wednesday", + "opens" : "08:30", + "validFrom" : "2021-05-02", + "validThrough" : "2021-05-07" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "13:30", + "validFrom" : "2021-05-02", + "validThrough" : "2021-05-07" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "13:30", + "validFrom" : "2021-05-02", + "validThrough" : "2021-05-07" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "13:30", + "validFrom" : "2021-05-02", + "validThrough" : "2021-05-07" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "08:30", + "validFrom" : "2021-05-02", + "validThrough" : "2021-05-07" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "08:30", + "validFrom" : "2021-05-02", + "validThrough" : "2021-05-07" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "08:30", + "validFrom" : "2021-05-02", + "validThrough" : "2021-05-07" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "08:30", + "validFrom" : "2021-05-09", + "validThrough" : "2021-05-12" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "08:30", + "validFrom" : "2021-05-09", + "validThrough" : "2021-05-12" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "08:30", + "validFrom" : "2021-05-09", + "validThrough" : "2021-05-12" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "13:30", + "validFrom" : "2021-05-09", + "validThrough" : "2021-05-12" + }, + { + "closes" : "18:30", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "13:30", + "validFrom" : "2021-05-09", + "validThrough" : "2021-05-12" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "08:30", + "validFrom" : "2021-05-09", + "validThrough" : "2021-05-12" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Saturday", + "opens" : "09:00", + "validFrom" : "2021-05-09", + "validThrough" : "2021-05-12" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Wednesday", + "opens" : "08:30", + "validFrom" : "2021-05-09", + "validThrough" : "2021-05-12" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "13:30", + "validFrom" : "2021-05-09", + "validThrough" : "2021-05-12" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "13:30", + "validFrom" : "2021-05-09", + "validThrough" : "2021-05-12" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "13:30", + "validFrom" : "2021-05-14", + "validThrough" : "2021-05-23" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "13:30", + "validFrom" : "2021-05-14", + "validThrough" : "2021-05-23" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "08:30", + "validFrom" : "2021-05-14", + "validThrough" : "2021-05-23" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "08:30", + "validFrom" : "2021-05-14", + "validThrough" : "2021-05-23" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "08:30", + "validFrom" : "2021-05-14", + "validThrough" : "2021-05-23" + }, + { + "closes" : "18:30", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "13:30", + "validFrom" : "2021-05-14", + "validThrough" : "2021-05-23" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "08:30", + "validFrom" : "2021-05-14", + "validThrough" : "2021-05-23" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Saturday", + "opens" : "09:00", + "validFrom" : "2021-05-14", + "validThrough" : "2021-05-23" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Wednesday", + "opens" : "08:30", + "validFrom" : "2021-05-14", + "validThrough" : "2021-05-23" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "13:30", + "validFrom" : "2021-05-14", + "validThrough" : "2021-05-23" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "08:30", + "validFrom" : "2021-05-25", + "validThrough" : "2021-07-13" + }, + { + "closes" : "18:30", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "13:30", + "validFrom" : "2021-05-25", + "validThrough" : "2021-07-13" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Saturday", + "opens" : "09:00", + "validFrom" : "2021-05-25", + "validThrough" : "2021-07-13" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Wednesday", + "opens" : "08:30", + "validFrom" : "2021-05-25", + "validThrough" : "2021-07-13" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "13:30", + "validFrom" : "2021-05-25", + "validThrough" : "2021-07-13" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "13:30", + "validFrom" : "2021-05-25", + "validThrough" : "2021-07-13" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "13:30", + "validFrom" : "2021-05-25", + "validThrough" : "2021-07-13" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "08:30", + "validFrom" : "2021-05-25", + "validThrough" : "2021-07-13" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "08:30", + "validFrom" : "2021-05-25", + "validThrough" : "2021-07-13" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "08:30", + "validFrom" : "2021-05-25", + "validThrough" : "2021-07-13" + }, + { + "closes" : "18:30", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "13:30", + "validFrom" : "2021-07-15", + "validThrough" : "2021-08-14" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "08:30", + "validFrom" : "2021-07-15", + "validThrough" : "2021-08-14" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Saturday", + "opens" : "09:00", + "validFrom" : "2021-07-15", + "validThrough" : "2021-08-14" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Wednesday", + "opens" : "08:30", + "validFrom" : "2021-07-15", + "validThrough" : "2021-08-14" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "13:30", + "validFrom" : "2021-07-15", + "validThrough" : "2021-08-14" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "13:30", + "validFrom" : "2021-07-15", + "validThrough" : "2021-08-14" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "13:30", + "validFrom" : "2021-07-15", + "validThrough" : "2021-08-14" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "08:30", + "validFrom" : "2021-07-15", + "validThrough" : "2021-08-14" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "08:30", + "validFrom" : "2021-07-15", + "validThrough" : "2021-08-14" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "08:30", + "validFrom" : "2021-07-15", + "validThrough" : "2021-08-14" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "08:30", + "validFrom" : "2021-08-16", + "validThrough" : "2021-10-31" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "13:30", + "validFrom" : "2021-08-16", + "validThrough" : "2021-10-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "08:30", + "validFrom" : "2021-08-16", + "validThrough" : "2021-10-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "08:30", + "validFrom" : "2021-08-16", + "validThrough" : "2021-10-31" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "13:30", + "validFrom" : "2021-08-16", + "validThrough" : "2021-10-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Wednesday", + "opens" : "08:30", + "validFrom" : "2021-08-16", + "validThrough" : "2021-10-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Saturday", + "opens" : "09:00", + "validFrom" : "2021-08-16", + "validThrough" : "2021-10-31" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "13:30", + "validFrom" : "2021-08-16", + "validThrough" : "2021-10-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "08:30", + "validFrom" : "2021-08-16", + "validThrough" : "2021-10-31" + }, + { + "closes" : "18:30", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "13:30", + "validFrom" : "2021-08-16", + "validThrough" : "2021-10-31" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "13:30", + "validFrom" : "2021-11-02", + "validThrough" : "2021-11-10" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "13:30", + "validFrom" : "2021-11-02", + "validThrough" : "2021-11-10" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "08:30", + "validFrom" : "2021-11-02", + "validThrough" : "2021-11-10" + }, + { + "closes" : "18:30", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "13:30", + "validFrom" : "2021-11-02", + "validThrough" : "2021-11-10" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "08:30", + "validFrom" : "2021-11-02", + "validThrough" : "2021-11-10" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Saturday", + "opens" : "09:00", + "validFrom" : "2021-11-02", + "validThrough" : "2021-11-10" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Wednesday", + "opens" : "08:30", + "validFrom" : "2021-11-02", + "validThrough" : "2021-11-10" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "13:30", + "validFrom" : "2021-11-02", + "validThrough" : "2021-11-10" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "08:30", + "validFrom" : "2021-11-02", + "validThrough" : "2021-11-10" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "08:30", + "validFrom" : "2021-11-02", + "validThrough" : "2021-11-10" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "13:30", + "validFrom" : "2021-11-12", + "validThrough" : "2021-12-24" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Wednesday", + "opens" : "08:30", + "validFrom" : "2021-11-12", + "validThrough" : "2021-12-24" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Saturday", + "opens" : "09:00", + "validFrom" : "2021-11-12", + "validThrough" : "2021-12-24" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "08:30", + "validFrom" : "2021-11-12", + "validThrough" : "2021-12-24" + }, + { + "closes" : "18:30", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "13:30", + "validFrom" : "2021-11-12", + "validThrough" : "2021-12-24" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "13:30", + "validFrom" : "2021-11-12", + "validThrough" : "2021-12-24" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "13:30", + "validFrom" : "2021-11-12", + "validThrough" : "2021-12-24" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "08:30", + "validFrom" : "2021-11-12", + "validThrough" : "2021-12-24" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "08:30", + "validFrom" : "2021-11-12", + "validThrough" : "2021-12-24" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "08:30", + "validFrom" : "2021-11-12", + "validThrough" : "2021-12-24" + }, + { + "closes" : "18:30", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "13:30", + "validFrom" : "2021-12-26", + "validThrough" : "2021-12-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Tuesday", + "opens" : "08:30", + "validFrom" : "2021-12-26", + "validThrough" : "2021-12-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "08:30", + "validFrom" : "2021-12-26", + "validThrough" : "2021-12-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "08:30", + "validFrom" : "2021-12-26", + "validThrough" : "2021-12-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "08:30", + "validFrom" : "2021-12-26", + "validThrough" : "2021-12-31" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Monday", + "opens" : "13:30", + "validFrom" : "2021-12-26", + "validThrough" : "2021-12-31" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Thursday", + "opens" : "13:30", + "validFrom" : "2021-12-26", + "validThrough" : "2021-12-31" + }, + { + "closes" : "17:30", + "dayOfWeek" : "http://schema.org/Friday", + "opens" : "13:30", + "validFrom" : "2021-12-26", + "validThrough" : "2021-12-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Wednesday", + "opens" : "08:30", + "validFrom" : "2021-12-26", + "validThrough" : "2021-12-31" + }, + { + "closes" : "12:00", + "dayOfWeek" : "http://schema.org/Saturday", + "opens" : "09:00", + "validFrom" : "2021-12-26", + "validThrough" : "2021-12-31" + }, + { + "dayOfWeek" : "http://schema.org/Saturday", + "validFrom" : "2020-12-26", + "validThrough" : "2020-12-26" + }, + { + "dayOfWeek" : "http://schema.org/Friday", + "validFrom" : "2021-01-01", + "validThrough" : "2021-01-01" + }, + { + "dayOfWeek" : "http://schema.org/Saturday", + "validFrom" : "2021-01-02", + "validThrough" : "2021-01-02" + }, + { + "dayOfWeek" : "http://schema.org/Monday", + "validFrom" : "2021-04-05", + "validThrough" : "2021-04-05" + }, + { + "dayOfWeek" : "http://schema.org/Saturday", + "validFrom" : "2021-05-01", + "validThrough" : "2021-05-01" + }, + { + "dayOfWeek" : "http://schema.org/Saturday", + "validFrom" : "2021-05-08", + "validThrough" : "2021-05-08" + }, + { + "dayOfWeek" : "http://schema.org/Thursday", + "validFrom" : "2021-05-13", + "validThrough" : "2021-05-13" + }, + { + "dayOfWeek" : "http://schema.org/Monday", + "validFrom" : "2021-05-24", + "validThrough" : "2021-05-24" + }, + { + "dayOfWeek" : "http://schema.org/Wednesday", + "validFrom" : "2021-07-14", + "validThrough" : "2021-07-14" + }, + { + "dayOfWeek" : "http://schema.org/Sunday", + "validFrom" : "2021-08-15", + "validThrough" : "2021-08-15" + }, + { + "dayOfWeek" : "http://schema.org/Monday", + "validFrom" : "2021-11-01", + "validThrough" : "2021-11-01" + }, + { + "dayOfWeek" : "http://schema.org/Thursday", + "validFrom" : "2021-11-11", + "validThrough" : "2021-11-11" + }, + { + "dayOfWeek" : "http://schema.org/Saturday", + "validFrom" : "2021-12-25", + "validThrough" : "2021-12-25" + } + ], + "sameas" : "www.saintgenislaval.fr", + "siret" : "21690204900016", + "soustheme" : "Mairie", + "telephone" : "+33478868200", + "theme" : "ADMINISTRATION", + "twitter" : "", + "youtube" : "" + }, + "text" : null, + "type" : "Feature" + } + ], + "name" : "adr_voie_lieu.adrmairiepct_2_0_0", + "type" : "FeatureCollection" +} diff --git a/tests/test_as_opening_hours.py b/tests/test_as_opening_hours.py index b29175c..0b9979f 100644 --- a/tests/test_as_opening_hours.py +++ b/tests/test_as_opening_hours.py @@ -23,6 +23,7 @@ def test_every_mairie_closed(): assert len([x for x in opening_hours if 'open' in x]) == 0 +@pytest.mark.freeze_time("2018-03-04 23:00:00") def test_all_mairie_data_parsed_correct(): """everything got parsed correctly""" opening_hours = [ @@ -274,3 +275,36 @@ def test_mairie_format_openinghoursspecification(day, opens, closes, badge, text ) html = as_opening_hours_badge(json.loads(geojson)) assert html == '
%s
' % (badge, text) + + +@pytest.mark.freeze_time("2018-03-09 00:30:00") +def test_mairie_having_both_formats(): + """ openinghoursspecification take preference over openinghours""" + geojson = """ +{ + "properties": { + "openinghours": [ + "Mo 08:30-11:30" + ], + "openinghoursspecification": [{ + "opens": "09:30", + "closes": "12:30", + "dayOfWeek": "http:\/\/schema.org\/Monday", + "validFrom": "2018-01-01T00:00:00+01:00", + "validThrough": "2018-06-30T23:59:59+02:00" + }] + } +} +""" + html = as_opening_hours_badge(json.loads(geojson)) + assert html == '
%s
' % ( + 'closed', 'Réouvre lundi à 9h30') + + +@pytest.mark.freeze_time("2021-01-21 15:37:00") +def test_mairie_saint_genis_lavak(): + """ #50337 """ + geojson = json.load(open(os.path.join(BASE_DIR, 'tests/data/mairie-saint-genis-lavak.json'))) + test_html = as_opening_hours_badge(geojson['features'][0]) + klass, label = 'open', u"Ouvert jusqu'à 17h30" + assert test_html == mark_safe(u'
%s
' % (klass, label)) diff --git a/tests/test_get_mairie_opening_hours.py b/tests/test_get_mairie_opening_hours.py index 87c8abe..b15af2c 100644 --- a/tests/test_get_mairie_opening_hours.py +++ b/tests/test_get_mairie_opening_hours.py @@ -28,7 +28,7 @@ def test_mairie_hours_special_data(): """test results for various data examples""" for x in GEOJSON: if x['properties']['identifiant'] == 'S1376': - # La Mulatière + # La Mulatière : openinghoursspecification set but without opens/closes assert get_mairie_opening_hours(x) == [ ('lundi', {'am': u'08h30-12h00', 'pm': None}), ('mardi', {'am': u'08h30-12h30', 'pm': u'13h30-17h00'}), @@ -39,6 +39,7 @@ def test_mairie_hours_special_data(): ] if x['properties']['identifiant'] == 'S1437': + x['properties']['openinghoursspecification'] = [] # force using openinghours # special openinghours format with days intervals, comma-separated list and one day definition with a saturday assert get_mairie_opening_hours(x) == [ ('lundi', {'am': u'08h45-12h30', 'pm': u'14h00-16h45'}), @@ -50,6 +51,7 @@ def test_mairie_hours_special_data(): ] if x['properties']['identifiant'] == 'S5564': + x['properties']['openinghoursspecification'] = [] # force using openinghours # classic openinghours days interval for am and pm assert get_mairie_opening_hours(x) == [ ('lundi', {'am': u'08h30-12h15', 'pm': u'13h15-17h00'}), @@ -124,6 +126,7 @@ def test_mairie_saint_priest(): def test_mairie_format_openinghours(): + """ some mairie may still only define the openinghours format """ geojson = """ { "properties": { @@ -151,7 +154,7 @@ def test_mairie_format_openinghours(): @pytest.mark.freeze_time("2018-03-09 00:30:00") def test_mairie_format_openinghoursspecification(): - """ some mairie only have openinghoursspecification """ + """ openinghoursspecification the default format """ geojson = """ { "properties": { @@ -209,3 +212,41 @@ def test_mairie_format_openinghoursspecification(): ('samedi', {'am': None, 'pm': '21h00-24h00'}), ('dimanche', {'am': '00h00-24h00', 'pm': ''}), ] + + +@pytest.mark.freeze_time("2018-03-09 00:30:00") +def test_mairie_having_both_formats(): + """ openinghoursspecification take preference over openinghours""" + geojson = """ +{ + "properties": { + "openinghours": [ + "Mo 08:30-11:30" + ], + "openinghoursspecification": [{ + "opens": "09:30", + "closes": "12:30", + "dayOfWeek": "http:\/\/schema.org\/Monday", + "validFrom": "2018-01-01T00:00:00+01:00", + "validThrough": "2018-06-30T23:59:59+02:00" + }] + } +} +""" + hours = get_mairie_opening_hours(json.loads(geojson)) + assert hours[0] == ('lundi', {'am': '09h30-12h30', 'pm': None}) + + +@pytest.mark.freeze_time("2021-01-21 15:37:00") +def test_mairie_saint_genis_lavak(): + """ #50337 """ + geojson = json.load(open(os.path.join(BASE_DIR, 'tests/data/mairie-saint-genis-lavak.json'))) + test_time_table = get_mairie_opening_hours(geojson['features'][0]) + assert test_time_table == [ + ('lundi', {'am': '08h30-12h00', 'pm': '13h30-17h30'}), + ('mardi', {'am': '08h30-12h00', 'pm': '13h30-17h30'}), + ('mercredi', {'am': '08h30-12h00', 'pm': None}), + ('jeudi', {'am': '08h30-12h00', 'pm': '13h30-17h30'}), + ('vendredi', {'am': '08h30-12h00', 'pm': '13h30-17h30'}), + ('samedi', {'am': '09h00-12h00', 'pm': None}) + ]