[GeoNode-devel] GeoNode Project: Timeout updates Layer with new ManyToManyField in ResourceBase
Giambattista Mameli
mameli.giambattista at gmail.com
Wed Oct 23 00:46:31 PDT 2019
Hi Alessio and Amedeo,
thank you very much for the answers provided.
Amedeo, the answer is YES. The relationship is M:M and it can be done in
both ways. I followed the "add_class" path because i do not want to modifiy
the "CORE", and keep the implementations only on the Geonode Project
Module. Since the ResourceBase is part of the CORE, i recall the class from
the Project and add the new relationship...
For the update: when i modify data i do not recreate the layer, but only
the associated INFOs. The integrated authorization works well.
Alessio, can you give me more hints about the "signal interception"?
Il giorno mar 22 ott 2019 alle ore 15:39 Amedeo Fadini <amefad at gmail.com>
ha scritto:
>
>
> Hi Giambattista and welcome in the dev list
>
> Thank-you Alessio for the quick response.
>
> I have a question just to learn something new: is it the same thing to
> define the M2M relation on the new object side or use add_class to resource
> base like in this class?
>
> I see in Giambattista log the line
>
> producer.geoserver_upload_layer(payload)
>
> Giambattista: does the update operation imply the creation or replacement
> of the layer related to domain_area?
>
> If this is the case have you checked that integrated authentication
> between geonode and geoserver is working as expected?
>
> Amedeo Fadini
>
>
>
> Il giorno mar 22 ott 2019 alle ore 11:20 Alessio Fabiani <
> alessio.fabiani at geo-solutions.it> ha scritto:
>
>> Hi,
>> most probably you are hitting the post-save signal on ResourceBase
>> indefinitely.
>>
>> You should intercept the signal method and updating the resource base
>> only in the case you are adding the the m2m relationship a new ResourceBase.
>>
>> Il giorno lun 21 ott 2019 alle ore 18:06 Giambattista Mameli <
>> mameli.giambattista at gmail.com> ha scritto:
>>
>>>
>>> Hi guys,
>>> I developed a custom GeoNode Project implementing a M:M relationship on
>>> the ResourceBase table
>>>
>>> Here the steps:
>>>
>>> 1) model creation of the new table
>>>
>>> class DomainArea(models.Model):
>>>
>>> identifier = models.CharField('Domain Area name', max_length=255, unique=True)
>>> description = models.TextField(default='')
>>> gn_description = models.TextField(
>>> 'GeoNode description', default='', null=True)
>>> is_choice = models.BooleanField(default=True)
>>>
>>> def __unicode__(self):
>>> return u"{0}".format(self.gn_description)
>>>
>>> class Meta:
>>> ordering = ("identifier",)
>>> verbose_name_plural = 'Domain Areas'
>>>
>>> 2) add the relation between the ResourceBase table and the new created
>>> table
>>>
>>> domainarea = models.ManyToManyField(
>>> DomainArea,
>>> related_name='resourcebase_domainarea',
>>> blank=True)
>>> ResourceBase.add_to_class('domain_area', domainarea)
>>>
>>> 3) Add the function to handle the new value in the admin panel
>>>
>>> admin.site.register(DomainArea)
>>>
>>> All the steps work good, Django creates the new table with all the
>>> relationship and I can handle via admin panel both values and associations
>>> between domain areas and Layers/Docs/Maps.
>>>
>>> The problem is when I modify these values.
>>>
>>> After the first association, all the updates go wrong (timeout, even
>>> with a very long timeout set).
>>>
>>> This is the error message:
>>>
>>> *******
>>> Traceback:
>>>
>>> File
>>> "/usr/local/lib/python2.7/site-packages/django/core/handlers/exception.py"
>>> in inner
>>> 41. response = get_response(request)
>>>
>>> File
>>> "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in
>>> _legacy_get_response
>>> 249. response = self._get_response(request)
>>>
>>> File
>>> "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in
>>> _get_response
>>> 187. response =
>>> self.process_exception_by_middleware(e, request)
>>>
>>> File
>>> "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in
>>> _get_response
>>> 185. response = wrapped_callback(request,
>>> callback_args, *callback_kwargs)
>>>
>>> File
>>> "/usr/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in
>>> wrapper
>>> 552. return self.admin_site.admin_view(view)(*args,
>>> **kwargs)
>>>
>>> File "/usr/local/lib/python2.7/site-packages/django/utils/decorators.py"
>>> in _wrapped_view
>>> 149. response = view_func(request, args, *kwargs)
>>>
>>> File
>>> "/usr/local/lib/python2.7/site-packages/django/views/decorators/cache.py"
>>> in _wrapped_view_func
>>> 57. response = view_func(request, args, *kwargs)
>>>
>>> File
>>> "/usr/local/lib/python2.7/site-packages/django/contrib/admin/sites.py" in
>>> inner
>>> 224. return view(request, args, *kwargs)
>>>
>>> File
>>> "/usr/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in
>>> change_view
>>> 1512. return self.changeform_view(request, object_id,
>>> form_url, extra_context)
>>>
>>> File "/usr/local/lib/python2.7/site-packages/django/utils/decorators.py"
>>> in _wrapper
>>> 67. return bound_func(*args, **kwargs)
>>>
>>> File "/usr/local/lib/python2.7/site-packages/django/utils/decorators.py"
>>> in _wrapped_view
>>> 149. response = view_func(request, args, *kwargs)
>>>
>>> File "/usr/local/lib/python2.7/site-packages/django/utils/decorators.py"
>>> in bound_func
>>> 63. return func.__get__(self, type(self))(*args2,
>>> **kwargs2)
>>>
>>> File
>>> "/usr/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in
>>> changeform_view
>>> 1409. return self._changeform_view(request, object_id,
>>> form_url, extra_context)
>>>
>>> File
>>> "/usr/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in
>>> _changeform_view
>>> 1449. self.save_model(request, new_object, form, not
>>> add)
>>>
>>> File
>>> "/usr/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in
>>> save_model
>>> 980. obj.save()
>>>
>>> File "/usr/local/lib/python2.7/site-packages/polymorphic/models.py" in
>>> save
>>> 83. return super(PolymorphicModel, self).save(*args, **kwargs)
>>>
>>> File "/usr/local/lib/python2.7/site-packages/django/db/models/base.py"
>>> in save
>>> 808. force_update=force_update,
>>> update_fields=update_fields)
>>>
>>> File "/usr/local/lib/python2.7/site-packages/django/db/models/base.py"
>>> in save_base
>>> 848. update_fields=update_fields, raw=raw, using=using,
>>>
>>> File
>>> "/usr/local/lib/python2.7/site-packages/django/dispatch/dispatcher.py" in
>>> send
>>> 193. for receiver in self._live_receivers(sender)
>>>
>>> File "/usr/local/lib/python2.7/site-packages/geonode/decorators.py" in
>>> wrapper
>>> 53. return func(*args, **kwargs)
>>>
>>> File
>>> "/usr/local/lib/python2.7/site-packages/geonode/geoserver/signals.py" in
>>> geoserver_post_save
>>> 85. producer.geoserver_upload_layer(payload)
>>>
>>> File
>>> "/usr/local/lib/python2.7/site-packages/geonode/messaging/producer.py" in
>>> sync_if_local_memory
>>> 71. worker.run(timeout=broker_socket_timeout)
>>>
>>> File "/usr/local/lib/python2.7/site-packages/kombu/mixins.py" in run
>>> 170. for _ in self.consume(limit=None, **kwargs):
>>>
>>> File "/usr/local/lib/python2.7/site-packages/kombu/mixins.py" in consume
>>> 192. conn.drain_events(timeout=safety_interval)
>>>
>>> File "/usr/local/lib/python2.7/site-packages/kombu/connection.py" in
>>> drain_events
>>> 315. return self.transport.drain_events(self.connection,
>>> **kwargs)
>>>
>>> File
>>> "/usr/local/lib/python2.7/site-packages/kombu/transport/virtual/base.py" in
>>> drain_events
>>> 966. raise socket.timeout()
>>> *****
>>>
>>> Any help will be greatly appreciated
>>>
>>> Thanks in advance
>>>
>>> _______________________________________________
>>> geonode-devel mailing list
>>> geonode-devel at lists.osgeo.org
>>> https://lists.osgeo.org/mailman/listinfo/geonode-devel
>>>
>>
>>
>> --
>>
>> ==
>>
>> GeoServer Professional Services from the experts! Visit
>> http://goo.gl/it488V for more information.
>> ==
>> Ing. Alessio Fabiani
>>
>> @alfa7691
>> Founder/Technical Lead
>>
>>
>> GeoSolutions S.A.S.
>> Via di Montramito 3/A - 55054 Massarosa (LU) - Italy
>> phone: +39 0584 962313
>> fax: +39 0584 1660272
>> mob: +39 331 6233686
>>
>>
>> http://www.geo-solutions.it
>> http://twitter.com/geosolutions_it
>> -------------------------------------------------------
>>
>> Con riferimento alla normativa sul trattamento dei dati personali (Reg.
>> UE 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si
>> precisa che ogni circostanza inerente alla presente email (il suo
>> contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è
>> riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il
>> messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra
>> operazione è illecita. Le sarei comunque grato se potesse darmene notizia.
>>
>>
>> This email is intended only for the person or entity to which it is
>> addressed and may contain information that is privileged, confidential or
>> otherwise protected from disclosure. We remind that - as provided by
>> European Regulation 2016/679 “GDPR” - copying, dissemination or use of this
>> e-mail or the information herein by anyone other than the intended
>> recipient is prohibited. If you have received this email by mistake, please
>> notify us immediately by telephone or e-mail.
>> _______________________________________________
>> geonode-devel mailing list
>> geonode-devel at lists.osgeo.org
>> https://lists.osgeo.org/mailman/listinfo/geonode-devel
>>
>
--
--
Giambattista Mameli
Web Developer, WebGIS
E-mail: info at giambattistamameli.it
Web: http://www.giambattistamameli.it
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/geonode-devel/attachments/20191023/d20ae5a3/attachment-0001.html>
More information about the geonode-devel
mailing list