zalf-rdm / geonode

GeoNode is an open source platform that facilitates the creation, sharing, and collaborative use of geospatial data.
https://geonode.org/
Other
0 stars 0 forks source link

Bug: post tkeywords via v2/api causes exception #106

Closed mwallschlaeger closed 4 weeks ago

mwallschlaeger commented 1 month ago

Bug Description

when trying to patch tkeywords ( {"tkeywords": [{"alt_label": "degradation" }]} ) using geonodectl like g ds patch 101 --json_path ~/Sourcecode/geonodectl/json-examples/tkeywords.json leads to the follwoing exception on geonode backend:

Internal Server Error: /api/v2/datasets/101/
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python3.10/dist-packages/sentry_sdk/integrations/django/views.py", line 84, in sentry_wrapped_callback
    return callback(request, *args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
    return self.dispatch(request, *args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
    raise exc
  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/rest_framework/mixins.py", line 82, in partial_update
    return self.update(request, *args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/dynamic_rest/viewsets.py", line 588, in update
    return super(DynamicModelViewSet, self).update(request, *args,
  File "/usr/local/lib/python3.10/dist-packages/rest_framework/mixins.py", line 68, in update
    self.perform_update(serializer)
  File "/usr/local/lib/python3.10/dist-packages/rest_framework/mixins.py", line 78, in perform_update
    serializer.save()
  File "/usr/src/geonode/./geonode/base/api/serializers.py", line 881, in save
    instance = super().save(**kwargs)
  File "/usr/local/lib/python3.10/dist-packages/dynamic_rest/serializers.py", line 731, in save
    instance = super(
  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 200, in save
    self.instance = self.update(self.instance, validated_data)
  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 983, in update
    instance.save()
  File "/usr/src/geonode/./geonode/base/models.py", line 1303, in save
    super().save(*args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/polymorphic/models.py", line 87, in save
    return super().save(*args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/base.py", line 739, in save
    self.save_base(using=using, force_insert=force_insert,
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/base.py", line 787, in save_base
    post_save.send(
  File "/usr/local/lib/python3.10/dist-packages/django/dispatch/dispatcher.py", line 180, in send
    return [
  File "/usr/local/lib/python3.10/dist-packages/django/dispatch/dispatcher.py", line 181, in <listcomp>
    (receiver, receiver(signal=self, sender=sender, **named))
  File "/usr/local/lib/python3.10/dist-packages/sentry_sdk/integrations/django/signals_handlers.py", line 72, in wrapper
    return receiver(*args, **kwargs)
  File "/usr/src/geonode/./geonode/catalogue/models.py", line 49, in catalogue_post_save
    catalogue.create_record(instance)
  File "/usr/src/geonode/./geonode/catalogue/backends/generic.py", line 305, in create_record
    self.catalogue.update_dataset(item)
  File "/usr/src/geonode/./geonode/catalogue/backends/generic.py", line 160, in update_dataset
    response = self.csw_request(layer, tmpl)  # noqa
  File "/usr/src/geonode/./geonode/catalogue/backends/generic.py", line 146, in csw_request
    response = http_post(self.url, md_doc, timeout=TIMEOUT)
  File "/usr/local/lib/python3.10/dist-packages/owslib/util.py", line 426, in http_post
    return requests.post(url, request, headers=headers_, **rkwargs)
  File "/usr/local/lib/python3.10/dist-packages/requests/api.py", line 115, in post
    return request("post", url, data=data, json=json, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/requests/api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/requests/sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.10/dist-packages/requests/sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/requests/adapters.py", line 486, in send
    resp = conn.urlopen(
  File "/usr/local/lib/python3.10/dist-packages/urllib3/connectionpool.py", line 715, in urlopen
    httplib_response = self._make_request(
  File "/usr/local/lib/python3.10/dist-packages/urllib3/connectionpool.py", line 416, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/usr/local/lib/python3.10/dist-packages/urllib3/connection.py", line 244, in request
    super(HTTPConnection, self).request(method, url, body=body, headers=headers)
  File "/usr/lib/python3.10/http/client.py", line 1283, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.10/http/client.py", line 1328, in _send_request
    body = _encode(body, 'body')
  File "/usr/lib/python3.10/http/client.py", line 166, in _encode
    raise UnicodeEncodeError(
UnicodeEncodeError: 'latin-1' codec can't encode character '\u2019' in position 4821: Body ('’') is not valid Latin-1. Use body.encode('utf-8') if you want to send it encoded in UTF-8.

Additional Information

related issue on geonode-agrovoc-importer: https://github.com/GeoNodeUserGroup-DE/geonode-agrovoc-importer/issues/2

mwallschlaeger commented 4 weeks ago

after applying latest changes to the https://github.com/GeoNodeUserGroup-DE/geonode-agrovoc-importer/ and reimporting GEMET and AGROVOC keywords POST on /keywords works

specka commented 4 weeks ago

@mwallschlaeger Who can confirm, that this is now working? So it can be moved to the "Done" column in the board. Or is this "workflow step" not applicable for us, only if its an UI issue?

specka commented 3 weeks ago

Will be testet, if the mother issue (small epic: https://github.com/zalf-rdm/OpenResearchData_Migration/issues/15) will be fixed.