Saturday, April 8, 2017


The lino_xl.lib.votes.VotesByVotable summary no longer shows the username but the default str() of the voters. And lino.modlib.users.User.__str__() now displays the initials field.

I also moved most docstrings of lino.modlib.users from the code to the Developer Reference. I believe that this is now finally our prefererred way for structuring the documentation of a plugin. I created #1708 for this and started Where to put your docstrings.



  • Doppelklick auf Johanna –> [Wed Apr 05 14:30:21.939103 2017] [wsgi:error] [pid 18600:tid 140141732259584] UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xc3 in position 25:

    #1709. This was caused by a missing “from builtins import :str” in Fixed.

  • Klientenstatus “Neuantrag” kann wirklich raus.

  • Explorer : cf_level_de : “A2”, nicht “Elementare Sprachverwendung”

  • StudiesByPerson und ExperiencesByPerson : Beginndatum und Enddatum unsichtbar. Bemerkungen sichtbar. Neues Feld “Dauer”.

  • Klienten column_names + “*”

  • Umfragen (polls) aktivieren.


  • Klienten filtern können nach “Kursbedarf” : wer mindestens eine Anfrage in einem Kurs dieser Serie hat. Feld needed_course kann wahrscheinlich dann raus.

  • Mit Johanna testen : Kandidatenlisten für Kursanbieter. Erstgespräche.

  • Kartennummer kann weg

  • (à confirmer) Partnernummer wieder in die Excel-Daten rein, damit man keine Verknüpfung zwischen Klienten und Einschreibungen machen kann. Stattdessen darf Janina im Kurs nur die Namen ohne Nummer sehen.

Side effects

  • The new model attribute allow_cascaded_copy.

Request data not supplied

I experimented with Lino’s behaviour when clients send invalid Ajax requests, e.g. because the user didn’t refresh their browser after a server upgrade or database migration (which requires the user to authenticate again). After an upgrade on a production server we sometimes get lots of emails which are probably caused by this. One problem with these emails was that we cannot even see which user caused the problem because it said just #1715 (Request data not supplied). But also #1605 (Force refresh of client’s javascript after server upgrade) seems now solved. (We don’t force a refresh but tell the user what’s going on.)

To simulate the situation, I wrote the following run script:

from lino.api import rt

I log in, open some window, then run above script. And then I try to do anythin a user might do.

lino.utils.ajax.AjaxExceptionResponse no longer returns a HttpResponseForbidden or similar response from django.http because I have the feeling that when I return any of these responses here, Django does some processing which assumes they are HTML. In Lino every AJAX request expects a JSON response.

400 Bad Request : “The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.” (

Related changes:

  • propagate changes in linoweb.js to ExtJS 6 front end.

  • one test case in Welfare was still failing because Duplicate now asks for confirmation.

Kusta Rumma (*1942-03-12, †2017-04-08)

My father in law passed by this morning, at the age of 75. He had been in need of care since June 2014 as the result of a stroke. Before this he had been living a rich and active life, was a great scientist, a loving husband and a caring father and grandfather. Without him we wouldn’t live in Vigala because I would never have dared the project of renovating our house. I discovered the Estonian Wikipedia article about him and started to update it.

He was the founder of Rumma & Ko OÜ. (Though this was just an administrative act which he did in the enthusiastic times after the Singing revolution _ in case one of his children would need it. Neither Ly nor Indrek ever needed it, and the company stayed inactive until I arrived.)