# Thursday, September 1, 2016¶

I continued with #1143.

The inv sdist command now checks whether the current version is already published on PyPI, and if so, fails. For projects which have no version in their setup_info.py it will do nothing. As a result, I can now run the following command:

\$ pp inv sdist


This creates a “fake release” of the next version for all projects in my env.sdist_dir.

I had to change the version of several projects. Note that Algus will never be published on PyPI because that would make no sense.

I wrote a new command inv test_sdist. Actually this command has existed once in the past, but I never got it to work. Now it seems to work, at least on Lino Noi.

## Changed user role for ReceptionClerkNewcomers¶

Yesterday night I deployed ticket #1154 to CPAS de Châtelet, and this morning Mathieu reported “Merci mais l’accueil n’a plus accès à la visualisation des rendez-vous.”.

Which means that we found yet another place which was not covered by any test.

The solution itself was easy: lino_xl.lib.cal.reception.models.AppointmentsByPartner uses the event’s when_text column which usually is clickable. But (as a consequence of my fiddlings with the user roles) the OneEvent was no longer viewable for OfficeOperator.

Less easy and more interesting was how to cover this. It unvealed a subtle but fundamental problem: when rendering obj2html in a doctest snippet, there was no visible difference between clickable links and non-clickable links. The best (though not easiest) solution was to change lino.core.renderer.HtmlRenderer.action_call() to no longer return None. As an example, here is a (simplified) doctest code snippet from Reception before and after this change.

BEFORE:

>>> rt.login('theresia').show(reception.AppointmentsByPartner, obj)
=========================== ================= =======================================================
When                        Managed by        Workflow
--------------------------- ----------------- -------------------------------------------------------
*Thu 15/05/2014 at 09:00*   Caroline Carnol   **Accepted** → [Excused] [Absent] [Present] [Checkin]
*Thu 22/05/2014*            Mélanie Mélard    **Waiting** → [Receive] [Checkout]
...
=========================== ================= =======================================================
<BLANKLINE>


AFTER:

>>> rt.login('theresia').show(reception.AppointmentsByPartner, obj)
====================================== ================= =======================================================
When                                   Managed by        Workflow
-------------------------------------- ----------------- -------------------------------------------------------
Thu 15/05/2014 at 09:00 <Detail>__   Caroline Carnol   **Accepted** → [Excused] [Absent] [Present] [Checkin]
Thu 22/05/2014 <Detail>__            Mélanie Mélard    **Waiting** → [Receive] [Checkout]
...
====================================== ================= =======================================================


This little change caused of course some failures in existing test suites, but I think that it was worth the effort.

## Oops¶

Okay, while updating How Lino applications use setup.py I had been thinking that the following is more elegant:

from past.builtins import execfile
execfile('lino_noi/setup_info.py')


But it doesn’t work because it depends on the future package and setup.py is being run before dependencies are installed. So it must remain the less readable variant:

fn = 'lino_noi/setup_info.py'