Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fixes #9799] Thesaurus selectbox performance in metadata editor is very slow #9800

Merged
merged 16 commits into from
Aug 9, 2022
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
5541acb
[Fixes #9799] Thesaurus selectbox performance in metadata editor is v…
mwallschlaeger Aug 2, 2022
5cbd8e3
Merge branch 'master' into issue_9799
mwallschlaeger Aug 2, 2022
75df73c
Merge branch 'master' into issue_9799
mattiagiupponi Aug 3, 2022
c83f969
[Fixes #9799] Thesaurus selectbox performance in metadata editor is v…
mwallschlaeger Aug 4, 2022
8d402fb
Merge branch 'issue_9799' of github.com:mwallschlaeger/geonode into i…
mwallschlaeger Aug 4, 2022
f24000c
Merge pull request #1 from GeoNode/master
mwallschlaeger Aug 4, 2022
c17015d
Merge branch 'master' of github.com:mwallschlaeger/geonode into issue…
mwallschlaeger Aug 4, 2022
8fb9a87
[Fixes #9799] Thesaurus selectbox performance in metadata editor is v…
mwallschlaeger Aug 4, 2022
038e80d
Merge branch 'master' into issue_9799
mattiagiupponi Aug 8, 2022
2b0d5e2
[Fixes #9799] Thesaurus selectbox performance in metadata editor is v…
mwallschlaeger Aug 8, 2022
56ffb54
Merge branch 'master' of github.com:GeoNode/geonode into issue_9799
mwallschlaeger Aug 8, 2022
9dc6969
[Fixes #9799] Thesaurus selectbox performance in metadata editor is v…
mwallschlaeger Aug 8, 2022
0d7e465
Merge pull request #2 from GeoNode/master
mwallschlaeger Aug 8, 2022
a04784f
Merge branch 'master' of github.com:mwallschlaeger/geonode into issue…
mwallschlaeger Aug 8, 2022
ebb8324
Merge branch 'issue_9799' of github.com:mwallschlaeger/geonode into i…
mwallschlaeger Aug 8, 2022
6151ceb
[Fixes #9799] Thesaurus selectbox performance in metadata editor is v…
mwallschlaeger Aug 8, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 7 additions & 9 deletions geonode/base/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -337,16 +337,14 @@ def _define_choicefield(self, item, required, tname, lang):

@staticmethod
def _get_thesauro_keyword_label(item, lang):
qs_local = []
qs_non_local = [("", "------")]
for key in ThesaurusKeyword.objects.filter(thesaurus_id=item.id):
label = ThesaurusKeywordLabel.objects.filter(keyword=key).filter(lang=lang)
if label.exists():
qs_local.append((label.get().keyword.id, label.get().label))
else:
qs_non_local.append((key.id, key.alt_label))
keyword_id_for_given_thesaurus = ThesaurusKeyword.objects.filter(thesaurus_id=item)
qs_keyword_ids = ThesaurusKeywordLabel.objects.filter(lang=lang, keyword_id__in=keyword_id_for_given_thesaurus).values("keyword_id")
not_qs_ids = ThesaurusKeywordLabel.objects.exclude(keyword_id__in=qs_keyword_ids).order_by("keyword_id").distinct("keyword_id").values("keyword_id")

qs_local = list(ThesaurusKeywordLabel.objects.filter(lang=lang, keyword_id__in=keyword_id_for_given_thesaurus).values_list("keyword_id", "label"))
qs_non_local = list(keyword_id_for_given_thesaurus.filter(id__in=not_qs_ids).values_list("id", "alt_label"))

return qs_non_local + qs_local
return qs_local + [("", "-------")] + qs_non_local

@staticmethod
def _get_thesauro_title_label(item, lang):
Expand Down
38 changes: 22 additions & 16 deletions geonode/base/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse
from django.utils.translation import get_language_from_request, get_supported_language_variant

# Geonode dependencies
from geonode.maps.models import Map
Expand Down Expand Up @@ -301,23 +302,28 @@ def get_results(self, context):

class ThesaurusAvailable(autocomplete.Select2QuerySetView):
def get_queryset(self):

tid = self.request.GET.get("sysid")
lang = self.request.GET.get("lang")
qs_local = []
qs_non_local = []
for key in ThesaurusKeyword.objects.filter(thesaurus_id=tid):
label = ThesaurusKeywordLabel.objects.filter(keyword=key).filter(lang=lang)
if self.q:
label = label.filter(label__icontains=self.q)
if label.exists():
qs_local.append(label.get())
else:
if self.q in key.alt_label:
qs_non_local.append(key)
elif not self.q:
qs_non_local.append(key)

return qs_non_local + qs_local

# help to get real language string
requested_lang = get_language_from_request(self.request)
supported_lang = get_supported_language_variant(requested_lang, strict=True)
if "_" in supported_lang:
supported_lang = supported_lang.split("_")[0]
elif "-" in supported_lang:
supported_lang = supported_lang.split("-")[0]

keyword_id_for_given_thesaurus = ThesaurusKeyword.objects.filter(thesaurus_id=tid)
qs_keyword_ids = ThesaurusKeywordLabel.objects.filter(lang=supported_lang, keyword_id__in=keyword_id_for_given_thesaurus).values("keyword_id")
not_qs_ids = ThesaurusKeywordLabel.objects.exclude(keyword_id__in=qs_keyword_ids).order_by("keyword_id").distinct("keyword_id").values("keyword_id")

qs = ThesaurusKeywordLabel.objects.filter(lang=supported_lang, keyword_id__in=keyword_id_for_given_thesaurus)
if self.q:
qs = qs.filter(label__istartswith=self.q)

qs_local = list(qs)
qs_non_local = list(keyword_id_for_given_thesaurus.filter(id__in=not_qs_ids))
return qs_local + qs_non_local

def get_results(self, context):
return [
Expand Down