20130329 (Friday, 29 March 2013)

Released Lino-Welfare 1.1.1 & Co

  • Added a test in French to Debts mediation.

  • “Inactive” wasn’t yet translated to German.

  • Upgrading a Lino site that hasn’t installed pip requires quite some manual work. Here is an excerpt:

    $ cd /var/snapshots/
    
    $ wget http://www.lino-framework.org/dl/lino/lino-1.6.4.tar.gz
    $ wget http://www.lino-framework.org/dl/North/North-0.1.1.tar.gz
    $ wget http://www.lino-framework.org/dl/djangosite/djangosite-0.1.1.tar.gz
    $ wget http://www.lino-framework.org/dl/lino-welfare/lino-welfare-1.1.1.tar.gz
    
    $ tar xvzf djangosite-0.1.1.tar.gz
    $ tar xvzf North-0.1.1.tar.gz
    $ tar xvzf lino-1.6.4.tar.gz
    $ tar xvzf lino-welfare-1.1.1.tar.gz
    
    $ cd /usr/local/django/mysite/using
    $ ll
    total 0
    lrwxrwxrwx 1 lsaffre www-data 25 Mar 17 19:06 lino -> /var/snapshots/lino-1.6.3
    lrwxrwxrwx 1 lsaffre www-data 26 Mar 27 20:45 north -> /var/snapshots/North-0.1.0
    lrwxrwxrwx 1 lsaffre www-data 31 Mar 17 19:05 site -> /var/snapshots/djangosite-0.1.0
    lrwxrwxrwx 1 lsaffre www-data 33 Mar 17 19:06 welfare -> /var/snapshots/lino-welfare-1.1.0
    $ rm *
    $ ln -s /var/snapshots/lino-1.6.4 lino
    $ ln -s /var/snapshots/North-0.1.1 north
    $ ln -s /var/snapshots/djangosite-0.1.1 site
    $ ln -s /var/snapshots/lino-welfare-1.1.1 welfare
    

sphinx-apidoc and the __init__.py files

sphinx-apidoc generates the wrong automodule directive for the __init__.py file of a package. For example, here is an excerpt of the file /docs/api/djangosite.rst, as it was generated for my for djangosite package before I patched my copy of sphinx-apidoc:

:mod:`djangosite` Package
-------------------------

\.. automodule:: djangosite.__init__  <<<------------- PROBLEM
    :members:
    :show-inheritance:

:mod:`dbutils` Module
---------------------

\.. automodule:: djangosite.dbutils
    :members:
    :show-inheritance:

(In case you noticed it, I had specified os.environ.update(SPHINX_APIDOC_OPTIONS=”members,show-inheritance”) while running sphinx-apidoc)

The problem is that a :class: reference to djangosite.Site didn’t work, I had to write djangosite.__init__.Site.

I solved this for myself by finding the following function definition in the apidoc.py file:

def format_directive(module, package=None):
    """Create the automodule directive and add the options."""
    directive = '.. automodule:: %s\n' % makename(package, module)
    for option in OPTIONS:
        directive += '    :%s:\n' % option
    return directive

And adding a .replace('.__init__','') to the following line:

directive = '.. automodule:: %s\n' % makename(package, module).replace('.__init__','')

Now a reference to djangosite.Site works.

A selection list for number fields

One customer request is about the “Amount” field of a Budget Entry. This field ist filled with a default value that comes from Account.default_amount (a field that is injected into the Account model by lino_welfare.modlib.debts.models.customize_accounts()). Here is the request:

The default amount works well, but for certain accounts I’d like to configure not only one default amount but a list of a few possible amounts to choose from.

The Lino part is easy: just write a lino.core.chooser() method for this field:

@chooser(simple_values=True)
def amount_choices(cls,account):
    return account.default.amount.split(';')

But the problem is how to render such a field! ExtJS has no “NumberComboBox”.

Ext.form.ComboBox extends Ext.form.TriggerField which extends Ext.form.TextField, but Ext.form.NumberField also just extends Ext.form.TextField. You cannot configure a ComboBox to use a displayField which is a NumberField and not a TextField.

To implement a “NumberComboBox” we would have to duplicate a lot of ExtJS JavaScript code. No I refuse to do that for the moment, at least as long as we didn’t migrate to ExtJS4.

A workaround (admittedly a suboptimal one) is to define several accounts in that case.

Default verbose_name for ForeignKey parameter fields

The lino.core.kernel.set_default_verbose_name() is now also being used for ForeignKey fields in an Actor’s parameter panel (lino.core.actors.Actor.parameters).

Yet another JobsOverview

Wrote a new version of lino_welfare.modlib.debts.NewJobsOverview.