Welcome | Get started | Dive | Contribute | Topics | Reference | Changes | More
2021¶
This is the 2021 change log for Developer Guide. General information about how to read and maintain this document in Documenting changes.
2021-12-30¶
New virtual field DelayedHtmlBox to
the fields collection.
2021-12-xx¶
New feature: a HtmlBox can now be
collapsible. See Specifying widget options in a layout.
2021-11-12¶
New plugin lino.modlib.search. First use case will be Lino Noi.
2021-10-17¶
Add Site attribute Site.use_elasticsearch which when set to
True makes the class lino.core.model.Model inherit from necessary
mixins related to ElasticSearch.
2021-10-13¶
Add lino.modlib.elastic plugin (draft) for more intelligent search
capabilities.
Release to PyPI: lino, lino_react, lino_noi, lino_xl
2021-09-24¶
Bugfix third-party auth buttons didn’t work in ExtJS.
Lino Noi no longer uses lino_xl.lib.votes (we will soon add a new plugin nicknames instead).
New field type lino.core.fields.PreviewTextField.
Release to PyPI: lino xl, react and noi
2021-09-19¶
WIP in lino_xl.lib.votes: get_vote_raters() and
use_candidatures.
notify.remove_after now in days (no longer in hours)
2021-09-18¶
Optimize blogs, display_mode ‘story’, react cosmetics, use votes in noi
tickets, add third party authentication actions in SignIn and CreateAccount
window. Fix a breaking bug in Lino Noi (cannot create ticket).
Release to PyPI: xl lino react
2021-09-16¶
Remove Actor attribute
borderless_list_mode and implement StoryElement
as a substitute, with usage trigger display_mode as ‘story’.
2021-09-10¶
Add the lino_xl.lib.votes plugin to Lino Noi. Optimize how Lino Noi
looks for anonymous users. Fix a bug that caused Lino Noi to not send
notifications to all team members.
2021-09-07¶
Cosmetic optimization: The button_text of the
LedgerRegistrable.toggle_state and
UploadController.show_uploads actions used unicode
symbols that weren’t being rendered correctly in some browsers.
Release to pypi: lino, xl, cosi, amici, react
2021-09-03¶
After upgrading you might need to review your settings.py file: The
max_file_size and upload_to_tpl settings are now an attribute of
lino.core.site.Site and no longer a plugin attribute in
lino.modlib.uploads.
The lino_xl.lib.bevat plugin had some bugs in the VAT rules, and
it now can export a intra-community statement to XML.
2021-08-28¶
In lino_xl.lib.cal, added a three new fields to Event model:
Event.notify_before, Event.notify_unit and
Event.notified. Added a scheduler function
event_notification_scheduler() to send out notifications for the scheduled
events.
2021-08-23¶
The model VatSubjectable has a new property
vid_manager which is essentially a VatNumberManager instance that facilitates VAT
identification number validation, both online and local, and generation of
fake VAT identification number for demo purposes.
A new data Checker VatIdChecker on VatSubjectable is active when the plugin vat is
installed and reports non-existent VAT identification number by doing online
registry checks to the corresponding user.
These additions are available/published on (and above) lino_xl-21.8.2.
2021-08-22¶
Release to PyPI : xl, noi and react
2021-08-19¶
Release to PyPI : lino, xl, cosi and react
Bugfix: Lino failed to print the customer’s VAT id in sales invoice when using the default weasyprint template.
2021-08-18¶
Minor optimization for registering purchase invoices
with partly deducible VAT: when you manually change the vat_class of an
invoice item, then Lino now re-computes all amounts of that item, based on the
invoices total amount and the new VAT class.
2021-08-17¶
Inject field default_color into SiteConfig model from cal
plugin.
2021-08-13¶
Add a plugin attribute lino.modlib.help.Plugin.make_help_pages.
2021-08-11¶
Release to pypi: lino-cosi lino-react
2021-08-09¶
Release to pypi: lino-xl
2021-08-06¶
Release to pypi: lino, lino-react
2021-08-05¶
The lino_xl.lib.invoicing plugin now supports “periodic” invoice
generators, a new feature used in Lino Noi for automatically generating yearly
or monthly invoices for membership fees. Implemented by
lino_xl.lib.orders.
2021-08-04¶
Renamed to WrappedAction from
QuickLinkAction.
Extended Action attribute js_handler to have the possibility to have it defined
as a class method.
2021-07-30¶
Renamed Renderer.hide_dashboard_items to
Renderer.support_dashboard_layout.
Release to PyPI: lino, react
2021-07-29¶
Extended collectstatic to run makehelp as a sub task.
Added, Kernel.lino_version,
functionally similar to
Kernel.code_mtime to use as
production site modification stamps.
Release to PyPI: lino
2021-07-25¶
Added Site.build_site_cache_url() and Site.site_cache_root to
Site object.
Also, extended the django.contrib.staticfiles command collectstatic
to build the site cache before executing collect() on static dirs.
Release to PyPI: lino
2021-07-21¶
Renamed plugin option use_verify to allow_online_registration.
Release to PyPI: lino
2021-07-15¶
Release to PyPI: getlino, lino, xl, react, cosi, amici, noi
2021-07-13¶
Optimizations in the React front end
extracted help texts are now implemented by separate plugin
lino.modlib.help.users.User didn’t have a merge action
2021-07-03¶
Release to PyPI: lino, xl, react, cosi, amici, noi, getlino
2021-06-23¶
Release to PyPI: lino, xl, react, cosi, amici
2021-06-12¶
The lino.modlib.system.SiteConfig.pupil_guestrole field is now
injected by the lino_xl.lib.courses and no longer by Lino Voga.
The SiteConfig detail layout in Lino Amici now shows the fields injected by cal and courses.
The Help button (?) now also works in ExtJS, and it now links to the appropriate page of the docs.
2021-06-09¶
The email notification caused by AjaxExceptionResponse on a production site no longer includes the whole traceback in the message’s subject.
2021-06-08¶
#4195 (Lost connection to MySQL server during query) #4194 (insert window doesn’t close after submitting)
Release to PyPI: lino 21.6.1, lino_react 21.6.1.
and lino_noi 21.6.1.
2021-06-05¶
Release to PyPI : lino 21.6.0, xl 21.6.0, noi 21.6.0 and react 21.6.0.
2021-05-21¶
Release Lino 21.5.0 to PyPI.
2021-05-16¶
Internal optimizations: lino.core.store.StoreField.value2dict() now takes
the field name as an argument. New utility function
lino.api.doctest.walk_store_fields(). get_complexity_factors now uses
lino.core.actors.Actor.is_abstract()
2021-05-15¶
New plugin option lino.modlib.notify.mark_seen_when_sent When this is
True, Lino marks notification messages as seen as soon as they have been
sent via email.
The default implementation of lino.core.actors.Actor.get_table_summary()
now uses lino.core.requests.BaseRequest.plain_toolbar_buttons().
2021-05-03¶
Added a new field User.date_format for all applications. New plugin
option use_verify. User.send_welcome_email is no longer a window
action.
Release to PyPI: Lino 21.4.2, xl 21.4.2, Noi 21.4.1, Voga 21.4.0, Così 21.4.1
Release to PyPI: React 21.5.0
Added a new function lino.core.auth.utils.activate_social_auth_testing(),
which does what was priviously done only in lino_book.projects.noi1e and
which is now used also for lino_shop.projects.shop1.
2021-05-01¶
New actor attribute lino.core.actors.Actor.params_panel_pos.
2021-04-30¶
New actor attribute lino.core.actors.Actor.params_panel_pos.
2021-04-29¶
Release to PyPI : Lino 21.4.1, XL 21.4.1, Lino Noi 21.4.0 and React 21.4.0.
2021-04-24¶
New mixin lino.modlib.memo.BabelPreviewable. First use case is
lino_xl.lib.products, where Product and Category now
inherit from it. Their database structure is changed: renamed field
description to body. The read-only fields short_preview and full_preview
of lino.modlib.memo.Previewable are now named body_short_preview and
body_full_preview.
Release to pypi: lino 21.4.0, lino-xl 21.4.0
2021-04-23¶
The lino_xl.lib.products plugin now adds card and list layouts for
product, and it adds quick links.
2021-04-16¶
lino_xl.lib.cal.MyTasks is now sorted in ascending chronological order.
A lino_xl.lib.notes.SpecialType now has methods get_object() and
set_object().
2021-04-12¶
Calling lino.sphinxcontrib.configure() in a Sphinx conf.py file
now uses the insipid theme
instead of the pydata_sphinx_theme.
2021-04-08¶
Adapted Lino to changes in Django 3.2:
Until now the value of a QuantityField was a Decimal, not a Quantity. The
Quantity class refused to get instantiated, it was just the base class for
Duration and Percentage.
But now the value of a QuantityField is no longer a
Decimal but a Quantity. The only difference between a Quantity and a Decimal is
that a Quantity has a len() in order to satisfy Django when calling
Field.clean().
2021-04-07¶
Started #4085 (A common Sphinx layout for non-tech docs like cg, hg and sr).
2021-04-02¶
The users.MySettings quicklink now comes automatically with the users
plugin (#4075)
The lino.core.actors.Actor.get_default_action method is now being called
when all other standard actions have been bound. Removed the
lino_xl.lib.accounting.Situation table, which was no longer used. The lino.core.plugin.Plugin.get_quicklinks() method can
now yield a dict.
2021-04-01¶
New action lino_xl.lib.contacts.Partner.import_text. This is
not yet fool-proof. An experiment for #4061 and #3895.
New actor attribute Actor.allow_delete. We need it e.g. for
lino.modlib.system.SiteConfig, which, indeed is not
Actor.readonly (because every site manager can edit the
site parameters), but even for a site manager it makes no sense to
delete this record.
2021-03-30¶
lino_xl.lib.phones.ContactDetail now inherits from
lino.mixins.periods.DateRange, i.e.:
added a field
lino_xl.lib.phones.ContactDetail.start_date.we can now filter the contact details that are active in a given date range.
2021-03-23¶
New database model lino_xl.lib.accounting.PaymentMethod.
New plugin lino_xl.lib.shopping.
2021-03-20¶
lino_xl.lib.tickets.Ticket.priority is now an IntegerField. To
migrate existing priorities correctly, simply edit the restore.py of
your pm dump2py snapshot and change one line in the create_tickets_ticket() function:
kw.update(priority=priority) –> kw.update(priority=50-int(priority))
2021-03-08¶
Release to PyPI : welfare, weleup and welcht 21.3.0. Followed by bugfix releases lino, welfare, weleup and welcht 21.3.1
2021-03-06¶
#4007: babelkw now includes
str2kw. This avoids us to get locked by
code that still uses babelkw(). Translators can now add translations for
new languages without having to edit the German, French and Estonian
.po files. Usage: in any existing source code for which you want to
provide new translations, replace babelkw("name", en="foo", de=...) by
babelkw("name", _("foo"), de=...).
2021-03-03¶
Added zh-hant (traditional Chinese) to the list of supported translations for
lino, lino_xl and lino_cosi. Added a demo project
lino_book.projects.cosi4, which uses zh-hant. Increased the
max_length of lino.utils.mldbc.fields.LanguageField from 5 to 7 in
order to support languages like zh-hant. Reviewed the How to contribute translations
page.
Released to PyPI: atelier 1.1.28, lino 21.3.0, lino_xl 21.3.0 and lino_cosi 21.3.0.
2021-02-26¶
Fixed #3993 (session has no ticket).
Added a first series of primeicon icons as Sphinx substitution definitions.
No we can insert the buttons ,
,
,
and
into doc pages. The doctree must use the
lino.sphinxcontrib.logo
extension, and the page must include a file similar to our
/shared/include/defs.rst file.
2021-02-25¶
Miscellaneous bugfixes and changes regarding users of type contributor in Lino Noi.
Release to PyPI : lino 21.2.5, XL 21.2.3, Noi 21.2.0.
2021-02-24¶
Fixed #3986. New methods get_request_detail_action and
lino.core.layouts.Layout.add_datasource() to fix a subtle problem in
Lino Avanti. Also Layout._other_datasources is no longer a
set but a list. The case is covered in
Who can see the detail of an activity?.
Release to PyPI: Lino 21.2.4 and XL 21.2.2
Fixed #3987 (checkdata says ‘SiteConfig’ object has no attribute
‘pupil_guestrole’). The error occurred only when the guest_role of an activity line was empty,
that’s why it slipped through the test suite.
2021-02-23¶
Released Lino 21.2.3 and XL 21.2.1 to PyPI (to fix issues like this one).
2021-02-22¶
Optimizations in lino.modlib.uploads: Added new
plugin options remove_orphaned_files
and max_file_size, and two
data checkers UploadChecker and UploadsFolderChecker.
2021-02-17¶
API change: Rename lino.mixins.Uploadable to
lino.modlib.uploads.mixins.UploadBase.
Fixed a typo bug in renderer_mixin.JsCacheRenderer which caused Lino to
create an empty media directory “upload” (instead of “uploads”) at startup. This
bug might be the cause for missing group write permission of files that were
uploaded to a production site. If you encounter this problem, check whether
your uploads directory has the sticky group bit set.
2021-02-15¶
Optimizations for developers: New django-admin command
demotest increases test coverage. Removed WebIndexTestCase,
which is functionally included in demotest. Miscellaneous cleanup and
optimizations in the test suite. Removed Django 4 deprecation warnings.
Regression danger: lino_react.react.views.ApiElement.post() no longer
passes http.QueryDict(request.body) but request.POST as data to
action_request.
Release to Pypi: lino-21.2.2
2021-02-14¶
Fixed #3968 (extjs combobox doesn’t submit empty value). It is possible that this bugfix reopens #3653 (Learning choosers don’t work in React front end).
2021-02-13¶
Release to PyPI: Lino, XL and Avanti.
Minor bugfixes : SignIn failed when lino.core.site.Site.use_ip_dict was
not True. When lino.modli.memo.PreviewableChecker was called with
–fix, it fixed the problems but didn’t report how many problems were fixed.
Fixed a regression: Insert button was missing in
lino.modlib.comments.CommentsByRFC. All comment table summaries are now
wrapped into html_text,
leading to better text styling under lino.modlib.extjs.
New feature: you can now set a new plugin setting
lino.modlib.comments.Plugin.emotion_range to either “business” (default)
or “social” to select between two alternative sets of emoticons. Lino Avanti
uses the new “social” range, Lino Noi the default “business” range.
Extend WebIndexTestCase to use DemoTestCase.login() instead of
Django’s client force_login(). So now the JavaScript files are being
built for each user type, and a typo bug like AttrDict instance has no
key 'ipdict' (in Lino 21.2.0) would no longer go undetected.
Release to PyPI: Lino and Avanti.
2021-02-12¶
Fixed a bug in lino.modlib.ipdict that caused it to not report when an IP
had been blacklisted.
2021-01-29¶
Fixed #3948: Lino didn’t behave correctly when (a) no weekday at all
was selected (which for Lino means “any weekday”), and (b) caused an internal
server error when no recursion rule was found. This was in the
get_next_suggested_date() of a lino.modlib.system.RecurrenceSet.
Fixed #3946: When a partner is lino_xl.lib.lists.Member of
some list, this is no longer a reason to refuse deleting the partner. When you
confirm to delete such a partner, the list memberships now get deleted as well
(in cascade).
The title of the lino_xl.lib.contacts.RolesByPerson slave panel was
“Contact for of (name)”, not very helpful. Now it is “(name) is contact person
for”. Added a custom details_of_master_template. Note that the custom
label, “Contact for” is also needed for situations where the master is
not known.
2021-01-17¶
The ipdict.Connections table has been reimplemented as
lino.modlib.users.Sessions. It now uses sessions
and therefore works also on sites with very many users. It also features a
“Kill” action to manually delete individual actions. ipdict is no longer used to show the list of active user
sessions. The ipdict approach was not suitable for sites with very many users
because it stores every connection in an in-memory dict. ipdict is used only
for detecting brute force attacks. It now removes every entry after a successful
authentication.
Internal changes: lino.core.auth.middleware.DeviceTypeMiddleware has
been merged into lino.core.auth.middleware.WithUserMiddleware because
it was inefficient to parse the request twice. BoundAction has now a
__str__() method, which is used by user warnings “No permission to run X”.
Until now these warnings were irritating because the action name wasn’t shown in
the browser.
2021-01-16¶
New method lino.modlib.ipdict.Plugin.pop_ip_record() removes an (ip
address, username) pair from the registry, and Lino uses this when receiving the
user_logged_out signal.
2021-01-15¶
Continued on #1162 (A CMS using Lino). The
lino_book.projects.cms project now has some improvement. But it is not
finished. Internal changes: lino.core.dashboard.DashboardItem.render() now
yields html chunks instead of etree elements. show_dashboard() and
show_menu() are now defined in lino.api.doctest, no longer as
methods of a request. The function lino.api.doctest.rst2menu() is now used
in More about the main page.
The menu of a multilingual site now shows the languages in the main menu, and users can dynamically switch to another language than the on defined in their preferences.
2021-01-08¶
Fix #3921 (Journal entry mixes up debit and credit when creating the movements). Fix #3924 (auto_compute_amount does not always work as expected).
Release to PyPI: XL 21.1.6.
2021-01-07¶
Release to PyPI: Lino 21.1.1.
Optimizations: #3919 (No suggestions on clearable general account)
FinancialVoucherItem.account_changed() didn’t collect suggestions after
entering a clearable account.
#3920 (Lino registers the voucher even when exception happens).
Release to PyPI: Lino 21.1.2 and XL 21.1.5.
2021-01-06¶
Release to PyPI: Lino Extensions Library 21.1.3.
Fix some bugs in lino_xl.lib.finan : The choicelist for
FinancialVoucherItem.match didn’t respect the suggest_future_vouchers settings
and therefore always showed all matches, including those that happen in the
future and won’t get satisfied. Visible result: you select one of these matches,
but Lino then sets the field to blank. After selecting a partner, Lino didn’t
suggest anything (because amount was 0.00, not None).
FillSuggestionsToVoucherItem caused an additional item to be created.
Release to PyPI: Lino Extensions Library 21.1.4 and Lino 21.1.0
Fix #3917 (Lino forgets the journal after saving a bank statement).
2021-01-05¶
Miscellaneous minor optimizations for entering bank statements.
finan.DatedFinancialVoucherItem now also fills the date field from
last_item_date. Trying to fix surprizing behaviour after
FillSuggestionsToVoucherItem. Ledger movements in
accounting.MovementsByVoucher are now ordered by seqno, i.e. by
their “natural” order of creation.
Fix a typo bug in lino_xl.lib.cal that caused Lino to no show anything in
cal.EntriesByGuest although the person was present in some calendar entry.
2021-01-03¶
Add new item vatless to lino_xl.lib.vat.VatClasses.
Fix #3909. After editing the entry_date of the last voucher of the journal we don’t want its number to increase.
2021-01-02¶
Fix #3906 (active_fields are disturbing for city and zip_code). In
lino_xl.lib.countries.CountryCity the fields city and zip_code are no
longer active_fields.
Fix #3905 (Purchase invoice from private person suggests VAT). This
was a bug in lino_xl.lib.eevat and lino_xl.lib.bevat.
Fix #3907 (Cannot enter into “Expense” column of bank statement)
Release to PyPI: Lino Extensions Library (2 versions)
2021-01-01¶
Optimized column layout of lino_xl.lib.trading.InvoicesByJournal.
Release to PyPI: Lino Extensions Library.