Sunday, January 14, 2018


I deployed my recent changes to Jane because I want to test the use_django_forms changes on our own production site before deploying them to a customer. Also because I’d like to see how #2252 works. And also because I renamed clocking to working which requires a manual data migration.

As a side effect I changed the default logger format to include process id and thread number to the lino.log file. This is another attempt to gather information about the “xxx.Yyy has no list_layout” and “‘TableHandle’ object has no attribute ‘store’” errors.

I had some problems caused by low memory and tried several things to explore the situation. Today I learned that nothing helped but a reboot.

My got killed after having read the tickets:

Deferred Ticket #1882 ('#1882 (\u2612 FK links in table view direct to current URL in extjs6)') : {'duplicate_of': [u"Ticket instance with id u'1901' does not exist."]}
Trying to save 14 deferred objects.
Saved 14 objects.

real        18m58.833s
user        8m8.172s
sys 0m16.748s

After a it went a bit further but still got killed before reaching the end:

Loading 103 objects to table django_mailbox_message...
Deferred Message #74 ('') : {'subject': [u'This field cannot be blank.']}
{'subject': [u'This field cannot be blank.']}
Traceback (most recent call last):
  File "/usr/local/python/lino_sites/jane/env/repositories/lino/lino/utils/", line 158, in try_save
  File "/usr/local/python/lino_sites/jane/env/local/lib/python2.7/site-packages/django/db/models/", line 1249, in full_clean
    raise ValidationError(errors)
ValidationError: {'subject': [u'This field cannot be blank.']}
Trying to save 4 deferred objects.
Deferred Message #74 ('') : {'subject': [u'This field cannot be blank.']}
Saved 0 objects.
Loading 11 objects to table django_mailbox_messageattachment...
Trying to save 4 deferred objects.
Deferred Message #74 ('') : {'subject': [u'This field cannot be blank.']}
Saved 0 objects.

real        27m46.789s
user        11m28.020s
sys 0m24.076s

I tried to add an explicit carbage collection before every input file:

import gc
_ef = execfile

def execfile(x):

This method fails because it causes a different return value for locals(). I tried by manually adding calls to gc.collect() after every line. Also without success.

It seems to depend largely on the output of free. Here is how it should look in a normal situation (after a successful reload):

$ free -h
             total       used       free     shared    buffers     cached
Mem:          1.9G       1.4G       537M       2.5M       147M       201M
-/+ buffers/cache:       1.0G       887M
Swap:         1.0G       3.2M       1.0G

Independetly of these memory problems it turned out that the use_django_forms branch did cause more bugs in the extjs6 ui, they just weren’t covered and we didn’t see them. As a quick workaround I switched the default_ui of Jane back to extjs3.

Avanti continued

I continued to work on #2256


Displaying certain tickets, e.g. caused a

ParseError at /tickets/Tickets/797
undefined entity: line 1, column 144

This was caused by changes in elems.HtmlBoxElement.as_plain_html() method. Now it works again, but the whoe thing needs more testing.