Commit 41863f82 authored by Mickaël Desfrênes's avatar Mickaël Desfrênes
Browse files

modify migration 0014

parent c2d902bb
Loading
Loading
Loading
Loading
+0 −72
Original line number Diff line number Diff line
from django.core.management.base import BaseCommand
from django.db import connection
from resources.models import (
    Project,
    Role,
    Permission,
    Collection,
    Resource,
    File,
    Metadata,
    MetadataSet,
    MetadataCollectionValue,
    MetadataResourceValue,
    Tag,
    ProjectAccess,
)
from django.contrib.auth.models import User


"""
    - Add field project to collection
    - Add field project to file
    - Add field project to metadata
    - Add field project to metadataset
    - Add field ptr_project to resource
    - Add field project to tag
"""


class Command(BaseCommand):
    def handle(self, *args, **options):
        for user in User.objects.all():
            project, created = Project.objects.get_or_create(
                label="{} main project".format(user.username)
            )
            admin_role, created = Role.objects.get_or_create(
                label="admin", project=project
            )
            project_access, created = ProjectAccess.objects.get_or_create(
                project=project, role=admin_role, user=user
            )
            with connection.cursor() as cursor:
                cursor.execute(
                    "UPDATE resources_collection set project_id = {} where owner_id = {}".format(
                        project.pk, user.pk
                    )
                )
                cursor.execute(
                    "UPDATE resources_file set project_id = {} where owner_id = {}".format(
                        project.pk, user.pk
                    )
                )
                cursor.execute(
                    "UPDATE resources_metadata set project_id = {} where owner_id = {}".format(
                        project.pk, user.pk
                    )
                )
                cursor.execute(
                    "UPDATE resources_metadataset set project_id = {} where owner_id = {}".format(
                        project.pk, user.pk
                    )
                )
                cursor.execute(
                    "UPDATE resources_resource set ptr_project_id = {} where ptr_owner_id = {}".format(
                        project.pk, user.pk
                    )
                )
                cursor.execute(
                    "UPDATE resources_tag set project_id = {} where owner_id = {}".format(
                        project.pk, user.pk
                    )
                )
+175 −46
Original line number Diff line number Diff line
@@ -3,99 +3,228 @@
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
from django.contrib.auth.models import User
from django.db import connection
from resources.models import (
    Project,
    Role,
    ProjectAccess,
)


def migrate_property():
    for user in User.objects.all():
        project, created = Project.objects.get_or_create(
            label="{} main project".format(user.username)
        )
        admin_role, created = Role.objects.get_or_create(label="admin", project=project)
        project_access, created = ProjectAccess.objects.get_or_create(
            project=project, role=admin_role, user=user
        )
        with connection.cursor() as cursor:
            cursor.execute(
                "UPDATE resources_collection set project_id = {} where owner_id = {}".format(
                    project.pk, user.pk
                )
            )
            cursor.execute(
                "UPDATE resources_file set project_id = {} where owner_id = {}".format(
                    project.pk, user.pk
                )
            )
            cursor.execute(
                "UPDATE resources_metadata set project_id = {} where owner_id = {}".format(
                    project.pk, user.pk
                )
            )
            cursor.execute(
                "UPDATE resources_metadataset set project_id = {} where owner_id = {}".format(
                    project.pk, user.pk
                )
            )
            cursor.execute(
                "UPDATE resources_resource set ptr_project_id = {} where ptr_owner_id = {}".format(
                    project.pk, user.pk
                )
            )
            cursor.execute(
                "UPDATE resources_tag set project_id = {} where owner_id = {}".format(
                    project.pk, user.pk
                )
            )


class Migration(migrations.Migration):

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ('resources', '0013_collection_is_oai_record'),
        ("resources", "0013_collection_is_oai_record"),
    ]

    operations = [
        migrations.CreateModel(
            name='Permission',
            name="Permission",
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('label', models.TextField(unique=True)),
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("label", models.TextField(unique=True)),
            ],
        ),
        migrations.CreateModel(
            name='Project',
            name="Project",
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('label', models.TextField()),
                ('description', models.TextField()),
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("label", models.TextField()),
                ("description", models.TextField()),
            ],
        ),
        migrations.CreateModel(
            name='Role',
            name="Role",
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('label', models.TextField()),
                ('permissions', models.ManyToManyField(to='resources.Permission')),
                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='resources.project')),
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("label", models.TextField()),
                ("permissions", models.ManyToManyField(to="resources.Permission")),
                (
                    "project",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="resources.project",
                    ),
                ),
            ],
            options={
                'unique_together': {('label', 'project')},
                "unique_together": {("label", "project")},
            },
        ),
        migrations.AddField(
            model_name='collection',
            name='project',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='resources.project'),
            model_name="collection",
            name="project",
            field=models.ForeignKey(
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                to="resources.project",
            ),
        ),
        migrations.AddField(
            model_name='file',
            name='project',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='resources.project'),
            model_name="file",
            name="project",
            field=models.ForeignKey(
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                to="resources.project",
            ),
        ),
        migrations.AddField(
            model_name='metadata',
            name='project',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='resources.project'),
            model_name="metadata",
            name="project",
            field=models.ForeignKey(
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                to="resources.project",
            ),
        ),
        migrations.AddField(
            model_name='metadataset',
            name='project',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='resources.project'),
            model_name="metadataset",
            name="project",
            field=models.ForeignKey(
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                to="resources.project",
            ),
        ),
        migrations.AddField(
            model_name='resource',
            name='ptr_project',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='resources.project'),
            model_name="resource",
            name="ptr_project",
            field=models.ForeignKey(
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                to="resources.project",
            ),
        ),
        migrations.AddField(
            model_name='tag',
            name='project',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='resources.project'),
            model_name="tag",
            name="project",
            field=models.ForeignKey(
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                to="resources.project",
            ),
        ),
        migrations.AlterUniqueTogether(
            name='file',
            unique_together={('owner', 'hash'), ('project', 'hash')},
            name="file",
            unique_together={("owner", "hash"), ("project", "hash")},
        ),
        migrations.AlterUniqueTogether(
            name='metadata',
            unique_together={('title', 'set', 'owner'), ('title', 'set', 'project')},
            name="metadata",
            unique_together={("title", "set", "owner"), ("title", "set", "project")},
        ),
        migrations.AlterUniqueTogether(
            name='metadataset',
            unique_together={('title', 'project'), ('title', 'owner')},
            name="metadataset",
            unique_together={("title", "project"), ("title", "owner")},
        ),
        migrations.AlterUniqueTogether(
            name='tag',
            unique_together={('uid', 'project'), ('uid', 'owner')},
            name="tag",
            unique_together={("uid", "project"), ("uid", "owner")},
        ),
        migrations.CreateModel(
            name='ProjectAccess',
            name="ProjectAccess",
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='resources.project')),
                ('role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='resources.role')),
                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "project",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="resources.project",
                    ),
                ),
                (
                    "role",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE, to="resources.role"
                    ),
                ),
                (
                    "user",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                'unique_together': {('project', 'user', 'role')},
                "unique_together": {("project", "user", "role")},
            },
        ),
        migrations.RunPython(migrate_property),
    ]