Tuesday, February 23, 2016

I am still in the final sprint for Lino Voga.

The first release with splitted Lino

I upgraded Lino Voga on the Die Eiche server in order to show to Alexa my first suggestion for #787. Some translations and layout optimizations.

When running git pull I still had some messages of style rm: remove write-protected regular file './lino_xl.lib.courses/models.pyc'? which I now hopefully fixed by doing:

$ sudo chown -R admin:admin ~/repositories

As expected, restoring the snapshot failed with a traceback:

$ python manage.py run snapshot/restore.py
...
Traceback (most recent call last):
  ...
  File "cal_room.py", line 4, in <module>
    loader.save(create_cal_room(1,[u'Eupen (Spiegelsaal)', u'Eupen (salle miro\xeet\xe9e)'],101,None,None,6,2))
  File "snapshot/restore.py", line 437, in create_cal_room
  ...
TypeError: 'tariff_id' is an invalid keyword argument for this function

This was because I did not write a migrator for yesterday’s database changes. I didn’t do this because it is easier to just edit the restore.py file. That file contains:

def create_cal_room(id, name, company_id, contact_person_id, contact_role_id, tariff_id, calendar_id):
    kw = dict()
    kw.update(id=id)
    if name is not None: kw.update(bv2kw('name',name))
    kw.update(company_id=company_id)
    kw.update(contact_person_id=contact_person_id)
    kw.update(contact_role_id=contact_role_id)
    kw.update(tariff_id=tariff_id)
    kw.update(calendar_id=calendar_id)
    return cal_Room(**kw)

I just needed to change the line with tariff_id into:

kw.update(fee_id=tariff_id)

And similar for create_courses_line and create_courses_course.

En passant I found a workaround for #788. The problem was caused by the following virtual column:

@dd.virtualfield(dd.HtmlBox(_("Participant")))
def pupil_info(cls, self, ar):
    elems = [ar.obj2html(self.pupil,
                         self.pupil.get_full_name(nominative=True))]
    elems += [', ']
    elems += join_elems(
        list(self.pupil.address_location_lines()),
        sep=', ')
    return E.div(*elems)

The real guilty is lino.utils.html2odf who does not know how to convert this to valid ODF, but we can avoid our problem by changing the last line into:

return E.p(*elems)

Linking places to a map image

Google Maps knows about Vana-Vigala. And of course Google Maps has an API to embed this map into an iframe <iframe>. But that API is probably not free and I won’t invest my time into this unless somebody forces me (e.g. using money ;-)

But also OpenStreetMap knows Vana-Vigala, and they have a quick HTML snippet with an <iframe>:


Bigger map

So it should be possible to automatically include such a picture on a virtual field in a Lino application.

But why is the village border missing on the iframe while it is visible when using the link to the “relation”?

Inheriting quick search fields

I changed the kernel’s (lino.core.kernel) behaviour about how quick_search_fields should be inherited. Until now they were never inherited, even not from an abstract base class. Now they are always inherited. If you want to not inherit them from a parent using standard MRO, then you must set that field explictly to None.

Manually settable simulated date

Until now we had lino.core.site.Site.the_demo_date which is useful when generating demo data.

Now we also have lino.modlib.system.models.SiteConfig.simulate_today which is useful e.g. when Alexa needs to generate invoices à postériori.

Miscellaneous