Monday, August 1, 2016

Today I didn’t work very much (we came back from Saremaa), and that time went into exploring some problems caused by upgrading my machine from Ubuntu 14.04 to 16.04. E.g. Python is now version 2.7.12 (it was 2.7.6)

Virtualenvs broken after upgrade to Ubuntu 16.04

This one looked rather spectacular:

$ python -m datetime
Traceback (most recent call last):
  File ".../virtualenvs/py27/lib/python2.7/site.py", line 703, in <module>
    main()
  ...
  File ".../virtualenvs/py27/local/lib/python2.7/site-packages/coverage/html.py", line 6, in <module>
    import datetime
ImportError: No module named datetime

The solution was to remove and re-create the virtual environment.

After reading this I guess that the explanation is that yes, virtualenvs rely on the paths of your Python intallation, and thus they can break when you upgrade to some new Debian version.

Atelier no longer needs Fabric

When using the new virtual environment, I noticed that some parts of Atelier still depended on Fabric. I removed this dependency by deactivating atelier.projects.Project.load_fabfile().

Problem with for loops in appy.pod

Another problem occured later during inv prep in Lino Welfare:

appy.pod render /media/dell1tb/luc/work/welfare/lino_welfare/modlib/isip/config/isip/Contract/Default.odt -> ~/tmp/lino_cache/welfare_std/media/webdav/userdocs/appyodt/isip.Contract-1.odt (language='en',params={'raiseOnError': True, 'ooPort': 8100, 'pythonWithUnoPath': u'/usr/bin/python3'}
Traceback (most recent call last):
  File "~/virtualenvs/py27/bin/django-admin.py", line 5, in <module>
    management.execute_from_command_line()
  ...
appy.pod.actions.EvaluationError: Problem installing fixture '~/luc/work/xl/lino_xl/lib/excerpts/fixtures/demo2.py': Error while evaluating expression "row.company".
   File "~/virtualenvs/py27/local/lib/python2.7/site-packages/appy/pod/buffers.py", line 702, in evaluate
    res, escape = evalEntry.evaluate(context)
   File "~/virtualenvs/py27/local/lib/python2.7/site-packages/appy/pod/elements.py", line 144, in evaluate
    res = self._eval(context)
   File "~/virtualenvs/py27/local/lib/python2.7/site-packages/appy/pod/elements.py", line 125, in _eval
    res = eval(self.expr, context)
   File "<string>", line 1, in <module>
 <type 'exceptions.NameError'>: name 'row' is not defined

I can cheat the test suite by setting raiseOnError=False, but that’s not a solution. A first observatio is that the problem disappeared after doing:

$ pip install 'appy==0.9.3'

Which means that version 0.9.4 of appy.pod is the “guilty”. Gaetan has done a lot of work in Appy, some of it probably very useful for Lino. I scanned through his release notes for 0.9.4, but at first glance I did not see any obvious reason for our problem. Needs more investigation. I created #1089 for this.

A new RSS feed generator for my blog

A third problem caused by the new virtualenv was when running inv bd in my Blog:

Extension error:
Could not import extension sphinxcontrib.feed (exception: No module named feed)

First I had to find out how to install sphinxcontrib.feed. Because “pip install sphinxcontrib.feed” does not work. I had to clone sphinx-contrib and to do:

$ cd ~/repositories/sphinx-contrib/feed
$ python setup.py build
$ python setup.py install

This fixed the first exception, but then I had yet another exception during inv bd in my blog:

Exception occurred:
  File "~/virtualenvs/py27/lib/python2.7/site-packages/feed-0.3a0.dev20160801-py2.7.egg/sphinxcontrib/feed/absolutify_urls.py", line 72, in absolutify
    html_serializer = html5lib.serializer.htmlserializer.HTMLSerializer()
AttributeError: 'module' object has no attribute 'htmlserializer'

I could not find anything helpful neither in the html5lib documentation nor in the code of sphinxcontrib/feed/absolutify_urls.py.

Since I was locked, I checked whether there is some other RSS feed generator for Sphinx which gives the same result.

I tried yasfb, but that’s not what I want. There are almost 2000 pages in my blog’s doctree and I definitively don’t want to have an RSS item for each of them.

Finally I opted to take Fergus Doyle’s sphinxfeed. The only problem here was that sphinxfeed expects a meta variable named :Publish Date: at the beginning of each blog entry, while my blog files use the :date meta variable. And I didn’t want to change them all. So I forked the project, added add a new config variable feed_field_name and sent Fergus a pull request. I’ll now wait for his feedback.

Alt-Tab and the Application Switcher

After the Ubuntu upgrade, Alt-Tab did not work as I am used it to work. It switches to the next window without displaying any intermediate list of open windows. I had to install this:

$ sudo apt install compizconfig-settings-manager
$ ccsm

And then I found under “Window Management” an option “Application Switcher” which was disabled. I enabled it, confirmed some questions about some conflict with some Ubuntu Plugin, and then it worked again.

Anpassungen

I solved ticket #1088 and deployed that version to Die Eiche. It didn’t even need a database migration since all the fields were already there.