Monday, October 19, 2020

I fixed miscellaneous issues found in Algus after using it for Lino Mentori.

I updated some parts of the book, e.g. How to write your own Lino application.

“num2words not installed”

Ta-daa! The mentori pipeline on gitlab passed! For the first time.

https://gitlab.com/lino-framework/mentori/-/pipelines/204606848

The issues were trivial, but after years on Travis CI I still have to learn how the gory details work on GitLab.

A first issue was because in the .gitlab-ci.yml file I asked to cache the pip cache and the venv. It was always using lino-xl version 20.8 instead of 20.10

After removing the cache, I had yet another series of failures like these:

**********************************************************************
File "/builds/lino-framework/mentori/docs/specs/courses.rst", line 15, in courses.rst
Failed example:
    lino.startup('lino_mentori.projects.mentori1.settings.doctests')
Expected nothing
Got:
    num2words not installed, use `python manage.py install` to install
**********************************************************************

Yes, lino_xl.lib.courses imports lino_xl.lib.cal.EventGenerator from the lino_xl.lib.cal mixins in order to say that a course is a calendar event generator. It is perfectly okay to do this even when cal is not installed. When cal is not installed, the mixin simply has no effect. But until now it did have the side effect of printing this message.

Failures in getlino

The getlino test suite filed with:

ERROR: Could not install packages due to an EnvironmentError:
HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Max retries
exceeded with url:
/packages/ca/08/7c31e275777352db243b4d857de61d412f4a1300cda9bf9a7f0da20af852/appy-1.0.3.tar.gz
(Caused by
ReadTimeoutError("HTTPSConnectionPool(host='files.pythonhosted.org',
port=443): Read timed out. (read timeout=15)"))

But when I run it manually, it works:

$ virtualenv -p python3 tt
$ . tt/bin/activate
(tt) luc@tups:~/tmp$ pip install appy
Collecting appy
  Downloading appy-1.0.3.tar.gz (5.1 MB)
     |████████████████████████████████| 5.1 MB 243 kB/s
Collecting zodb
...
Successfully built appy
...

The getlino test suite is currently failing on my machine:

$ inv prep test
--------------------------------------------------------------------------------
Run main prep command ./prep.sh :
Sending build context to Docker daemon  15.88MB
Step 1/17 : ARG DEBIAN_FRONTEND=noninteractive
Step 2/17 : FROM debian:buster
 ---> ae8514941ea4
Step 3/17 : ENV TERM=linux
 ---> Using cache
 ---> 3117ecf1c8b0
Step 4/17 : ENV PYTHONUNBUFFERED=1
 ---> Using cache
 ---> a71874e43c4a
Step 5/17 : ENV LC_ALL=en_US.UTF-8
 ---> Using cache
 ---> c5ce60691598
Step 6/17 : ENV LANG=en_US.UTF-8
 ---> Using cache
 ---> 84e4843b22de
Step 7/17 : ENV TZ=Europe/Brussels
 ---> Using cache
 ---> 6e1ba4433a49
Step 8/17 : RUN apt-get update -yqq
 ---> Using cache
 ---> 4de583ad6fdb
Step 9/17 : RUN apt-get install -y tzdata locales-all
 ---> Using cache
 ---> 245b8fa3c094
Step 10/17 : RUN apt-get upgrade -y
 ---> Running in c0f791e1584b
Reading package lists...
Building dependency tree...
Reading state information...
Calculating upgrade...
The following packages will be upgraded:
  base-files libgnutls30 perl-base
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 2,708 kB of archives.
After this operation, 16.4 kB of additional disk space will be used.
Err:1 http://deb.debian.org/debian buster/main amd64 base-files amd64 10.3+deb10u5
  404  Not Found [IP: 151.101.86.133 80]
Get:2 http://deb.debian.org/debian buster/main amd64 perl-base amd64 5.28.1-6+deb10u1 [1,514 kB]
Get:3 http://deb.debian.org/debian buster/main amd64 libgnutls30 amd64 3.6.7-4+deb10u5 [1,124 kB]
E: Failed to fetch http://deb.debian.org/debian/pool/main/b/base-files/base-files_10.3+deb10u5_amd64.deb  404  Not Found [IP: 151.101.86.133 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
Fetched 2,638 kB in 2s (1,176 kB/s)
The command '/bin/sh -c apt-get upgrade -y' returned a non-zero code: 100

Explanation was this:

Step 8/17 : RUN apt-get update -yqq
 ---> Using cache
 ---> 4de583ad6fdb

Instead of actually updating, it used a cached version. It started to work after changing apt-get update -yqq to apt-get update -y, but of course just because this invalidated because the RUN command was changed.

Lino Voga

I had a meeting with Arnold where we discovered #3829. The roger demo project had no presences (guests) because SiteConfig.pupil_guestrole wasn’t being set.

Fixing this revealed another subtle issue: In Voga we can have multiple enrolments of a same pupil to a same course. In reality there is of course only one active enrolment per pupil per course at any given date. A same pupil can join a course, leave after some time, and then join again. The demo fixture creates duplicate enrolments whose date range overlaps. Which should be detected by a data checker. But I didn’t yet write such a checker because the problem is only theoretic. But to avoid to also get duplicate guests (which causes a database integrity error), Voga now avoids duplicate guests when having overlapping enrolments.