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

2024

This is the 2024 change log for Lino. Learn how to read and maintain this document in Documenting changes.

2024-07-12

#5685 (Review the API for get_table_summary(). Most but not all customized Actor.get_table_summary() methods have been converted to Actor.table_as_summary(). Minor optimizations as side effects: lino.utils.AttrDict now supports setting an attribute. The overview field didn’t yet support getting a safe html string from get_overview_elems(). For more details, see Luc’s developer blog

2024-07-10

First steps for #5670 (Support e-invoices (PEPPOL)): When printing a sales invoice to a customer who has a VAT number, Lino now generates an XML file containing the electronic invoice in PEPPOL format. The pdf invoice then contains a text “e-invoice: /media/beppol/SLS/112.xml”. See Lino and PEPPOL.

lino_xl.lib.vat.VatItemBase.get_peppol_vat_category() lino_xl.lib.vat.VatDocument()

2024-06-30

lino.utils.xml.validate_xml() now acts differently depending on whether the given xsdfile ends with .xsd or with .sch. When it ends with .xsd, the generated xmlfile file is validated using lxml.etree.XMLSchema (as it was until now). When it ends with .sch, the generated xmlfile file is validated using lxml.isoschematron.Schematron.

2024-06-17

#5660 (logger.debug() notification messages). The msg_func argument to lino.modlib.notify.Message.emit_notification() is no longer called with two arguments (user, mail_mode) but without arguments.

2024-06-14

BaseRequest.is_obvious_field() no longer fails when called on an actorless request.

The obj2href() and as_summary_row() methods of Model were merged into a single method named as_summary_item.

2024-06-02

Lino Noi has now two major options with_accounting and with_cms.

lino.modlib.publisher.Page.child_node_depth now defaults to 1, and child pages are now also shown when memo.use_markup is True.

2024-05-31

The format of a textfield must now be specified using the format attribute. An attribute named textfield_format no longer exists on the RichTextField object. Until now the attribute was named textfield_format, but an format was accepted as a keyword and stored as textfield_format. (The textfield_format attribute of the Site class remains unchanged.)

The use_markup setting has been moved from publisher to memo.

2024-05-30

Merged lino_xl.lib.pages in to lino.modlib.publisher. New choicelist publisher.SpecialPages. The pages.use_markup setting is now publisher.use_markup.

2024-05-28

A first step towards #5623 (Replace memo parser by markdown?): added a new plugin setting pages.use_markup. Side effect: moved PageFillers from lino_xl.lib.pages to lino.modlib.publisher.

Done #5632 (We can always talk about a ticket).

2024-05-24

The master_key of a slave table is no longer automatically added as a simple parameter field. For example lino.modlib.dashboard.WidgetsByUser.

2024-05-21

The functionality for verifying the email address of a user is now available also when allow_online_registration is False.

2024-05-18

The as_paragraph of contacts.Partner did not always return a safe string. Such a stupid bug should not have slipped through our test suite! So lino_react.react.views now uses lino.utils.html.assert_safe() and the lino.api.doctest.walk_menu_items() function now also calls every table with display_mode set to 'list'. This detected two more models whose as_paragraph doesn’t yet return a safe string (working.Session and contacts.Role).

The lino.core.site.Site.remote_user_header is no longer being used. #5618 (Stop supporting HTTP authentication (Site.remote_user_header))

2024-05-16

Lino no longer sets a default time when inserting a calendar entry. New function show_change_watchers for usage in tested documents.

2024-05-13

New plugin lino_xl.lib.agenda. Visible in Lino Amici where calendar entries have a new tab “Agend” in their detail view and when you print an entry. Lino will also list the agenda items.

2024-05-11

Rename plugin: ledger (lino_xl.lib.ledger) to accounting (lino_xl.lib.accounting).

2024-05-11

A series of internal optimizations: Fixed a bug in lino.modlib.jinja : the config directory of the site_dir was searched last when looking for a template, but it should get searched first. The polls and polls2 demo sites were probably the only victims of that bug. show_menu no longer requires a username. ar.action_link. The docutils.conf of the Developer Guide no longer sets smart_quotes to False; this might cause a series of help texts to get marked as needing work in the .po files. #5600 (react plugin no longer needs lino.modlib.system).

2024-05-10

Work in progress for ##5596 (Better names for obj2href() and obj2html()): Model.as_summary_row() and Model.as_paragraph() now call Model.obj2href() instead of ar.obj2html(). Some more internal optimizations: The lino.utils.html.tostring() function is now a copy of etgen.html.tostring() and it now escapes the value when it is an unsafe str.

2024-05-08

Fixing #5576 (My teams should show description in only one language) was trivial but caused an avalanche of internal optimizations. The default implementation of detail_link now uses lino.core.model.Model.as_paragraph() as default text instead of ar.obj2htmls(). #5353 (Use mark_safe instead of ElementTree). New feature: #5589 (Simple parameters should be considered obvious fields). Optimization: #5590 (Render href in tested docs more consistently). To avoid making etgen depend on Django, I created a new module lino.utils.html with a function tostring that wraps Django’s safestring tools around etgen.html.tostring(). All Lino code now imports tostring() from this new lino.utils.html module. I started a topic guide Generating HTML.

2024-04-30

New feature Job providers with multiple workplaces for Lino Welfare Châtelet (#5567). New database fields jobs.Job.workplace and contacts.Company.job_provider. New slave table WorkplacesByProvider in the detail view of a job provider.

2024-04-25

Internal optimizations: the lino_xl.lib.contacts.Partner model now inherits from Commentable. This fixes #5578 (Amici says ‘Household’ object has no attribute ‘is_comment_private’). Optimized Plugin.__repr__().

2024-04-24

Fixed several bugs that caused the background task runner to get stuck. pm linod now also starts a log server when linod.use_channels is False.

Database needs migration because lino.modlib.linod.SystemTask and lino_xl.lib.invoicing.Task have a new field name.

2024-04-22

Done #5565 (Replace “Project” by “Topics” in Noi). Fixed a database design bug in lino_xl.lib.topics: New model lino_xl.lib.topics.Tag, and lino_xl.lib.topics.Interest no longer has an owner field. InterestsByController has become TagsByOwner, InterestsByPartner has become TagsByTopic. Topic is no longer a BabelNamed. The Interesting mixin has been renamed to Taggable. The topics.partner_model can now be None, which means that there is no Interest model, use cases are Lino Tera and Lino CMS.

2024-04-15

Fixed #5553 (Invalid panel spec. start_invoicing_1 POST null). The lino_xl.lib.invoicing plugin now creates a single menu command “My invoicing plan” instead of creating one command per invoicing task.

Started documentation about Single-row tables.

2024-04-08

Lino now supports the new Estonian VAT rate. (Not already since Januar because there is no production site yet in Estonia). Changes are visible in eevat : Estonian VAT declarations. Side effect: lino.mixins.periods.DateRange.get_period_text() is now more generally available as lino.mixins.periods.rangetext() and used by lino_xl.lib.vat.

2024-04-07

New actions reset_password and verify_user. The “Verify” action on lino.modlib.users.User is now named verify_me. New database field lino.modlib.users.User.verification_password. Interesting to note how lino.modlib.users.User.verify_me inherits from lino.modlib.about.About.verify_user and how they do almost the same in different situations.

The react.UserSettings view no longer sets require_verification and code_expiry.

2024-04-05

Renamed model linod.BackgroundTask to linod.SystemTask. Requires database migration.

2024-04-02

Optimize background tasks: add possibility to have multiple task classes (django models); run separate task classes in separate coroutines.

2024-03-30

The ChangesByMaster and ChangesByObject tables are now available on every watched model as toolbar button (). For this to work, applications must call lino.modlib.changes.watch_changes() from setup_actions rather than from do_site_startup. Side effects: Renamed Plugin.on_site_startup to Plugin.pre_site_startup. The watch_all_changes() feature has been removed because it was not used. Moved lino.utils.watch to lino.modlib.changes.utils. Updated documentation pages: When Lino starts up, changes: Keep track of changes in the database, watch – Watching database changes and More about plugins.

2024-03-27

I renamed Site.get_installed_apps() to Site.get_installed_plugins() and Site.get_apps_modifiers() to Site.get_plugin_modifiers(). A technically simple change to improve readability for newcomers. But it will require local settings.py files to get updated. Lino raises an ChangedAPI exception if you forget to do it.

2024-03-26

New field User.nickname and users.with_nickname. The CreateAccount action is now presented in the admin_main.html, and its dialog no longer shows the third-party auth providers because we have them in the SignIn action.

2024-03-25

Renamed lino_xl.lib.sales to lino_xl.lib.trading because it can be used for any trade type, not only for sales. Requires database migration.

2024-03-24

Fixed #5520 (Recent comments shows comments to tickets that the user cannot see). In lino.modlib.comments.Commentable, get_comments_filter() has been changed to add_comments_filter. New database field lino_xl.lib.groups.Group.private. The ar argument to lino.core.actors.Actor.get_request_summary and lino.core.model.Model.get_request_summary can now be a BaseRequest.

Noi no longer adds a group owner to (database field Group.user has been removed). And the view parameter subscriber has been removed.

2024-03-17

Some subtle optimizations in Lino core: Default value for lino.core.actors.Actor.summary_sep changed from "<br/>" to ", ". New keyword argument max_width for TableRequest.show(). React renderer still used mjames icons for renderering actions even when a PrimeIcon icon exists. Clickable links sometimes had no style="text-decoration:none".

2024-03-14

New method lino.core.site.Site.get_config_value() for #5497 (SITE.site_config is sometimes None on asgi server).

2024-03-10

Resurrection of the commondata package. They had been sleeping for many years because the original idea assumed that people who know the data would site down and write Python code. A first example is commondata.countries. Because commondata was a namespace package and no longer is, you need to manually uninstall the old commondata packages by removing commondata*-nspkg.pth from your site-packages directory.

2024-03-08

A developer in Uruguay started an internship, so we added Uruguayan demo data in cosi4 : a Lino Così for Uruguay.

2024-02-26

Added the new plugin :mod:’lino_xl.lib.sources’ (#5214).

2024-02-14

Automatically run invoicing plans as background tasks (#5399). Replace InvoicingAreas by lino_xl.lib.invoicing.Task

2024-01-24

rename StorageState to ProvisionState

2024-01-23

New field lino_xl.lib.products.Product.pieces_per_unit

2024-01-14

Add the lino_xl.lib.nicknames plugin.

2024-01-11

Review socket file of log server ():ticket:5379).