diff --git a/core/common/constants.py b/core/common/constants.py index 61f5d3e16..ceacb1b35 100644 --- a/core/common/constants.py +++ b/core/common/constants.py @@ -41,6 +41,8 @@ INCLUDE_HIERARCHY_ROOT = 'includeHierarchyRoot' INCLUDE_SUMMARY = 'includeSummary' INCLUDE_VERIFICATION_TOKEN = 'includeVerificationToken' +INCLUDE_SOURCE_VERSIONS = 'includeSourceVersions' +INCLUDE_COLLECTION_VERSIONS = 'includeCollectionVersions' MAPPING_LOOKUP_CONCEPTS = 'lookupConcepts' MAPPING_LOOKUP_FROM_CONCEPT = 'lookupFromConcept' MAPPING_LOOKUP_TO_CONCEPT = 'lookupToConcept' diff --git a/core/concepts/serializers.py b/core/concepts/serializers.py index e807ddf8e..dfc374012 100644 --- a/core/concepts/serializers.py +++ b/core/concepts/serializers.py @@ -4,7 +4,7 @@ from rest_framework.serializers import ModelSerializer from core.common.constants import INCLUDE_INVERSE_MAPPINGS_PARAM, INCLUDE_MAPPINGS_PARAM, INCLUDE_EXTRAS_PARAM, \ - INCLUDE_PARENT_CONCEPTS, INCLUDE_CHILD_CONCEPTS + INCLUDE_PARENT_CONCEPTS, INCLUDE_CHILD_CONCEPTS, INCLUDE_SOURCE_VERSIONS, INCLUDE_COLLECTION_VERSIONS from core.concepts.models import Concept, LocalizedText @@ -159,6 +159,22 @@ class Meta: 'previous_version_url', 'source_versions', 'collection_versions' ) + def __init__(self, *args, **kwargs): + params = get(kwargs, 'context.request.query_params') + self.query_params = params.dict() if params else dict() + self.include_source_versions = self.query_params.get(INCLUDE_SOURCE_VERSIONS) in ['true', True] + self.include_collection_versions = self.query_params.get(INCLUDE_COLLECTION_VERSIONS) in ['true', True] + + try: + if not self.include_source_versions: + self.fields.pop('source_versions', None) + if not self.include_collection_versions: + self.fields.pop('collection_versions', None) + except: # pylint: disable=bare-except + pass + + super().__init__(*args, **kwargs) + class ConceptDetailSerializer(ModelSerializer): uuid = CharField(source='id', read_only=True) diff --git a/core/mappings/serializers.py b/core/mappings/serializers.py index e3521b196..25d49954f 100644 --- a/core/mappings/serializers.py +++ b/core/mappings/serializers.py @@ -3,7 +3,8 @@ from rest_framework.serializers import ModelSerializer from core.common.constants import MAPPING_LOOKUP_CONCEPTS, MAPPING_LOOKUP_SOURCES, MAPPING_LOOKUP_FROM_CONCEPT, \ - MAPPING_LOOKUP_TO_CONCEPT, MAPPING_LOOKUP_FROM_SOURCE, MAPPING_LOOKUP_TO_SOURCE, INCLUDE_EXTRAS_PARAM + MAPPING_LOOKUP_TO_CONCEPT, MAPPING_LOOKUP_FROM_SOURCE, MAPPING_LOOKUP_TO_SOURCE, INCLUDE_EXTRAS_PARAM, \ + INCLUDE_SOURCE_VERSIONS, INCLUDE_COLLECTION_VERSIONS from core.concepts.serializers import ConceptListSerializer, ConceptDetailSerializer from core.mappings.models import Mapping from core.sources.serializers import SourceListSerializer, SourceDetailSerializer @@ -82,6 +83,22 @@ class Meta: 'previous_version_url', 'source_versions', 'collection_versions', ) + def __init__(self, *args, **kwargs): + params = get(kwargs, 'context.request.query_params') + self.query_params = params.dict() if params else dict() + self.include_source_versions = self.query_params.get(INCLUDE_SOURCE_VERSIONS) in ['true', True] + self.include_collection_versions = self.query_params.get(INCLUDE_COLLECTION_VERSIONS) in ['true', True] + + try: + if not self.include_source_versions: + self.fields.pop('source_versions', None) + if not self.include_collection_versions: + self.fields.pop('collection_versions', None) + except: # pylint: disable=bare-except + pass + + super().__init__(*args, **kwargs) + class MappingDetailSerializer(MappingListSerializer): type = CharField(source='resource_type', read_only=True)