diff --git a/src/agenda_culturel/celery.py b/src/agenda_culturel/celery.py index cdd387e..c9c9b60 100644 --- a/src/agenda_culturel/celery.py +++ b/src/agenda_culturel/celery.py @@ -145,6 +145,8 @@ def run_recurrent_import_internal(rimport, downloader, req_id): extractor = ICALNoBusyExtractor() elif rimport.processor == RecurrentImport.PROCESSOR.ICALNOVC: extractor = ICALNoVCExtractor() + elif rimport.processor == RecurrentImport.PROCESSOR.ICALNAIVETZ: + extractor = ICALNaiveTimezone() elif rimport.processor == RecurrentImport.PROCESSOR.LACOOPE: extractor = lacoope.CExtractor() elif rimport.processor == RecurrentImport.PROCESSOR.LACOMEDIE: diff --git a/src/agenda_culturel/import_tasks/extractor_ical.py b/src/agenda_culturel/import_tasks/extractor_ical.py index c99f0a9..8b88df0 100644 --- a/src/agenda_culturel/import_tasks/extractor_ical.py +++ b/src/agenda_culturel/import_tasks/extractor_ical.py @@ -18,6 +18,7 @@ logger = get_task_logger(__name__) class ICALExtractor(Extractor): def __init__(self): super().__init__() + self.naive_timezone = False self.to_timezone = pytz.timezone("Europe/Paris") @@ -54,7 +55,8 @@ class ICALExtractor(Extractor): if item is not None: if isinstance(item, datetime): - item = self.to_timezone.normalize(item) + if not self.naive_timezone: + item = self.to_timezone.normalize(item) day = item.date() time = item.time() elif isinstance(item, date): @@ -290,3 +292,8 @@ class ICALNoVCExtractor(ICALExtractor): image, image_alt, ) + +class ICALNaiveTimezone(ICALExtractor): + def __init__(self): + super().__init__() + self.naive_timezone = True \ No newline at end of file diff --git a/src/agenda_culturel/migrations/0149_alter_recurrentimport_processor.py b/src/agenda_culturel/migrations/0149_alter_recurrentimport_processor.py new file mode 100644 index 0000000..63ea77d --- /dev/null +++ b/src/agenda_culturel/migrations/0149_alter_recurrentimport_processor.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.9 on 2025-02-23 10:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('agenda_culturel', '0148_alter_recurrentimport_source'), + ] + + operations = [ + migrations.AlterField( + model_name='recurrentimport', + name='processor', + field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('ical naive tz', 'ical naive timezone'), ('lacoope', 'lacoope.org'), ('lacomedie', 'la comédie'), ('lefotomat', 'le fotomat'), ('lapucealoreille', "la puce à l'oreille"), ('Plugin wordpress MEC', 'Plugin wordpress MEC'), ('Facebook events', "Événements d'une page FB"), ('Billetterie CF', 'Billetterie Clermont-Ferrand'), ('arachnee', 'Arachnée concert'), ('rio', 'Le Rio'), ('raymonde', 'La Raymonde'), ('apidae', 'Agenda apidae tourisme'), ('iguana', 'Agenda iguana (médiathèques)'), ('Mille formes', 'Mille formes'), ('Amis cerises', 'Les Amis du Temps des Cerises'), ('Mobilizon', 'Mobilizon')], default='ical', max_length=20, verbose_name='Processor'), + ), + ] diff --git a/src/agenda_culturel/models.py b/src/agenda_culturel/models.py index 244ad13..1f8d439 100644 --- a/src/agenda_culturel/models.py +++ b/src/agenda_culturel/models.py @@ -2147,6 +2147,7 @@ class RecurrentImport(models.Model): ICAL = "ical", _("ical") ICALNOBUSY = "icalnobusy", _("ical no busy") ICALNOVC = "icalnovc", _("ical no VC") + ICALNAIVETZ = "ical naive tz", _("ical naive timezone") LACOOPE = "lacoope", _("lacoope.org") LACOMEDIE = "lacomedie", _("la comédie") LEFOTOMAT = "lefotomat", _("le fotomat")