Tuesday, October 8, 2019¶
Fixed some bugs in getlino¶
Trying to reproduce Amber’s problem. Her is how I started:
$ cd ~/tmp $ virtualenv -p python3 amber $ . amber/bin/activate $ getlino getlino: command not found
That’s correct because I did not install getlino.
Note that when you uninstall getlino, the config files are not being deleted. So in order to reproduce Amber’s problem, I remove my own config files:
$ sudo mv /etc/getlino/getlino.conf /etc/getlino/getlino.conf.old $ mv .getlino.conf .getlino.conf.old
Note that I had both config files, that’s perfectly possible if you run
getlino configure once as root and once not.
Amber reported that he had only the system-wide
/etc/getlino/getlino.conf. Which means that he has been running
getlino configure as root. Which indicates that he was confused by the
installation page (Installing getlino). He should have chosen either
developer environment or contributor environment. And then he
didn’t know that you must use
env PATH=$PATH when running it as root. So he
probably chose to configure a demo server and installed getlino
system-wide. No wonder that he stumbled into problems! I reviewed the
Installing getlino page quite thoroughly. Now there is some hope that
future volunteer contributors won’t get lost in the jungle again.
Oh, and I saw only now that he was using getlino 19.9.7, a quite old version. That might explain many of his problems! See Changes in getlino for details.
And when I tested the installation instructions I stumbled into the next problems:
Running getlino configure without
--db-portcaused an error
Invalid value for "--db-port": invalid choice: . (choose from 5432, 3306, 0). The
--db-portoption is not a choice : it is not limited to these values.
--cloneoption sometimes had True as default value. That’s not good, this option shouldn’t have magic behaviour.
PermissionError: [Errno 1] Operation not permitted: '/home/luc/.cookiecutters/cookiecutter-startsite/COPYING'. But that was just a local problem on my machine because I had been running it also as root.
Found a bug: getlino forgot to run “pip install lino lino-xl” when a shared-env was being used. That was probably the main issue for Amber. Fixed.
I am still experimenting with what cookiecutter-startsite should write into
settings.pyif no db-port is given.
I tested the developer environment manually, and it seems to work at least for noi. TODO: several other applications probably need a PyPI release.
Actually Amber should install a contributor environment. So I tried that, too. And found another bug:
ERROR: cd is not a valid editable requirement. It should either be a path to a local project or a VCS URL (beginning with svn+, git+, hg+, or bzr+).
Fixed the bug and released 19.10.2 to fix it.
Now finally the installation should work for Amber! At least they passed my manual tests.
All this is great and fun, but why did I have to do it? Why didn’t Hamza have these ideas? OMG there is some much more to do! Actually we should now extend the getlino test suites. Actually we should review the Developer and the Contributor Guides! Should I ask Amber to stop trying because we simply lack manpower?!
PS: I know that Hamza is a skilled guy and I don’t doubt his competence. My explanation why he didn’t have these ideas is that he is somebody who rather finds solutions, not problems. He was focused on helping Amber to formulate his problem more precisely so that we can reproduce it. He just didn’t realize that Amber’s problem was actually already reproducible. And of course we lack manpower, but that’s not a reason to worry because Amber knows that and is big enough to live with it. The last paragraph was also an example of the fears and worries I have when I realize how difficult it is to become useless! (Did you know that becoming useless before you die is the most important task of your life? ;-)
Recurring event every 3rd Wednesday or every last Friday of month¶
I opened #3255. No customer has asked this so far but I have the feeling that this is a missing feature in our calendar plugin.
Inspired by dateutil
we should add a field
lino_xl.lib.cal.RecurrenceSet.bysetpos : “If
given, it must be either an integer, or a sequence of integers, positive or
negative. Each given integer will specify an occurrence number, corresponding to
the nth occurrence of the rule inside the frequency period. For example, a
bysetpos of -1 if combined with a MONTHLY frequency, and a byweekday of (MO, TU,
WE, TH, FR), will result in the last work day of every month.” It should be a
CharField and the integers would be stored as space-separated strings. Our
standup meetings would have bysetpos = “1 3 5” and every_unit=weekly (and
every=1 because they are every week, not e.g. every second week).
>>> from dateutil.rrule import rrule, MONTHLY, FR >>> from datetime import datetime >>> start_date = datetime(2019, 10, 25) >>> list(rrule(freq=MONTHLY, count=5, dtstart=start_date, bysetpos=-1, byweekday=FR)) ... [datetime.datetime(2019, 10, 25, 0, 0), datetime.datetime(2019, 11, 29, 0, 0), datetime.datetime(2019, 12, 27, 0, 0), datetime.datetime(2020, 1, 31, 0, 0), datetime.datetime(2020, 2, 28, 0, 0)]