Skip to content

Commit

Permalink
Deduplicate routes #198 (#201)
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobtylerwalls authored Feb 5, 2025
1 parent df8dbde commit f7e09f1
Show file tree
Hide file tree
Showing 15 changed files with 273 additions and 684 deletions.
136 changes: 22 additions & 114 deletions arches_lingo/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,47 +4,24 @@
from arches.app.models.models import ResourceInstance, TileModel
from arches.app.models.serializers import ArchesModelSerializer, ArchesTileSerializer
from arches.app.models.tile import Tile
from arches_references.models import ListItem


class SchemeStatementSerializer(ArchesTileSerializer):
class Meta:
model = TileModel
graph_slug = "scheme"
root_node = "statement"
fields = "__all__"
from arches_references.models import ListItem


class SchemeSerializer(ArchesModelSerializer):
# Generic serializers for Lingo.
class LingoResourceSerializer(ArchesModelSerializer):
class Meta:
model = ResourceInstance
graph_slug = "scheme"
graph_slug = None # generic
nodegroups = "__all__"
fields = "__all__"


class SchemeNamespaceSerializer(ArchesModelSerializer):
class Meta:
model = ResourceInstance
graph_slug = "scheme"
nodegroups = ["namespace"]
fields = "__all__"


class SchemeCreationSerializer(ArchesModelSerializer):
class Meta:
model = ResourceInstance
graph_slug = "scheme"
nodegroups = ["creation"]
fields = "__all__"


class SchemeRightsSerializer(ArchesModelSerializer):
class Meta:
model = ResourceInstance
graph_slug = "scheme"
nodegroups = ["rights", "right_statement"]
fields = "__all__"
def create(self, validated_data):
"""Repair parenttile until fixed in core."""
created = super().create(validated_data)
if created.right_statement:
self.repair_right_statement(created)
return created

def update(self, instance, validated_data):
"""Repair parenttile until fixed in core."""
Expand All @@ -69,33 +46,21 @@ def repair_right_statement(self, instance):
return instance


class SchemeLabelSerializer(ArchesModelSerializer):
class Meta:
model = ResourceInstance
graph_slug = "scheme"
nodegroups = ["appellative_status"]
fields = "__all__"


class SchemeLabelTileSerializer(ArchesTileSerializer):
class LingoTileSerializer(ArchesTileSerializer):
class Meta:
model = TileModel
graph_slug = "scheme"
root_node = "appellative_status"
graph_slug = None # generic
root_node = None # generic
fields = "__all__"

def validate(self, data):
data = super().validate(data)
def validate_appellative_status(self, data):
try:
PREF_LABEL_LIST_ITEM = ListItem.objects.get(
list_item_values__value="prefLabel",
)
PREF_LABEL = ListItem.objects.get(list_item_values__value="prefLabel")
except ListItem.MultipleObjectsReturned:
raise RuntimeError(
_(
"Ask your system administrator to deduplicate the prefLabel list items."
)
msg = _(
"Ask your system administrator to deduplicate the prefLabel list items."
)
raise ValidationError(msg)

if data:
# TODO: reduce nested-fallback awkwardness by returning a dataclass from
Expand All @@ -118,68 +83,11 @@ def validate(self, data):
)
if (
data.get("tileid", None) not in (None, label.tileid)
and new_label_type.get("uri", "") == PREF_LABEL_LIST_ITEM.uri
and label_type.get("uri", "") == PREF_LABEL_LIST_ITEM.uri
and new_label_type.get("uri", "") == PREF_LABEL.uri
and label_type.get("uri", "") == PREF_LABEL.uri
and label_language.get("uri", "")
== new_label_language.get("uri", "")
):
raise ValidationError(
_("Only one preferred label per language is permitted.")
)
msg = _("Only one preferred label per language is permitted.")
raise ValidationError(msg)
return data


class SchemeNoteSerializer(ArchesModelSerializer):
class Meta:
model = ResourceInstance
graph_slug = "scheme"
nodegroups = ["statement"]
fields = "__all__"


class SchemeNoteTileSerializer(ArchesTileSerializer):
class Meta:
model = TileModel
graph_slug = "scheme"
root_node = "statement"
fields = "__all__"


class TextualWorkRdmSystemSerializer(ArchesModelSerializer):
class Meta:
model = ResourceInstance
graph_slug = "textual_work"
nodegroups = "__all__"
fields = "__all__"


class ConceptStatementSerializer(ArchesTileSerializer):
class Meta:
model = TileModel
graph_slug = "concept"
root_node = "statement"
fields = "__all__"


class ConceptSerializer(ArchesModelSerializer):
class Meta:
model = ResourceInstance
graph_slug = "concept"
nodegroups = "__all__"
fields = "__all__"


class PersonRdmSystemSerializer(ArchesModelSerializer):
class Meta:
model = ResourceInstance
graph_slug = "person"
nodegroups = "__all__"
fields = "__all__"


class GroupRdmSystemSerializer(ArchesModelSerializer):
class Meta:
model = ResourceInstance
graph_slug = "group"
nodegroups = "__all__"
fields = "__all__"
Loading

0 comments on commit f7e09f1

Please sign in to comment.