zalf-rdm / geonode-k8s

A Kubernetes helm chart for the geospacial webapplication Geonode
https://geonode-k8s.readthedocs.io/en/latest/
GNU General Public License v2.0
12 stars 7 forks source link

pyCSW single microservice #27

Closed mwallschlaeger closed 1 year ago

mwallschlaeger commented 1 year ago

pycsw is currently used as a library inside of GeoNode. To reduce the complexity of the code and improve microservice design pattern, to improve scalability and resource management pycsw setup as a single deployment running pycsw. GeoNode already supports external pycsw service by settings.py parameters

mwallschlaeger commented 1 year ago

running pycsw as single service beside geonode has an issue uploading documents currently.

Internal Server Error: /documents/upload
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 581, in get_or_create
    return self.get(**kwargs), False
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 435, in get
    raise self.model.DoesNotExist(
geonode.documents.models.Document.DoesNotExist: Document matching query does not exist.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.10/dist-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/usr/local/lib/python3.10/dist-packages/django/template/base.py", line 170, in render
    return self._render(context)
  File "/usr/local/lib/python3.10/dist-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.10/dist-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.10/dist-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.10/dist-packages/django/template/loader_tags.py", line 183, in render
    template = context.template.engine.select_template(template_name)
  File "/usr/local/lib/python3.10/dist-packages/django/template/engine.py", line 170, in select_template
    raise TemplateDoesNotExist("No template names provided")
django.template.exceptions.TemplateDoesNotExist: No template names provided

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/geonode/./geonode/documents/views.py", line 127, in post
    return super().post(request, *args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/django/views/generic/edit.py", line 172, in post
    return super().post(request, *args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/django/views/generic/edit.py", line 142, in post
    return self.form_valid(form)
  File "/usr/src/geonode/./geonode/documents/views.py", line 170, in form_valid
    self.object = resource_manager.create(
  File "/usr/src/geonode/./geonode/resource/manager.py", line 329, in create
    _resource, _created = resource_type.objects.get_or_create(uuid=uuid, defaults=defaults)
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/modeltranslation/manager.py", line 419, in get_or_create
    return super().get_or_create(*args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 588, in get_or_create
    return self.create(**params), True
  File "/usr/local/lib/python3.10/dist-packages/modeltranslation/manager.py", line 411, in create
    return super().create(**kwargs)
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 453, in create
    obj.save(force_insert=True, using=self.db)
  File "/usr/src/geonode/./geonode/base/models.py", line 1089, 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/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 298, in create_record
    md_link = self.catalogue.create_from_dataset(item)
  File "/usr/src/geonode/./geonode/catalogue/backends/generic.py", line 146, in create_from_dataset
    response = self.csw_request(layer, "catalogue/transaction_insert.xml")  # noqa
  File "/usr/src/geonode/./geonode/catalogue/backends/generic.py", line 141, in csw_request
    md_doc = self.csw_gen_xml(layer, template)
  File "/usr/src/geonode/./geonode/catalogue/backends/generic.py", line 132, in csw_gen_xml
    md_doc = tpl.render(context=ctx)
  File "/usr/local/lib/python3.10/dist-packages/django/template/backends/django.py", line 63, in render
    reraise(exc, self.backend)
  File "/usr/local/lib/python3.10/dist-packages/django/template/backends/django.py", line 84, in reraise
    raise new from exc
django.template.exceptions.TemplateDoesNotExist: No template names provided

During handling of the above exception, another exception occurred:

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/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/django/views/generic/base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/django/views/generic/base.py", line 98, in dispatch
    return handler(request, *args, **kwargs)
  File "/usr/src/geonode/./geonode/documents/views.py", line 131, in post
    json.dumps(exception_response.data),
AttributeError: 'NoneType' object has no attribute 'data'
[pid: 261|app: 0|req: 1/1] 10.244.0.1 () {76 vars in 1530 bytes} [Mon Jul 31 12:57:45 2023] POST /documents/upload?no__redirect=true => generated 318559 bytes in 355 msecs (HTTP/1.1 500) 8 headers in 295 bytes (2 switches on core 0)