示例#1
0
class Migration(migrations.Migration):
    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ('experiments', '0003_auto_20170713_1148'),
    ]

    operations = [
        migrations.CreateModel(
            name='HistoricalExperimentKeyValue',
            fields=[
                ('id',
                 models.IntegerField(auto_created=True,
                                     blank=True,
                                     db_index=True,
                                     verbose_name='ID')),
                ('created',
                 model_utils.fields.AutoCreatedField(
                     default=django.utils.timezone.now,
                     editable=False,
                     verbose_name='created')),
                ('modified',
                 model_utils.fields.AutoLastModifiedField(
                     default=django.utils.timezone.now,
                     editable=False,
                     verbose_name='modified')),
                ('experiment_id',
                 models.PositiveSmallIntegerField(
                     db_index=True, verbose_name='Experiment ID')),
                ('key', models.CharField(max_length=255)),
                ('value', models.TextField()),
                ('history_id',
                 models.AutoField(primary_key=True, serialize=False)),
                ('history_date', models.DateTimeField()),
                ('history_change_reason',
                 models.CharField(max_length=100, null=True)),
                ('history_type',
                 models.CharField(choices=[('+', 'Created'), ('~', 'Changed'),
                                           ('-', 'Deleted')],
                                  max_length=1)),
                ('history_user',
                 models.ForeignKey(
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'get_latest_by': 'history_date',
                'verbose_name': 'historical Experiment Key-Value Pair',
                'ordering': ('-history_date', '-history_id'),
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
    ]
示例#2
0
class Migration(migrations.Migration):
    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ("auth", "0011_update_proxy_permissions"),
        ("workstation_configs", "0001_squashed_0008_auto_20201001_0758"),
    ]

    operations = [
        migrations.CreateModel(
            name="Workstation",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("created", models.DateTimeField(auto_now_add=True)),
                ("modified", models.DateTimeField(auto_now=True)),
                (
                    "title",
                    models.CharField(max_length=255, verbose_name="title"),
                ),
                (
                    "description",
                    models.TextField(blank=True,
                                     null=True,
                                     verbose_name="description"),
                ),
                (
                    "slug",
                    django_extensions.db.fields.AutoSlugField(
                        blank=True,
                        editable=False,
                        populate_from="title",
                        verbose_name="slug",
                    ),
                ),
                (
                    "logo",
                    models.ImageField(
                        storage=grandchallenge.core.storage.PublicS3Storage(),
                        upload_to=grandchallenge.core.storage.get_logo_path,
                    ),
                ),
                (
                    "editors_group",
                    models.OneToOneField(
                        editable=False,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="editors_of_workstation",
                        to="auth.group",
                    ),
                ),
                (
                    "users_group",
                    models.OneToOneField(
                        editable=False,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="users_of_workstation",
                        to="auth.group",
                    ),
                ),
                (
                    "config",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        to="workstation_configs.workstationconfig",
                    ),
                ),
                (
                    "public",
                    models.BooleanField(
                        default=False,
                        help_text=
                        "If True, all logged in users can use this workstation, otherwise, only the users group can use this workstation.",
                    ),
                ),
            ],
            options={
                "abstract": False,
                "ordering": ("created", "title")
            },
        ),
        migrations.CreateModel(
            name="WorkstationImage",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("created", models.DateTimeField(auto_now_add=True)),
                ("modified", models.DateTimeField(auto_now=True)),
                (
                    "staged_image_uuid",
                    models.UUIDField(blank=True, editable=False, null=True),
                ),
                (
                    "image",
                    models.FileField(
                        blank=True,
                        help_text=
                        ".tar.xz archive of the container image produced from the command 'docker save IMAGE | xz -c > IMAGE.tar.xz'. See https://docs.docker.com/engine/reference/commandline/save/",
                        storage=grandchallenge.core.storage.PrivateS3Storage(),
                        upload_to=grandchallenge.components.models.
                        docker_image_path,
                        validators=[
                            grandchallenge.core.validators.ExtensionValidator(
                                allowed_extensions=(
                                    ".tar",
                                    ".tar.gz",
                                    ".tar.xz",
                                ))
                        ],
                    ),
                ),
                (
                    "image_sha256",
                    models.CharField(editable=False, max_length=71),
                ),
                (
                    "ready",
                    models.BooleanField(
                        default=False,
                        editable=False,
                        help_text="Is this image ready to be used?",
                    ),
                ),
                ("status", models.TextField(editable=False)),
                ("requires_gpu", models.BooleanField(default=False)),
                (
                    "requires_gpu_memory_gb",
                    models.PositiveIntegerField(default=4),
                ),
                ("requires_memory_gb", models.PositiveIntegerField(default=4)),
                (
                    "requires_cpu_cores",
                    models.DecimalField(decimal_places=2,
                                        default=Decimal("1.0"),
                                        max_digits=4),
                ),
                (
                    "http_port",
                    models.PositiveIntegerField(
                        default=8080,
                        validators=[
                            django.core.validators.MaxValueValidator(65535)
                        ],
                    ),
                ),
                (
                    "websocket_port",
                    models.PositiveIntegerField(
                        default=4114,
                        validators=[
                            django.core.validators.MaxValueValidator(65535)
                        ],
                    ),
                ),
                (
                    "initial_path",
                    models.CharField(
                        default="cirrus",
                        max_length=256,
                        validators=[
                            django.core.validators.RegexValidator(
                                message=
                                "This path is invalid, it must not start with a /",
                                regex="^(?:[^/][^\\s]*)\\Z",
                            )
                        ],
                    ),
                ),
                (
                    "creator",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "workstation",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="workstations.workstation",
                    ),
                ),
            ],
            options={
                "abstract": False,
                "ordering": ("created", "creator")
            },
        ),
        migrations.CreateModel(
            name="HistoricalSession",
            fields=[
                (
                    "id",
                    models.UUIDField(db_index=True,
                                     default=uuid.uuid4,
                                     editable=False),
                ),
                ("created", models.DateTimeField(blank=True, editable=False)),
                ("modified", models.DateTimeField(blank=True, editable=False)),
                (
                    "status",
                    models.PositiveSmallIntegerField(
                        choices=[
                            (0, "Queued"),
                            (1, "Started"),
                            (2, "Running"),
                            (3, "Failed"),
                            (4, "Stopped"),
                        ],
                        default=0,
                    ),
                ),
                (
                    "maximum_duration",
                    models.DurationField(default=datetime.timedelta(
                        seconds=600)),
                ),
                ("user_finished", models.BooleanField(default=False)),
                (
                    "history_id",
                    models.AutoField(primary_key=True, serialize=False),
                ),
                ("history_date", models.DateTimeField()),
                (
                    "history_change_reason",
                    models.CharField(max_length=100, null=True),
                ),
                (
                    "history_type",
                    models.CharField(
                        choices=[
                            ("+", "Created"),
                            ("~", "Changed"),
                            ("-", "Deleted"),
                        ],
                        max_length=1,
                    ),
                ),
                (
                    "creator",
                    models.ForeignKey(
                        blank=True,
                        db_constraint=False,
                        null=True,
                        on_delete=django.db.models.deletion.DO_NOTHING,
                        related_name="+",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "history_user",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="+",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "workstation_image",
                    models.ForeignKey(
                        blank=True,
                        db_constraint=False,
                        null=True,
                        on_delete=django.db.models.deletion.DO_NOTHING,
                        related_name="+",
                        to="workstations.workstationimage",
                    ),
                ),
                (
                    "region",
                    models.CharField(
                        choices=[
                            ("af-south-1", "Africa (Cape Town)"),
                            ("ap-east-1", "Asia Pacific (Hong Kong)"),
                            ("ap-northeast-1", "Asia Pacific (Tokyo)"),
                            ("ap-northeast-2", "Asia Pacific (Seoul)"),
                            ("ap-northeast-3", "Asia Pacific (Osaka-Local)"),
                            ("ap-south-1", "Asia Pacific (Mumbai)"),
                            ("ap-southeast-1", "Asia Pacific (Singapore)"),
                            ("ap-southeast-2", "Asia Pacific (Sydney)"),
                            ("ca-central-1", "Canada (Central)"),
                            ("eu-central-1", "Europe (Frankfurt)"),
                            ("eu-north-1", "Europe (Stockholm)"),
                            ("eu-south-1", "Europe (Milan)"),
                            ("eu-west-1", "Europe (Ireland)"),
                            ("eu-west-2", "Europe (London)"),
                            ("eu-west-3", "Europe (Paris)"),
                            ("me-south-1", "Middle East (Bahrain)"),
                            ("sa-east-1", "South America (São Paulo)"),
                            ("us-east-1", "US East (N. Virginia)"),
                            ("us-east-2", "US East (Ohio)"),
                            ("us-west-1", "US West (N. California)"),
                            ("us-west-2", "US West (Oregon)"),
                            ("eu-nl-1", "Netherlands (Nijmegen)"),
                            ("eu-nl-2", "Netherlands (Amsterdam)"),
                        ],
                        default="eu-nl-1",
                        help_text="Which region is this session available in?",
                        max_length=14,
                    ),
                ),
            ],
            options={
                "verbose_name": "historical session",
                "ordering": ("-history_date", "-history_id"),
                "get_latest_by": "history_date",
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
        migrations.CreateModel(
            name="Session",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("created", models.DateTimeField(auto_now_add=True)),
                ("modified", models.DateTimeField(auto_now=True)),
                (
                    "status",
                    models.PositiveSmallIntegerField(
                        choices=[
                            (0, "Queued"),
                            (1, "Started"),
                            (2, "Running"),
                            (3, "Failed"),
                            (4, "Stopped"),
                        ],
                        default=0,
                    ),
                ),
                (
                    "maximum_duration",
                    models.DurationField(default=datetime.timedelta(
                        seconds=600)),
                ),
                ("user_finished", models.BooleanField(default=False)),
                (
                    "creator",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "workstation_image",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="workstations.workstationimage",
                    ),
                ),
                ("logs", models.TextField(blank=True, editable=False)),
                (
                    "region",
                    models.CharField(
                        choices=[
                            ("af-south-1", "Africa (Cape Town)"),
                            ("ap-east-1", "Asia Pacific (Hong Kong)"),
                            ("ap-northeast-1", "Asia Pacific (Tokyo)"),
                            ("ap-northeast-2", "Asia Pacific (Seoul)"),
                            ("ap-northeast-3", "Asia Pacific (Osaka-Local)"),
                            ("ap-south-1", "Asia Pacific (Mumbai)"),
                            ("ap-southeast-1", "Asia Pacific (Singapore)"),
                            ("ap-southeast-2", "Asia Pacific (Sydney)"),
                            ("ca-central-1", "Canada (Central)"),
                            ("eu-central-1", "Europe (Frankfurt)"),
                            ("eu-north-1", "Europe (Stockholm)"),
                            ("eu-south-1", "Europe (Milan)"),
                            ("eu-west-1", "Europe (Ireland)"),
                            ("eu-west-2", "Europe (London)"),
                            ("eu-west-3", "Europe (Paris)"),
                            ("me-south-1", "Middle East (Bahrain)"),
                            ("sa-east-1", "South America (São Paulo)"),
                            ("us-east-1", "US East (N. Virginia)"),
                            ("us-east-2", "US East (Ohio)"),
                            ("us-west-1", "US West (N. California)"),
                            ("us-west-2", "US West (Oregon)"),
                            ("eu-nl-1", "Netherlands (Nijmegen)"),
                            ("eu-nl-2", "Netherlands (Amsterdam)"),
                        ],
                        default="eu-nl-1",
                        help_text="Which region is this session available in?",
                        max_length=14,
                    ),
                ),
                ("ping_times", models.JSONField(default=None, null=True)),
            ],
            options={
                "abstract": False,
                "ordering": ("created", "creator")
            },
        ),
    ]
示例#3
0
class Migration(migrations.Migration):

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ('permits', '0004_insert_workflow_status'),
    ]

    operations = [
        migrations.CreateModel(
            name='HistoricalWorksObjectPropertyValue',
            fields=[
                ('id',
                 models.IntegerField(auto_created=True,
                                     blank=True,
                                     db_index=True,
                                     verbose_name='ID')),
                ('value', django.contrib.postgres.fields.jsonb.JSONField()),
                ('history_id',
                 models.AutoField(primary_key=True, serialize=False)),
                ('history_date', models.DateTimeField()),
                ('history_change_reason',
                 models.CharField(max_length=100, null=True)),
                ('history_type',
                 models.CharField(choices=[('+', 'Created'), ('~', 'Changed'),
                                           ('-', 'Deleted')],
                                  max_length=1)),
                ('history_user',
                 models.ForeignKey(
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
                ('property',
                 models.ForeignKey(
                     blank=True,
                     db_constraint=False,
                     null=True,
                     on_delete=django.db.models.deletion.DO_NOTHING,
                     related_name='+',
                     to='permits.WorksObjectProperty',
                     verbose_name='caractéristique')),
                ('works_object_type_choice',
                 models.ForeignKey(
                     blank=True,
                     db_constraint=False,
                     null=True,
                     on_delete=django.db.models.deletion.DO_NOTHING,
                     related_name='+',
                     to='permits.WorksObjectTypeChoice',
                     verbose_name='objet des travaux')),
            ],
            options={
                'verbose_name': 'historical works object property value',
                'ordering': ('-history_date', '-history_id'),
                'get_latest_by': 'history_date',
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
        migrations.CreateModel(
            name='HistoricalPermitRequestValidation',
            fields=[
                ('id',
                 models.IntegerField(auto_created=True,
                                     blank=True,
                                     db_index=True,
                                     verbose_name='ID')),
                ('validation_status',
                 models.IntegerField(choices=[(0, 'En attente'),
                                              (1, 'Approuvé'), (2, 'Refusé')],
                                     default=0,
                                     verbose_name='Statut de validation')),
                ('comment_before',
                 models.TextField(blank=True,
                                  verbose_name='Commentaires (avant)')),
                ('comment_during',
                 models.TextField(blank=True,
                                  verbose_name='Commentaires (pendant)')),
                ('comment_after',
                 models.TextField(blank=True,
                                  verbose_name='Commentaires (après)')),
                ('validated_at',
                 models.DateTimeField(null=True, verbose_name='Validé le')),
                ('history_id',
                 models.AutoField(primary_key=True, serialize=False)),
                ('history_date', models.DateTimeField()),
                ('history_change_reason',
                 models.CharField(max_length=100, null=True)),
                ('history_type',
                 models.CharField(choices=[('+', 'Created'), ('~', 'Changed'),
                                           ('-', 'Deleted')],
                                  max_length=1)),
                ('department',
                 models.ForeignKey(
                     blank=True,
                     db_constraint=False,
                     null=True,
                     on_delete=django.db.models.deletion.DO_NOTHING,
                     related_name='+',
                     to='permits.PermitDepartment')),
                ('history_user',
                 models.ForeignKey(
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
                ('permit_request',
                 models.ForeignKey(
                     blank=True,
                     db_constraint=False,
                     null=True,
                     on_delete=django.db.models.deletion.DO_NOTHING,
                     related_name='+',
                     to='permits.PermitRequest')),
                ('validated_by',
                 models.ForeignKey(
                     blank=True,
                     db_constraint=False,
                     null=True,
                     on_delete=django.db.models.deletion.DO_NOTHING,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name':
                'historical 3.5 Consultation de la validation par le service',
                'ordering': ('-history_date', '-history_id'),
                'get_latest_by': 'history_date',
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
        migrations.CreateModel(
            name='HistoricalPermitRequestGeoTime',
            fields=[
                ('id',
                 models.IntegerField(auto_created=True,
                                     blank=True,
                                     db_index=True,
                                     verbose_name='ID')),
                ('starts_at',
                 models.DateTimeField(verbose_name='Date planifiée de début')),
                ('ends_at',
                 models.DateTimeField(verbose_name='Date planifiée de fin')),
                ('comment',
                 models.CharField(blank=True,
                                  max_length=1024,
                                  verbose_name='Commentaire')),
                ('external_link',
                 models.URLField(blank=True, verbose_name='Lien externe')),
                ('geom',
                 django.contrib.gis.db.models.fields.GeometryCollectionField(
                     null=True, srid=2056, verbose_name='Localisation')),
                ('history_id',
                 models.AutoField(primary_key=True, serialize=False)),
                ('history_date', models.DateTimeField()),
                ('history_change_reason',
                 models.CharField(max_length=100, null=True)),
                ('history_type',
                 models.CharField(choices=[('+', 'Created'), ('~', 'Changed'),
                                           ('-', 'Deleted')],
                                  max_length=1)),
                ('history_user',
                 models.ForeignKey(
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
                ('permit_request',
                 models.ForeignKey(
                     blank=True,
                     db_constraint=False,
                     null=True,
                     on_delete=django.db.models.deletion.DO_NOTHING,
                     related_name='+',
                     to='permits.PermitRequest')),
            ],
            options={
                'verbose_name':
                "historical 3.3 Consultation de l'agenda et de la géométrie",
                'ordering': ('-history_date', '-history_id'),
                'get_latest_by': 'history_date',
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
        migrations.CreateModel(
            name='HistoricalPermitRequest',
            fields=[
                ('id',
                 models.IntegerField(auto_created=True,
                                     blank=True,
                                     db_index=True,
                                     verbose_name='ID')),
                ('status',
                 models.PositiveSmallIntegerField(choices=[
                     (0, 'Brouillon'),
                     (1, 'Envoyée, en attente de traitement'),
                     (4, 'Demande de compléments'), (3, 'En traitement'),
                     (5, 'En validation'), (2, 'Approuvée'), (6, 'Refusée'),
                     (7, 'Annonce réceptionnée')
                 ],
                                                  default=0,
                                                  verbose_name='état')),
                ('created_at',
                 models.DateTimeField(default=django.utils.timezone.now,
                                      verbose_name='date de création')),
                ('validated_at',
                 models.DateTimeField(null=True,
                                      verbose_name='date de validation')),
                ('printed_at',
                 models.DateTimeField(null=True,
                                      verbose_name="date d'impression")),
                ('printed_by',
                 models.CharField(blank=True,
                                  max_length=255,
                                  verbose_name='imprimé par')),
                ('printed_file',
                 models.TextField(blank=True,
                                  max_length=100,
                                  null=True,
                                  verbose_name='Permis imprimé')),
                ('archeology_status',
                 models.PositiveSmallIntegerField(
                     choices=[(0, 'Non pertinent'), (1, 'Inconnu'),
                              (2, 'Pas fouillé'), (3, 'Partiellement fouillé'),
                              (4, 'Déjà fouillé')],
                     default=0,
                     verbose_name='Statut archéologique')),
                ('intersected_geometries',
                 models.CharField(
                     max_length=1024,
                     null=True,
                     verbose_name='Entités géométriques concernées')),
                ('price',
                 models.DecimalField(blank=True,
                                     decimal_places=2,
                                     max_digits=7,
                                     null=True,
                                     verbose_name='Émolument')),
                ('exemption',
                 models.TextField(blank=True, verbose_name='Dérogation')),
                ('opposition',
                 models.TextField(blank=True, verbose_name='Opposition')),
                ('comment',
                 models.TextField(blank=True,
                                  verbose_name='Analyse du service pilote')),
                ('validation_pdf',
                 models.TextField(
                     max_length=100,
                     validators=[
                         django.core.validators.FileExtensionValidator(
                             allowed_extensions=['pdf'])
                     ],
                     verbose_name='pdf de validation')),
                ('creditor_type',
                 models.PositiveSmallIntegerField(
                     blank=True,
                     choices=[
                         (0, 'Autres'), (2, 'Propriétaire'), (3, 'Entreprise'),
                         (4, "Maître d'ouvrage"),
                         (1,
                          "Requérant si différent de l'auteur de la demande"),
                         (5, 'Sécurité'), (6, 'Association')
                     ],
                     null=True,
                     verbose_name='Destinaire de la facture')),
                ('is_public',
                 models.BooleanField(default=False, verbose_name='Publier')),
                ('history_id',
                 models.AutoField(primary_key=True, serialize=False)),
                ('history_date', models.DateTimeField()),
                ('history_change_reason',
                 models.CharField(max_length=100, null=True)),
                ('history_type',
                 models.CharField(choices=[('+', 'Created'), ('~', 'Changed'),
                                           ('-', 'Deleted')],
                                  max_length=1)),
                ('administrative_entity',
                 models.ForeignKey(
                     blank=True,
                     db_constraint=False,
                     null=True,
                     on_delete=django.db.models.deletion.DO_NOTHING,
                     related_name='+',
                     to='permits.PermitAdministrativeEntity',
                     verbose_name='commune')),
                ('author',
                 models.ForeignKey(
                     blank=True,
                     db_constraint=False,
                     null=True,
                     on_delete=django.db.models.deletion.DO_NOTHING,
                     related_name='+',
                     to='permits.PermitAuthor',
                     verbose_name='auteur')),
                ('history_user',
                 models.ForeignKey(
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name': 'historical 3.1 Consultation de la demande',
                'ordering': ('-history_date', '-history_id'),
                'get_latest_by': 'history_date',
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
        migrations.CreateModel(
            name='HistoricalPermitAuthor',
            fields=[
                ('id',
                 models.IntegerField(auto_created=True,
                                     blank=True,
                                     db_index=True,
                                     verbose_name='ID')),
                ('company_name',
                 models.CharField(blank=True,
                                  max_length=100,
                                  verbose_name='Raison Sociale')),
                ('vat_number',
                 models.CharField(
                     blank=True,
                     max_length=19,
                     validators=[
                         django.core.validators.RegexValidator(
                             message=
                             "Le code d'entreprise doit être de type                          CHE-123.456.789 (TVA)                          et vous pouvez le trouver sur                          le registe fédéral des entreprises                          https://www.uid.admin.ch/search.aspx",
                             regex='^(CHE-)+\\d{3}\\.\\d{3}\\.\\d{3}(\\sTVA)?$'
                         )
                     ],
                     verbose_name='Numéro TVA')),
                ('address', models.CharField(max_length=100,
                                             verbose_name='Rue')),
                ('zipcode',
                 models.PositiveIntegerField(validators=[
                     django.core.validators.MinValueValidator(1000),
                     django.core.validators.MaxValueValidator(9999)
                 ],
                                             verbose_name='NPA')),
                ('city', models.CharField(max_length=100,
                                          verbose_name='Ville')),
                ('phone_first',
                 models.CharField(
                     max_length=20,
                     validators=[
                         django.core.validators.RegexValidator(
                             message=
                             'Seuls les chiffres et les espaces sont autorisés.',
                             regex=
                             '^(((\\+41)\\s?)|(0))?(\\d{2})\\s?(\\d{3})\\s?(\\d{2})\\s?(\\d{2})$'
                         )
                     ],
                     verbose_name='Téléphone principal')),
                ('phone_second',
                 models.CharField(
                     blank=True,
                     max_length=20,
                     validators=[
                         django.core.validators.RegexValidator(
                             message=
                             'Seuls les chiffres et les espaces sont autorisés.',
                             regex=
                             '^(((\\+41)\\s?)|(0))?(\\d{2})\\s?(\\d{3})\\s?(\\d{2})\\s?(\\d{2})$'
                         )
                     ],
                     verbose_name='Téléphone secondaire')),
                ('history_id',
                 models.AutoField(primary_key=True, serialize=False)),
                ('history_date', models.DateTimeField()),
                ('history_change_reason',
                 models.CharField(max_length=100, null=True)),
                ('history_type',
                 models.CharField(choices=[('+', 'Created'), ('~', 'Changed'),
                                           ('-', 'Deleted')],
                                  max_length=1)),
                ('history_user',
                 models.ForeignKey(
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
                ('user',
                 models.ForeignKey(
                     blank=True,
                     db_constraint=False,
                     null=True,
                     on_delete=django.db.models.deletion.DO_NOTHING,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name': "historical 3.2 Consultation de l'auteur",
                'ordering': ('-history_date', '-history_id'),
                'get_latest_by': 'history_date',
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
        migrations.CreateModel(
            name='HistoricalPermitActor',
            fields=[
                ('id',
                 models.IntegerField(auto_created=True,
                                     blank=True,
                                     db_index=True,
                                     verbose_name='ID')),
                ('first_name',
                 models.CharField(max_length=150, verbose_name='Prénom')),
                ('last_name',
                 models.CharField(max_length=100, verbose_name='Nom')),
                ('company_name',
                 models.CharField(max_length=100, verbose_name='Entreprise')),
                ('vat_number',
                 models.CharField(blank=True,
                                  max_length=19,
                                  verbose_name='Numéro TVA')),
                ('address',
                 models.CharField(max_length=100, verbose_name='Adresse')),
                ('zipcode', models.PositiveIntegerField(verbose_name='NPA')),
                ('city', models.CharField(max_length=100,
                                          verbose_name='Ville')),
                ('phone',
                 models.CharField(max_length=20, verbose_name='Téléphone')),
                ('email',
                 models.EmailField(max_length=254, verbose_name='Email')),
                ('history_id',
                 models.AutoField(primary_key=True, serialize=False)),
                ('history_date', models.DateTimeField()),
                ('history_change_reason',
                 models.CharField(max_length=100, null=True)),
                ('history_type',
                 models.CharField(choices=[('+', 'Created'), ('~', 'Changed'),
                                           ('-', 'Deleted')],
                                  max_length=1)),
                ('history_user',
                 models.ForeignKey(
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name': 'historical Contact',
                'ordering': ('-history_date', '-history_id'),
                'get_latest_by': 'history_date',
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
    ]
示例#4
0
class Migration(migrations.Migration):

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ('adserver', '0054_add_payout_status_dates'),
    ]

    operations = [
        migrations.CreateModel(
            name='HistoricalPublisherPayout',
            fields=[
                ('created',
                 django_extensions.db.fields.CreationDateTimeField(
                     auto_now_add=True, verbose_name='created')),
                ('modified',
                 django_extensions.db.fields.ModificationDateTimeField(
                     auto_now=True, verbose_name='modified')),
                ('id',
                 models.UUIDField(db_index=True,
                                  default=uuid.uuid4,
                                  editable=False)),
                ('amount',
                 models.DecimalField(decimal_places=2,
                                     default=0,
                                     max_digits=8,
                                     verbose_name='Amount')),
                ('date', models.DateTimeField(verbose_name='Payout date')),
                ('method',
                 models.CharField(blank=True,
                                  choices=[
                                      ('stripe',
                                       'Stripe (Bank transfer, debit card)'),
                                      ('paypal', 'PayPal'),
                                      ('opencollective', 'Open Collective'),
                                      ('other', 'Other')
                                  ],
                                  default=None,
                                  max_length=100,
                                  null=True)),
                ('note',
                 models.TextField(
                     blank=True,
                     help_text='A publisher-visible note about the payout',
                     null=True,
                     verbose_name='Note')),
                ('attachment',
                 models.TextField(
                     blank=True,
                     help_text=
                     'A publisher-visible attachment such as a receipt',
                     max_length=255,
                     null=True,
                     verbose_name='Attachment')),
                ('start_date',
                 models.DateField(help_text='First day of paid period',
                                  null=True,
                                  verbose_name='Start Date')),
                ('end_date',
                 models.DateField(help_text='Last day of paid period',
                                  null=True,
                                  verbose_name='End Date')),
                ('status',
                 models.CharField(choices=[('pending', 'Pending'),
                                           ('hold', 'On hold'),
                                           ('emailed', 'Email sent'),
                                           ('paid', 'Payment sent')],
                                  default='pending',
                                  help_text='Status of this payout',
                                  max_length=50)),
                ('history_id',
                 models.AutoField(primary_key=True, serialize=False)),
                ('history_date', models.DateTimeField()),
                ('history_change_reason',
                 models.CharField(max_length=100, null=True)),
                ('history_type',
                 models.CharField(choices=[('+', 'Created'), ('~', 'Changed'),
                                           ('-', 'Deleted')],
                                  max_length=1)),
                ('history_user',
                 models.ForeignKey(
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
                ('publisher',
                 models.ForeignKey(
                     blank=True,
                     db_constraint=False,
                     null=True,
                     on_delete=django.db.models.deletion.DO_NOTHING,
                     related_name='+',
                     to='adserver.Publisher')),
            ],
            options={
                'verbose_name': 'historical publisher payout',
                'ordering': ('-history_date', '-history_id'),
                'get_latest_by': 'history_date',
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
        migrations.CreateModel(
            name='HistoricalPublisherGroup',
            fields=[
                ('id',
                 models.IntegerField(auto_created=True,
                                     blank=True,
                                     db_index=True,
                                     verbose_name='ID')),
                ('created',
                 django_extensions.db.fields.CreationDateTimeField(
                     auto_now_add=True, verbose_name='created')),
                ('modified',
                 django_extensions.db.fields.ModificationDateTimeField(
                     auto_now=True, verbose_name='modified')),
                ('name',
                 models.CharField(help_text='Visible to advertisers',
                                  max_length=200,
                                  verbose_name='Name')),
                ('slug',
                 models.SlugField(max_length=200,
                                  verbose_name='Publisher group slug')),
                ('history_id',
                 models.AutoField(primary_key=True, serialize=False)),
                ('history_date', models.DateTimeField()),
                ('history_change_reason',
                 models.CharField(max_length=100, null=True)),
                ('history_type',
                 models.CharField(choices=[('+', 'Created'), ('~', 'Changed'),
                                           ('-', 'Deleted')],
                                  max_length=1)),
                ('history_user',
                 models.ForeignKey(
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name': 'historical publisher group',
                'ordering': ('-history_date', '-history_id'),
                'get_latest_by': 'history_date',
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
        migrations.CreateModel(
            name='HistoricalPublisher',
            fields=[
                ('id',
                 models.IntegerField(auto_created=True,
                                     blank=True,
                                     db_index=True,
                                     verbose_name='ID')),
                ('created',
                 django_extensions.db.fields.CreationDateTimeField(
                     auto_now_add=True, verbose_name='created')),
                ('modified',
                 django_extensions.db.fields.ModificationDateTimeField(
                     auto_now=True, verbose_name='modified')),
                ('name', models.CharField(max_length=200,
                                          verbose_name='Name')),
                ('slug',
                 models.SlugField(max_length=200,
                                  verbose_name='Publisher Slug')),
                ('revenue_share_percentage',
                 models.FloatField(
                     default=70.0,
                     help_text=
                     'Percentage of advertising revenue shared with this publisher',
                     validators=[
                         django.core.validators.MinValueValidator(0),
                         django.core.validators.MaxValueValidator(100)
                     ])),
                ('default_keywords',
                 models.CharField(
                     blank=True,
                     default='',
                     help_text=
                     'A CSV of default keywords for this property. Used for targeting.',
                     max_length=250,
                     verbose_name='Default keywords')),
                ('unauthed_ad_decisions',
                 models.BooleanField(
                     default=True,
                     help_text=
                     'Whether this publisher allows unauthenticated ad decision API requests (eg. JSONP)'
                 )),
                ('allow_paid_campaigns',
                 models.BooleanField(default=False,
                                     verbose_name='Allow paid campaigns')),
                ('allow_affiliate_campaigns',
                 models.BooleanField(
                     default=False, verbose_name='Allow affiliate campaigns')),
                ('allow_community_campaigns',
                 models.BooleanField(
                     default=True,
                     help_text=
                     'These are unpaid campaigns that support non-profit projects in our community. Shown only when no paid ads are available',
                     verbose_name='Allow community campaigns')),
                ('allow_house_campaigns',
                 models.BooleanField(
                     default=True,
                     help_text=
                     'These are ads for EthicalAds itself. Shown only when no paid ads are available.',
                     verbose_name='Allow house campaigns')),
                ('payout_method',
                 models.CharField(blank=True,
                                  choices=[
                                      ('stripe',
                                       'Stripe (Bank transfer, debit card)'),
                                      ('paypal', 'PayPal'),
                                      ('opencollective', 'Open Collective'),
                                      ('other', 'Other')
                                  ],
                                  default=None,
                                  max_length=100,
                                  null=True)),
                ('stripe_connected_account_id',
                 models.CharField(blank=True,
                                  default=None,
                                  max_length=200,
                                  null=True,
                                  verbose_name='Stripe connected account ID')),
                ('open_collective_name',
                 models.CharField(blank=True,
                                  default=None,
                                  max_length=200,
                                  null=True,
                                  verbose_name='Open Collective name')),
                ('paypal_email',
                 models.EmailField(blank=True,
                                   default=None,
                                   max_length=254,
                                   null=True,
                                   verbose_name='PayPal email address')),
                ('record_views',
                 models.BooleanField(
                     default=False,
                     help_text=
                     'Record each ad view from this publisher to the database')
                 ),
                ('record_placements',
                 models.BooleanField(
                     default=False,
                     help_text='Record placement impressions for this publisher'
                 )),
                ('render_pixel',
                 models.BooleanField(
                     default=False,
                     help_text=
                     'Render ethical-pixel in ad templates. This is needed for users not using the ad client.'
                 )),
                ('sampled_ctr',
                 models.FloatField(
                     default=0.0,
                     help_text=
                     'A periodically calculated CTR from a sample of ads on this publisher.'
                 )),
                ('history_id',
                 models.AutoField(primary_key=True, serialize=False)),
                ('history_date', models.DateTimeField()),
                ('history_change_reason',
                 models.CharField(max_length=100, null=True)),
                ('history_type',
                 models.CharField(choices=[('+', 'Created'), ('~', 'Changed'),
                                           ('-', 'Deleted')],
                                  max_length=1)),
                ('history_user',
                 models.ForeignKey(
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name': 'historical publisher',
                'ordering': ('-history_date', '-history_id'),
                'get_latest_by': 'history_date',
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
        migrations.CreateModel(
            name='HistoricalFlight',
            fields=[
                ('id',
                 models.IntegerField(auto_created=True,
                                     blank=True,
                                     db_index=True,
                                     verbose_name='ID')),
                ('created',
                 django_extensions.db.fields.CreationDateTimeField(
                     auto_now_add=True, verbose_name='created')),
                ('modified',
                 django_extensions.db.fields.ModificationDateTimeField(
                     auto_now=True, verbose_name='modified')),
                ('name', models.CharField(max_length=200,
                                          verbose_name='Name')),
                ('slug',
                 models.SlugField(max_length=200, verbose_name='Flight Slug')),
                ('start_date',
                 models.DateField(
                     db_index=True,
                     default=datetime.date.today,
                     help_text='This ad will not be shown before this date',
                     verbose_name='Start Date')),
                ('end_date',
                 models.DateField(
                     default=adserver.models.default_flight_end_date,
                     help_text=
                     'The target end date for the ad (it may go after this date)',
                     verbose_name='End Date')),
                ('live', models.BooleanField(default=False,
                                             verbose_name='Live')),
                ('priority_multiplier',
                 models.IntegerField(
                     default=1,
                     help_text=
                     "Multiplies chance of showing this flight's ads [1,1000000]",
                     validators=[
                         django.core.validators.MinValueValidator(1),
                         django.core.validators.MaxValueValidator(1000000)
                     ],
                     verbose_name='Priority Multiplier')),
                ('cpc',
                 models.DecimalField(decimal_places=2,
                                     default=0,
                                     max_digits=5,
                                     verbose_name='Cost Per Click')),
                ('sold_clicks',
                 models.PositiveIntegerField(default=0,
                                             verbose_name='Sold Clicks')),
                ('cpm',
                 models.DecimalField(decimal_places=2,
                                     default=0,
                                     max_digits=5,
                                     verbose_name='Cost Per 1k Impressions')),
                ('sold_impressions',
                 models.PositiveIntegerField(default=0,
                                             verbose_name='Sold Impressions')),
                ('targeting_parameters',
                 jsonfield.fields.JSONField(
                     blank=True,
                     null=True,
                     validators=[
                         adserver.validators.TargetingParametersValidator()
                     ],
                     verbose_name='Targeting parameters')),
                ('total_views',
                 models.PositiveIntegerField(
                     default=0,
                     help_text='Views across all ads in this flight')),
                ('total_clicks',
                 models.PositiveIntegerField(
                     default=0,
                     help_text='Clicks across all ads in this flight')),
                ('history_id',
                 models.AutoField(primary_key=True, serialize=False)),
                ('history_date', models.DateTimeField()),
                ('history_change_reason',
                 models.CharField(max_length=100, null=True)),
                ('history_type',
                 models.CharField(choices=[('+', 'Created'), ('~', 'Changed'),
                                           ('-', 'Deleted')],
                                  max_length=1)),
                ('campaign',
                 models.ForeignKey(
                     blank=True,
                     db_constraint=False,
                     null=True,
                     on_delete=django.db.models.deletion.DO_NOTHING,
                     related_name='+',
                     to='adserver.Campaign')),
                ('history_user',
                 models.ForeignKey(
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name': 'historical flight',
                'ordering': ('-history_date', '-history_id'),
                'get_latest_by': 'history_date',
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
        migrations.CreateModel(
            name='HistoricalCampaign',
            fields=[
                ('id',
                 models.IntegerField(auto_created=True,
                                     blank=True,
                                     db_index=True,
                                     verbose_name='ID')),
                ('created',
                 django_extensions.db.fields.CreationDateTimeField(
                     auto_now_add=True, verbose_name='created')),
                ('modified',
                 django_extensions.db.fields.ModificationDateTimeField(
                     auto_now=True, verbose_name='modified')),
                ('name', models.CharField(max_length=200,
                                          verbose_name='Name')),
                ('slug',
                 models.SlugField(max_length=200,
                                  verbose_name='Campaign Slug')),
                ('campaign_type',
                 models.CharField(
                     choices=[('paid', 'Paid'), ('affiliate', 'Affiliate'),
                              ('community',
                               'Community'), ('house', 'House')],
                     default='paid',
                     help_text=
                     'Most campaigns are paid but ad server admins can configure other lower priority campaign types.',
                     max_length=20,
                     verbose_name='Campaign Type')),
                ('history_id',
                 models.AutoField(primary_key=True, serialize=False)),
                ('history_date', models.DateTimeField()),
                ('history_change_reason',
                 models.CharField(max_length=100, null=True)),
                ('history_type',
                 models.CharField(choices=[('+', 'Created'), ('~', 'Changed'),
                                           ('-', 'Deleted')],
                                  max_length=1)),
                ('advertiser',
                 models.ForeignKey(
                     blank=True,
                     db_constraint=False,
                     help_text='The advertiser for this campaign.',
                     null=True,
                     on_delete=django.db.models.deletion.DO_NOTHING,
                     related_name='+',
                     to='adserver.Advertiser')),
                ('history_user',
                 models.ForeignKey(
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name': 'historical campaign',
                'ordering': ('-history_date', '-history_id'),
                'get_latest_by': 'history_date',
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
        migrations.CreateModel(
            name='HistoricalAdvertiser',
            fields=[
                ('id',
                 models.IntegerField(auto_created=True,
                                     blank=True,
                                     db_index=True,
                                     verbose_name='ID')),
                ('created',
                 django_extensions.db.fields.CreationDateTimeField(
                     auto_now_add=True, verbose_name='created')),
                ('modified',
                 django_extensions.db.fields.ModificationDateTimeField(
                     auto_now=True, verbose_name='modified')),
                ('name', models.CharField(max_length=200,
                                          verbose_name='Name')),
                ('slug',
                 models.SlugField(max_length=200,
                                  verbose_name='Advertiser Slug')),
                ('stripe_customer_id',
                 models.CharField(blank=True,
                                  default=None,
                                  max_length=200,
                                  null=True,
                                  verbose_name='Stripe Customer ID')),
                ('history_id',
                 models.AutoField(primary_key=True, serialize=False)),
                ('history_date', models.DateTimeField()),
                ('history_change_reason',
                 models.CharField(max_length=100, null=True)),
                ('history_type',
                 models.CharField(choices=[('+', 'Created'), ('~', 'Changed'),
                                           ('-', 'Deleted')],
                                  max_length=1)),
                ('history_user',
                 models.ForeignKey(
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name': 'historical advertiser',
                'ordering': ('-history_date', '-history_id'),
                'get_latest_by': 'history_date',
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
        migrations.CreateModel(
            name='HistoricalAdvertisement',
            fields=[
                ('id',
                 models.IntegerField(auto_created=True,
                                     blank=True,
                                     db_index=True,
                                     verbose_name='ID')),
                ('created',
                 django_extensions.db.fields.CreationDateTimeField(
                     auto_now_add=True, verbose_name='created')),
                ('modified',
                 django_extensions.db.fields.ModificationDateTimeField(
                     auto_now=True, verbose_name='modified')),
                ('name', models.CharField(max_length=200,
                                          verbose_name='Name')),
                ('slug', models.SlugField(max_length=200,
                                          verbose_name='Slug')),
                ('text',
                 models.TextField(
                     blank=True,
                     help_text=
                     'For most ad types, the text should be less than 100 characters.',
                     verbose_name='Text')),
                ('headline',
                 models.CharField(
                     blank=True,
                     help_text=
                     'An optional headline at the beginning of the ad usually displayed in bold',
                     max_length=200,
                     null=True)),
                ('content',
                 models.TextField(
                     blank=True,
                     help_text=
                     'For most ad types, the combined length of the headline, body, and call to action should be less than 100 characters.',
                     null=True)),
                ('cta',
                 models.CharField(
                     blank=True,
                     help_text=
                     'An optional call to action displayed at the end of the ad usually in bold',
                     max_length=200,
                     null=True,
                     verbose_name='Call to action')),
                ('link',
                 models.URLField(
                     help_text=
                     "URL of your landing page. This may contain UTM parameters so you know the traffic came from us. The publisher will be added in the 'ea-publisher' query parameter.",
                     max_length=255,
                     verbose_name='Link URL')),
                ('image',
                 models.TextField(blank=True,
                                  help_text='Sized according to the ad type',
                                  max_length=255,
                                  null=True,
                                  verbose_name='Image')),
                ('live', models.BooleanField(default=False,
                                             verbose_name='Live')),
                ('history_id',
                 models.AutoField(primary_key=True, serialize=False)),
                ('history_date', models.DateTimeField()),
                ('history_change_reason',
                 models.CharField(max_length=100, null=True)),
                ('history_type',
                 models.CharField(choices=[('+', 'Created'), ('~', 'Changed'),
                                           ('-', 'Deleted')],
                                  max_length=1)),
                ('ad_type',
                 models.ForeignKey(
                     blank=True,
                     db_constraint=False,
                     default=None,
                     null=True,
                     on_delete=django.db.models.deletion.DO_NOTHING,
                     related_name='+',
                     to='adserver.AdType')),
                ('flight',
                 models.ForeignKey(
                     blank=True,
                     db_constraint=False,
                     null=True,
                     on_delete=django.db.models.deletion.DO_NOTHING,
                     related_name='+',
                     to='adserver.Flight')),
                ('history_user',
                 models.ForeignKey(
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name': 'historical advertisement',
                'ordering': ('-history_date', '-history_id'),
                'get_latest_by': 'history_date',
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
        migrations.CreateModel(
            name='HistoricalAdType',
            fields=[
                ('id',
                 models.IntegerField(auto_created=True,
                                     blank=True,
                                     db_index=True,
                                     verbose_name='ID')),
                ('created',
                 django_extensions.db.fields.CreationDateTimeField(
                     auto_now_add=True, verbose_name='created')),
                ('modified',
                 django_extensions.db.fields.ModificationDateTimeField(
                     auto_now=True, verbose_name='modified')),
                ('name', models.CharField(max_length=200,
                                          verbose_name='Name')),
                ('slug', models.SlugField(max_length=200,
                                          verbose_name='Slug')),
                ('has_image',
                 models.BooleanField(default=True, verbose_name='Has image?')),
                ('image_width',
                 models.PositiveIntegerField(blank=True, null=True)),
                ('image_height',
                 models.PositiveIntegerField(blank=True, null=True)),
                ('has_text',
                 models.BooleanField(default=True, verbose_name='Has text?')),
                ('max_text_length',
                 models.PositiveIntegerField(
                     blank=True,
                     help_text='Max length does not include HTML tags',
                     null=True)),
                ('allowed_html_tags',
                 models.CharField(
                     blank=True,
                     default='a b strong i em code',
                     help_text='Space separated list of allowed HTML tag names',
                     max_length=255,
                     verbose_name='Allowed HTML tags')),
                ('default_enabled',
                 models.BooleanField(
                     default=False,
                     help_text=
                     'Whether this ad type should default to checked when advertisers are creating ads'
                 )),
                ('template',
                 models.TextField(
                     blank=True,
                     help_text=
                     'Override the template for rendering this ad type',
                     null=True,
                     verbose_name='Ad template')),
                ('description',
                 models.CharField(
                     blank=True,
                     default='',
                     help_text=
                     'A short description of the ad type to guide advertisers.',
                     max_length=255)),
                ('order', models.PositiveSmallIntegerField(default=0)),
                ('deprecated',
                 models.BooleanField(
                     default=False,
                     help_text=
                     'Users cannot select deprecated ad types unless an ad is already that type.'
                 )),
                ('history_id',
                 models.AutoField(primary_key=True, serialize=False)),
                ('history_date', models.DateTimeField()),
                ('history_change_reason',
                 models.CharField(max_length=100, null=True)),
                ('history_type',
                 models.CharField(choices=[('+', 'Created'), ('~', 'Changed'),
                                           ('-', 'Deleted')],
                                  max_length=1)),
                ('history_user',
                 models.ForeignKey(
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     related_name='+',
                     to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name': 'historical ad type',
                'ordering': ('-history_date', '-history_id'),
                'get_latest_by': 'history_date',
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
    ]
class Migration(migrations.Migration):

    initial = True

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

    operations = [
        migrations.CreateModel(
            name="HistoricalSession",
            fields=[
                (
                    "id",
                    models.UUIDField(db_index=True,
                                     default=uuid.uuid4,
                                     editable=False),
                ),
                ("created", models.DateTimeField(blank=True, editable=False)),
                ("modified", models.DateTimeField(blank=True, editable=False)),
                (
                    "status",
                    models.PositiveSmallIntegerField(
                        choices=[
                            (0, "Queued"),
                            (1, "Started"),
                            (2, "Running"),
                            (3, "Failed"),
                            (4, "Stopped"),
                        ],
                        default=0,
                    ),
                ),
                (
                    "maximum_duration",
                    models.DurationField(default=datetime.timedelta(0, 600)),
                ),
                ("user_finished", models.BooleanField(default=False)),
                (
                    "history_id",
                    models.AutoField(primary_key=True, serialize=False),
                ),
                ("history_date", models.DateTimeField()),
                (
                    "history_change_reason",
                    models.CharField(max_length=100, null=True),
                ),
                (
                    "history_type",
                    models.CharField(
                        choices=[
                            ("+", "Created"),
                            ("~", "Changed"),
                            ("-", "Deleted"),
                        ],
                        max_length=1,
                    ),
                ),
                (
                    "creator",
                    models.ForeignKey(
                        blank=True,
                        db_constraint=False,
                        null=True,
                        on_delete=django.db.models.deletion.DO_NOTHING,
                        related_name="+",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "history_user",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="+",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "verbose_name": "historical session",
                "ordering": ("-history_date", "-history_id"),
                "get_latest_by": "history_date",
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
        migrations.CreateModel(
            name="Session",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("created", models.DateTimeField(auto_now_add=True)),
                ("modified", models.DateTimeField(auto_now=True)),
                (
                    "status",
                    models.PositiveSmallIntegerField(
                        choices=[
                            (0, "Queued"),
                            (1, "Started"),
                            (2, "Running"),
                            (3, "Failed"),
                            (4, "Stopped"),
                        ],
                        default=0,
                    ),
                ),
                (
                    "maximum_duration",
                    models.DurationField(default=datetime.timedelta(0, 600)),
                ),
                ("user_finished", models.BooleanField(default=False)),
                (
                    "creator",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={"abstract": False},
        ),
        migrations.CreateModel(
            name="Workstation",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("created", models.DateTimeField(auto_now_add=True)),
                ("modified", models.DateTimeField(auto_now=True)),
                (
                    "title",
                    models.CharField(max_length=255, verbose_name="title"),
                ),
                (
                    "description",
                    models.TextField(blank=True,
                                     null=True,
                                     verbose_name="description"),
                ),
                (
                    "slug",
                    django_extensions.db.fields.AutoSlugField(
                        blank=True,
                        editable=False,
                        populate_from="title",
                        verbose_name="slug",
                    ),
                ),
                (
                    "logo",
                    models.ImageField(upload_to=grandchallenge.challenges.
                                      models.get_logo_path),
                ),
            ],
            options={"abstract": False},
        ),
        migrations.CreateModel(
            name="WorkstationImage",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("created", models.DateTimeField(auto_now_add=True)),
                ("modified", models.DateTimeField(auto_now=True)),
                (
                    "staged_image_uuid",
                    models.UUIDField(blank=True, editable=False, null=True),
                ),
                (
                    "image",
                    models.FileField(
                        blank=True,
                        help_text=
                        ".tar.gz archive of the container image produced from the command 'docker save IMAGE | gzip -c > IMAGE.tar.gz'. See https://docs.docker.com/engine/reference/commandline/save/",
                        storage=grandchallenge.core.storage.PrivateS3Storage(),
                        upload_to=grandchallenge.components.models.
                        docker_image_path,
                        validators=[
                            grandchallenge.core.validators.ExtensionValidator(
                                allowed_extensions=(".tar", ".tar.gz"))
                        ],
                    ),
                ),
                (
                    "image_sha256",
                    models.CharField(editable=False, max_length=71),
                ),
                (
                    "ready",
                    models.BooleanField(
                        default=False,
                        editable=False,
                        help_text="Is this image ready to be used?",
                    ),
                ),
                ("status", models.TextField(editable=False)),
                ("requires_gpu", models.BooleanField(default=False)),
                (
                    "requires_gpu_memory_gb",
                    models.PositiveIntegerField(default=4),
                ),
                ("requires_memory_gb", models.PositiveIntegerField(default=4)),
                (
                    "requires_cpu_cores",
                    models.DecimalField(decimal_places=2,
                                        default=Decimal("1.0"),
                                        max_digits=4),
                ),
                (
                    "http_port",
                    models.PositiveIntegerField(
                        default=8080,
                        validators=[
                            django.core.validators.MaxValueValidator(65535)
                        ],
                    ),
                ),
                (
                    "websocket_port",
                    models.PositiveIntegerField(
                        default=4114,
                        validators=[
                            django.core.validators.MaxValueValidator(65535)
                        ],
                    ),
                ),
                (
                    "initial_path",
                    models.CharField(
                        blank=True,
                        default="Applications/GrandChallengeViewer/index.html",
                        max_length=256,
                        validators=[
                            django.core.validators.RegexValidator(
                                message=
                                "This path is invalid, it must not start with a /",
                                regex="^(?:[^/][^\\s]*)\\Z",
                            )
                        ],
                    ),
                ),
                (
                    "creator",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "workstation",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="workstations.Workstation",
                    ),
                ),
            ],
            options={"abstract": False},
        ),
        migrations.AddField(
            model_name="session",
            name="workstation_image",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                to="workstations.WorkstationImage",
            ),
        ),
        migrations.AddField(
            model_name="historicalsession",
            name="workstation_image",
            field=models.ForeignKey(
                blank=True,
                db_constraint=False,
                null=True,
                on_delete=django.db.models.deletion.DO_NOTHING,
                related_name="+",
                to="workstations.WorkstationImage",
            ),
        ),
    ]