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), ), ]
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") }, ), ]
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), ), ]
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", ), ), ]