Skip to content
This repository was archived by the owner on Feb 21, 2022. It is now read-only.

Commit e61a0ab

Browse files
committed
feat(entity): import services and libraries into entity model
1 parent 2c8bb9b commit e61a0ab

File tree

8 files changed

+222
-4
lines changed

8 files changed

+222
-4
lines changed

test/globalsearch/test_indexer.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@
1111

1212
def _initialize(client, models):
1313
for model, index in models:
14-
client.create_index(
15-
uid=index, options={"name": model.__name__, "primaryKey": "id"}
16-
)
14+
client.create_index(uid=index, options={"primaryKey": "id"})
1715

1816

1917
def test_index_model():

zoo/entities/management/__init__.py

Whitespace-only changes.

zoo/entities/management/commands/__init__.py

Whitespace-only changes.
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
import structlog
2+
from django.core.management.base import BaseCommand
3+
4+
from zoo.entities.enums import Kind
5+
from zoo.entities.models import Entity, Link
6+
from zoo.libraries.models import Library
7+
from zoo.services.models import Service
8+
9+
log = structlog.get_logger()
10+
11+
12+
class Command(BaseCommand):
13+
help = "Create entities from services and libraries"
14+
15+
def handle(self, *args, **options):
16+
self.service_to_entity()
17+
self.library_to_entity()
18+
19+
@staticmethod
20+
def service_to_entity():
21+
with open("service_exceptions.csv", "w+") as exceptions:
22+
exceptions.write(
23+
"Service name;Service owner;Service repository;Exception\n"
24+
)
25+
for service in Service.objects.all():
26+
if service.repository:
27+
log.info("entity.import_services.processing", service=service)
28+
try:
29+
entity = Entity.objects.create(
30+
name=service.name,
31+
owner=service.owner,
32+
description=service.description,
33+
kind=Kind.COMPONENT,
34+
type="service",
35+
source=service.repository,
36+
tags=service.tags,
37+
service=service,
38+
)
39+
40+
if service.docs_url:
41+
Link.objects.create(
42+
name="Documentation",
43+
url=service.docs_url,
44+
entity=entity,
45+
)
46+
47+
if service.slack_channel:
48+
Link.objects.create(
49+
name="Discussion",
50+
url=f"https://app.slack.com/client/T024Z3H2Y/{service.slack_channel}",
51+
entity=entity,
52+
)
53+
except Exception as err:
54+
exceptions.write(
55+
f"{service.get('name', '')};{service.get('owner', '')};{service.get('repository', '')};{repr((err))}\n"
56+
)
57+
else:
58+
exceptions.write(
59+
f"{service.get('name', '')};{service.get('owner', '')};;Missing repository for service\n"
60+
)
61+
62+
@staticmethod
63+
def library_to_entity():
64+
with open("library_exceptions.csv", "w+") as exceptions:
65+
exceptions.write(
66+
"Library name;Library owner;Library repository;Exception\n"
67+
)
68+
for library in Library.objects.all():
69+
if library.repository:
70+
log.info("entity.import_libraries.processing", library=library)
71+
try:
72+
entity = Entity.objects.create(
73+
name=library.name,
74+
owner=library.owner,
75+
description=library.description,
76+
kind=Kind.COMPONENT,
77+
type="library",
78+
source=library.repository,
79+
tags=library.tags,
80+
library=library,
81+
)
82+
83+
if library.docs_url:
84+
Link.objects.create(
85+
name="Documentation",
86+
url=library.docs_url,
87+
entity=entity,
88+
)
89+
90+
if library.slack_channel:
91+
Link.objects.create(
92+
name="Discussion",
93+
url=f"https://app.slack.com/client/T024Z3H2Y/{library.slack_channel}",
94+
entity=entity,
95+
)
96+
97+
if library.library_url:
98+
Link.objects.create(
99+
name="Library URL",
100+
url=library.library_url,
101+
entity=entity,
102+
)
103+
except Exception as err:
104+
exceptions.write(
105+
f"{library.get('name', '')};{library.get('owner', '')};{library.get('repository', '')};{repr((err))}\n"
106+
)
107+
else:
108+
exceptions.write(
109+
f"{library.get('name', '')};{library.get('owner', '')};;Missing repository for library\n"
110+
)

zoo/entities/migrations/0002_auto_20211007_1000.py renamed to zoo/entities/migrations/0002_allow_null_product_owner_on_group.py

File renamed without changes.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Generated by Django 2.2.19 on 2021-10-13 09:52
2+
3+
import django.db.models.deletion
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("entities", "0002_allow_null_product_owner_on_group"),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name="entity",
16+
name="group",
17+
field=models.OneToOneField(
18+
blank=True,
19+
null=True,
20+
on_delete=django.db.models.deletion.CASCADE,
21+
to="entities.Group",
22+
),
23+
),
24+
]
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import structlog
2+
from django.db import migrations
3+
4+
from zoo.entities.enums import Kind
5+
6+
log = structlog.get_logger()
7+
8+
9+
def service_to_entity(apps, _):
10+
Service = apps.get_model("services", "Service")
11+
Entity = apps.get_model("entities", "Entity")
12+
Link = apps.get_model("entities", "Link")
13+
for service in Service.objects.all():
14+
if service.repository:
15+
log.info("entity.import_services.processing", service=service)
16+
entity = Entity.objects.create(
17+
name=service.name,
18+
owner=service.owner,
19+
description=service.description,
20+
kind=Kind.COMPONENT,
21+
type="service",
22+
source=service.repository,
23+
tags=service.tags,
24+
service=service,
25+
)
26+
27+
if service.docs_url:
28+
Link.objects.create(
29+
name="Documentation", url=service.docs_url, entity=entity
30+
)
31+
32+
if service.slack_channel:
33+
Link.objects.create(
34+
name="Discussion",
35+
url=f"https://app.slack.com/client/T024Z3H2Y/{service.slack_channel}",
36+
entity=entity,
37+
)
38+
39+
40+
def library_to_entity(apps, _):
41+
Library = apps.get_model("libraries", "Library")
42+
Entity = apps.get_model("entities", "Entity")
43+
Link = apps.get_model("entities", "Link")
44+
for library in Library.objects.all():
45+
if library.repository:
46+
log.info("entity.import_libraries.processing", library=library)
47+
entity = Entity.objects.create(
48+
name=library.name,
49+
owner=library.owner,
50+
description=library.description,
51+
kind=Kind.COMPONENT,
52+
type="library",
53+
source=library.repository,
54+
tags=library.tags,
55+
library=library,
56+
)
57+
58+
if library.docs_url:
59+
Link.objects.create(
60+
name="Documentation", url=library.docs_url, entity=entity
61+
)
62+
63+
if library.slack_channel:
64+
Link.objects.create(
65+
name="Discussion",
66+
url=f"https://app.slack.com/client/T024Z3H2Y/{library.slack_channel}",
67+
entity=entity,
68+
)
69+
70+
if library.library_url:
71+
Link.objects.create(
72+
name="Library URL", url=library.library_url, entity=entity
73+
)
74+
75+
76+
class Migration(migrations.Migration):
77+
78+
dependencies = [
79+
("entities", "0003_allow_blank_on_group"),
80+
]
81+
82+
operations = [
83+
migrations.RunPython(service_to_entity),
84+
migrations.RunPython(library_to_entity),
85+
]

zoo/entities/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ class Meta:
5757
group = models.OneToOneField(
5858
"entities.Group",
5959
on_delete=models.CASCADE,
60-
default=None,
60+
null=True,
61+
blank=True,
6162
)
6263
source = models.ForeignKey(
6364
"repos.Repository",

0 commit comments

Comments
 (0)