Welcome | Get started | Dive | Contribute | Topics | Reference | Changes | More


This is the 2022 change log for Lino. General information about how to read and maintain this document in Documenting changes.


Bugfixes in lino: collectstatic didn’t build site cache. Removed a call to Actor.request_from(). Bugfix in xl: removed two calls to Actor.request_from().


Release to pypi: noi, lino, xl


Lino has a new plugin lino_xl.lib.subscriptions. Tickets are no longer assigned to the service report via their project (Ticket.site) but via the new field Ticket.order (#4757). Service reports are now made by generating an invoice instead of using the working.ServiceReport model (#3301).

After this upgrade it’s important to run checkdata with --fix in order to fill the new field order of existing tickets. After this we can remove all projects named for their customer.

As a side effect there are a series of changes:

In the core: lino.core.requests.BaseRequest.show() (used in doctests) didn’t work for display mode “list”. lino.core.actors.Actor.request_from() now raises an exception, and the last remaining usages have been removed from our code base. The repr() of a lino.core.plugins.Plugin now also shows the value of needs_plugins. The commands pm prep and makehelp now do nothing on a slave site (i.e. when lino.core.site.Site.master_site is set). (#4757) lino.modlib.memo.Previewable no has a lino.core.fields.TableRow.as_paragraph() method. The pm dump2py command no longer writes checkdata messages (data problem message) to the dump.

In the XL: invoicing areas are now a choicelist lino_xl.lib.invoicing.InvoicingAreas, no longer a model. The invoice generator that generated a target invoice item is now stored only for rows with the invoicing product. New model mixins InvoicingTargetVoucher and InvoicingTargetItem instead of inject_field() (this makes lino_presto.lib.invoicing useless). The lino_xl.lib.thirds plugin has been removed. Renamed lino_xl.lib.accounting.PartnerRelated to lino_xl.lib.accounting.PayableRelated. Removed model mixin lino_xl.lib.contacts.PartnerDocument, which wasn’t used anywhere. New model mixins lino_xl.lib.contacts.PartnerRelated and lino_xl.lib.contacts.PartnerPrintable (extracted from lino_xl.lib.trading.SalesDocument and lino_xl.lib.accounting.PayableRelated)


Theoretical optimizations in getlino startsite when doing linod using daphne and asgi.


The lino_xl.lib.reception plugin now injects another field lino_xl.lib.cal.Guest.waiting_number.

Release to pypi: xl, welfare


lino.core.site.Site.project_dir is now a pathlib.Path object (no longer unipath.Path).

New attribute lino.core.site.Site.master_site replaces the “manual” inheriting of DATABASE and SECRET_KEY when running a Lino site with multiple front ends.

Release to pypi: lino, xl, …


Implement DISPLAY_MODE_LIST to call row_as_paragraph on every row and return html string.


lino.modlib.publisher no longer uses templates. The publisher_page_template is replaced by get_publisher_chunks() and publisher_item_template by lino.core.fields.TableRow.as_paragraph().

The lino.core.model.Model.as_list_item() method has been renamed to lino.core.fields.TableRow.as_paragraph() and is now expected to return a HTML string, not an etree element, and this string must no longer include the enclosing <li> tag. Instead of writing a custom as_paragraph() method on the Model, you can now write a row_as_paragraph method on the actor. New shortcut method row_as_paragraph.


Replace AbstractTable.display_mode_main and AbstractTable.display_mode_slave by AbstractTable.display_mode, which now takes a “tuple of tuples” as the value instead of “string”, where the inner tuples must contain only two values where the first value shell be an integer that indecates the max width (in characters) of the table view and the second value contains the actual display mode.


Release to PyPi: Lino, XL, welfare, welcht


Lino now automatically generates a comment of style “Created a new ticket” when a Commentable database row has been created. New attribute Commentable.create_comment_template. This functionally replaces what has been done until now by :class:SpawnTicket


Stop importing dd and rt in notify consumers.

Release to pypi: Lino 22.9.2


Release to pypi: xl 22.9.0, noi 22.9.0

Rename checkdata.Problem to lino.modlib.checkdata.Message.

Release to pypi: lino 22.9.0 (e.g. to make presto test suite pass on GitLab)


Remove the Link model in lino_xl.lib.tickets.


Release to pypi: lino, xl, welfare, welcht, noi.


Release to pypi: lino, xl, react, amici, noi.


The notify.use_websockets has been removed and the dependent functionalities are moved to a new plugin lino.modlib.linod, which will be activated when site.use_linod is set to True.


The pull.sh generated by getlino now updates all Python packages of the environment. See #4590.

Fixed: install caused a NameError: name ‘sys’ is not defined error.


Fix a regression that caused ExtJS front end to break when help.make_help_pages was True.

Release to PyPI: lino


The Lino version of collectstatic now runs Django’s collectstatic before makehelp and buildcache.

Release to PyPI: lino, xl, welfare, react, noi


Fixed #4581 (makehelp for welcht says “Tried to get static handle for debts.PrintEntriesByBudget”)


The lino_book.projects.cosi5 demo project is our first proof of concept for a point of sale. New plugin settings accounting.sales_method, accounting.has_payment_methods and invoicing.voucher_type. New function dd.get_plugin_setting().

The lino_xl.lib.accounting.PaymentMethod model now exists only when accounting.has_payment_methods is True.

Removed: The invoicing.delivery_notes_demo setting is replaced by accounting.sales_method. The lino.core.site.configure_plugin() function is removed as it was no longer used anywhere.


The notify.use_websockets now works out of the box for React front end.


Release to PyPI: lino, xl, cosi, react


Reimplement the site features. They are now plain strings; description is expected be in the Sphinx docs.

Release to PyPI: lino 22.5.1, xl, noi, getlino

Adapt after sphinxconf was moved from atelier to rstgen.

Release to PyPI: lino 22.5.2


Release to PyPI: welfare and welcht


The lino_xl.lib.invoicing plugin now supports delivery notes as a new type of invoice generator. Partial invoicing is possible. New field accounting.Journal.make_ledger_movements.


Release to pypi: lino, lino_xl, lino_react


Renamed cal.EventRepeater to cal.EntryRepeater. Replaced cal.Event.repeater by cal.EntryRepeater.cal_entry.


Replace AbstractTable.display_mode with display_mode_main and also add another attribute display_mode_slave to use when the Table is rendered as an element of another Table’s layout.

Add new module lino.core.classproperty.


Release to PYPI: lino, xl, react


Release to PYPI: lino, xl, react, noi