:date: 2020-08-25 ======================== Tuesday, August 25, 2020 ======================== I fixed :ticket:`3765` and did some changes in :ref:`hosting.backup` and :ref:`hosting.mirror`. I tried the `insipid `__ Sphinx theme. Looks even nicer than RTD. I switched the :ref:`hw` to it. 'NoneType' object has no attribute 'get_layout_handle' ====================================================== .. currentmodule:: lino.modlib.users I fixed :ticket:`3766`. This was a quite blocking bug: it was not possible to edit any combobox field in the :guilabel:`My Settings` form. The issue occurred only here because :class:`Users` is abstract and nevertheless has parameters defined. I added test cases to cover this in :ref:`specs.users` and :ref:`welfare.specs.reception`. There is an internal rule that when `parameters` is None, `params_layout` is also `None` and no functionality related to parameters is used. This rule was not satisfied here. It is not satisfied because :class:`Users` is abstract. Interesting to note that the Ajax call requests ``/Users/``, not ``/AllUsers/`` or ``/MySettings/`` or some other non-abstract table name. That's because none of the non-abstract subclasses of :class:`Users` adds anything to the question "which choices do we have for field :attr:`User.coaching_type`?". That's why all fields use the same Ajax call. The problem occurred also for :attr:`User.partner` or :attr:`User.user_type`. >>> from lino import startup >>> startup('lino_welfare.projects.gerd.settings.doctests') >>> from lino.api.doctest import * >>> lh = users.AllUsers.get_detail_layout() >>> lh.layout._datasource lino.modlib.users.desktop.Users >>> lh.get_data_elem('coaching_type') >>> show_choices('romain', '/choices/users/Users/coaching_type')
SSG SI Médiation de dettes Internal side effect: Lino now supports action requests on an abstract actor. Such requests are of course limited, but we need them e.g. in above case. I did not remove the exception "has a params_layout but no parameters" e.g. ledger.ByJournal is just a mixin but provides a default value for its children Note also the special case :class:`lino_xl.lib.ledger.ByJournal`. This is a table mixin. It is not explicitly marked as abstract by the application developer. That's okay because a data table is automatically considered abstract when it has no model. Make Lino applications use Django the user model ================================================ Until now I was still assuming that "Django's approach provides no means for defining instance-specific permissions." I now saw that this is no longer true. So think once more about whether we should support Lino applications that use the standard :mod:`django.contrib.auth` plugin instead of :mod:`lino.modlib.users`. The main obstacle is the fundamentally different permission system. But there is a solution for it. Probably even several solutions. One of them would be to add an attribute :attr:`lino.core.actions.Action.required_permissions` and to have the :fixture:`std` fixture generate one Django user group for each :term:`user type` in Lino. I reviewed :ref:`about.auth`.