trytond 8.2.1__tar.gz → 8.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {trytond-8.2.1 → trytond-8.2.2}/PKG-INFO +1 -1
- {trytond-8.2.1 → trytond-8.2.2}/trytond/__init__.py +1 -1
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/cron.py +1 -1
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/model.py +9 -6
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/resource.py +1 -1
- {trytond-8.2.1 → trytond-8.2.2}/trytond/pool.py +1 -1
- {trytond-8.2.1 → trytond-8.2.2}/trytond/report/report.py +9 -9
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/resource.py +3 -3
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_wizard.py +73 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/wizard.py +5 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/wizard.xml +6 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/wizard/wizard.py +20 -4
- {trytond-8.2.1 → trytond-8.2.2}/.hgignore +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/COPYRIGHT +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/LICENSE +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/hatch_build.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/pyproject.toml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/_safe_genshi.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/admin.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/application.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/__init__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/database.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/postgresql/__init__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/postgresql/database.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/postgresql/init.sql +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/postgresql/table.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/sqlite/__init__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/sqlite/database.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/sqlite/init.sql +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/sqlite/table.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/table.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/bus.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/cache.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/cli/__init__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/cli/__main__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/cli/admin.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/cli/console.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/cli/cron.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/cli/stat.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/cli/worker.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/commandline.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/config.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/console.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/const.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/convert.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/cron.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/exceptions.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/filestore.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/i18n.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/__init__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/action.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/action.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/attachment.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/attachment.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/avatar.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/cache.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/calendar_.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/calendar_.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/chat.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/chat.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/configuration.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/cron.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/date.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/email.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/email_.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/error.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/error.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/exceptions.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/export.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/export.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/filestore.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/filestore.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/fonts/LICENSE +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/fonts/karla.ttf +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/lang.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/lang.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/bg.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/ca.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/cs.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/de.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/es.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/es_419.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/et.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/fa.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/fi.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/fr.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/hu.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/id.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/it.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/lo.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/lt.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/nl.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/pl.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/pt.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/ro.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/ru.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/sl.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/tr.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/uk.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/zh_CN.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/message.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/message.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/model.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/module.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/module.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/note.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/note.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/queue.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/queue_.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/routes.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/rule.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/rule.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/sequence.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/sequence.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/session.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/translation.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/translation.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/trigger.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/trigger.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/tryton.cfg +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/__init__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/board.rnc +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/calendar.rnc +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/form.rnc +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/graph.rnc +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icon.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icon.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/LICENSE +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-board.svg +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-calendar.svg +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-folder.svg +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-form.svg +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-graph.svg +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-list-form.svg +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-list.svg +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-settings.svg +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-tree.svg +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/menu.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/menu.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/tree.rnc +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/ui.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/view.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/view.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_act_window_domain_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_act_window_domain_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_act_window_domain_list2.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_act_window_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_act_window_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_act_window_view_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_act_window_view_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_act_window_view_list2.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_keyword_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_keyword_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_report_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_report_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_url_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_url_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_wizard_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_wizard_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/attachment_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/attachment_form_preview.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/attachment_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/chat_channel_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/chat_channel_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/chat_follower_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/chat_follower_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/chat_message_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/chat_message_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/cron_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/cron_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/cron_log_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/cron_log_graph.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/cron_log_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/email_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/email_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/email_template_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/email_template_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/error_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/error_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/export_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/export_line_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/export_line_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/export_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/icon_view_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/icon_view_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/lang_config_start_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/lang_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/lang_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/message_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/message_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_access_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_access_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_button_click_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_button_click_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_button_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_button_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_button_rule_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_button_rule_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_field_access_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_field_access_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_field_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_field_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_log_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_log_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_print_model_graph_start_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_activate_upgrade_done_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_activate_upgrade_start_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_config_start_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_config_wizard_done_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_config_wizard_first_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_config_wizard_item_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_config_wizard_other_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_dependency_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_dependency_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/note_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/note_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/rule_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/rule_group_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/rule_group_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/rule_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/sequence_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/sequence_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/sequence_type_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/sequence_type_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_clean_start_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_clean_succeed_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_export_result_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_export_start_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_set_start_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_set_succeed_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_update_start_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/trigger_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/trigger_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_menu_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_menu_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_menu_tree.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_list_extension.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_search_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_search_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_tree_optional_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_tree_optional_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_tree_state_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_tree_state_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_tree_width_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_tree_width_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/__init__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/active.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/avatar.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/chat.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/descriptors.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/dictschema.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/digits.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/exceptions.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/__init__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/binary.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/boolean.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/char.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/date.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/dict.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/field.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/float.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/fmany2one.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/function.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/integer.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/many2many.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/many2one.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/multiselection.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/numeric.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/one2many.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/one2one.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/reference.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/selection.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/text.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/match.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/model.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/modelsingleton.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/modelsql.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/modelstorage.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/modelview.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/multivalue.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/order.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/symbol.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/tree.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/union.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/model/workflow.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/modules/__init__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/protocols/__init__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/protocols/dispatcher.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/protocols/jsonrpc.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/protocols/rest.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/protocols/wrappers.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/protocols/xmlrpc.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/pyson.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/report/__init__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/__init__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/email_reset_password.html +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/exceptions.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/group.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/group.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/ir.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/bg.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/ca.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/cs.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/de.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/es.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/es_419.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/et.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/fa.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/fi.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/fr.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/hu.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/id.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/it.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/lo.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/lt.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/nl.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/pl.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/pt.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/ro.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/ru.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/sl.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/tr.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/uk.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/zh_CN.po +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/message.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/notification.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/notification.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/res.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/routes.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/tryton.cfg +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/user.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/user.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/group_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/group_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/notification_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/notification_form_admin.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/notification_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/user_application_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/user_application_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/user_config_start_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/user_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/user_form_preferences.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/user_list.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/user_warning_form.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/user_warning_tree.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/routing.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/rpc.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/security.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/sendmail.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/sql/__init__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/sql/functions.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/sql/operators.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/status.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/__init__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/access.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/chat.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/copy_.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/export_data.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_binary.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_boolean.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_char.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_context.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_date.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_datetime.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_dict.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_float.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_fmany2one.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_function.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_function.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_integer.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_many2many.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_many2one.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_multiselection.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_numeric.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_one2many.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_one2one.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_reference.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_selection.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_text.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_time.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_timedelta.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/forbidden.txt +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/history.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/import_data.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/message.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/mixin.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/model.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/model_log.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/modelsql.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/modelstorage.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/modelview.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/modelview.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/mptt.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/multivalue.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/path.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/report.mjml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/report.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/report.txt +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/report.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/routing.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/rule.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/sequence.xml +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_access.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_backend.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_bus.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_cache.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_chat.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_copy.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_descriptors.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_exportdata.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_binary.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_boolean.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_char.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_context.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_date.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_datetime.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_depends.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_dict.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_float.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_fmany2one.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_function.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_integer.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_many2many.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_many2one.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_multiselection.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_numeric.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_one2many.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_one2one.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_reference.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_selection.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_text.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_time.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_timedelta.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_filestore.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_genshi.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_history.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_i18n.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_importdata.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_ir.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_mixins.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_model.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_model_index.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_model_log.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_model_match.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_modelsingleton.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_modelsql.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_modelstorage.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_modelview.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_module_register.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_mptt.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_multivalue.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_order.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_path.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_protocols.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_pyson.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_report.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_res.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_resource.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_rest.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_routing.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_rpc.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_rule.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_security.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_sendmail.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_sequence.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_tools.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_transaction.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_tree.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_trigger.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_tryton.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_union.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_user.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_workflow.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_wsgi.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/tools.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/tree.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/trigger.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/tryton.cfg +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/workflow.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/__init__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/barcode.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/chart.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/decimal_.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/domain_inversion.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/email_.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/gevent.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/immutabledict.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/logging.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/misc.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/multiprocessing.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/qrcode.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/singleton.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/string_.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/timezone.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/transaction.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/tryton.rnc +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/url.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/wizard/__init__.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/worker.py +0 -0
- {trytond-8.2.1 → trytond-8.2.2}/trytond/wsgi.py +0 -0
|
@@ -36,7 +36,7 @@ def str2bigint(s):
|
|
|
36
36
|
class Cron(DeactivableMixin, ModelSQL, ModelView):
|
|
37
37
|
__name__ = "ir.cron"
|
|
38
38
|
_states = {
|
|
39
|
-
'editable': Eval('running', False),
|
|
39
|
+
'editable': ~Eval('running', False),
|
|
40
40
|
}
|
|
41
41
|
interval_number = fields.Integer(
|
|
42
42
|
"Interval Number", required=True, states=_states)
|
|
@@ -166,15 +166,18 @@ class Model(
|
|
|
166
166
|
and model._on_change_notify_depends}
|
|
167
167
|
|
|
168
168
|
@classmethod
|
|
169
|
-
def get_name_items(cls, classes=None):
|
|
169
|
+
def get_name_items(cls, classes=None, *other_classes):
|
|
170
170
|
"Return a list of couple mapping models to names"
|
|
171
171
|
pool = Pool()
|
|
172
|
-
key = 'items', str(classes)
|
|
172
|
+
key = 'items', str(classes), str(other_classes)
|
|
173
173
|
items = cls._get_names_cache.get(key)
|
|
174
174
|
if items is None:
|
|
175
175
|
models = cls.search([])
|
|
176
176
|
items = ((m.name, m.string) for m in models)
|
|
177
|
+
all_classes = list(other_classes)
|
|
177
178
|
if classes:
|
|
179
|
+
all_classes.append(classes)
|
|
180
|
+
if all_classes:
|
|
178
181
|
def pool_get(model):
|
|
179
182
|
# During update existing model may not yet be in the pool
|
|
180
183
|
try:
|
|
@@ -183,17 +186,17 @@ class Model(
|
|
|
183
186
|
return object
|
|
184
187
|
items = (
|
|
185
188
|
(m, n) for m, n in items
|
|
186
|
-
if issubclass(pool_get(m),
|
|
189
|
+
if all(issubclass(pool_get(m), k) for k in all_classes))
|
|
187
190
|
items = cls._get_names_cache.set(key, list(items))
|
|
188
191
|
return list(items)
|
|
189
192
|
|
|
190
193
|
@classmethod
|
|
191
|
-
def get_names(cls, classes=None):
|
|
194
|
+
def get_names(cls, classes=None, *other_classes):
|
|
192
195
|
"Return a dictionary mapping models to names"
|
|
193
|
-
key = 'dict', str(classes)
|
|
196
|
+
key = 'dict', str(classes), str(other_classes)
|
|
194
197
|
dict_ = cls._get_names_cache.get(key)
|
|
195
198
|
if dict_ is None:
|
|
196
|
-
dict_ = dict(cls.get_name_items(classes=classes))
|
|
199
|
+
dict_ = dict(cls.get_name_items(classes=classes, *other_classes))
|
|
197
200
|
dict_ = cls._get_names_cache.set(key, dict_)
|
|
198
201
|
return dict_
|
|
199
202
|
|
|
@@ -49,7 +49,7 @@ class ResourceAccessMixin(ModelStorage):
|
|
|
49
49
|
pool = Pool()
|
|
50
50
|
Model = pool.get('ir.model')
|
|
51
51
|
ModelAccess = pool.get('ir.model.access')
|
|
52
|
-
models = Model.get_name_items((ModelStorage, ModelView))
|
|
52
|
+
models = Model.get_name_items((ModelStorage,), (ModelView,))
|
|
53
53
|
if Transaction().check_access:
|
|
54
54
|
access = ModelAccess.get_access([m for m, _ in models])
|
|
55
55
|
models = [(m, n) for m, n in models if access[m]['read']]
|
|
@@ -452,15 +452,15 @@ class Report(URLMixin, PoolBase):
|
|
|
452
452
|
'--convert-to "%(output_extension)s" '
|
|
453
453
|
'--outdir "%(directory)s" '
|
|
454
454
|
'"%(input_path)s"')
|
|
455
|
-
args = map(lambda s: s % {
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
455
|
+
args = list(map(lambda s: s % {
|
|
456
|
+
'directory': directory,
|
|
457
|
+
'input_format': input_format,
|
|
458
|
+
'input_extension': input_extension,
|
|
459
|
+
'input_path': input_path,
|
|
460
|
+
'output_format': output_format,
|
|
461
|
+
'output_extension': output_extension,
|
|
462
|
+
'output_path': output_path,
|
|
463
|
+
}, shlex.split(cmd)))
|
|
464
464
|
for count in range(retry, -1, -1):
|
|
465
465
|
if count != retry:
|
|
466
466
|
time.sleep(0.02 * (retry - count))
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
2
2
|
# this repository contains the full copyright notices and license terms.
|
|
3
3
|
from trytond.ir.note import NoteCopyMixin
|
|
4
|
-
from trytond.model import ModelSQL
|
|
4
|
+
from trytond.model import ModelSQL, ModelView
|
|
5
5
|
from trytond.pool import Pool
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
class TestResource(ModelSQL, NoteCopyMixin):
|
|
8
|
+
class TestResource(ModelSQL, ModelView, NoteCopyMixin):
|
|
9
9
|
__name__ = 'test.resource'
|
|
10
10
|
|
|
11
11
|
@classmethod
|
|
@@ -13,7 +13,7 @@ class TestResource(ModelSQL, NoteCopyMixin):
|
|
|
13
13
|
return {'test.resource.other'}
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
class TestResourceOther(ModelSQL):
|
|
16
|
+
class TestResourceOther(ModelSQL, ModelView):
|
|
17
17
|
__name__ = 'test.resource.other'
|
|
18
18
|
|
|
19
19
|
|
|
@@ -30,6 +30,22 @@ class WizardTestCase(DBTestCase):
|
|
|
30
30
|
session_id, _, _ = Wizard.create()
|
|
31
31
|
Wizard.delete(session_id)
|
|
32
32
|
|
|
33
|
+
@with_transaction()
|
|
34
|
+
def test_delete_different_user(self):
|
|
35
|
+
"Delete session from a different user"
|
|
36
|
+
pool = Pool()
|
|
37
|
+
Wizard = pool.get('test.test_wizard', type='wizard')
|
|
38
|
+
User = pool.get('res.user')
|
|
39
|
+
|
|
40
|
+
user = User(login='foo')
|
|
41
|
+
user.save()
|
|
42
|
+
|
|
43
|
+
session_id, _, _ = Wizard.create()
|
|
44
|
+
|
|
45
|
+
with Transaction().set_user(user.id):
|
|
46
|
+
with self.assertRaises(AccessError):
|
|
47
|
+
Wizard.delete(session_id)
|
|
48
|
+
|
|
33
49
|
@with_transaction()
|
|
34
50
|
def test_session(self):
|
|
35
51
|
'Session Wizard'
|
|
@@ -89,6 +105,22 @@ class WizardTestCase(DBTestCase):
|
|
|
89
105
|
with self.assertRaises(AccessError):
|
|
90
106
|
session_id, start_state, end_state = Wizard.create()
|
|
91
107
|
|
|
108
|
+
@with_transaction()
|
|
109
|
+
def test_session_different_user(self):
|
|
110
|
+
"Use session from a different user"
|
|
111
|
+
pool = Pool()
|
|
112
|
+
Wizard = pool.get('test.test_wizard', type='wizard')
|
|
113
|
+
User = pool.get('res.user')
|
|
114
|
+
|
|
115
|
+
user = User(login='foo')
|
|
116
|
+
user.save()
|
|
117
|
+
|
|
118
|
+
session_id, _, _ = Wizard.create()
|
|
119
|
+
|
|
120
|
+
with Transaction().set_user(user.id):
|
|
121
|
+
with self.assertRaises(AccessError):
|
|
122
|
+
Wizard(session_id)
|
|
123
|
+
|
|
92
124
|
@with_transaction()
|
|
93
125
|
def test_execute(self):
|
|
94
126
|
'Execute Wizard'
|
|
@@ -204,3 +236,44 @@ class WizardTestCase(DBTestCase):
|
|
|
204
236
|
with Transaction().set_context(
|
|
205
237
|
active_model='test.test_wizard.start'):
|
|
206
238
|
Wizard.execute(session_id, {}, start_state)
|
|
239
|
+
|
|
240
|
+
@with_transaction(context={'_check_access': True})
|
|
241
|
+
def test_execute_without_model(self):
|
|
242
|
+
"Execute wizard without model"
|
|
243
|
+
pool = Pool()
|
|
244
|
+
Wizard = pool.get('test.test_wizard_no_model', type='wizard')
|
|
245
|
+
User = pool.get('res.user')
|
|
246
|
+
|
|
247
|
+
user = User(login='foo')
|
|
248
|
+
user.save()
|
|
249
|
+
session_id, start_state, end_state = Wizard.create()
|
|
250
|
+
|
|
251
|
+
with Transaction().set_user(user.id):
|
|
252
|
+
with self.assertRaises(AccessError):
|
|
253
|
+
Wizard.execute(session_id, {}, start_state)
|
|
254
|
+
|
|
255
|
+
@with_transaction(context={'_check_access': True})
|
|
256
|
+
def test_execute_without_model_with_group(self):
|
|
257
|
+
"Execute wizard without model and groups"
|
|
258
|
+
pool = Pool()
|
|
259
|
+
Wizard = pool.get('test.test_wizard_no_model', type='wizard')
|
|
260
|
+
User = pool.get('res.user')
|
|
261
|
+
Group = pool.get('res.group')
|
|
262
|
+
|
|
263
|
+
user = User(login='foo', groups=[Group(name="Group")])
|
|
264
|
+
user.save()
|
|
265
|
+
session_id, start_state, end_state = Wizard.create()
|
|
266
|
+
|
|
267
|
+
with Transaction().set_user(user.id):
|
|
268
|
+
with self.assertRaises(AccessError):
|
|
269
|
+
Wizard.execute(session_id, {}, start_state)
|
|
270
|
+
|
|
271
|
+
@with_transaction(context={'_check_access': True})
|
|
272
|
+
def test_execute_without_model_with_admin(self):
|
|
273
|
+
"Execute wizard without model"
|
|
274
|
+
pool = Pool()
|
|
275
|
+
Wizard = pool.get('test.test_wizard_no_model', type='wizard')
|
|
276
|
+
|
|
277
|
+
session_id, start_state, end_state = Wizard.create()
|
|
278
|
+
|
|
279
|
+
Wizard.execute(session_id, {}, start_state)
|
|
@@ -47,10 +47,15 @@ class TestWizard(Wizard):
|
|
|
47
47
|
return 'end'
|
|
48
48
|
|
|
49
49
|
|
|
50
|
+
class TestWizardNoModel(TestWizard):
|
|
51
|
+
__name__ = 'test.test_wizard_no_model'
|
|
52
|
+
|
|
53
|
+
|
|
50
54
|
def register(module):
|
|
51
55
|
Pool.register(
|
|
52
56
|
TestWizardStart,
|
|
53
57
|
module=module, type_='model')
|
|
54
58
|
Pool.register(
|
|
55
59
|
TestWizard,
|
|
60
|
+
TestWizardNoModel,
|
|
56
61
|
module=module, type_='wizard')
|
|
@@ -21,5 +21,11 @@ this repository contains the full copyright notices and license terms. -->
|
|
|
21
21
|
<field name="wiz_name">test.test_wizard</field>
|
|
22
22
|
<field name="model">test.access</field>
|
|
23
23
|
</record>
|
|
24
|
+
|
|
25
|
+
<record model="ir.action.wizard" id="test_wizard_no_model">
|
|
26
|
+
<field name="name">Test Wizard</field>
|
|
27
|
+
<field name="wiz_name">test.test_wizard_no_model</field>
|
|
28
|
+
<field name="model" eval="None"/>
|
|
29
|
+
</record>
|
|
24
30
|
</data>
|
|
25
31
|
</tryton>
|
|
@@ -264,7 +264,7 @@ class Wizard(URLMixin, PoolBase):
|
|
|
264
264
|
ModelAccess.check(model, 'read')
|
|
265
265
|
models = ActionWizard.get_models(
|
|
266
266
|
cls.__name__, action_id=context.get('action_id'))
|
|
267
|
-
if
|
|
267
|
+
if models and (not model or model not in models):
|
|
268
268
|
groups = Group.browse(User.get_groups())
|
|
269
269
|
raise AccessError(
|
|
270
270
|
gettext(
|
|
@@ -294,6 +294,12 @@ class Wizard(URLMixin, PoolBase):
|
|
|
294
294
|
):
|
|
295
295
|
ModelAccess.check(model, 'write')
|
|
296
296
|
|
|
297
|
+
if not models and not wizard_groups:
|
|
298
|
+
raise AccessError(
|
|
299
|
+
gettext(
|
|
300
|
+
'ir.msg_access_wizard_error',
|
|
301
|
+
wizard=cls.__name__))
|
|
302
|
+
|
|
297
303
|
if model:
|
|
298
304
|
ids = context.get('active_ids') or []
|
|
299
305
|
id_ = context.get('active_id')
|
|
@@ -312,14 +318,20 @@ class Wizard(URLMixin, PoolBase):
|
|
|
312
318
|
@classmethod
|
|
313
319
|
def delete(cls, session_id):
|
|
314
320
|
"Delete the session"
|
|
315
|
-
|
|
321
|
+
pool = Pool()
|
|
322
|
+
Session = pool.get('ir.session.wizard')
|
|
323
|
+
transaction = Transaction()
|
|
324
|
+
session = Session(session_id)
|
|
325
|
+
if session.create_uid.id != transaction.user:
|
|
326
|
+
raise AccessError(
|
|
327
|
+
gettext('ir.msg_access_wizard_error', wizard=cls.__name__))
|
|
316
328
|
end = getattr(cls, cls.end_state, None)
|
|
317
329
|
if end:
|
|
318
330
|
wizard = cls(session_id)
|
|
319
331
|
action = end(wizard)
|
|
320
332
|
else:
|
|
321
333
|
action = None
|
|
322
|
-
Session.delete([
|
|
334
|
+
Session.delete([session])
|
|
323
335
|
return action
|
|
324
336
|
|
|
325
337
|
@classmethod
|
|
@@ -401,8 +413,12 @@ class Wizard(URLMixin, PoolBase):
|
|
|
401
413
|
def __init__(self, session_id):
|
|
402
414
|
pool = Pool()
|
|
403
415
|
Session = pool.get('ir.session.wizard')
|
|
404
|
-
|
|
416
|
+
transaction = Transaction()
|
|
405
417
|
session = Session(session_id)
|
|
418
|
+
if session.create_uid.id != transaction.user:
|
|
419
|
+
raise AccessError(
|
|
420
|
+
gettext('ir.msg_access_wizard_error', wizard=self.__name__))
|
|
421
|
+
self._session_id = session.id
|
|
406
422
|
data = defaultdict(dict)
|
|
407
423
|
data.update(json.loads(session.data, object_hook=JSONDecoder()))
|
|
408
424
|
for state_name, state in self.states.items():
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|