# Support for GET and PUT

* adds full external identifier support for GET and PUT methods on EIV, KOM, EMA and OEK
This commit is contained in:
2026-05-10 10:54:48 +02:00
parent b721e9c51c
commit 3ae0dc0cc1
6 changed files with 25 additions and 19 deletions

View File

@@ -171,6 +171,14 @@ class AbstractModelAPISerializer:
Returns:
"""
# First if there is an external identifier linked to an internal one, so we can continue with the internal
try:
ext_id = ExternalIdentifier.objects.get(external_id=id)
id = ext_id.internal_id
except ObjectDoesNotExist:
# No external id found - let's hope the given id exists internally
pass
obj = self.model.objects.get(
id=id,
deleted__isnull=True,

View File

@@ -113,9 +113,11 @@ class CompensationAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensa
obj = self._initialize_objects(json_model, user)
# Fill in data to objects
properties = json_model.get("properties", None)
if not properties:
raise AssertionError("No 'properties' found in payload!")
properties = json_model["properties"]
external_identifier = properties.get("external_identifier", None)
self._check_external_identifier_on_entry_creation(external_identifier)
obj.identifier = obj.generate_new_identifier()
obj.title = properties["title"]
obj.is_cef = properties["is_cef"]
@@ -131,7 +133,7 @@ class CompensationAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensa
obj = self._set_compensation_states(obj, properties["after_states"], obj.after_states)
obj = self._set_deadlines(obj, properties["deadlines"])
self._set_external_identifier(obj, properties.get("external_identifier", None))
self._set_external_identifier(obj.id, properties.get("external_identifier", None), obj.created)
obj.log.add(obj.created)
celery_update_parcels.delay(obj.geometry.id)
@@ -156,10 +158,6 @@ class CompensationAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensa
# Fill in data to objects
properties = json_model["properties"]
external_identifier = properties.get("external_identifier", None)
self._check_external_identifier_on_entry_creation(external_identifier)
obj.title = properties["title"]
obj.is_cef = properties["is_cef"]
obj.is_coherence_keeping = properties["is_coherence_keeping"]
@@ -177,7 +175,7 @@ class CompensationAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensa
obj = self._set_compensation_states(obj, properties["after_states"], obj.after_states)
obj = self._set_deadlines(obj, properties["deadlines"])
self._set_external_identifier(obj, properties.get("external_identifier", None))
self._set_external_identifier(obj.id, properties.get("external_identifier", None), update_action)
obj.log.add(update_action)
celery_update_parcels.delay(obj.geometry.id)

View File

@@ -149,7 +149,7 @@ class EcoAccountAPISerializerV1(AbstractModelAPISerializerV1,
obj = self._set_compensation_states(obj, properties["after_states"], obj.after_states)
obj = self._set_deadlines(obj, properties["deadlines"])
self._set_external_identifier(obj, properties.get("external_identifier", None))
self._set_external_identifier(obj.id, properties.get("external_identifier", None), obj.created)
obj.log.add(obj.created)
obj.users.add(user)
@@ -199,7 +199,7 @@ class EcoAccountAPISerializerV1(AbstractModelAPISerializerV1,
obj = self._set_compensation_states(obj, properties["after_states"], obj.after_states)
obj = self._set_deadlines(obj, properties["deadlines"])
self._set_external_identifier(obj, external_identifier)
self._set_external_identifier(obj.id, external_identifier, update_action)
obj.log.add(update_action)
celery_update_parcels.delay(obj.geometry.id)

View File

@@ -123,7 +123,7 @@ class EmaAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensationAPISe
obj = self._set_compensation_states(obj, properties["after_states"], obj.after_states)
obj = self._set_deadlines(obj, properties["deadlines"])
self._set_external_identifier(obj, external_identifier)
self._set_external_identifier(obj.id, external_identifier, obj.created)
obj.log.add(obj.created)
obj.users.add(user)
@@ -166,7 +166,7 @@ class EmaAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensationAPISe
obj = self._set_compensation_states(obj, properties["after_states"], obj.after_states)
obj = self._set_deadlines(obj, properties["deadlines"])
self._set_external_identifier(obj, properties.get("external_identifier", None))
self._set_external_identifier(obj.id, properties.get("external_identifier", None), update_action)
obj.log.add(update_action)
celery_update_parcels.delay(obj.geometry.id)

View File

@@ -165,7 +165,7 @@ class InterventionAPISerializerV1(AbstractModelAPISerializerV1,
obj.legal.save()
obj.save()
self._set_external_identifier(obj, external_identifier)
self._set_external_identifier(obj.id, external_identifier, obj.created)
obj.users.add(user)
obj.log.add(obj.created)
@@ -204,8 +204,8 @@ class InterventionAPISerializerV1(AbstractModelAPISerializerV1,
obj.legal.save()
obj.save()
self._set_external_identifier(obj, properties.get("external_identifier", None))
obj.mark_as_edited(user, edit_comment="API update")
self._set_external_identifier(obj.id, properties.get("external_identifier", None), update_action)
obj.send_data_to_egon()
celery_update_parcels.delay(obj.geometry.id)

View File

@@ -138,12 +138,12 @@ class AbstractModelAPISerializerV1(AbstractModelAPISerializer):
success = entry.deleted is not None
return success
def _set_external_identifier(self, obj, external_identifier):
def _set_external_identifier(self, internal_identifier, external_identifier, log_entry):
""" If an external identifier was provided in the payload, we set it
in the database
Args:
obj (BaseObject): The already processed konova object (EIV, KOM, ...)
internal_identifier (BaseObject): The already processed konova object (EIV, KOM, ...)
external_identifier (any): The external identifier taken from the payload
Returns:
@@ -153,11 +153,11 @@ class AbstractModelAPISerializerV1(AbstractModelAPISerializer):
return None
ext_id_obj = ExternalIdentifier.objects.get_or_create(
internal_id=obj.id,
internal_id=internal_identifier,
external_id=external_identifier
)[0]
if not ext_id_obj.created:
ext_id_obj.created = obj.created
ext_id_obj.created = log_entry
ext_id_obj.save()
return ext_id_obj