From ac770b1d4927a27dce230024ddc92aea18980189 Mon Sep 17 00:00:00 2001 From: jarosevcik Date: Wed, 13 Oct 2021 11:57:00 +0200 Subject: [PATCH] feat(entity): import services and libraries into entity model --- test/globalsearch/test_indexer.py | 2 +- ...0002_allow_null_product_owner_on_group.py} | 0 .../migrations/0003_allow_blank_on_group.py | 24 ++++++ .../0004_import_objects_to_entity_model.py | 83 +++++++++++++++++++ zoo/entities/models.py | 3 +- 5 files changed, 110 insertions(+), 2 deletions(-) rename zoo/entities/migrations/{0002_auto_20211007_1000.py => 0002_allow_null_product_owner_on_group.py} (100%) create mode 100644 zoo/entities/migrations/0003_allow_blank_on_group.py create mode 100644 zoo/entities/migrations/0004_import_objects_to_entity_model.py diff --git a/test/globalsearch/test_indexer.py b/test/globalsearch/test_indexer.py index 0f4e5034..69199632 100644 --- a/test/globalsearch/test_indexer.py +++ b/test/globalsearch/test_indexer.py @@ -21,7 +21,7 @@ def test_index_model(): Dependency(name="test", type=DependencyType.LANG).save() indexer = uut() - _initialize(indexer.meiliclient, indexer.models_to_index) + # _initialize(indexer.meiliclient, indexer.models_to_index) indexer.index_specified_models() diff --git a/zoo/entities/migrations/0002_auto_20211007_1000.py b/zoo/entities/migrations/0002_allow_null_product_owner_on_group.py similarity index 100% rename from zoo/entities/migrations/0002_auto_20211007_1000.py rename to zoo/entities/migrations/0002_allow_null_product_owner_on_group.py diff --git a/zoo/entities/migrations/0003_allow_blank_on_group.py b/zoo/entities/migrations/0003_allow_blank_on_group.py new file mode 100644 index 00000000..39075ade --- /dev/null +++ b/zoo/entities/migrations/0003_allow_blank_on_group.py @@ -0,0 +1,24 @@ +# Generated by Django 2.2.19 on 2021-10-13 09:52 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("entities", "0002_allow_null_product_owner_on_group"), + ] + + operations = [ + migrations.AlterField( + model_name="entity", + name="group", + field=models.OneToOneField( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="entities.Group", + ), + ), + ] diff --git a/zoo/entities/migrations/0004_import_objects_to_entity_model.py b/zoo/entities/migrations/0004_import_objects_to_entity_model.py new file mode 100644 index 00000000..d1eabf1e --- /dev/null +++ b/zoo/entities/migrations/0004_import_objects_to_entity_model.py @@ -0,0 +1,83 @@ +import structlog +from django.db import migrations + +from zoo.entities.enums import Kind + +log = structlog.get_logger() + + +def service_to_entity(apps, _): + Service = apps.get_model("services", "Service") + Entity = apps.get_model("entities", "Entity") + Link = apps.get_model("entities", "Link") + for service in Service.objects.all(): + log.info("entity.import_services.processing", service=service) + entity = Entity.objects.create( + name=service.name, + owner=service.owner, + description=service.description, + kind=Kind.COMPONENT, + type="service", + source=service.repository, + tags=service.tags, + service=service, + ) + + if service.docs_url: + Link.objects.create( + name="Documentation", url=service.docs_url, entity=entity + ) + + if service.slack_channel: + Link.objects.create( + name="Discussion", + url=f"https://app.slack.com/client/T024Z3H2Y/{service.slack_channel}", + entity=entity, + ) + + +def library_to_entity(apps, _): + Library = apps.get_model("libraries", "Library") + Entity = apps.get_model("entities", "Entity") + Link = apps.get_model("entities", "Link") + for library in Library.objects.all(): + log.info("entity.import_libraries.processing", library=library) + entity = Entity.objects.create( + name=library.name, + owner=library.owner, + description=library.description, + kind=Kind.COMPONENT, + type="library", + source=library.repository, + tags=library.tags, + library=library, + ) + + if library.docs_url: + Link.objects.create( + name="Documentation", url=library.docs_url, entity=entity + ) + + if library.slack_channel: + Link.objects.create( + name="Discussion", + url=f"https://app.slack.com/client/T024Z3H2Y/{library.slack_channel}", + entity=entity, + ) + + if library.library_url: + Link.objects.create( + name="Library URL", url=library.library_url, entity=entity + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ("entities", "0003_allow_blank_on_group"), + ] + + operations = [ + migrations.RunPython(service_to_entity), + migrations.RunPython(library_to_entity), + ] diff --git a/zoo/entities/models.py b/zoo/entities/models.py index c7c612e5..8013a114 100644 --- a/zoo/entities/models.py +++ b/zoo/entities/models.py @@ -57,7 +57,8 @@ class Meta: group = models.OneToOneField( "entities.Group", on_delete=models.CASCADE, - default=None, + null=True, + blank=True, ) source = models.ForeignKey( "repos.Repository",