OSMToCustomJson
Ce module convertit les chaînes d’horaires opening_hours d’OpenStreetMap en format JSON personnalisé, utilisé par SmartWatch.
Fonctionnalités
Parsing des chaînes
opening_hours
complexes.Gestion des plages de jours (ex: Mo-Fr), des jours uniques et des jours avec occurrences (ex: Tu[1,3]).
Reconnaissance des règles pour les dates spécifiques et les périodes de vacances.
Identification des statuts « ouvert » (open) et « fermé » (off/closed).
Reconstruction de la structure JSON complète, incluant les différentes périodes (semaine, vacances, jours fériés).
Usage
La classe OsmToJsonConverter
est utilisée dans :
le module database_processor, pour convertir les horaires au format OSM provenant de data.grandlyon.com en JSON (horaires rcéupérés depuis les fichiers csv désignés par les variables
CSV_URL_PISCINES
,CSV_URL_MAIRIES
etCSV_URL_MEDIATHEQUES
).
Module
- class src.smart_watch.utils.OSMToCustomJson.TimeSlot(start: str, end: str, occurrence: int | List[int] | None = None)[source]
Bases :
object
Représente un créneau horaire.
- class src.smart_watch.utils.OSMToCustomJson.DaySchedule(source_found: bool = False, open: bool = False, time_slots: ~typing.List[~src.smart_watch.utils.OSMToCustomJson.TimeSlot] = <factory>)[source]
Bases :
object
Représente les horaires d’une journée.
- class src.smart_watch.utils.OSMToCustomJson.SpecialDate(date: str, status: str, description: str | None = None)[source]
Bases :
object
Représente un jour spécial/férié.
- class src.smart_watch.utils.OSMToCustomJson.OSMParser[source]
Bases :
object
Parser principal pour les horaires OSM.
- DAY_MAPPING = {'Fr': 'vendredi', 'Mo': 'lundi', 'Sa': 'samedi', 'Su': 'dimanche', 'Th': 'jeudi', 'Tu': 'mardi', 'We': 'mercredi'}
- DAY_ORDER = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su']
- MONTH_MAPPING = {'Apr': '04', 'Aug': '08', 'Dec': '12', 'Feb': '02', 'Jan': '01', 'Jul': '07', 'Jun': '06', 'Mar': '03', 'May': '05', 'Nov': '11', 'Oct': '10', 'Sep': '09'}
- parse_osm_string(osm_string: str) Dict [source]
Parse une chaîne OSM complète avec une approche robuste.
- _create_empty_weekly_schedule() Dict[str, DaySchedule] [source]
Crée un planning hebdomadaire vide.
- _is_vacation_period(rule: str) bool [source]
Vérifie si c’est une période de vacances (avec une plage de dates).
- _parse_special_date(rule: str) SpecialDate | None [source]
Parse une règle de date spéciale.
- _parse_regular_schedule(rule: str, weekly_schedule: Dict[str, DaySchedule])[source]
Parse une règle d’horaires réguliers avec approche robuste.
- _tokenize_rule(rule: str) List[str] [source]
Divise une règle en segments individuels. Approche robuste qui gère tous les cas de figure.
- _parse_segment(segment: str, weekly_schedule: Dict[str, DaySchedule])[source]
Parse un segment individuel jour+horaire.
- _parse_days_with_occurrence(day_part: str) List[Dict[str, Any]] [source]
Parse une spécification de jours avec gestion des occurrences.
- class src.smart_watch.utils.OSMToCustomJson.OsmToJsonConverter[source]
Bases :
object
Convertisseur principal d’OSM vers JSON personnalisé.
- convert_osm_string(osm_string: str, metadata: Dict | None = None) Dict [source]
Convertit une chaîne OSM en JSON personnalisé.
- _format_weekly_schedule(weekly_schedule: Dict[str, DaySchedule]) Dict[str, Any] [source]
Convertit le planning de DaySchedule en dictionnaire JSON.