:date: 2017-08-01 ======================= Tuesday, August 1, 2017 ======================= Here is another problem (:ticket:`1991`) which happened on the :ref:`tera` production server:: Traceback (most recent call last): File "/env/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/env/local/lib/python2.7/site-packages/django/db/models/query.py", line 380, in get return self.dispatch(request, *args, **kwargs) File "/env/local/lib/python2.7/site-packages/django/views/generic/base.py", line 88, in dispatch return handler(request, *args, **kwargs) File "/repositories/lino/lino/modlib/extjs/views.py", line 577, in get for row in ar.sliced_data_iterator] File "/repositories/lino/lino/core/store.py", line 1122, in row2list v = fld.full_value_from_object(row, ar) File "/repositories/lino/lino/core/store.py", line 374, in full_value_from_object return self.vf.value_from_object(obj, ar) File "/repositories/lino/lino/core/fields.py", line 497, in value_from_object return m(obj, ar) File "/repositories/xl/lino_xl/lib/excerpts/mixins.py", line 168, in printed ex = self.printed_by File "/env/local/lib/python2.7/site-packages/django/db/models/fields/related_descriptors.py", line 184, in __get__ rel_obj = self.get_object(instance) File "/env/local/lib/python2.7/site-packages/django/db/models/fields/related_descriptors.py", line 159, in get_object return qs.get(self.field.get_reverse_related_filter(instance)) File "/env/local/lib/python2.7/site-packages/django/db/models/query.py", line 380, in get self.model._meta.object_name DoesNotExist: Excerpt matching query does not exist. [Tue Aug 01 00:03:29.791879 2017] [authz_core:debug] [pid 3114:tid 140152080881408] mod_authz_core.c(809): [client 127.0.0.1:51489] AH01626: authorization result of : granted, referer: http://lino-spz:8080/ I fixed it locally with a :cmd:`pm run` script:: from lino.api.shell import * qs = sales.VatProductInvoice.objects.filter(printed_by_id__isnull=False) for o in qs: o.printed_by = None o.save() The problem is probably reproducible as follows: - print a sales invoices (so that its printed_by field is non-empty) - make a database snapshot - comment out the line with excerpts_excerpt.py - restore the snapshot - try to view your invoice using the web interface Do we need a command for repairing broken foreign keys (as we have a :class:`lino.modlib.gfks.BrokenGFKs` table)? I'd say no because I consider this situation rather a case of database corruption. Note that `printed_by` (defined by :class:`lino_xl.lib.excerpts.Certifiable`) is a *nullable* FK, so we don't need to be "careful" when testing whether it is None or not. The following code was too careful:: if self.printed_by_id is None: return '' ex = self.printed_by if ex is None: return '' This code is enough:: ex = self.printed_by if ex is None: return '' if ex is None: return '' Both variants of above code caused a `DoesNotExist` error in the corrupt database, so there is no need to be careful. Make Service report usable ========================== :ticket:`1993` (Make Service report usable) was because :class:`ServiceReport ` gave :useless results on ref:`jane`. I did two changes in ::mod:`lino_xl.lib.tickets` and :mod:`lino_noi.lib.clocking` in order :to get it work. Here is a use case for when to define a local :attr:`workflows_module ` on a production site. ReportingTypes from lino_noi.lib.noi.workflows import * from lino.api import rt, _ ReportingTypes = rt.models.clocking.ReportingTypes ReportingTypes.clear() add = ReportingTypes.add_item add('10', _("Time"), 'regular') #ReportingTypes.free.remove() #ReportingTypes.extra.remove() #ReportingTypes.regular.text = _("Time") Note that this required a third little change to support redefining `clocking.ReportingTypes` in :attr:`workflows_module `: the plugin's :attr:`default_reporting_type ` setting must be resolved in :meth:`post_site_startup `, not already in :meth:`pre_site_startup `. I then did a release because there was hope that the folllowing issue would get fixed with the newest version of :ref:`extjs6`: - my issue is that when I try to change language for an excerpt from english to german then it doesn't accept it. - first issue is that i need to click the refresh button after loading that page because after loading the page, the excerpt Type combobox is empty - when i click the refresh action, Lino asks me whether I want to save my changes (though that's nonsense because I didn't do any changes) - it works when i just say No (to not save) but then I still cannot change the language from English to German Some adventure during the release: - :xfile:`make_snapshot.sh` failed because it was killed due to low memory. After a reboot of the server it worked. The reboot took much time. - git pull reported three unpushed local commits in Lino. We guess that they were inadvertently there, and it seems that they didn't actually cause any code change. After the release it turned out that this did not fix the problem. So the customers got their service reports in English this month.