# Generated by Django 4.2.19 on 2025-03-02 11:46

import autoslug.fields
import ckeditor.fields
import colorfield.fields
from django.conf import settings
import django.contrib.gis.geos.point
import django.contrib.postgres.operations
from django.db import migrations, models
import django.db.models.deletion
import django.db.models.functions.text
import django_better_admin_arrayfield.models.fields
import django_ckeditor_5.fields
import django_resized.forms
import location_field.models.plain
import location_field.models.spatial
import recurrence.fields

def set_representative_from_fixed_masked(apps, cats):
    # get all duplicated events
    DuplicatedEvents = apps.get_model("agenda_culturel", "DuplicatedEvents")
    duplicated = DuplicatedEvents.objects.all().prefetch_related('event_set')

    to_update = []
    for d in duplicated:
        # there is no representative
        d.representative = None
        # except if d is fixed
        if d.fixed:
            # and if there is at least one non masked (should be the case)
            e_not_masked = [e for e in d.event_set.all() if not e.masked]
            # keep the first one
            if len(e_not_masked) >= 1:
                d.representative = e_not_masked[0]
        to_update.append(d)

    DuplicatedEvents.objects.bulk_update(to_update, fields=["representative"])

def set_fixed_masked_from_representative(apps, cats):
    Event = apps.get_model("agenda_culturel", "Event")
    events = Event.objects.all().prefetch_related("possibly_duplicated")

    to_update = []
    for e in events:
        if not e.possibly_duplicated:
            e.masked = False
        else:
            e.masked = e.possibly_duplicated.representative and e.possibly_duplicated.representative == e
        to_update.append(e)

    Event.objects.bulk_update(to_update, fields=["masked"])

    # get all duplicated events
    DuplicatedEvents = apps.get_model("agenda_culturel", "DuplicatedEvents")
    duplicated = DuplicatedEvents.objects.all().prefetch_related('event_set')

    # for each event
    to_update = []
    for d in duplicated:
        d.fixed = not d.representative is None
        to_update.append(d)

    DuplicatedEvents.objects.bulk_update(to_update, fields=["fixed"])

def strip_place_aliases(apps, schema_editor):
    Place = apps.get_model("agenda_culturel", "Place")

    places = Place.objects.all()

    for p in places:
        if not p.aliases is None:
            p.aliases = [a.strip() for a in p.aliases]

    Place.objects.bulk_update(places, fields=["aliases"])

def do_nothing(apps, schema_editor):
    pass

def migrate_data_slug_forward(apps, schema_editor):
    Category = apps.get_model("agenda_culturel", "Category")

    for instance in Category.objects.all():
        print("Generating slug for %s"%instance)
        instance.save() # Will trigger slug update

def migrate_data_slug_backward(apps, schema_editor):
    pass


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='Category',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(help_text='Category name', max_length=512, verbose_name='Name')),
                ('color', colorfield.fields.ColorField(blank=True, default=None, help_text='Color used as background for the category', image_field=None, max_length=25, null=True, samples=None, verbose_name='Color')),
            ],
            options={
                'verbose_name': 'Category',
                'verbose_name_plural': 'Categories',
            },
        ),
        migrations.CreateModel(
            name='StaticContent',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(help_text='Category name', max_length=512, unique=True, verbose_name='Name')),
                ('text', ckeditor.fields.RichTextField(help_text='Text as shown to the visitors', verbose_name='Content')),
                ('url_path', models.CharField(help_text='URL path where the content is included.', verbose_name='URL path')),
            ],
        ),
        migrations.CreateModel(
            name='Message',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('subject', models.CharField(help_text='The subject of your message', max_length=512, verbose_name='Subject')),
                ('name', models.CharField(blank=True, help_text='Your name', max_length=512, null=True, verbose_name='Name')),
                ('date', models.DateTimeField(auto_now_add=True)),
                ('closed', models.BooleanField(default=False, help_text='this message has been processed and no longer needs to be handled', verbose_name='Closed')),
                ('message', ckeditor.fields.RichTextField(help_text='Your message', verbose_name='Message')),
                ('email', models.EmailField(blank=True, help_text='Your email address', max_length=254, null=True, verbose_name='Email address')),
                ('comments', ckeditor.fields.RichTextField(blank=True, default='', help_text='Comments on the message from the moderation team', null=True, verbose_name='Comments')),
            ],
        ),
        migrations.CreateModel(
            name='BatchImportation',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_date', models.DateTimeField(auto_now_add=True)),
                ('source', models.URLField(blank=True, help_text='URL of the source document', max_length=1024, null=True, verbose_name='Source')),
                ('browsable_url', models.URLField(blank=True, help_text='URL of the corresponding document that will be shown to visitors.', max_length=1024, null=True, verbose_name='Browsable url')),
                ('status', models.CharField(choices=[('running', 'Running'), ('canceled', 'Canceled'), ('success', 'Success'), ('failed', 'Failed')], default='running', max_length=20, verbose_name='Status')),
                ('error_message', models.CharField(blank=True, max_length=512, null=True, verbose_name='Error message')),
                ('nb_imported', models.PositiveIntegerField(default=0, verbose_name='Number of imported events')),
                ('nb_initial', models.PositiveIntegerField(default=0, verbose_name='Number of collected events')),
                ('celery_id', models.CharField(default='', max_length=128)),
                ('nb_removed', models.PositiveIntegerField(default=0, verbose_name='Number of removed events')),
                ('nb_updated', models.PositiveIntegerField(default=0, verbose_name='Number of updated events')),
            ],
        ),
        migrations.CreateModel(
            name='DuplicatedEvents',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
            ],
        ),
        migrations.CreateModel(
            name='Event',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_date', models.DateTimeField(editable=False)),
                ('modified_date', models.DateTimeField(blank=True, null=True)),
                ('title', models.CharField(help_text='Short title', max_length=512, verbose_name='Title')),
                ('status', models.CharField(choices=[('published', 'Published'), ('draft', 'Draft'), ('trash', 'Trash')], default='published', max_length=20, verbose_name='Status')),
                ('start_day', models.DateField(help_text='Day of the event', verbose_name='Day of the event')),
                ('start_time', models.TimeField(blank=True, help_text='Starting time', null=True, verbose_name='Starting time')),
                ('end_day', models.DateField(blank=True, help_text='End day of the event, only required if different from the start day.', null=True, verbose_name='End day of the event')),
                ('end_time', models.TimeField(blank=True, help_text='Final time', null=True, verbose_name='Final time')),
                ('location', models.CharField(help_text='Address of the event', max_length=512, verbose_name='Location')),
                ('description', models.TextField(blank=True, help_text='General description of the event', null=True, verbose_name='Description')),
                ('local_image', models.ImageField(blank=True, help_text='Illustration image stored in the agenda server', max_length=1024, null=True, upload_to='', verbose_name='Illustration (local image)')),
                ('image', models.URLField(blank=True, help_text='URL of the illustration image', max_length=1024, null=True, verbose_name='Illustration')),
                ('image_alt', models.CharField(blank=True, help_text='Alternative text used by screen readers for the image', max_length=1024, null=True, verbose_name='Illustration description')),
                ('reference_urls', django_better_admin_arrayfield.models.fields.ArrayField(base_field=models.URLField(max_length=512), blank=True, help_text='List of all the urls where this event can be found.', null=True, size=None, verbose_name='URLs')),
                ('tags', django_better_admin_arrayfield.models.fields.ArrayField(base_field=models.CharField(max_length=64), blank=True, help_text='A list of tags that describe the event.', null=True, size=None, verbose_name='Tags')),
                ('category', models.ForeignKey(default=None, help_text='Category of the event', null=True, on_delete=django.db.models.deletion.SET_DEFAULT, to='agenda_culturel.category', verbose_name='Category')),
                ('uuids', django_better_admin_arrayfield.models.fields.ArrayField(base_field=models.CharField(max_length=512), blank=True, help_text='UUIDs from import to detect duplicated entries.', null=True, size=None, verbose_name='UUIDs')),
                ('imported_date', models.DateTimeField(blank=True, null=True)),
                ('possibly_duplicated', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='agenda_culturel.duplicatedevents')),
            ],
            options={
                'verbose_name': 'Event',
                'verbose_name_plural': 'Events',
            },
        ),
        django.contrib.postgres.operations.TrigramExtension(
        ),
        migrations.AlterField(
            model_name='event',
            name='possibly_duplicated',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='agenda_culturel.duplicatedevents', verbose_name='Possibly duplicated'),
        ),
        migrations.AddField(
            model_name='event',
            name='import_sources',
            field=django_better_admin_arrayfield.models.fields.ArrayField(base_field=models.CharField(max_length=512), blank=True, help_text='Importation source used to detect removed entries.', null=True, size=None, verbose_name='Importation source'),
        ),
        migrations.AlterField(
            model_name='event',
            name='status',
            field=models.CharField(choices=[('published', 'Published'), ('draft', 'Draft'), ('trash', 'Trash')], default='draft', max_length=20, verbose_name='Status'),
        ),
        migrations.AddField(
            model_name='event',
            name='recurrence_dtend',
            field=models.DateTimeField(blank=True, editable=False, null=True),
        ),
        migrations.AddField(
            model_name='event',
            name='recurrence_dtstart',
            field=models.DateTimeField(blank=True, editable=False, null=True),
        ),
        migrations.AddField(
            model_name='event',
            name='recurrences',
            field=recurrence.fields.RecurrenceField(blank=True, null=True, verbose_name='Recurrence'),
        ),
        migrations.CreateModel(
            name='RecurrentImport',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('processor', models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC')], default='ical', max_length=20, verbose_name='Processor')),
                ('recurrence', models.CharField(choices=[('daily', 'daily'), ('weekly', 'weekly')], default='daily', max_length=10, verbose_name='Import recurrence')),
                ('source', models.URLField(help_text='URL of the source document', max_length=1024, verbose_name='Source')),
                ('browsable_url', models.URLField(blank=True, help_text='URL of the corresponding document that will be shown to visitors.', max_length=1024, null=True, verbose_name='Browsable url')),
                ('defaultLocation', models.CharField(blank=True, help_text='Address for each imported event', max_length=512, null=True, verbose_name='Location')),
                ('defaultTags', django_better_admin_arrayfield.models.fields.ArrayField(base_field=models.CharField(max_length=64), blank=True, help_text='A list of tags that describe each imported event.', null=True, size=None, verbose_name='Tags for each imported event')),
                ('defaultCategory', models.ForeignKey(blank=True, default=None, help_text='Category of each imported event', null=True, on_delete=django.db.models.deletion.SET_DEFAULT, to='agenda_culturel.category', verbose_name='Category')),
                ('downloader', models.CharField(choices=[('simple', 'simple'), ('chromium headless', 'Headless Chromium')], default='simple', max_length=20, verbose_name='Downloader')),
                ('defaultPublished', models.BooleanField(default=True, help_text='Status of each imported event (published or draft)', verbose_name='Published')),
                ('name', models.CharField(default='', help_text='Recurrent import name', max_length=512, verbose_name='Name')),
            ],
        ),
        migrations.AddField(
            model_name='batchimportation',
            name='recurrentImport',
            field=models.ForeignKey(blank=True, editable=False, help_text='Reference to the recurrent import processing', null=True, on_delete=django.db.models.deletion.SET_NULL, to='agenda_culturel.recurrentimport', verbose_name='Recurrent import'),
        ),
        migrations.RemoveField(
            model_name='batchimportation',
            name='browsable_url',
        ),
        migrations.RemoveField(
            model_name='batchimportation',
            name='source',
        ),
        migrations.CreateModel(
            name='CategorisationRule',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('weight', models.IntegerField(default=0, help_text='The lower is the weight, the earlier the filter is applied', verbose_name='Weight')),
                ('description_contains', models.CharField(blank=True, help_text='Text contained in the description', max_length=512, null=True, verbose_name='Contained in the description')),
                ('desc_exact', models.BooleanField(default=False, help_text='If checked, the extract will be searched for in the description using the exact form (capitals, accents).', verbose_name='Exact description extract')),
                ('title_contains', models.CharField(blank=True, help_text='Text contained in the event title', max_length=512, null=True, verbose_name='Contained in the title')),
                ('title_exact', models.BooleanField(default=False, help_text='If checked, the extract will be searched for in the title using the exact form (capitals, accents).', verbose_name='Exact title extract')),
                ('category', models.ForeignKey(help_text='Category applied to the event', on_delete=django.db.models.deletion.CASCADE, to='agenda_culturel.category', verbose_name='Category')),
            ],
        ),
        migrations.AlterField(
            model_name='event',
            name='location',
            field=models.CharField(default='', help_text='Address of the event', max_length=512, verbose_name='Location'),
        ),
        migrations.AlterModelOptions(
            name='batchimportation',
            options={'permissions': [('run_batchimportation', 'Can run a batch importation')]},
        ),
        migrations.AlterModelOptions(
            name='categorisationrule',
            options={'permissions': [('apply_categorisationrules', 'Apply a categorisation rule')]},
        ),
        migrations.AlterModelOptions(
            name='event',
            options={'permissions': [('set_duplicated_event', 'Can set an event as duplicated')], 'verbose_name': 'Event', 'verbose_name_plural': 'Events'},
        ),
        migrations.AlterModelOptions(
            name='recurrentimport',
            options={'permissions': [('run_recurrentimport', 'Can run a recurrent import')]},
        ),
        migrations.CreateModel(
            name='ModerationQuestion',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('question', models.CharField(help_text='Text that will be shown to moderators', max_length=512, unique=True, verbose_name='Question')),
            ],
        ),
        migrations.CreateModel(
            name='ModerationAnswer',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('answer', models.CharField(help_text='Text that will be shown to moderators', max_length=512, unique=True, verbose_name='Answer')),
                ('adds_tags', django_better_admin_arrayfield.models.fields.ArrayField(base_field=models.CharField(max_length=64), blank=True, help_text='A list of tags that will be added if you choose this answer.', null=True, size=None, verbose_name='Adds tags')),
                ('removes_tags', django_better_admin_arrayfield.models.fields.ArrayField(base_field=models.CharField(max_length=64), blank=True, help_text='A list of tags that will be removed if you choose this answer.', null=True, size=None, verbose_name='Removes tags')),
                ('description', models.ForeignKey(help_text='Associated question from moderation', on_delete=django.db.models.deletion.CASCADE, to='agenda_culturel.moderationquestion', verbose_name='Question')),
            ],
        ),
        migrations.RenameField(
            model_name='moderationanswer',
            old_name='description',
            new_name='question',
        ),
        migrations.AlterField(
            model_name='moderationanswer',
            name='answer',
            field=models.CharField(help_text='Text that will be shown to moderators', max_length=512, verbose_name='Answer'),
        ),
        migrations.AlterField(
            model_name='moderationanswer',
            name='question',
            field=models.ForeignKey(help_text='Associated question from moderation', on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='agenda_culturel.moderationquestion', verbose_name='Question'),
        ),
        migrations.AlterModelOptions(
            name='batchimportation',
            options={'permissions': [('run_batchimportation', 'Can run a batch importation')], 'verbose_name': 'Batch importation', 'verbose_name_plural': 'Batch importations'},
        ),
        migrations.AlterModelOptions(
            name='categorisationrule',
            options={'permissions': [('apply_categorisationrules', 'Apply a categorisation rule')], 'verbose_name': 'Categorisation rule', 'verbose_name_plural': 'Categorisation rules'},
        ),
        migrations.AlterModelOptions(
            name='message',
            options={'verbose_name': 'Contact message', 'verbose_name_plural': 'Contact messages'},
        ),
        migrations.AlterModelOptions(
            name='moderationquestion',
            options={'permissions': [('use_moderation_question', 'Can use a moderation question to tag an event')], 'verbose_name': 'Moderation question', 'verbose_name_plural': 'Moderation questions'},
        ),
        migrations.AlterModelOptions(
            name='recurrentimport',
            options={'permissions': [('run_recurrentimport', 'Can run a recurrent import')], 'verbose_name': 'Recurrent import', 'verbose_name_plural': 'Recurrent imports'},
        ),
        migrations.AddField(
            model_name='event',
            name='moderated_date',
            field=models.DateTimeField(blank=True, null=True),
        ),
        migrations.AddField(
            model_name='categorisationrule',
            name='loc_exact',
            field=models.BooleanField(default=False, help_text='If checked, the extract will be searched for in the location using the exact form (capitals, accents).', verbose_name='Exact location extract'),
        ),
        migrations.AddField(
            model_name='categorisationrule',
            name='location_contains',
            field=models.CharField(blank=True, help_text='Text contained in the event location', max_length=512, null=True, verbose_name='Contained in the location'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('lacoope', 'lacoope.org')], default='ical', max_length=20, verbose_name='Processor'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('lacoope', 'lacoope.org'), ('lacomedie', 'la comédie')], default='ical', max_length=20, verbose_name='Processor'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('lacoope', 'lacoope.org'), ('lacomedie', 'la comédie'), ('lephotomat', 'le photomat')], default='ical', max_length=20, verbose_name='Processor'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('lacoope', 'lacoope.org'), ('lacomedie', 'la comédie'), ('lefotomat', 'le fotomat')], default='ical', max_length=20, verbose_name='Processor'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('lacoope', 'lacoope.org'), ('lacomedie', 'la comédie'), ('lefotomat', 'le fotomat'), ('lapucealoreille', 'la puce à loreille')], default='ical', max_length=20, verbose_name='Processor'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='name',
            field=models.CharField(default='', help_text='Recurrent import name. Be careful to choose a name that is easy to understand, as it will be public and displayed on the sites About page.', max_length=512, verbose_name='Name'),
        ),
        migrations.CreateModel(
            name='Place',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(help_text='Name of the place', verbose_name='Name')),
                ('address', models.CharField(help_text='Address of this place (without city name)', verbose_name='Address')),
                ('location', location_field.models.plain.PlainLocationField(max_length=63)),
                ('aliases', django_better_admin_arrayfield.models.fields.ArrayField(base_field=models.CharField(max_length=512), blank=True, help_text='Alternative names or addresses used to match a place with the free-form location of an event.', null=True, size=None, verbose_name='Alternative names')),
                ('city', models.CharField(default='', help_text='City name', verbose_name='City')),
            ],
            options={
                'verbose_name': 'Place',
                'verbose_name_plural': 'Places',
            },
        ),
        migrations.AlterField(
            model_name='event',
            name='location',
            field=models.CharField(default='', help_text='Address of the event in case its not available in the already known places (free form)', max_length=512, verbose_name='Location (free form)'),
        ),
        migrations.AddField(
            model_name='event',
            name='exact_location',
            field=models.ForeignKey(help_text='Address of the event', null=True, on_delete=django.db.models.deletion.SET_NULL, to='agenda_culturel.place', verbose_name='Location'),
        ),
        migrations.AlterField(
            model_name='place',
            name='address',
            field=models.CharField(blank=True, help_text='Address of this place (without city name)', null=True, verbose_name='Address'),
        ),
        django.contrib.postgres.operations.UnaccentExtension(
        ),
        migrations.AlterModelOptions(
            name='duplicatedevents',
            options={'verbose_name': 'Duplicated events', 'verbose_name_plural': 'Duplicated events'},
        ),
        migrations.AlterModelOptions(
            name='staticcontent',
            options={'verbose_name': 'Static content', 'verbose_name_plural': 'Static contents'},
        ),
        migrations.AlterField(
            model_name='event',
            name='exact_location',
            field=models.ForeignKey(blank=True, help_text='Address of the event', null=True, on_delete=django.db.models.deletion.SET_NULL, to='agenda_culturel.place', verbose_name='Location'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('lacoope', 'lacoope.org'), ('lacomedie', 'la comédie'), ('lefotomat', 'le fotomat'), ('lapucealoreille', 'la puce à loreille'), ('Plugin wordpress MEC', 'Plugin wordpress MEC')], default='ical', max_length=20, verbose_name='Processor'),
        ),
        migrations.AlterModelOptions(
            name='place',
            options={'ordering': ['name'], 'verbose_name': 'Place', 'verbose_name_plural': 'Places'},
        ),
        migrations.AddField(
            model_name='batchimportation',
            name='url_source',
            field=models.URLField(blank=True, editable=False, help_text='Source URL if no RecurrentImport is associated.', max_length=1024, null=True, verbose_name='URL (if not recurrent import)'),
        ),
        migrations.AddField(
            model_name='categorisationrule',
            name='place',
            field=models.ForeignKey(blank=True, help_text='Location from place', null=True, on_delete=django.db.models.deletion.SET_NULL, to='agenda_culturel.place', verbose_name='Place'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('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")], default='ical', max_length=20, verbose_name='Processor'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='downloader',
            field=models.CharField(choices=[('simple', 'simple'), ('chromium headless', 'Headless Chromium'), ('chromium (pause)', 'Headless Chromium (pause)')], default='simple', max_length=20, verbose_name='Downloader'),
        ),
        migrations.AlterField(
            model_name='message',
            name='comments',
            field=django_ckeditor_5.fields.CKEditor5Field(blank=True, default='', help_text='Comments on the message from the moderation team', null=True, verbose_name='Comments'),
        ),
        migrations.AlterField(
            model_name='message',
            name='message',
            field=django_ckeditor_5.fields.CKEditor5Field(help_text='Your message', verbose_name='Message'),
        ),
        migrations.AlterField(
            model_name='staticcontent',
            name='text',
            field=django_ckeditor_5.fields.CKEditor5Field(help_text='Text as shown to the visitors', verbose_name='Content'),
        ),
        migrations.AlterField(
            model_name='message',
            name='message',
            field=django_ckeditor_5.fields.CKEditor5Field(blank=True, help_text='Your message', verbose_name='Message'),
        ),
        migrations.AlterField(
            model_name='staticcontent',
            name='text',
            field=django_ckeditor_5.fields.CKEditor5Field(blank=True, help_text='Text as shown to the visitors', verbose_name='Content'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('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"), ('cour3coquins', 'la cour des 3 coquins')], default='ical', max_length=20, verbose_name='Processor'),
        ),
        migrations.AlterField(
            model_name='event',
            name='location',
            field=models.CharField(blank=True, default='', help_text='Address of the event in case its not available in the already known places (free form)', max_length=512, null=True, verbose_name='Location (free form)'),
        ),
        migrations.AddField(
            model_name='category',
            name='pictogram',
            field=models.FileField(blank=True, help_text='Pictogram of the category (svg format)', max_length=1024, null=True, upload_to='', verbose_name='Pictogram'),
        ),
        migrations.AddField(
            model_name='category',
            name='position',
            field=models.IntegerField(default=0, verbose_name='Position for ordering categories'),
        ),
        migrations.AddField(
            model_name='message',
            name='spam',
            field=models.BooleanField(default=False, help_text='This message is a spam.', verbose_name='Spam'),
        ),
        migrations.AddField(
            model_name='place',
            name='location_pt',
            field=location_field.models.spatial.LocationField(default=django.contrib.gis.geos.point.Point(45.783329, 3.08333), srid=4326),
        ),
        migrations.RemoveField(
            model_name='place',
            name='location',
        ),
        migrations.RenameField(
            model_name='place',
            old_name='location_pt',
            new_name='location',
        ),
        migrations.AlterField(
            model_name='place',
            name='location',
            field=location_field.models.spatial.LocationField(default=django.contrib.gis.geos.point.Point(3.08333, 45.783329), srid=4326),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('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"), ('cour3coquins', 'la cour des 3 coquins')], default='ical', max_length=20, verbose_name='Processor'),
        ),
        migrations.CreateModel(
            name='ReferenceLocation',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(help_text='Name of the location', unique=True, verbose_name='Name')),
                ('location', location_field.models.spatial.LocationField(default=django.contrib.gis.geos.point.Point(3.08333, 45.783329), srid=4326)),
                ('main', models.BooleanField(default=False, help_text='This location is one of the main locations (shown first).', verbose_name='Main')),
            ],
            options={
                'verbose_name': 'Reference location',
                'verbose_name_plural': 'Reference locations',
            },
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('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"), ('cour3coquins', 'la cour des 3 coquins'), ('arachnee', 'Arachnée concert')], default='ical', max_length=20, verbose_name='Processor'),
        ),
        migrations.AddField(
            model_name='duplicatedevents',
            name='fixed',
            field=models.BooleanField(blank=True, default=False, help_text='This duplicated events is fixed, ie exactly one of the listed events is not masked.', null=True, verbose_name='Fixed'),
        ),
        migrations.AddField(
            model_name='event',
            name='masked',
            field=models.BooleanField(blank=True, default=False, help_text='This event is masked by a duplicated version.', null=True, verbose_name='Masked'),
        ),
        migrations.AlterField(
            model_name='categorisationrule',
            name='weight',
            field=models.IntegerField(default=1, help_text='The lower is the weight, the earlier the filter is applied', verbose_name='Weight'),
        ),
        migrations.CreateModel(
            name='Tag',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(help_text='Tag name', max_length=512, verbose_name='Name')),
                ('description', models.TextField(blank=True, help_text='Description of the tag', null=True, verbose_name='Description')),
                ('principal', models.BooleanField(default=True, help_text='This tag is highlighted as a main tag for visitors, particularly in the filter.', verbose_name='Principal')),
            ],
        ),
        migrations.AlterField(
            model_name='tag',
            name='description',
            field=django_ckeditor_5.fields.CKEditor5Field(blank=True, help_text='Description of the tag', null=True, verbose_name='Description'),
        ),
        migrations.AlterField(
            model_name='tag',
            name='name',
            field=models.CharField(help_text='Tag name', max_length=512, unique=True, verbose_name='Name'),
        ),
        migrations.AddField(
            model_name='tag',
            name='category',
            field=models.ForeignKey(blank=True, default=None, help_text='This tags corresponds to a sub-category of the given category', null=True, on_delete=django.db.models.deletion.SET_NULL, to='agenda_culturel.category', verbose_name='Category'),
        ),
        migrations.AddField(
            model_name='duplicatedevents',
            name='representative',
            field=models.ForeignKey(default=None, help_text='This event is the representative event of the duplicated events group', null=True, on_delete=django.db.models.deletion.SET_DEFAULT, to='agenda_culturel.event', verbose_name='Representative event'),
        ),
        migrations.RunPython(
            code=set_representative_from_fixed_masked,
            reverse_code=set_fixed_masked_from_representative,
        ),
        migrations.RemoveField(
            model_name='duplicatedevents',
            name='fixed',
        ),
        migrations.RemoveField(
            model_name='event',
            name='masked',
        ),
        migrations.RenameField(
            model_name='event',
            old_name='possibly_duplicated',
            new_name='other_versions',
        ),
        migrations.AlterField(
            model_name='event',
            name='other_versions',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='agenda_culturel.duplicatedevents', verbose_name='Other versions'),
        ),
        migrations.RunPython(
            code=strip_place_aliases,
            reverse_code=do_nothing,
        ),
        migrations.DeleteModel(
            name='ModerationAnswer',
        ),
        migrations.DeleteModel(
            name='ModerationQuestion',
        ),
        migrations.AddField(
            model_name='tag',
            name='in_excluded_suggestions',
            field=models.BooleanField(default=False, help_text='This tag will be part of the excluded suggestions.', verbose_name='In excluded suggestions'),
        ),
        migrations.AddField(
            model_name='tag',
            name='in_included_suggestions',
            field=models.BooleanField(default=False, help_text='This tag will be part of the included suggestions.', verbose_name='In included suggestions'),
        ),
        migrations.AlterField(
            model_name='referencelocation',
            name='main',
            field=models.IntegerField(default=0, help_text='This location is one of the main locations (shown first higher values).', verbose_name='Main'),
        ),
        migrations.AddField(
            model_name='place',
            name='description',
            field=django_ckeditor_5.fields.CKEditor5Field(blank=True, help_text='Description of the place, including accessibility.', null=True, verbose_name='Description'),
        ),
        migrations.RemoveField(
            model_name='tag',
            name='category',
        ),
        migrations.CreateModel(
            name='Organisation',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(help_text='Organisation name', max_length=512, unique=True, verbose_name='Name')),
                ('website', models.URLField(blank=True, help_text='Website of the organisation', max_length=1024, null=True, verbose_name='Website')),
                ('description', django_ckeditor_5.fields.CKEditor5Field(blank=True, help_text='Description of the organisation.', null=True, verbose_name='Description')),
                ('principal_place', models.ForeignKey(blank=True, help_text='Place mainly associated with this organizer. Mainly used if there is a similarity in the name, to avoid redundant displays.', null=True, on_delete=django.db.models.deletion.SET_NULL, to='agenda_culturel.place', verbose_name='Principal place')),
            ],
            options={
                'verbose_name': 'Organisation',
                'verbose_name_plural': 'Organisations',
            },
        ),
        migrations.AddField(
            model_name='recurrentimport',
            name='defaultOrganiser',
            field=models.ForeignKey(blank=True, default=None, help_text='Organiser of each imported event', null=True, on_delete=django.db.models.deletion.SET_DEFAULT, to='agenda_culturel.organisation', verbose_name='Organiser'),
        ),
        migrations.AddField(
            model_name='event',
            name='organisers',
            field=models.ManyToManyField(blank=True, help_text='list of event organisers. Organizers will only be displayed if one of them does not normally use the venue.', related_name='organised_events', to='agenda_culturel.organisation', verbose_name='Organisers'),
        ),
        migrations.AddIndex(
            model_name='event',
            index=models.Index(fields=['start_day', 'start_time'], name='agenda_cult_start_d_68ab5f_idx'),
        ),
        migrations.AddIndex(
            model_name='event',
            index=models.Index(models.F('start_time'), django.db.models.functions.text.Lower('title'), name='start_time title'),
        ),
        migrations.AlterModelOptions(
            name='tag',
            options={'verbose_name': 'Étiquette', 'verbose_name_plural': 'Étiquettes'},
        ),
        migrations.AddIndex(
            model_name='category',
            index=models.Index(fields=['name'], name='agenda_cult_name_28aa03_idx'),
        ),
        migrations.AddIndex(
            model_name='referencelocation',
            index=models.Index(fields=['name'], name='agenda_cult_name_76f079_idx'),
        ),
        migrations.AddIndex(
            model_name='staticcontent',
            index=models.Index(fields=['name'], name='agenda_cult_name_fe4995_idx'),
        ),
        migrations.AddIndex(
            model_name='tag',
            index=models.Index(fields=['name'], name='agenda_cult_name_9c9c74_idx'),
        ),
        migrations.AlterModelOptions(
            name='tag',
            options={'verbose_name': 'Tag', 'verbose_name_plural': 'Tags'},
        ),
        migrations.AlterField(
            model_name='event',
            name='category',
            field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.SET_DEFAULT, to='agenda_culturel.category', verbose_name='Category'),
        ),
        migrations.AlterField(
            model_name='event',
            name='description',
            field=models.TextField(blank=True, null=True, verbose_name='Description'),
        ),
        migrations.AlterField(
            model_name='event',
            name='end_day',
            field=models.DateField(blank=True, null=True, verbose_name='End day'),
        ),
        migrations.AlterField(
            model_name='event',
            name='end_time',
            field=models.TimeField(blank=True, null=True, verbose_name='End time'),
        ),
        migrations.AlterField(
            model_name='event',
            name='exact_location',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='agenda_culturel.place', verbose_name='Location'),
        ),
        migrations.AlterField(
            model_name='event',
            name='image',
            field=models.URLField(blank=True, help_text='External URL of the illustration image', max_length=1024, null=True, verbose_name='Illustration (URL)'),
        ),
        migrations.AlterField(
            model_name='event',
            name='local_image',
            field=models.ImageField(blank=True, max_length=1024, null=True, upload_to='', verbose_name='Illustration'),
        ),
        migrations.AlterField(
            model_name='event',
            name='start_day',
            field=models.DateField(verbose_name='Start day'),
        ),
        migrations.AlterField(
            model_name='event',
            name='start_time',
            field=models.TimeField(blank=True, null=True, verbose_name='Start time'),
        ),
        migrations.AlterField(
            model_name='event',
            name='tags',
            field=django_better_admin_arrayfield.models.fields.ArrayField(base_field=models.CharField(max_length=64), blank=True, null=True, size=None, verbose_name='Tags'),
        ),
        migrations.AlterField(
            model_name='event',
            name='title',
            field=models.CharField(max_length=512, verbose_name='Title'),
        ),
        migrations.AddField(
            model_name='referencelocation',
            name='suggested_distance',
            field=models.IntegerField(default=None, help_text='If this distance is given, this location is part of the suggested filters.', null=True, verbose_name='Suggested distance (km)'),
        ),
        migrations.AddField(
            model_name='message',
            name='related_event',
            field=models.ForeignKey(default=None, help_text='The message is associated with this event.', null=True, on_delete=django.db.models.deletion.SET_DEFAULT, to='agenda_culturel.event', verbose_name='Related event'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('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"), ('cour3coquins', 'la cour des 3 coquins'), ('arachnee', 'Arachnée concert'), ('rio', 'Le Rio')], default='ical', max_length=20, verbose_name='Processor'),
        ),
        migrations.AddField(
            model_name='event',
            name='created_by_user',
            field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.SET_DEFAULT, related_name='created_events', to=settings.AUTH_USER_MODEL, verbose_name='Author of the event creation'),
        ),
        migrations.AddField(
            model_name='event',
            name='imported_by_user',
            field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.SET_DEFAULT, related_name='imported_events', to=settings.AUTH_USER_MODEL, verbose_name='Author of the last importation'),
        ),
        migrations.AddField(
            model_name='event',
            name='moderated_by_user',
            field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.SET_DEFAULT, related_name='moderated_events', to=settings.AUTH_USER_MODEL, verbose_name='Author of the last moderation'),
        ),
        migrations.AddField(
            model_name='event',
            name='modified_by_user',
            field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.SET_DEFAULT, related_name='modified_events', to=settings.AUTH_USER_MODEL, verbose_name='Author of the last modification'),
        ),
        migrations.AddField(
            model_name='place',
            name='postcode',
            field=models.CharField(blank=True, help_text='The post code is not displayed, but makes it easier to find an address when you enter it.', null=True, verbose_name='Postcode'),
        ),
        migrations.AlterModelOptions(
            name='message',
            options={'verbose_name': 'Message', 'verbose_name_plural': 'Messages'},
        ),
        migrations.AddField(
            model_name='message',
            name='user',
            field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.SET_DEFAULT, to=settings.AUTH_USER_MODEL, verbose_name='Author of the message'),
        ),
        migrations.AddIndex(
            model_name='event',
            index=models.Index(fields=['end_day', 'end_time'], name='agenda_cult_end_day_4660a5_idx'),
        ),
        migrations.AddIndex(
            model_name='event',
            index=models.Index(fields=['status'], name='agenda_cult_status_893243_idx'),
        ),
        migrations.AddIndex(
            model_name='event',
            index=models.Index(fields=['recurrence_dtstart', 'recurrence_dtend'], name='agenda_cult_recurre_a8911c_idx'),
        ),
        migrations.AddIndex(
            model_name='event',
            index=models.Index(models.F('start_time'), models.F('start_day'), models.F('end_day'), models.F('end_time'), django.db.models.functions.text.Lower('title'), name='datetimes title'),
        ),
        migrations.AddIndex(
            model_name='batchimportation',
            index=models.Index(fields=['created_date'], name='agenda_cult_created_a23990_idx'),
        ),
        migrations.AddIndex(
            model_name='batchimportation',
            index=models.Index(fields=['status'], name='agenda_cult_status_54b205_idx'),
        ),
        migrations.AddIndex(
            model_name='batchimportation',
            index=models.Index(fields=['created_date', 'recurrentImport'], name='agenda_cult_created_0296e4_idx'),
        ),
        migrations.AddIndex(
            model_name='duplicatedevents',
            index=models.Index(fields=['representative'], name='agenda_cult_represe_9a4fa2_idx'),
        ),
        migrations.AddIndex(
            model_name='message',
            index=models.Index(fields=['related_event'], name='agenda_cult_related_79de3c_idx'),
        ),
        migrations.AddIndex(
            model_name='message',
            index=models.Index(fields=['user'], name='agenda_cult_user_id_42dc88_idx'),
        ),
        migrations.AddIndex(
            model_name='message',
            index=models.Index(fields=['date'], name='agenda_cult_date_049c71_idx'),
        ),
        migrations.AddIndex(
            model_name='message',
            index=models.Index(fields=['spam', 'closed'], name='agenda_cult_spam_22f9b3_idx'),
        ),
        migrations.AddIndex(
            model_name='place',
            index=models.Index(fields=['name'], name='agenda_cult_name_222846_idx'),
        ),
        migrations.AddIndex(
            model_name='place',
            index=models.Index(fields=['city'], name='agenda_cult_city_156dc7_idx'),
        ),
        migrations.AddIndex(
            model_name='place',
            index=models.Index(fields=['location'], name='agenda_cult_locatio_6f3c05_idx'),
        ),
        migrations.AddField(
            model_name='recurrentimport',
            name='forceLocation',
            field=models.BooleanField(default=False, help_text='force location even if another is detected.', verbose_name='Force location'),
        ),
        migrations.AddField(
            model_name='message',
            name='message_type',
            field=models.CharField(choices=[('from_contributor', 'From contributor'), ('import_process', 'Import process'), ('contact_form', 'Contact form'), ('event_report', 'Event report'), ('from_contrib_no_msg', 'From contributor (without message)')], default=None, max_length=20, null=True, verbose_name='Type'),
        ),
        migrations.AlterField(
            model_name='event',
            name='reference_urls',
            field=django_better_admin_arrayfield.models.fields.ArrayField(base_field=models.URLField(max_length=512), blank=True, null=True, size=None, verbose_name='Online sources or ticketing'),
        ),
        migrations.AlterField(
            model_name='tag',
            name='principal',
            field=models.BooleanField(default=False, help_text='This tag is highlighted as a main tag for visitors, particularly in the filter.', verbose_name='Principal'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('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"), ('cour3coquins', 'la cour des 3 coquins'), ('arachnee', 'Arachnée concert'), ('rio', 'Le Rio'), ('raymonde', 'La Raymonde'), ('apidae', 'Agenda apidae tourisme')], default='ical', max_length=20, verbose_name='Processor'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('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"), ('cour3coquins', 'la cour des 3 coquins'), ('arachnee', 'Arachnée concert'), ('rio', 'Le Rio'), ('raymonde', 'La Raymonde'), ('apidae', 'Agenda apidae tourisme'), ('iguana', 'Agenda iguana (médiathèques)')], default='ical', max_length=20, verbose_name='Processor'),
        ),
        migrations.AddField(
            model_name='category',
            name='slug',
            field=autoslug.fields.AutoSlugField(default=None, editable=False, null=True, populate_from='name', unique=True),
        ),
        migrations.RunPython(
            code=migrate_data_slug_forward,
            reverse_code=migrate_data_slug_backward,
        ),
        migrations.AlterField(
            model_name='message',
            name='message_type',
            field=models.CharField(choices=[('from_contributor', 'From contributor'), ('import_process', 'Import process'), ('update_process', 'Update process'), ('contact_form', 'Contact form'), ('event_report', 'Event report'), ('from_contrib_no_msg', 'From contributor (without message)')], default=None, max_length=20, null=True, verbose_name='Type'),
        ),
        migrations.AlterField(
            model_name='message',
            name='message_type',
            field=models.CharField(choices=[('from_contributor', 'From contributor'), ('import_process', 'Import process'), ('update_process', 'Update process'), ('contact_form', 'Contact form'), ('event_report', 'Event report'), ('from_contrib_no_msg', 'From contributor (without message)'), ('warning', 'Warning')], default=None, max_length=20, null=True, verbose_name='Type'),
        ),
        migrations.AlterField(
            model_name='event',
            name='created_by_user',
            field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_DEFAULT, related_name='created_events', to=settings.AUTH_USER_MODEL, verbose_name='Author of the event creation'),
        ),
        migrations.AlterField(
            model_name='event',
            name='imported_by_user',
            field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_DEFAULT, related_name='imported_events', to=settings.AUTH_USER_MODEL, verbose_name='Author of the last importation'),
        ),
        migrations.AlterField(
            model_name='event',
            name='moderated_by_user',
            field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_DEFAULT, related_name='moderated_events', to=settings.AUTH_USER_MODEL, verbose_name='Author of the last moderation'),
        ),
        migrations.AlterField(
            model_name='event',
            name='modified_by_user',
            field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_DEFAULT, related_name='modified_events', to=settings.AUTH_USER_MODEL, verbose_name='Author of the last modification'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('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)')], default='ical', max_length=20, verbose_name='Processor'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('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')], default='ical', max_length=20, verbose_name='Processor'),
        ),
        migrations.AddIndex(
            model_name='event',
            index=models.Index(fields=['recurrences'], name='agenda_cult_recurre_5c5094_idx'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('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')], default='ical', max_length=20, verbose_name='Processor'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='processor',
            field=models.CharField(choices=[('ical', 'ical'), ('icalnobusy', 'ical no busy'), ('icalnovc', 'ical no VC'), ('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'),
        ),
        migrations.AlterField(
            model_name='recurrentimport',
            name='source',
            field=models.URLField(help_text='URL of the source document', max_length=1024, unique=True, verbose_name='Source'),
        ),
        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'),
        ),
        migrations.AlterField(
            model_name='event',
            name='local_image',
            field=django_resized.forms.ResizedImageField(blank=True, crop=None, force_format='JPEG', keep_meta=True, max_length=1024, null=True, quality=75, scale=0.5, size=[900, None], upload_to='', verbose_name='Illustration'),
        ),
        migrations.AlterField(
            model_name='place',
            name='city',
            field=models.CharField(help_text='City name', verbose_name='City'),
        ),
    ]
