CustomJsonToOSM

Ce module convertit les horaires d’ouverture du format JSON personnalisé de SmartWatch vers la spécification opening_hours d’OpenStreetMap.

Fonctionnalités

  • Conversion des horaires hebdomadaires compressés (ex: Mo-Fr).

  • Prise en charge des périodes spéciales : vacances, jours fériés, dates spécifiques.

  • Analyse des dates en français et anglais.

  • Gestion des créneaux multiples et occurrences (ex: 1er mardi du mois).

  • Détection des fermetures définitives.

Usage

La classe JsonToOsmConverter est utilisée dans :

  • la classe LLMProcessor du module llm_processor, pour convertir le JSON structuré extrait par le LLM au format OSM.

Module

class src.smart_watch.utils.CustomJsonToOSM.ConversionResult(osm_periods: Dict[str, str])[source]

Bases : object

Conteneur pour les résultats de conversion avec métadonnées.

osm_periods: Dict[str, str]
__init__(osm_periods: Dict[str, str]) None
class src.smart_watch.utils.CustomJsonToOSM.TimeSlot(start: str, end: str, occurence: int | List[int] | None = None)[source]

Bases : object

Représente un créneau horaire avec validation.

start: str
end: str
occurence: int | List[int] | None = None
static _validate_time_format(time_str: str) bool[source]

Valide le format d’heure HH:MM.

to_osm_format() str[source]

Convertit en format de plage horaire OSM (sans jour).

__init__(start: str, end: str, occurence: int | List[int] | None = None) None
class src.smart_watch.utils.CustomJsonToOSM.OSMDayMapper[source]

Bases : object

Gère le mappage et la validation des noms de jours.

DAY_MAPPING = {'dimanche': 'Su', 'jeudi': 'Th', 'lundi': 'Mo', 'mardi': 'Tu', 'mercredi': 'We', 'samedi': 'Sa', 'vendredi': 'Fr'}
DAY_ORDER = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su']
classmethod normalize_day(day: str) str | None[source]

Convertit un nom de jour en français au format OSM.

classmethod compress_day_ranges(days: List[str]) str[source]

Compresse les jours consécutifs en plages (Mo-Fr, Sa-Su, etc.).

class src.smart_watch.utils.CustomJsonToOSM.DateParser[source]

Bases : object

Gère l’analyse des dates avec prise en charge de plusieurs formats.

MONTH_MAPPING = {'aout': 'August', 'août': 'August', 'avr': 'Apr', 'avril': 'April', 'dec': 'Dec', 'decembre': 'December', 'déc': 'Dec', 'décembre': 'December', 'fev': 'Feb', 'fevrier': 'February', 'fév': 'Feb', 'février': 'February', 'jan': 'Jan', 'janvier': 'January', 'juil': 'Jul', 'juillet': 'July', 'juin': 'June', 'mai': 'May', 'mar': 'Mar', 'mars': 'March', 'nov': 'Nov', 'novembre': 'November', 'oct': 'Oct', 'octobre': 'October', 'sep': 'Sep', 'sept': 'Sep', 'septembre': 'September'}
classmethod parse_date_to_osm(date_desc: str) str | None[source]

Analyse une description de date au format OSM (YYYY MMM DD).

classmethod _basic_date_parse(date_str: str) str | None[source]

Analyse de base des dates sans dateutil.

class src.smart_watch.utils.CustomJsonToOSM.JsonToOsmConverter[source]

Bases : object

Convertisseur d’horaires d’ouverture OpenStreetMap.

__init__()[source]

Initialise le convertisseur OSM.

_process_time_slots(slots: List[Dict]) List[TimeSlot][source]

Traite et valide les créneaux horaires.

_process_daily_hours(day_data: Dict) List[Dict] | None[source]

Traite les horaires pour un jour donné. Retourne une liste de dicts {occurence, slot_str}.

_process_weekly_schedule(schedule: Dict) str[source]

Traite les données d’horaires hebdomadaires avec gestion des occurences.

_process_special_days(special_data: Dict, period_key: str) str[source]

Traite les jours spéciaux (jours fériés, exceptions) en distinguant leur type.

_has_valid_source_in_period(period_data: Dict) bool[source]

Vérifie si une période contient des données source valides.

convert_to_osm(data: Dict) ConversionResult[source]

Méthode principale de conversion.

Paramètres:

data – Données JSON en entrée

Renvoie:

ConversionResult avec les périodes OSM

_convert_by_periods(data: Dict) Dict[str, str][source]

Convertit les données par périodes individuelles.

convert_file(input_file: str | Path, output_file: Path | str | None = None) Dict[str, ConversionResult][source]

Convertit un fichier JSON entier.

Paramètres:
  • input_file – Chemin du fichier JSON en entrée

  • output_file – Chemin optionnel du fichier de sortie

Renvoie:

Dictionnaire des résultats de conversion par identifiant