Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
20 changes: 12 additions & 8 deletions geonode/metadata/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
from geonode.base.utils import remove_country_from_languagecode
from geonode.base.views import LinkedResourcesAutocomplete, RegionAutocomplete, HierarchicalKeywordAutocomplete
from geonode.groups.models import GroupProfile
from geonode.metadata.i18n import get_localized_label
from geonode.metadata.manager import metadata_manager
from geonode.people.utils import get_available_users

Expand Down Expand Up @@ -96,32 +97,35 @@ def schema(self, request, pk=None):
def schema_instance(self, request, pk=None):
try:
resource = ResourceBase.objects.get(pk=pk)
lang = request.query_params.get("lang", get_language_from_request(request)[:2])

if request.method == "GET":
lang = request.query_params.get("lang", get_language_from_request(request)[:2])
schema_instance = metadata_manager.build_schema_instance(resource, lang)
return JsonResponse(
schema_instance, content_type="application/schema-instance+json", json_dumps_params={"indent": 3}
)

elif request.method in ("PUT"):
elif request.method == "PUT":
logger.debug(f"handling request {request.method}")
# try:
# logger.debug(f"handling content {json.dumps(request.data, indent=3)}")
# except Exception as e:
# logger.warning(f"Can't parse JSON {request.data}: {e}")
errors = metadata_manager.update_schema_instance(resource, request.data)

msg_t = (
("m_metadata_update_error", "Some errors were found while updating the resource")
if errors
else ("m_metadata_update_ok", "The resource was updated successfully")
)
msg = get_localized_label(lang, msg_t[0]) or msg_t[1]

response = {
"message": (
"Some errors were found while updating the resource"
if errors
else "The resource was updated successfully"
),
"message": msg,
"extraErrors": errors,
}

return Response(response, status=400 if errors else 200)
return Response(response, status=422 if errors else 200)

except ResourceBase.DoesNotExist:
result = {"message": "The dataset was not found"}
Expand Down
12 changes: 12 additions & 0 deletions geonode/metadata/i18n.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

from django.db import connection

from geonode.base.models import ThesaurusKeywordLabel

logger = logging.getLogger(__name__)

I18N_THESAURUS_IDENTIFIER = "labels-i18n"
Expand Down Expand Up @@ -54,3 +56,13 @@ def get_localized_tkeywords(lang, thesaurus_identifier: str):

def get_localized_labels(lang, key="about"):
return {i[key]: i["label"] for i in get_localized_tkeywords(lang, I18N_THESAURUS_IDENTIFIER)}


def get_localized_label(lang, about):
return (
ThesaurusKeywordLabel.objects.filter(
keyword__thesaurus__identifier=I18N_THESAURUS_IDENTIFIER, keyword__about=about, lang=lang
)
.values_list("label", flat=True)
.first()
)
2 changes: 1 addition & 1 deletion geonode/metadata/tests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ def test_put_patch_schema_instance_with_errors(self, mock_has_permission, mock_u
mock_update_schema_instance.return_value = errors

response = self.client.put(url, data=fake_payload, format="json")
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertEqual(response.status_code, status.HTTP_422_UNPROCESSABLE_ENTITY)
self.assertJSONEqual(
response.content,
{"message": "Some errors were found while updating the resource", "extraErrors": errors},
Expand Down
Loading