Wednesday, November 29, 2017

Coverage and Python 2/3 compatibility

Toshio Kuratomi wrote a nice little recipe about Better unittest coverage stats: excluding code that only executes on Python 2/3.

My summary:

With the following config in .coveragerc:

[report]
exclude_lines=
    pragma: no cover
    pragma: no py${PYTEST_PYMAJVER} cover

we can write code like this:

if six.PY3:  # pragma: no py2 cover
    stdout = sys.stdout.buffer
else:  # pragma: no py3 cover
    stdout = sys.stdout

Locally modifying a choicelist

It is easy to locally extend a choicelist. Here is an example taken from an Lino Amici production site.

In your local settings.py file, define a custom user_types_module:

...
class Site(Site):
    user_types_module = 'mysite.user_types'
...

Then create a file user_types.py with the following content:

from lino_amici.lib.amici.user_types import *
from lino_xl.lib.phones.choicelists import ContactDetailTypes, STD

add = ContactDetailTypes.add_item_instance
add(STD('080', "Eesti isikukood", "id_ee"))
add(STD('081', "Belgian NISS", "id_be"))