Skip to content

Commit

Permalink
better retrievers
Browse files Browse the repository at this point in the history
  • Loading branch information
delcroip committed Sep 30, 2024
1 parent 62aa164 commit e760979
Showing 1 changed file with 10 additions and 13 deletions.
23 changes: 10 additions & 13 deletions api_fhir_r4/model_retrievers.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from django.db.models.query import QuerySet
from django.db.models import Model

from insuree.services import validate_insuree_number
from api_fhir_r4.converters import ReferenceConverterMixin


Expand Down Expand Up @@ -36,9 +36,13 @@ def retriever_additional_queryset_filtering(cls, queryset):

@classmethod
def get_model_object(cls, queryset: QuerySet, identifier_value) -> Model:
filters = {}
if cls.serializer_reference_type == 'uuid_reference':
identifier_value = uuid.UUID(identifier_value)
return queryset.get(**{cls.identifier_field: identifier_value})
identifier_value = uuid.UUID(str(identifier_value))
elif hasattr(queryset.model, 'validity_to'):
filters['validity_to__isnull'] = True
filters[cls.identifier_field] = identifier_value
return queryset.get(**filters)


class UUIDIdentifierModelRetriever(GenericModelRetriever):
Expand All @@ -52,7 +56,7 @@ def identifier_validator(cls, identifier_value):
@classmethod
def _is_uuid_identifier(cls, identifier):
try:
cls.identifier_value = uuid.UUID(str(identifier))
uuid.UUID(str(identifier))
return True
except ValueError:
return False
Expand All @@ -75,10 +79,7 @@ class CodeIdentifierModelRetriever(GenericModelRetriever):
def identifier_validator(cls, identifier_value):
return isinstance(identifier_value, str)

@classmethod
def add_retriever_queryset_filtering(cls, queryset):
# By default no additional changes are made in queryset
return queryset.filter(validity_to__is_null=True)



class CHFIdentifierModelRetriever(CodeIdentifierModelRetriever):
Expand All @@ -87,11 +88,7 @@ class CHFIdentifierModelRetriever(CodeIdentifierModelRetriever):
@classmethod
def identifier_validator(cls, identifier_value):
# From model specification
return isinstance(identifier_value, str) and len(identifier_value) <= 12

@classmethod
def get_model_object(cls, queryset: QuerySet, identifier_value) -> Model:
return queryset.get(**{cls.identifier_field: identifier_value, 'validity_to__isnull': True})
return isinstance(identifier_value, str) and validate_insuree_number(identifier_value)


class GroupIdentifierModelRetriever(CHFIdentifierModelRetriever):
Expand Down

0 comments on commit e760979

Please sign in to comment.