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.
Files changed (510) hide show
  1. {trytond-8.2.1 → trytond-8.2.2}/PKG-INFO +1 -1
  2. {trytond-8.2.1 → trytond-8.2.2}/trytond/__init__.py +1 -1
  3. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/cron.py +1 -1
  4. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/model.py +9 -6
  5. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/resource.py +1 -1
  6. {trytond-8.2.1 → trytond-8.2.2}/trytond/pool.py +1 -1
  7. {trytond-8.2.1 → trytond-8.2.2}/trytond/report/report.py +9 -9
  8. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/resource.py +3 -3
  9. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_wizard.py +73 -0
  10. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/wizard.py +5 -0
  11. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/wizard.xml +6 -0
  12. {trytond-8.2.1 → trytond-8.2.2}/trytond/wizard/wizard.py +20 -4
  13. {trytond-8.2.1 → trytond-8.2.2}/.hgignore +0 -0
  14. {trytond-8.2.1 → trytond-8.2.2}/COPYRIGHT +0 -0
  15. {trytond-8.2.1 → trytond-8.2.2}/LICENSE +0 -0
  16. {trytond-8.2.1 → trytond-8.2.2}/hatch_build.py +0 -0
  17. {trytond-8.2.1 → trytond-8.2.2}/pyproject.toml +0 -0
  18. {trytond-8.2.1 → trytond-8.2.2}/trytond/_safe_genshi.py +0 -0
  19. {trytond-8.2.1 → trytond-8.2.2}/trytond/admin.py +0 -0
  20. {trytond-8.2.1 → trytond-8.2.2}/trytond/application.py +0 -0
  21. {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/__init__.py +0 -0
  22. {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/database.py +0 -0
  23. {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/postgresql/__init__.py +0 -0
  24. {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/postgresql/database.py +0 -0
  25. {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/postgresql/init.sql +0 -0
  26. {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/postgresql/table.py +0 -0
  27. {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/sqlite/__init__.py +0 -0
  28. {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/sqlite/database.py +0 -0
  29. {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/sqlite/init.sql +0 -0
  30. {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/sqlite/table.py +0 -0
  31. {trytond-8.2.1 → trytond-8.2.2}/trytond/backend/table.py +0 -0
  32. {trytond-8.2.1 → trytond-8.2.2}/trytond/bus.py +0 -0
  33. {trytond-8.2.1 → trytond-8.2.2}/trytond/cache.py +0 -0
  34. {trytond-8.2.1 → trytond-8.2.2}/trytond/cli/__init__.py +0 -0
  35. {trytond-8.2.1 → trytond-8.2.2}/trytond/cli/__main__.py +0 -0
  36. {trytond-8.2.1 → trytond-8.2.2}/trytond/cli/admin.py +0 -0
  37. {trytond-8.2.1 → trytond-8.2.2}/trytond/cli/console.py +0 -0
  38. {trytond-8.2.1 → trytond-8.2.2}/trytond/cli/cron.py +0 -0
  39. {trytond-8.2.1 → trytond-8.2.2}/trytond/cli/stat.py +0 -0
  40. {trytond-8.2.1 → trytond-8.2.2}/trytond/cli/worker.py +0 -0
  41. {trytond-8.2.1 → trytond-8.2.2}/trytond/commandline.py +0 -0
  42. {trytond-8.2.1 → trytond-8.2.2}/trytond/config.py +0 -0
  43. {trytond-8.2.1 → trytond-8.2.2}/trytond/console.py +0 -0
  44. {trytond-8.2.1 → trytond-8.2.2}/trytond/const.py +0 -0
  45. {trytond-8.2.1 → trytond-8.2.2}/trytond/convert.py +0 -0
  46. {trytond-8.2.1 → trytond-8.2.2}/trytond/cron.py +0 -0
  47. {trytond-8.2.1 → trytond-8.2.2}/trytond/exceptions.py +0 -0
  48. {trytond-8.2.1 → trytond-8.2.2}/trytond/filestore.py +0 -0
  49. {trytond-8.2.1 → trytond-8.2.2}/trytond/i18n.py +0 -0
  50. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/__init__.py +0 -0
  51. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/action.py +0 -0
  52. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/action.xml +0 -0
  53. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/attachment.py +0 -0
  54. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/attachment.xml +0 -0
  55. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/avatar.py +0 -0
  56. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/cache.py +0 -0
  57. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/calendar_.py +0 -0
  58. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/calendar_.xml +0 -0
  59. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/chat.py +0 -0
  60. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/chat.xml +0 -0
  61. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/configuration.py +0 -0
  62. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/cron.xml +0 -0
  63. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/date.py +0 -0
  64. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/email.xml +0 -0
  65. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/email_.py +0 -0
  66. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/error.py +0 -0
  67. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/error.xml +0 -0
  68. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/exceptions.py +0 -0
  69. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/export.py +0 -0
  70. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/export.xml +0 -0
  71. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/filestore.py +0 -0
  72. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/filestore.xml +0 -0
  73. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/fonts/LICENSE +0 -0
  74. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/fonts/karla.ttf +0 -0
  75. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/lang.py +0 -0
  76. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/lang.xml +0 -0
  77. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/bg.po +0 -0
  78. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/ca.po +0 -0
  79. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/cs.po +0 -0
  80. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/de.po +0 -0
  81. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/es.po +0 -0
  82. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/es_419.po +0 -0
  83. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/et.po +0 -0
  84. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/fa.po +0 -0
  85. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/fi.po +0 -0
  86. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/fr.po +0 -0
  87. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/hu.po +0 -0
  88. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/id.po +0 -0
  89. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/it.po +0 -0
  90. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/lo.po +0 -0
  91. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/lt.po +0 -0
  92. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/nl.po +0 -0
  93. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/pl.po +0 -0
  94. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/pt.po +0 -0
  95. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/ro.po +0 -0
  96. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/ru.po +0 -0
  97. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/sl.po +0 -0
  98. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/tr.po +0 -0
  99. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/uk.po +0 -0
  100. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/locale/zh_CN.po +0 -0
  101. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/message.py +0 -0
  102. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/message.xml +0 -0
  103. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/model.xml +0 -0
  104. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/module.py +0 -0
  105. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/module.xml +0 -0
  106. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/note.py +0 -0
  107. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/note.xml +0 -0
  108. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/queue.xml +0 -0
  109. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/queue_.py +0 -0
  110. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/routes.py +0 -0
  111. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/rule.py +0 -0
  112. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/rule.xml +0 -0
  113. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/sequence.py +0 -0
  114. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/sequence.xml +0 -0
  115. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/session.py +0 -0
  116. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/translation.py +0 -0
  117. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/translation.xml +0 -0
  118. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/trigger.py +0 -0
  119. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/trigger.xml +0 -0
  120. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/tryton.cfg +0 -0
  121. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/__init__.py +0 -0
  122. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/board.rnc +0 -0
  123. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/calendar.rnc +0 -0
  124. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/form.rnc +0 -0
  125. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/graph.rnc +0 -0
  126. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icon.py +0 -0
  127. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icon.xml +0 -0
  128. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/LICENSE +0 -0
  129. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-board.svg +0 -0
  130. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-calendar.svg +0 -0
  131. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-folder.svg +0 -0
  132. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-form.svg +0 -0
  133. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-graph.svg +0 -0
  134. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-list-form.svg +0 -0
  135. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-list.svg +0 -0
  136. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-settings.svg +0 -0
  137. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/icons/tryton-tree.svg +0 -0
  138. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/menu.py +0 -0
  139. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/menu.xml +0 -0
  140. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/tree.rnc +0 -0
  141. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/ui.xml +0 -0
  142. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/view.py +0 -0
  143. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/ui/view.xml +0 -0
  144. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_act_window_domain_form.xml +0 -0
  145. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_act_window_domain_list.xml +0 -0
  146. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_act_window_domain_list2.xml +0 -0
  147. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_act_window_form.xml +0 -0
  148. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_act_window_list.xml +0 -0
  149. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_act_window_view_form.xml +0 -0
  150. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_act_window_view_list.xml +0 -0
  151. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_act_window_view_list2.xml +0 -0
  152. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_form.xml +0 -0
  153. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_keyword_form.xml +0 -0
  154. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_keyword_list.xml +0 -0
  155. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_list.xml +0 -0
  156. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_report_form.xml +0 -0
  157. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_report_list.xml +0 -0
  158. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_url_form.xml +0 -0
  159. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_url_list.xml +0 -0
  160. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_wizard_form.xml +0 -0
  161. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/action_wizard_list.xml +0 -0
  162. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/attachment_form.xml +0 -0
  163. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/attachment_form_preview.xml +0 -0
  164. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/attachment_list.xml +0 -0
  165. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/chat_channel_form.xml +0 -0
  166. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/chat_channel_list.xml +0 -0
  167. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/chat_follower_form.xml +0 -0
  168. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/chat_follower_list.xml +0 -0
  169. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/chat_message_form.xml +0 -0
  170. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/chat_message_list.xml +0 -0
  171. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/cron_form.xml +0 -0
  172. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/cron_list.xml +0 -0
  173. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/cron_log_form.xml +0 -0
  174. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/cron_log_graph.xml +0 -0
  175. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/cron_log_list.xml +0 -0
  176. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/email_form.xml +0 -0
  177. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/email_list.xml +0 -0
  178. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/email_template_form.xml +0 -0
  179. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/email_template_list.xml +0 -0
  180. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/error_form.xml +0 -0
  181. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/error_list.xml +0 -0
  182. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/export_form.xml +0 -0
  183. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/export_line_form.xml +0 -0
  184. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/export_line_list.xml +0 -0
  185. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/export_list.xml +0 -0
  186. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/icon_view_form.xml +0 -0
  187. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/icon_view_list.xml +0 -0
  188. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/lang_config_start_form.xml +0 -0
  189. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/lang_form.xml +0 -0
  190. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/lang_list.xml +0 -0
  191. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/message_form.xml +0 -0
  192. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/message_list.xml +0 -0
  193. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_access_form.xml +0 -0
  194. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_access_list.xml +0 -0
  195. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_button_click_form.xml +0 -0
  196. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_button_click_list.xml +0 -0
  197. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_button_form.xml +0 -0
  198. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_button_list.xml +0 -0
  199. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_button_rule_form.xml +0 -0
  200. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_button_rule_list.xml +0 -0
  201. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_field_access_form.xml +0 -0
  202. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_field_access_list.xml +0 -0
  203. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_field_form.xml +0 -0
  204. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_field_list.xml +0 -0
  205. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_form.xml +0 -0
  206. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_list.xml +0 -0
  207. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_log_form.xml +0 -0
  208. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_log_list.xml +0 -0
  209. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/model_print_model_graph_start_form.xml +0 -0
  210. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_activate_upgrade_done_form.xml +0 -0
  211. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_activate_upgrade_start_form.xml +0 -0
  212. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_config_start_form.xml +0 -0
  213. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_config_wizard_done_form.xml +0 -0
  214. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_config_wizard_first_form.xml +0 -0
  215. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_config_wizard_item_list.xml +0 -0
  216. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_config_wizard_other_form.xml +0 -0
  217. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_dependency_form.xml +0 -0
  218. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_dependency_list.xml +0 -0
  219. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_form.xml +0 -0
  220. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/module_list.xml +0 -0
  221. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/note_form.xml +0 -0
  222. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/note_list.xml +0 -0
  223. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/rule_form.xml +0 -0
  224. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/rule_group_form.xml +0 -0
  225. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/rule_group_list.xml +0 -0
  226. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/rule_list.xml +0 -0
  227. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/sequence_form.xml +0 -0
  228. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/sequence_list.xml +0 -0
  229. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/sequence_type_form.xml +0 -0
  230. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/sequence_type_list.xml +0 -0
  231. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_clean_start_form.xml +0 -0
  232. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_clean_succeed_form.xml +0 -0
  233. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_export_result_form.xml +0 -0
  234. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_export_start_form.xml +0 -0
  235. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_form.xml +0 -0
  236. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_list.xml +0 -0
  237. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_set_start_form.xml +0 -0
  238. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_set_succeed_form.xml +0 -0
  239. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/translation_update_start_form.xml +0 -0
  240. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/trigger_form.xml +0 -0
  241. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/trigger_list.xml +0 -0
  242. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_menu_form.xml +0 -0
  243. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_menu_list.xml +0 -0
  244. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_menu_tree.xml +0 -0
  245. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_form.xml +0 -0
  246. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_list.xml +0 -0
  247. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_list_extension.xml +0 -0
  248. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_search_form.xml +0 -0
  249. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_search_list.xml +0 -0
  250. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_tree_optional_form.xml +0 -0
  251. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_tree_optional_list.xml +0 -0
  252. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_tree_state_form.xml +0 -0
  253. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_tree_state_list.xml +0 -0
  254. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_tree_width_form.xml +0 -0
  255. {trytond-8.2.1 → trytond-8.2.2}/trytond/ir/view/ui_view_tree_width_list.xml +0 -0
  256. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/__init__.py +0 -0
  257. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/active.py +0 -0
  258. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/avatar.py +0 -0
  259. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/chat.py +0 -0
  260. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/descriptors.py +0 -0
  261. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/dictschema.py +0 -0
  262. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/digits.py +0 -0
  263. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/exceptions.py +0 -0
  264. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/__init__.py +0 -0
  265. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/binary.py +0 -0
  266. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/boolean.py +0 -0
  267. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/char.py +0 -0
  268. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/date.py +0 -0
  269. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/dict.py +0 -0
  270. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/field.py +0 -0
  271. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/float.py +0 -0
  272. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/fmany2one.py +0 -0
  273. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/function.py +0 -0
  274. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/integer.py +0 -0
  275. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/many2many.py +0 -0
  276. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/many2one.py +0 -0
  277. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/multiselection.py +0 -0
  278. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/numeric.py +0 -0
  279. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/one2many.py +0 -0
  280. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/one2one.py +0 -0
  281. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/reference.py +0 -0
  282. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/selection.py +0 -0
  283. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/fields/text.py +0 -0
  284. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/match.py +0 -0
  285. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/model.py +0 -0
  286. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/modelsingleton.py +0 -0
  287. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/modelsql.py +0 -0
  288. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/modelstorage.py +0 -0
  289. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/modelview.py +0 -0
  290. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/multivalue.py +0 -0
  291. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/order.py +0 -0
  292. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/symbol.py +0 -0
  293. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/tree.py +0 -0
  294. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/union.py +0 -0
  295. {trytond-8.2.1 → trytond-8.2.2}/trytond/model/workflow.py +0 -0
  296. {trytond-8.2.1 → trytond-8.2.2}/trytond/modules/__init__.py +0 -0
  297. {trytond-8.2.1 → trytond-8.2.2}/trytond/protocols/__init__.py +0 -0
  298. {trytond-8.2.1 → trytond-8.2.2}/trytond/protocols/dispatcher.py +0 -0
  299. {trytond-8.2.1 → trytond-8.2.2}/trytond/protocols/jsonrpc.py +0 -0
  300. {trytond-8.2.1 → trytond-8.2.2}/trytond/protocols/rest.py +0 -0
  301. {trytond-8.2.1 → trytond-8.2.2}/trytond/protocols/wrappers.py +0 -0
  302. {trytond-8.2.1 → trytond-8.2.2}/trytond/protocols/xmlrpc.py +0 -0
  303. {trytond-8.2.1 → trytond-8.2.2}/trytond/pyson.py +0 -0
  304. {trytond-8.2.1 → trytond-8.2.2}/trytond/report/__init__.py +0 -0
  305. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/__init__.py +0 -0
  306. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/email_reset_password.html +0 -0
  307. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/exceptions.py +0 -0
  308. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/group.py +0 -0
  309. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/group.xml +0 -0
  310. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/ir.py +0 -0
  311. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/bg.po +0 -0
  312. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/ca.po +0 -0
  313. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/cs.po +0 -0
  314. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/de.po +0 -0
  315. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/es.po +0 -0
  316. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/es_419.po +0 -0
  317. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/et.po +0 -0
  318. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/fa.po +0 -0
  319. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/fi.po +0 -0
  320. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/fr.po +0 -0
  321. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/hu.po +0 -0
  322. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/id.po +0 -0
  323. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/it.po +0 -0
  324. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/lo.po +0 -0
  325. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/lt.po +0 -0
  326. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/nl.po +0 -0
  327. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/pl.po +0 -0
  328. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/pt.po +0 -0
  329. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/ro.po +0 -0
  330. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/ru.po +0 -0
  331. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/sl.po +0 -0
  332. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/tr.po +0 -0
  333. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/uk.po +0 -0
  334. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/locale/zh_CN.po +0 -0
  335. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/message.xml +0 -0
  336. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/notification.py +0 -0
  337. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/notification.xml +0 -0
  338. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/res.xml +0 -0
  339. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/routes.py +0 -0
  340. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/tryton.cfg +0 -0
  341. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/user.py +0 -0
  342. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/user.xml +0 -0
  343. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/group_form.xml +0 -0
  344. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/group_list.xml +0 -0
  345. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/notification_form.xml +0 -0
  346. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/notification_form_admin.xml +0 -0
  347. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/notification_list.xml +0 -0
  348. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/user_application_form.xml +0 -0
  349. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/user_application_list.xml +0 -0
  350. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/user_config_start_form.xml +0 -0
  351. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/user_form.xml +0 -0
  352. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/user_form_preferences.xml +0 -0
  353. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/user_list.xml +0 -0
  354. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/user_warning_form.xml +0 -0
  355. {trytond-8.2.1 → trytond-8.2.2}/trytond/res/view/user_warning_tree.xml +0 -0
  356. {trytond-8.2.1 → trytond-8.2.2}/trytond/routing.py +0 -0
  357. {trytond-8.2.1 → trytond-8.2.2}/trytond/rpc.py +0 -0
  358. {trytond-8.2.1 → trytond-8.2.2}/trytond/security.py +0 -0
  359. {trytond-8.2.1 → trytond-8.2.2}/trytond/sendmail.py +0 -0
  360. {trytond-8.2.1 → trytond-8.2.2}/trytond/sql/__init__.py +0 -0
  361. {trytond-8.2.1 → trytond-8.2.2}/trytond/sql/functions.py +0 -0
  362. {trytond-8.2.1 → trytond-8.2.2}/trytond/sql/operators.py +0 -0
  363. {trytond-8.2.1 → trytond-8.2.2}/trytond/status.py +0 -0
  364. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/__init__.py +0 -0
  365. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/access.py +0 -0
  366. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/chat.py +0 -0
  367. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/copy_.py +0 -0
  368. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/export_data.py +0 -0
  369. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_binary.py +0 -0
  370. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_boolean.py +0 -0
  371. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_char.py +0 -0
  372. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_context.py +0 -0
  373. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_date.py +0 -0
  374. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_datetime.py +0 -0
  375. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_dict.py +0 -0
  376. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_float.py +0 -0
  377. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_fmany2one.py +0 -0
  378. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_function.py +0 -0
  379. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_function.xml +0 -0
  380. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_integer.py +0 -0
  381. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_many2many.py +0 -0
  382. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_many2one.py +0 -0
  383. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_multiselection.py +0 -0
  384. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_numeric.py +0 -0
  385. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_one2many.py +0 -0
  386. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_one2one.py +0 -0
  387. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_reference.py +0 -0
  388. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_selection.py +0 -0
  389. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_text.py +0 -0
  390. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_time.py +0 -0
  391. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/field_timedelta.py +0 -0
  392. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/forbidden.txt +0 -0
  393. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/history.py +0 -0
  394. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/import_data.py +0 -0
  395. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/message.xml +0 -0
  396. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/mixin.py +0 -0
  397. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/model.py +0 -0
  398. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/model_log.py +0 -0
  399. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/modelsql.py +0 -0
  400. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/modelstorage.py +0 -0
  401. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/modelview.py +0 -0
  402. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/modelview.xml +0 -0
  403. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/mptt.py +0 -0
  404. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/multivalue.py +0 -0
  405. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/path.py +0 -0
  406. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/report.mjml +0 -0
  407. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/report.py +0 -0
  408. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/report.txt +0 -0
  409. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/report.xml +0 -0
  410. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/routing.py +0 -0
  411. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/rule.py +0 -0
  412. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/sequence.xml +0 -0
  413. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_access.py +0 -0
  414. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_backend.py +0 -0
  415. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_bus.py +0 -0
  416. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_cache.py +0 -0
  417. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_chat.py +0 -0
  418. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_copy.py +0 -0
  419. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_descriptors.py +0 -0
  420. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_exportdata.py +0 -0
  421. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_binary.py +0 -0
  422. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_boolean.py +0 -0
  423. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_char.py +0 -0
  424. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_context.py +0 -0
  425. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_date.py +0 -0
  426. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_datetime.py +0 -0
  427. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_depends.py +0 -0
  428. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_dict.py +0 -0
  429. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_float.py +0 -0
  430. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_fmany2one.py +0 -0
  431. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_function.py +0 -0
  432. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_integer.py +0 -0
  433. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_many2many.py +0 -0
  434. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_many2one.py +0 -0
  435. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_multiselection.py +0 -0
  436. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_numeric.py +0 -0
  437. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_one2many.py +0 -0
  438. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_one2one.py +0 -0
  439. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_reference.py +0 -0
  440. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_selection.py +0 -0
  441. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_text.py +0 -0
  442. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_time.py +0 -0
  443. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_field_timedelta.py +0 -0
  444. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_filestore.py +0 -0
  445. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_genshi.py +0 -0
  446. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_history.py +0 -0
  447. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_i18n.py +0 -0
  448. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_importdata.py +0 -0
  449. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_ir.py +0 -0
  450. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_mixins.py +0 -0
  451. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_model.py +0 -0
  452. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_model_index.py +0 -0
  453. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_model_log.py +0 -0
  454. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_model_match.py +0 -0
  455. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_modelsingleton.py +0 -0
  456. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_modelsql.py +0 -0
  457. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_modelstorage.py +0 -0
  458. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_modelview.py +0 -0
  459. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_module_register.py +0 -0
  460. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_mptt.py +0 -0
  461. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_multivalue.py +0 -0
  462. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_order.py +0 -0
  463. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_path.py +0 -0
  464. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_protocols.py +0 -0
  465. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_pyson.py +0 -0
  466. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_report.py +0 -0
  467. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_res.py +0 -0
  468. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_resource.py +0 -0
  469. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_rest.py +0 -0
  470. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_routing.py +0 -0
  471. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_rpc.py +0 -0
  472. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_rule.py +0 -0
  473. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_security.py +0 -0
  474. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_sendmail.py +0 -0
  475. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_sequence.py +0 -0
  476. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_tools.py +0 -0
  477. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_transaction.py +0 -0
  478. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_tree.py +0 -0
  479. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_trigger.py +0 -0
  480. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_tryton.py +0 -0
  481. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_union.py +0 -0
  482. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_user.py +0 -0
  483. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_workflow.py +0 -0
  484. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/test_wsgi.py +0 -0
  485. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/tools.py +0 -0
  486. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/tree.py +0 -0
  487. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/trigger.py +0 -0
  488. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/tryton.cfg +0 -0
  489. {trytond-8.2.1 → trytond-8.2.2}/trytond/tests/workflow.py +0 -0
  490. {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/__init__.py +0 -0
  491. {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/barcode.py +0 -0
  492. {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/chart.py +0 -0
  493. {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/decimal_.py +0 -0
  494. {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/domain_inversion.py +0 -0
  495. {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/email_.py +0 -0
  496. {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/gevent.py +0 -0
  497. {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/immutabledict.py +0 -0
  498. {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/logging.py +0 -0
  499. {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/misc.py +0 -0
  500. {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/multiprocessing.py +0 -0
  501. {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/qrcode.py +0 -0
  502. {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/singleton.py +0 -0
  503. {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/string_.py +0 -0
  504. {trytond-8.2.1 → trytond-8.2.2}/trytond/tools/timezone.py +0 -0
  505. {trytond-8.2.1 → trytond-8.2.2}/trytond/transaction.py +0 -0
  506. {trytond-8.2.1 → trytond-8.2.2}/trytond/tryton.rnc +0 -0
  507. {trytond-8.2.1 → trytond-8.2.2}/trytond/url.py +0 -0
  508. {trytond-8.2.1 → trytond-8.2.2}/trytond/wizard/__init__.py +0 -0
  509. {trytond-8.2.1 → trytond-8.2.2}/trytond/worker.py +0 -0
  510. {trytond-8.2.1 → trytond-8.2.2}/trytond/wsgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: trytond
3
- Version: 8.2.1
3
+ Version: 8.2.2
4
4
  Summary: Tryton server
5
5
  Project-URL: homepage, https://www.tryton.org/
6
6
  Project-URL: documentation, https://docs.tryton.org/server/
@@ -14,7 +14,7 @@ from lxml import etree, objectify
14
14
 
15
15
  from ._safe_genshi import genshi_patch
16
16
 
17
- __version__ = "8.2.1"
17
+ __version__ = "8.2.2"
18
18
  __series__ = '.'.join(__version__.split('.')[:2])
19
19
 
20
20
  if not os.environ.get('TRYTOND_APPNAME'):
@@ -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), classes))
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']]
@@ -129,7 +129,7 @@ class Pool(object):
129
129
  :return: database list
130
130
  '''
131
131
  with cls._lock:
132
- return list(cls._pools.keys())
132
+ return [n for n, p in cls._pools.items() if p]
133
133
 
134
134
  def init(self, update=None, lang=None, activatedeps=False, indexes=None):
135
135
  '''
@@ -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
- '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))
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 model and models and model not in models:
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
- Session = Pool().get('ir.session.wizard')
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([Session(session_id)])
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
- self._session_id = session_id
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