Loading src/rpc/methods.py +14 −1 Original line number Diff line number Diff line Loading @@ -11,7 +11,7 @@ import pyvips import unidecode from deskew import determine_skew as _determine_skew from django.contrib.auth.models import User from django.db.models import QuerySet from django.db.models import QuerySet, Count, Q from django.db.utils import IntegrityError from django.utils import timezone Loading Loading @@ -414,6 +414,19 @@ def collections( .annotate(title_binary=Cast("title", output_field=BinaryField())) .order_by(order_by) ) query_set = query_set.annotate( resources_count=Count( "resources", filter=Q(resources__deleted_at__isnull=True), distinct=True ), children_count=Count( "collection", filter=Q(collection__deleted_at__isnull=True), distinct=True ), ).prefetch_related( "tags", "metadatacollectionvalue_set", "metadatacollectionvalue_set__metadata", "metadatacollectionvalue_set__metadata__set", ) if only_published: query_set = query_set.filter(public_access=True) query_set = query_set[limit_from:limit_to] Loading src/rpc/serializers.py +23 −9 Original line number Diff line number Diff line Loading @@ -42,7 +42,11 @@ def metadataset( def metadata(metadata_instance: models.Metadata, cache: SerializerCache = None) -> dict: set_instance = get_cache(cache).fetch_obj("metadataset", metadata_instance.set_id) set_instance = metadata_instance._state.fields_cache.get("set") if set_instance is None: set_instance = get_cache(cache).fetch_obj( "metadataset", metadata_instance.set_id ) return { "object_type": "metadata", "id": metadata_instance.id, Loading @@ -58,6 +62,10 @@ def metadata_collection_value( metadata_collection_value_instance: models.MetadataCollectionValue, cache: SerializerCache = None, ) -> dict: metadata_instance = metadata_collection_value_instance._state.fields_cache.get( "metadata" ) if metadata_instance is None: metadata_instance = get_cache(cache).fetch_obj( "metadata", metadata_collection_value_instance.metadata_id ) Loading Loading @@ -90,6 +98,16 @@ def collection( only_published: bool = False, cache: SerializerCache = None, ) -> dict: resources_count = getattr(collection_instance, "resources_count", None) if resources_count is None: resources_count = collection_instance.resources.filter( deleted_at__isnull=True ).count() children_count = getattr(collection_instance, "children_count", None) if children_count is None: children_count = ( collection_instance.children().filter(deleted_at__isnull=True).count() ) tags = [] for tag_instance in collection_instance.tags.all(): tags.append(tag(tag_instance, cache=cache)) Loading @@ -97,12 +115,8 @@ def collection( "object_type": "collection", "id": collection_instance.id, "title": collection_instance.title, "resources_count": collection_instance.resources.filter( deleted_at__isnull=True ).count(), "children_count": collection_instance.children() .filter(deleted_at__isnull=True) .count(), "resources_count": resources_count, "children_count": children_count, "parent": collection_instance.parent_id, "children": None, "project_id": collection_instance.project_id, Loading Loading
src/rpc/methods.py +14 −1 Original line number Diff line number Diff line Loading @@ -11,7 +11,7 @@ import pyvips import unidecode from deskew import determine_skew as _determine_skew from django.contrib.auth.models import User from django.db.models import QuerySet from django.db.models import QuerySet, Count, Q from django.db.utils import IntegrityError from django.utils import timezone Loading Loading @@ -414,6 +414,19 @@ def collections( .annotate(title_binary=Cast("title", output_field=BinaryField())) .order_by(order_by) ) query_set = query_set.annotate( resources_count=Count( "resources", filter=Q(resources__deleted_at__isnull=True), distinct=True ), children_count=Count( "collection", filter=Q(collection__deleted_at__isnull=True), distinct=True ), ).prefetch_related( "tags", "metadatacollectionvalue_set", "metadatacollectionvalue_set__metadata", "metadatacollectionvalue_set__metadata__set", ) if only_published: query_set = query_set.filter(public_access=True) query_set = query_set[limit_from:limit_to] Loading
src/rpc/serializers.py +23 −9 Original line number Diff line number Diff line Loading @@ -42,7 +42,11 @@ def metadataset( def metadata(metadata_instance: models.Metadata, cache: SerializerCache = None) -> dict: set_instance = get_cache(cache).fetch_obj("metadataset", metadata_instance.set_id) set_instance = metadata_instance._state.fields_cache.get("set") if set_instance is None: set_instance = get_cache(cache).fetch_obj( "metadataset", metadata_instance.set_id ) return { "object_type": "metadata", "id": metadata_instance.id, Loading @@ -58,6 +62,10 @@ def metadata_collection_value( metadata_collection_value_instance: models.MetadataCollectionValue, cache: SerializerCache = None, ) -> dict: metadata_instance = metadata_collection_value_instance._state.fields_cache.get( "metadata" ) if metadata_instance is None: metadata_instance = get_cache(cache).fetch_obj( "metadata", metadata_collection_value_instance.metadata_id ) Loading Loading @@ -90,6 +98,16 @@ def collection( only_published: bool = False, cache: SerializerCache = None, ) -> dict: resources_count = getattr(collection_instance, "resources_count", None) if resources_count is None: resources_count = collection_instance.resources.filter( deleted_at__isnull=True ).count() children_count = getattr(collection_instance, "children_count", None) if children_count is None: children_count = ( collection_instance.children().filter(deleted_at__isnull=True).count() ) tags = [] for tag_instance in collection_instance.tags.all(): tags.append(tag(tag_instance, cache=cache)) Loading @@ -97,12 +115,8 @@ def collection( "object_type": "collection", "id": collection_instance.id, "title": collection_instance.title, "resources_count": collection_instance.resources.filter( deleted_at__isnull=True ).count(), "children_count": collection_instance.children() .filter(deleted_at__isnull=True) .count(), "resources_count": resources_count, "children_count": children_count, "parent": collection_instance.parent_id, "children": None, "project_id": collection_instance.project_id, Loading