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 et CSV_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.

start: str
end: str
occurrence: int | List[int] | None = None
__init__(start: str, end: str, occurrence: int | List[int] | None = None) None
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.

source_found: bool = False
open: bool = False
time_slots: List[TimeSlot]
__init__(source_found: bool = False, open: bool = False, time_slots: ~typing.List[~src.smart_watch.utils.OSMToCustomJson.TimeSlot] = <factory>) None
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é.

date: str
status: str
description: str | None = None
__init__(date: str, status: str, description: str | None = None) None
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_closed_schedule() Dict[source]

Crée un planning pour un lieu fermé définitivement.

_create_empty_weekly_schedule() Dict[str, DaySchedule][source]

Crée un planning hebdomadaire vide.

_is_date_rule(rule: str) bool[source]

Vérifie si une règle contient une date spécifique.

_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.

_fallback_tokenize(rule: str) List[str][source]

Méthode de fallback pour tokeniser les règles.

_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.

_parse_days(day_part: str) List[str][source]

Parse une spécification de jours.

_parse_time_slots(time_part: str, occurrence: int | List[int] | None = None) List[Dict[str, Any]][source]

Parse les créneaux horaires.

_is_valid_time(time_str: str) bool[source]

Vérifie si une chaîne est un horaire valide HH:MM.

class src.smart_watch.utils.OSMToCustomJson.OsmToJsonConverter[source]

Bases : object

Convertisseur principal d’OSM vers JSON personnalisé.

__init__()[source]
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.

_format_time_slot(time_slot: TimeSlot) Dict[str, Any][source]

Convertit un TimeSlot en dictionnaire JSON.

_create_empty_formatted_schedule() Dict[str, Any][source]

Crée un planning hebdomadaire formaté et vide.