Skip to content

Commit

Permalink
GeoNode#10995 Faceting: owners
Browse files Browse the repository at this point in the history
  • Loading branch information
etj committed May 3, 2023
1 parent 5c93834 commit 26eff12
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 4 deletions.
10 changes: 6 additions & 4 deletions geonode/facets/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@

from geonode.facets.models import FacetProvider


logger = logging.getLogger(__name__)

registered_facets = dict()
Expand All @@ -38,13 +37,16 @@ def ready(self):

urlpatterns += urls.urlpatterns

init_thesaurus_providers()
init_providers()


def init_thesaurus_providers():
# should be called at startup and whenever records in Thesaurus or ThesaurusLabel change
def init_providers():
from geonode.facets.providers.thesaurus import create_thesaurus_providers
from geonode.facets.providers.users import OwnerFacetProvider

register_facet_provider(OwnerFacetProvider())

# Thesaurus providers initialiazion should be called at startup and whenever records in Thesaurus or ThesaurusLabel change
for provider in create_thesaurus_providers():
register_facet_provider(provider)

Expand Down
44 changes: 44 additions & 0 deletions geonode/facets/providers/users.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import logging

from django.db.models import Count

from geonode.facets.models import FacetProvider, DEFAULT_FACET_PAGE_SIZE

logger = logging.getLogger(__name__)


class OwnerFacetProvider(FacetProvider):
"""
Implements faceting for users owner of the resources
"""

@property
def name(self) -> str:
return "owner"

def get_info(self, lang="en") -> dict:
return {
"name": "owner",
"key": "owner",
"label": "Owner",
"type": "users",
"hierarchical": False,
"order": 5,
}

def get_facet_items(
self, queryset=None, start: int = 0, end: int = DEFAULT_FACET_PAGE_SIZE, lang="en"
) -> (int, list):
logging.debug("Retrieving facets for OWNER")

q = queryset.values("owner", "owner__username").annotate(count=Count("owner")).order_by("-count")

cnt = q.count()

logging.info("Found %d facets for %s", cnt, self.name)
logging.debug(" ---> %s\n\n", q.query)
logging.debug(" ---> %r\n\n", q.all())

topics = [{"key": r["owner"], "label": r["owner__username"], "count": r["count"]} for r in q[start:end].all()]

return cnt, topics

0 comments on commit 26eff12

Please sign in to comment.