# Generated by Django 2.1.7 on 2019-10-25 16:26

import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ("contenttypes", "0002_remove_content_type_name"),
    ]

    operations = [
        migrations.CreateModel(
            name="Document",
            fields=[
                ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
                ("text", models.TextField()),
                ("meta", models.TextField(default="{}")),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "annotations_approved_by",
                    models.ForeignKey(
                        null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL
                    ),
                ),
            ],
        ),
        migrations.CreateModel(
            name="DocumentAnnotation",
            fields=[
                ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
                ("prob", models.FloatField(default=0.0)),
                ("manual", models.BooleanField(default=False)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "document",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE, related_name="doc_annotations", to="api.Document"
                    ),
                ),
            ],
        ),
        migrations.CreateModel(
            name="Label",
            fields=[
                ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
                ("text", models.CharField(max_length=100)),
                (
                    "prefix_key",
                    models.CharField(
                        blank=True,
                        choices=[("ctrl", "ctrl"), ("shift", "shift"), ("ctrl shift", "ctrl shift")],
                        max_length=10,
                        null=True,
                    ),
                ),
                (
                    "suffix_key",
                    models.CharField(
                        blank=True,
                        choices=[
                            ("a", "a"),
                            ("b", "b"),
                            ("c", "c"),
                            ("d", "d"),
                            ("e", "e"),
                            ("f", "f"),
                            ("g", "g"),
                            ("h", "h"),
                            ("i", "i"),
                            ("j", "j"),
                            ("k", "k"),
                            ("l", "l"),
                            ("m", "m"),
                            ("n", "n"),
                            ("o", "o"),
                            ("p", "p"),
                            ("q", "q"),
                            ("r", "r"),
                            ("s", "s"),
                            ("t", "t"),
                            ("u", "u"),
                            ("v", "v"),
                            ("w", "w"),
                            ("x", "x"),
                            ("y", "y"),
                            ("z", "z"),
                        ],
                        max_length=1,
                        null=True,
                    ),
                ),
                ("background_color", models.CharField(default="#209cee", max_length=7)),
                ("text_color", models.CharField(default="#ffffff", max_length=7)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
            ],
        ),
        migrations.CreateModel(
            name="Project",
            fields=[
                ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
                ("name", models.CharField(max_length=100)),
                ("description", models.TextField(default="")),
                ("guideline", models.TextField(default="")),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "project_type",
                    models.CharField(
                        choices=[
                            ("DocumentClassification", "document classification"),
                            ("SequenceLabeling", "sequence labeling"),
                            ("Seq2seq", "sequence to sequence"),
                        ],
                        max_length=30,
                    ),
                ),
                ("randomize_document_order", models.BooleanField(default=False)),
                ("collaborative_annotation", models.BooleanField(default=False)),
            ],
            options={
                "abstract": False,
                "base_manager_name": "objects",
            },
        ),
        migrations.CreateModel(
            name="Role",
            fields=[
                ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
                ("name", models.CharField(max_length=100, unique=True)),
                ("description", models.TextField(default="")),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
            ],
        ),
        migrations.CreateModel(
            name="RoleMapping",
            fields=[
                ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
            ],
        ),
        migrations.CreateModel(
            name="Seq2seqAnnotation",
            fields=[
                ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
                ("prob", models.FloatField(default=0.0)),
                ("manual", models.BooleanField(default=False)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                ("text", models.CharField(max_length=500)),
                (
                    "document",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="seq2seq_annotations",
                        to="api.Document",
                    ),
                ),
                ("user", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.CreateModel(
            name="SequenceAnnotation",
            fields=[
                ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
                ("prob", models.FloatField(default=0.0)),
                ("manual", models.BooleanField(default=False)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                ("start_offset", models.IntegerField()),
                ("end_offset", models.IntegerField()),
                (
                    "document",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE, related_name="seq_annotations", to="api.Document"
                    ),
                ),
                ("label", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="api.Label")),
                ("user", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.CreateModel(
            name="Seq2seqProject",
            fields=[
                (
                    "project_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="api.Project",
                    ),
                ),
            ],
            options={
                "abstract": False,
                "base_manager_name": "objects",
            },
            bases=("api.project",),
        ),
        migrations.CreateModel(
            name="SequenceLabelingProject",
            fields=[
                (
                    "project_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="api.Project",
                    ),
                ),
            ],
            options={
                "abstract": False,
                "base_manager_name": "objects",
            },
            bases=("api.project",),
        ),
        migrations.CreateModel(
            name="TextClassificationProject",
            fields=[
                (
                    "project_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="api.Project",
                    ),
                ),
            ],
            options={
                "abstract": False,
                "base_manager_name": "objects",
            },
            bases=("api.project",),
        ),
        migrations.AddField(
            model_name="rolemapping",
            name="project",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE, related_name="role_mappings", to="api.Project"
            ),
        ),
        migrations.AddField(
            model_name="rolemapping",
            name="role",
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="api.Role"),
        ),
        migrations.AddField(
            model_name="rolemapping",
            name="user",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE, related_name="role_mappings", to=settings.AUTH_USER_MODEL
            ),
        ),
        migrations.AddField(
            model_name="project",
            name="polymorphic_ctype",
            field=models.ForeignKey(
                editable=False,
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                related_name="polymorphic_api.project_set+",
                to="contenttypes.ContentType",
            ),
        ),
        migrations.AddField(
            model_name="project",
            name="users",
            field=models.ManyToManyField(related_name="projects", to=settings.AUTH_USER_MODEL),
        ),
        migrations.AddField(
            model_name="label",
            name="project",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE, related_name="labels", to="api.Project"
            ),
        ),
        migrations.AddField(
            model_name="documentannotation",
            name="label",
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="api.Label"),
        ),
        migrations.AddField(
            model_name="documentannotation",
            name="user",
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
        ),
        migrations.AddField(
            model_name="document",
            name="project",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE, related_name="documents", to="api.Project"
            ),
        ),
        migrations.AlterUniqueTogether(
            name="sequenceannotation",
            unique_together={("document", "user", "label", "start_offset", "end_offset")},
        ),
        migrations.AlterUniqueTogether(
            name="seq2seqannotation",
            unique_together={("document", "user", "text")},
        ),
        migrations.AlterUniqueTogether(
            name="rolemapping",
            unique_together={("user", "project", "role")},
        ),
        migrations.AlterUniqueTogether(
            name="label",
            unique_together={("project", "text")},
        ),
        migrations.AlterUniqueTogether(
            name="documentannotation",
            unique_together={("document", "user", "label")},
        ),
    ]
