======================== Wednesday, July 29, 2015 ======================== Today I finally continued to edit the :xfile:`StageForem.odt` template for immersion contracts. They really want to edit this file manually using the `.rtf` format. Lino Noi ======== Before actually starting to work, I triaged my own tickets after yesterday's optimizations. An activity which is currently deemed to mix up with more optimizations to Lino Noi. - Changed some column layouts - The checkboxes `standby` and `feedback` are no longer used. Cannot add column with `master_key` =================================== Above optimizations also caused a optimization to the framework itself: Users (until today) were not able to manually add, in the grid of a *slave table*, the column of the *master key*. Even when the :attr:`column_names ` contained a ``*`` wildcard. For example when I have the following table definition:: class TicketsByProject(Tickets): master_key = 'project' column_names = "overview product reporter state *" then it was not possible to manually add the column "Project". That was because the :attr:`master_key ` was not automatically added as hidden element. About Linux user permissions ============================ Yet another subtle problem: when I change the `umask` in Apache's :file:`/etc/apache2/envvars` configuration file from the default ``0022`` to ``0002``, then any new files generated by Lino will be group writable. This is my preferred configuration because I can then avoid permission conflicts by defining myself as member of the `www-data` group (and make sure to run ``chmod g+w`` on every file I create). Permission conflics are possible for - log files - generated printable files - local config files (when exposed via webdav) All this seems clear and understandable. But for `AppyPdfBuildMethod` it gets more complicated, and I did not yet fully understand. Currently the files get created with owner ``root`` and no write permission for group. It has probably to do with the fact that Lino (or more precisely :mod:`appy.shared.utils`) here runs a subprocess for converting the `.odt` file to `.pdf`:: childStdIn, childStdOut, childStdErr = os.popen3(cmd) Editing the template ==================== The :class:`EditTemplate ` action had a subtle bug: For printables with more than one template group, when creating a local copy of the factory template, it copied the factory file to the directory given by the *last* group. But it must select the directory given by the *first* group. For example when printing an `excerpts.Excerpt`, we have two template groups: the first is given by the owner (e.g. `"immersion/Contract"`) and the second is just `"excerpts"`. Added a test case to :ref:`welfare.specs.misc`. "This will discard all changes in the generated file" ===================================================== And yet another bug fixed (in :class:`ClearCacheAction `): The confirmation message :message:`This will discard all changes in the generated file.` (:message:`Ceci va écraser toute modification manuelle dans le document généré. D'accord ?`) came even when the generated file was a `.pdf` file which certainly does not contain user changes. This was because we must remove the microseconds from the `datetime` returned by :meth:`get_cache_mtime ` because Django's `DateTimeField` ignores them. Miscellaneous ============= Three fields (template, overlap_group and full_name) were missing in the `detail_layout` of :class:`lino_welfare.modlib.immersion.models.ContractTypes`. Getting Lino to pass on Travis CI ================================= The current error message is :message:`Exception: Oops, cannot use /home/travis/build/lsaffre/lino/polly for lino.projects.polly.settings.Site because it is used for lino.projects.polly.settings.demo.Site.` So I changed the `script` instruction in Lino's :xfile:`.travis.yml` file so that it now deletes the `LINO_CACHE_ROOT` directory for each build:: export LINO_CACHE_ROOT=$TRAVIS_BUILD_DIR/lino_cache rm -R $LINO_CACHE_ROOT mkdir $LINO_CACHE_ROOT fab initdb test Which didn't help.