Skip to content

Commit f20fe9d

Browse files
committed
Remove duplicates from the descendents list
1 parent 53ef8d6 commit f20fe9d

1 file changed

Lines changed: 29 additions & 5 deletions

File tree

cbv/importer/storages.py

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from collections import defaultdict
22
from collections.abc import Mapping, Sequence
33

4+
from attrs import frozen
5+
46
from cbv import models
57
from cbv.importer.dataclasses import Klass, KlassAttribute, Method, Module
68
from cbv.importer.importers import CodeImporter
@@ -81,12 +83,28 @@ def _wipe_clashing_data(self, *, project_version: str) -> None:
8183
).delete()
8284

8385

86+
@frozen
87+
class Attribute:
88+
klass_pk: int
89+
line_number: int
90+
name: str
91+
value: str
92+
93+
def to_model(self) -> models.KlassAttribute:
94+
return models.KlassAttribute(
95+
klass_id=self.klass_pk,
96+
line_number=self.line_number,
97+
name=self.name,
98+
value=self.value,
99+
)
100+
101+
84102
def create_attributes(
85103
attributes: Mapping[tuple[str, str], Sequence[tuple[str, int]]],
86104
klass_lookup: Mapping[str, models.Klass],
87105
) -> None:
88106
# Go over each name/value pair to create KlassAttributes
89-
attribute_models = []
107+
collected_attributes = set()
90108
for (name, value), klasses in attributes.items():
91109
# Find all the descendants of each Klass.
92110
descendants = set()
@@ -106,13 +124,19 @@ def create_attributes(
106124
# Now we can create the KlassAttributes
107125
for klass_path, line in remaining_klasses:
108126
klass = klass_lookup[klass_path]
109-
attribute_models.append(
110-
models.KlassAttribute(
111-
klass=klass, line_number=line, name=name, value=value
127+
128+
collected_attributes.add(
129+
Attribute(
130+
klass_pk=klass.pk,
131+
line_number=line,
132+
name=name,
133+
value=value,
112134
)
113135
)
114136

115-
models.KlassAttribute.objects.bulk_create(attribute_models)
137+
models.KlassAttribute.objects.bulk_create(
138+
[attribute.to_model() for attribute in collected_attributes]
139+
)
116140

117141

118142
def create_inheritance(

0 commit comments

Comments
 (0)