tryton 6.0.37__tar.gz → 6.0.39__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.

Potentially problematic release.


This version of tryton might be problematic. Click here for more details.

Files changed (274) hide show
  1. {tryton-6.0.37 → tryton-6.0.39}/CHANGELOG +10 -0
  2. {tryton-6.0.37 → tryton-6.0.39}/COPYRIGHT +1 -1
  3. {tryton-6.0.37 → tryton-6.0.39}/PKG-INFO +1 -1
  4. {tryton-6.0.37 → tryton-6.0.39}/setup-freeze.py +1 -2
  5. {tryton-6.0.37 → tryton-6.0.39}/tryton/__init__.py +1 -1
  6. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/common.py +10 -3
  7. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/datetime_.py +3 -1
  8. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/bg/LC_MESSAGES/tryton.mo +0 -0
  9. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/ca/LC_MESSAGES/tryton.mo +0 -0
  10. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/cs/LC_MESSAGES/tryton.mo +0 -0
  11. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/de/LC_MESSAGES/tryton.mo +0 -0
  12. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/es/LC_MESSAGES/tryton.mo +0 -0
  13. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/es_419/LC_MESSAGES/tryton.mo +0 -0
  14. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/et/LC_MESSAGES/tryton.mo +0 -0
  15. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/fa/LC_MESSAGES/tryton.mo +0 -0
  16. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/fi/LC_MESSAGES/tryton.mo +0 -0
  17. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/fr/LC_MESSAGES/tryton.mo +0 -0
  18. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/hu/LC_MESSAGES/tryton.mo +0 -0
  19. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/id/LC_MESSAGES/tryton.mo +0 -0
  20. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/it/LC_MESSAGES/tryton.mo +0 -0
  21. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/ja_JP/LC_MESSAGES/tryton.mo +0 -0
  22. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/lo/LC_MESSAGES/tryton.mo +0 -0
  23. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/lt/LC_MESSAGES/tryton.mo +0 -0
  24. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/nl/LC_MESSAGES/tryton.mo +0 -0
  25. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/pl/LC_MESSAGES/tryton.mo +0 -0
  26. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/pt/LC_MESSAGES/tryton.mo +0 -0
  27. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/ro/LC_MESSAGES/tryton.mo +0 -0
  28. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/ru/LC_MESSAGES/tryton.mo +0 -0
  29. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/sl/LC_MESSAGES/tryton.mo +0 -0
  30. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/tr/LC_MESSAGES/tryton.mo +0 -0
  31. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/zh_CN/LC_MESSAGES/tryton.mo +0 -0
  32. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/screen/screen.py +58 -36
  33. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/char.py +5 -6
  34. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/graph_gtk/graph.py +3 -1
  35. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/list_gtk/editabletree.py +2 -1
  36. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/list_gtk/widget.py +21 -1
  37. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/win_form.py +1 -1
  38. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/wizard.py +2 -0
  39. {tryton-6.0.37 → tryton-6.0.39}/tryton/jsonrpc.py +5 -1
  40. {tryton-6.0.37 → tryton-6.0.39}/tryton/plugins/__init__.py +5 -3
  41. {tryton-6.0.37 → tryton-6.0.39}/tryton/pyson.py +1 -1
  42. {tryton-6.0.37 → tryton-6.0.39}/tryton.egg-info/PKG-INFO +1 -1
  43. {tryton-6.0.37 → tryton-6.0.39}/LICENSE +0 -0
  44. {tryton-6.0.37 → tryton-6.0.39}/MANIFEST.in +0 -0
  45. {tryton-6.0.37 → tryton-6.0.39}/README.rst +0 -0
  46. {tryton-6.0.37 → tryton-6.0.39}/bin/tryton +0 -0
  47. {tryton-6.0.37 → tryton-6.0.39}/catalan.nsh +0 -0
  48. {tryton-6.0.37 → tryton-6.0.39}/darwin/gtk-3.0/gdk-pixbuf.loaders +0 -0
  49. {tryton-6.0.37 → tryton-6.0.39}/darwin/gtk-3.0/gtk.immodules +0 -0
  50. {tryton-6.0.37 → tryton-6.0.39}/doc/conf.py +0 -0
  51. {tryton-6.0.37 → tryton-6.0.39}/doc/glossary.rst +0 -0
  52. {tryton-6.0.37 → tryton-6.0.39}/doc/index.rst +0 -0
  53. {tryton-6.0.37 → tryton-6.0.39}/doc/installation.rst +0 -0
  54. {tryton-6.0.37 → tryton-6.0.39}/doc/usage.rst +0 -0
  55. {tryton-6.0.37 → tryton-6.0.39}/english.nsh +0 -0
  56. {tryton-6.0.37 → tryton-6.0.39}/farsi.nsh +0 -0
  57. {tryton-6.0.37 → tryton-6.0.39}/french.nsh +0 -0
  58. {tryton-6.0.37 → tryton-6.0.39}/german.nsh +0 -0
  59. {tryton-6.0.37 → tryton-6.0.39}/make-darwin-installer.sh +0 -0
  60. {tryton-6.0.37 → tryton-6.0.39}/make-win32-installer.sh +0 -0
  61. {tryton-6.0.37 → tryton-6.0.39}/portuguese.nsh +0 -0
  62. {tryton-6.0.37 → tryton-6.0.39}/setup.cfg +0 -0
  63. {tryton-6.0.37 → tryton-6.0.39}/setup.nsi +0 -0
  64. {tryton-6.0.37 → tryton-6.0.39}/setup.py +0 -0
  65. {tryton-6.0.37 → tryton-6.0.39}/slovenian.nsh +0 -0
  66. {tryton-6.0.37 → tryton-6.0.39}/spanish.nsh +0 -0
  67. {tryton-6.0.37 → tryton-6.0.39}/tox.ini +0 -0
  68. {tryton-6.0.37 → tryton-6.0.39}/tryton/action/__init__.py +0 -0
  69. {tryton-6.0.37 → tryton-6.0.39}/tryton/action/main.py +0 -0
  70. {tryton-6.0.37 → tryton-6.0.39}/tryton/bus.py +0 -0
  71. {tryton-6.0.37 → tryton-6.0.39}/tryton/client.py +0 -0
  72. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/__init__.py +0 -0
  73. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/button.py +0 -0
  74. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/cellrendererbinary.py +0 -0
  75. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/cellrendererbutton.py +0 -0
  76. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/cellrendererclickablepixbuf.py +0 -0
  77. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/cellrenderercombo.py +0 -0
  78. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/cellrendererfloat.py +0 -0
  79. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/cellrendererinteger.py +0 -0
  80. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/cellrenderertext.py +0 -0
  81. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/cellrenderertoggle.py +0 -0
  82. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/completion.py +0 -0
  83. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/domain_inversion.py +0 -0
  84. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/domain_parser.py +0 -0
  85. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/entry_position.py +0 -0
  86. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/environment.py +0 -0
  87. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/focus.py +0 -0
  88. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/htmltextbuffer.py +0 -0
  89. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/number_entry.py +0 -0
  90. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/popup_menu.py +0 -0
  91. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/richtext.py +0 -0
  92. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/selection.py +0 -0
  93. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/timedelta.py +0 -0
  94. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/treeviewcontrol.py +0 -0
  95. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/underline.py +0 -0
  96. {tryton-6.0.37 → tryton-6.0.39}/tryton/common/widget_style.py +0 -0
  97. {tryton-6.0.37 → tryton-6.0.39}/tryton/config.py +0 -0
  98. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/bg/LC_MESSAGES/tryton.po +0 -0
  99. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/ca/LC_MESSAGES/tryton.po +0 -0
  100. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/cs/LC_MESSAGES/tryton.po +0 -0
  101. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/de/LC_MESSAGES/tryton.po +0 -0
  102. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/es/LC_MESSAGES/tryton.po +0 -0
  103. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/es_419/LC_MESSAGES/tryton.po +0 -0
  104. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/et/LC_MESSAGES/tryton.po +0 -0
  105. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/fa/LC_MESSAGES/tryton.po +0 -0
  106. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/fi/LC_MESSAGES/tryton.po +0 -0
  107. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/fr/LC_MESSAGES/tryton.po +0 -0
  108. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/hu/LC_MESSAGES/tryton.po +0 -0
  109. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/id/LC_MESSAGES/tryton.po +0 -0
  110. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/it/LC_MESSAGES/tryton.po +0 -0
  111. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/ja_JP/LC_MESSAGES/tryton.po +0 -0
  112. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/lo/LC_MESSAGES/tryton.po +0 -0
  113. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/lt/LC_MESSAGES/tryton.po +0 -0
  114. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/nl/LC_MESSAGES/tryton.po +0 -0
  115. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/pl/LC_MESSAGES/tryton.po +0 -0
  116. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/pt/LC_MESSAGES/tryton.po +0 -0
  117. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/ro/LC_MESSAGES/tryton.po +0 -0
  118. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/ru/LC_MESSAGES/tryton.po +0 -0
  119. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/sl/LC_MESSAGES/tryton.po +0 -0
  120. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/tr/LC_MESSAGES/tryton.po +0 -0
  121. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/tryton.pot +0 -0
  122. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/locale/zh_CN/LC_MESSAGES/tryton.po +0 -0
  123. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/LICENSE +0 -0
  124. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-add.svg +0 -0
  125. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-archive.svg +0 -0
  126. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-arrow-down.svg +0 -0
  127. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-arrow-left.svg +0 -0
  128. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-arrow-right.svg +0 -0
  129. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-arrow-up.svg +0 -0
  130. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-attach.svg +0 -0
  131. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-back.svg +0 -0
  132. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-bookmark-border.svg +0 -0
  133. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-bookmark.svg +0 -0
  134. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-bookmarks.svg +0 -0
  135. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-cancel.svg +0 -0
  136. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-clear.svg +0 -0
  137. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-close.svg +0 -0
  138. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-copy.svg +0 -0
  139. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-create.svg +0 -0
  140. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-date.svg +0 -0
  141. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-delete.svg +0 -0
  142. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-drag.svg +0 -0
  143. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-email.svg +0 -0
  144. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-error.svg +0 -0
  145. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-exit.svg +0 -0
  146. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-export.svg +0 -0
  147. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-filter.svg +0 -0
  148. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-format-align-center.svg +0 -0
  149. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-format-align-justify.svg +0 -0
  150. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-format-align-left.svg +0 -0
  151. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-format-align-right.svg +0 -0
  152. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-format-bold.svg +0 -0
  153. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-format-color-text.svg +0 -0
  154. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-format-italic.svg +0 -0
  155. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-format-underline.svg +0 -0
  156. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-forward.svg +0 -0
  157. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-history.svg +0 -0
  158. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-icon.png +0 -0
  159. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-import.svg +0 -0
  160. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-info.svg +0 -0
  161. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-launch.svg +0 -0
  162. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-link.svg +0 -0
  163. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-log.svg +0 -0
  164. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-menu.svg +0 -0
  165. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-note.svg +0 -0
  166. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-ok.svg +0 -0
  167. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-open.svg +0 -0
  168. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-print.svg +0 -0
  169. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-public.svg +0 -0
  170. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-question.svg +0 -0
  171. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-refresh.svg +0 -0
  172. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-remove.svg +0 -0
  173. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-save.svg +0 -0
  174. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-search.svg +0 -0
  175. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-send.svg +0 -0
  176. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-star-border.svg +0 -0
  177. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-star.svg +0 -0
  178. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-switch.svg +0 -0
  179. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-translate.svg +0 -0
  180. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-unarchive.svg +0 -0
  181. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-undo.svg +0 -0
  182. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-warning.svg +0 -0
  183. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton.icns +0 -0
  184. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton.ico +0 -0
  185. {tryton-6.0.37 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton.svg +0 -0
  186. {tryton-6.0.37 → tryton-6.0.39}/tryton/device_cookie.py +0 -0
  187. {tryton-6.0.37 → tryton-6.0.39}/tryton/exceptions.py +0 -0
  188. {tryton-6.0.37 → tryton-6.0.39}/tryton/fingerprints.py +0 -0
  189. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/__init__.py +0 -0
  190. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/main.py +0 -0
  191. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/__init__.py +0 -0
  192. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/about.py +0 -0
  193. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/attachment.py +0 -0
  194. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/board.py +0 -0
  195. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/dblogin.py +0 -0
  196. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/email_.py +0 -0
  197. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/form.py +0 -0
  198. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/infobar.py +0 -0
  199. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/limit.py +0 -0
  200. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/nomodal.py +0 -0
  201. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/note.py +0 -0
  202. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/preference.py +0 -0
  203. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/revision.py +0 -0
  204. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/tabcontent.py +0 -0
  205. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_board/__init__.py +0 -0
  206. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_board/action.py +0 -0
  207. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_board/view_board.py +0 -0
  208. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/__init__.py +0 -0
  209. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/model/__init__.py +0 -0
  210. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/model/field.py +0 -0
  211. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/model/group.py +0 -0
  212. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/model/record.py +0 -0
  213. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/screen/__init__.py +0 -0
  214. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/__init__.py +0 -0
  215. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/calendar_.py +0 -0
  216. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/calendar_gtk/__init__.py +0 -0
  217. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py +0 -0
  218. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/calendar_gtk/dates_period.py +0 -0
  219. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/calendar_gtk/toolbar.py +0 -0
  220. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form.py +0 -0
  221. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/__init__.py +0 -0
  222. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/binary.py +0 -0
  223. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/calendar_.py +0 -0
  224. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/checkbox.py +0 -0
  225. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/dictionary.py +0 -0
  226. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/document.py +0 -0
  227. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/float.py +0 -0
  228. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/image.py +0 -0
  229. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/integer.py +0 -0
  230. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/many2many.py +0 -0
  231. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/many2one.py +0 -0
  232. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/multiselection.py +0 -0
  233. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/one2many.py +0 -0
  234. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/one2one.py +0 -0
  235. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/progressbar.py +0 -0
  236. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/pyson.py +0 -0
  237. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/reference.py +0 -0
  238. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/richtextbox.py +0 -0
  239. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/selection.py +0 -0
  240. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/state_widget.py +0 -0
  241. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/textbox.py +0 -0
  242. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/timedelta.py +0 -0
  243. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/url.py +0 -0
  244. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/widget.py +0 -0
  245. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/graph.py +0 -0
  246. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/graph_gtk/__init__.py +0 -0
  247. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/graph_gtk/bar.py +0 -0
  248. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/graph_gtk/line.py +0 -0
  249. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/graph_gtk/pie.py +0 -0
  250. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/list.py +0 -0
  251. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/list_form.py +0 -0
  252. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/list_gtk/__init__.py +0 -0
  253. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/view_form/view/screen_container.py +0 -0
  254. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/win_csv.py +0 -0
  255. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/win_export.py +0 -0
  256. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/win_import.py +0 -0
  257. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/win_search.py +0 -0
  258. {tryton-6.0.37 → tryton-6.0.39}/tryton/gui/window/window.py +0 -0
  259. {tryton-6.0.37 → tryton-6.0.39}/tryton/plugins/translation/__init__.py +0 -0
  260. {tryton-6.0.37 → tryton-6.0.39}/tryton/rpc.py +0 -0
  261. {tryton-6.0.37 → tryton-6.0.39}/tryton/signal_event.py +0 -0
  262. {tryton-6.0.37 → tryton-6.0.39}/tryton/tests/__init__.py +0 -0
  263. {tryton-6.0.37 → tryton-6.0.39}/tryton/tests/test_common_domain_parser.py +0 -0
  264. {tryton-6.0.37 → tryton-6.0.39}/tryton/tests/test_common_selection.py +0 -0
  265. {tryton-6.0.37 → tryton-6.0.39}/tryton/tests/test_common_timedelta.py +0 -0
  266. {tryton-6.0.37 → tryton-6.0.39}/tryton/translate.py +0 -0
  267. {tryton-6.0.37 → tryton-6.0.39}/tryton.desktop +0 -0
  268. {tryton-6.0.37 → tryton-6.0.39}/tryton.egg-info/SOURCES.txt +0 -0
  269. {tryton-6.0.37 → tryton-6.0.39}/tryton.egg-info/dependency_links.txt +0 -0
  270. {tryton-6.0.37 → tryton-6.0.39}/tryton.egg-info/not-zip-safe +0 -0
  271. {tryton-6.0.37 → tryton-6.0.39}/tryton.egg-info/requires.txt +0 -0
  272. {tryton-6.0.37 → tryton-6.0.39}/tryton.egg-info/top_level.txt +0 -0
  273. {tryton-6.0.37 → tryton-6.0.39}/win32/gtk-3.0/gdk-pixbuf.loaders +0 -0
  274. {tryton-6.0.37 → tryton-6.0.39}/win32/gtk-3.0/gtk.immodules +0 -0
@@ -1,4 +1,14 @@
1
1
 
2
+ Version 6.0.39 - 2024-05-01
3
+ ---------------------------
4
+ * Bug fixes (see mercurial logs for details)
5
+
6
+
7
+ Version 6.0.38 - 2024-04-17
8
+ ---------------------------
9
+ * Bug fixes (see mercurial logs for details)
10
+
11
+
2
12
  Version 6.0.37 - 2024-04-04
3
13
  ---------------------------
4
14
  * Bug fixes (see mercurial logs for details)
@@ -5,7 +5,7 @@ Copyright (C) 2007-2024 Cédric Krier.
5
5
  Copyright (C) 2008-2011 Udo Spallek.
6
6
  Copyright (C) 2008-2011 virtual things - Preisler & Spallek GbR.
7
7
  Copyright (C) 2008-2024 B2CK SPRL.
8
- Copyright (C) 2010-2023 Nicolas Évrard.
8
+ Copyright (C) 2010-2024 Nicolas Évrard.
9
9
  Copyright (C) 2011-2012 Rodrigo Hübner.
10
10
  Copyright (C) 2012-2013 Antoine Smolders.
11
11
  Copyright (C) 2020-2021 Maxime Richez
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tryton
3
- Version: 6.0.37
3
+ Version: 6.0.39
4
4
  Summary: Tryton desktop client
5
5
  Home-page: http://www.tryton.org/
6
6
  Download-URL: http://downloads.tryton.org/6.0/
@@ -124,14 +124,13 @@ version = version.strip()
124
124
 
125
125
  setup(name='tryton',
126
126
  version=version,
127
- packages=find_packages(),
128
127
  options={
129
128
  'build_exe': {
130
129
  'no_compress': True,
131
130
  'include_files': include_files,
132
131
  'excludes': ['tkinter'],
133
132
  'silent': True,
134
- 'packages': ['gi'],
133
+ 'packages': find_packages() + ['gi'],
135
134
  'include_msvcr': True,
136
135
  },
137
136
  'bdist_mac': {
@@ -1,6 +1,6 @@
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
- __version__ = "6.0.37"
3
+ __version__ = "6.0.39"
4
4
  import gi
5
5
  import locale
6
6
 
@@ -219,7 +219,7 @@ class ModelAccess(object):
219
219
  self._models = rpc.execute('model', 'ir.model', 'list_models',
220
220
  rpc.CONTEXT)
221
221
  except TrytonServerError:
222
- pass
222
+ logger.error("Unable to get model list.")
223
223
 
224
224
  def __getitem__(self, model):
225
225
  if model in self._access:
@@ -233,7 +233,14 @@ class ModelAccess(object):
233
233
  access = rpc.execute('model', 'ir.model.access', 'get_access',
234
234
  self._models[to_load], rpc.CONTEXT)
235
235
  except TrytonServerError:
236
- access = {}
236
+ logger.error("Unable to get access for %s.", model)
237
+ access = {
238
+ model: {
239
+ 'read': True,
240
+ 'write': False,
241
+ 'create': False,
242
+ 'delete': False},
243
+ }
237
244
  self._access.update(access)
238
245
  return self._access[model]
239
246
 
@@ -1135,7 +1142,7 @@ class RPCProgress(object):
1135
1142
 
1136
1143
  def return_():
1137
1144
  if self.exception:
1138
- raise self.exception
1145
+ raise RPCException(self.exception)
1139
1146
  else:
1140
1147
  return self.res
1141
1148
 
@@ -10,7 +10,9 @@ from dateutil.parser import parse
10
10
 
11
11
  from .common import IconFactory
12
12
 
13
- __all__ = ['Date', 'CellRendererDate', 'Time', 'CellRendererTime', 'DateTime']
13
+ __all__ = [
14
+ 'Date', 'CellRendererDate', 'Time', 'CellRendererTime', 'DateTime',
15
+ 'date_parse']
14
16
 
15
17
  _ = gettext.gettext
16
18
 
@@ -113,11 +113,10 @@ class Screen(SignalEvent):
113
113
  return child
114
114
 
115
115
  # Remove first level Viewport and ScrolledWindow to fill the Vbox
116
- for widget in [
117
- self.context_screen.screen_container.viewport,
118
- self.context_screen.current_view.widget.get_children()[0],
119
- ]:
120
- remove_bin(widget)
116
+ remove_bin(self.context_screen.screen_container.viewport)
117
+ if self.context_screen.current_view:
118
+ remove_bin(
119
+ self.context_screen.current_view.widget.get_children()[0])
121
120
 
122
121
  self.screen_container.filter_vbox.pack_start(
123
122
  context_widget, expand=False, fill=True, padding=0)
@@ -490,7 +489,8 @@ class Screen(SignalEvent):
490
489
  self.group.destroy()
491
490
 
492
491
  def default_row_activate(self):
493
- if (self.current_view.view_type == 'tree'
492
+ if (self.current_view
493
+ and self.current_view.view_type == 'tree'
494
494
  and int(self.current_view.attributes.get('keyword_open', 0))):
495
495
  return Action.exec_keyword('tree_open', {
496
496
  'model': self.model_name,
@@ -611,7 +611,7 @@ class Screen(SignalEvent):
611
611
 
612
612
  def new(self, default=True, rec_name=None):
613
613
  previous_view = self.current_view
614
- if self.current_view.view_type == 'calendar':
614
+ if self.current_view and self.current_view.view_type == 'calendar':
615
615
  selected_date = self.current_view.get_selected_date()
616
616
  if self.current_view and not self.current_view.editable:
617
617
  self.switch_view('form', display=False)
@@ -664,16 +664,19 @@ class Screen(SignalEvent):
664
664
 
665
665
  def save_current(self):
666
666
  if not self.current_record:
667
- if self.current_view.view_type == 'tree' and len(self.group):
667
+ if (self.current_view
668
+ and self.current_view.view_type == 'tree'
669
+ and len(self.group)):
668
670
  self.current_record = self.group[0]
669
671
  else:
670
672
  return True
671
- self.current_view.set_value()
672
673
  saved = False
673
674
  record_id = None
674
- fields = self.current_view.get_fields()
675
+ if self.current_view:
676
+ self.current_view.set_value()
677
+ fields = self.current_view.get_fields()
675
678
  path = self.current_record.get_path(self.group)
676
- if self.current_view.view_type == 'tree':
679
+ if self.current_view and self.current_view.view_type == 'tree':
677
680
  # False value must be not saved
678
681
  saved = all((
679
682
  x is not False and x >= 0
@@ -683,7 +686,7 @@ class Screen(SignalEvent):
683
686
  record_id = self.current_record.save(force_reload=True)
684
687
  # False value must be not saved
685
688
  saved = record_id is not False and record_id >= 0
686
- else:
689
+ elif self.current_view:
687
690
  self.set_cursor()
688
691
  self.current_view.display()
689
692
  return False
@@ -711,17 +714,19 @@ class Screen(SignalEvent):
711
714
  def get(self):
712
715
  if not self.current_record:
713
716
  return None
714
- self.current_view.set_value()
717
+ if self.current_view:
718
+ self.current_view.set_value()
715
719
  return self.current_record.get()
716
720
 
717
721
  def get_on_change_value(self):
718
722
  if not self.current_record:
719
723
  return None
720
- self.current_view.set_value()
724
+ if self.current_view:
725
+ self.current_view.set_value()
721
726
  return self.current_record.get_on_change_value()
722
727
 
723
728
  def modified(self):
724
- if self.current_view.view_type != 'tree':
729
+ if self.current_view and self.current_view.view_type != 'tree':
725
730
  if self.current_record:
726
731
  if self.current_record.modified or self.current_record.id < 0:
727
732
  return True
@@ -729,7 +734,7 @@ class Screen(SignalEvent):
729
734
  for record in self.group:
730
735
  if record.modified or record.id < 0:
731
736
  return True
732
- if self.current_view.modified:
737
+ if self.current_view and self.current_view.modified:
733
738
  return True
734
739
  return False
735
740
 
@@ -807,6 +812,8 @@ class Screen(SignalEvent):
807
812
 
808
813
  def set_tree_state(self):
809
814
  view = self.current_view
815
+ if not view:
816
+ return
810
817
  if view.view_type not in ('tree', 'form'):
811
818
  return
812
819
  if id(view) in self.tree_states_done:
@@ -909,8 +916,10 @@ class Screen(SignalEvent):
909
916
 
910
917
  def load(self, ids, set_cursor=True, modified=False, position=-1):
911
918
  self.group.load(ids, modified=modified, position=position)
912
- self.current_view.reset()
913
- if ids and self.current_view.view_type != 'calendar':
919
+ if self.current_view:
920
+ self.current_view.reset()
921
+ if (ids and self.current_view
922
+ and self.current_view.view_type != 'calendar'):
914
923
  self.display(ids[0])
915
924
  else:
916
925
  self.current_record = None
@@ -929,7 +938,7 @@ class Screen(SignalEvent):
929
938
  self.current_record = self.group[0]
930
939
  else:
931
940
  self.current_record = None
932
- if self.views:
941
+ if self.views and self.current_view:
933
942
  self.search_active(self.current_view.view_type
934
943
  in ('tree', 'graph', 'calendar'))
935
944
  for view in self.views:
@@ -974,7 +983,8 @@ class Screen(SignalEvent):
974
983
  model = view.treeview.get_model()
975
984
  iter_ = model.get_iter(end)
976
985
  self.current_record = model.get_value(iter_, 0)
977
- elif (view.view_type == 'form'
986
+ elif (view
987
+ and view.view_type == 'form'
978
988
  and self.current_record
979
989
  and self.current_record.group):
980
990
  group = self.current_record.group
@@ -1002,12 +1012,14 @@ class Screen(SignalEvent):
1002
1012
  record = next
1003
1013
  break
1004
1014
  self.current_record = record
1005
- elif (view.view_type == 'list-form' and len(self.group)
1015
+ elif (view
1016
+ and view.view_type == 'list-form'
1017
+ and len(self.group)
1006
1018
  and self.current_record in self.group):
1007
1019
  idx = self.group.index(self.current_record)
1008
1020
  if 0 <= idx < len(self.group) - 1:
1009
1021
  self.current_record = self.group[idx + 1]
1010
- elif view.view_type == 'calendar':
1022
+ elif view and view.view_type == 'calendar':
1011
1023
  record = self.current_record
1012
1024
  goocalendar = view.widgets.get('goocalendar')
1013
1025
  if goocalendar:
@@ -1039,9 +1051,10 @@ class Screen(SignalEvent):
1039
1051
 
1040
1052
  def display_prev(self):
1041
1053
  view = self.current_view
1042
- view.set_value()
1054
+ if view:
1055
+ view.set_value()
1043
1056
  self.set_cursor(reset_view=False)
1044
- if view.view_type == 'tree' and len(self.group):
1057
+ if view and view.view_type == 'tree' and len(self.group):
1045
1058
  range_ = view.treeview.get_visible_range()
1046
1059
  if range_:
1047
1060
  start, end = range_
@@ -1052,7 +1065,8 @@ class Screen(SignalEvent):
1052
1065
  model = view.treeview.get_model()
1053
1066
  iter_ = model.get_iter(start)
1054
1067
  self.current_record = model.get_value(iter_, 0)
1055
- elif (view.view_type == 'form'
1068
+ elif (view
1069
+ and view.view_type == 'form'
1056
1070
  and self.current_record
1057
1071
  and self.current_record.group):
1058
1072
  group = self.current_record.group
@@ -1070,7 +1084,7 @@ class Screen(SignalEvent):
1070
1084
  if parent and record.model_name == parent.model_name:
1071
1085
  record = parent
1072
1086
  self.current_record = record
1073
- elif view.view_type == 'calendar':
1087
+ elif view and view.view_type == 'calendar':
1074
1088
  record = self.current_record
1075
1089
  goocalendar = view.widgets.get('goocalendar')
1076
1090
  if goocalendar:
@@ -1095,7 +1109,9 @@ class Screen(SignalEvent):
1095
1109
  if prev_id >= 0:
1096
1110
  self.current_record = events[prev_id].record
1097
1111
  break
1098
- elif (view.view_type == 'list-form' and len(self.group)
1112
+ elif (view
1113
+ and view.view_type == 'list-form'
1114
+ and len(self.group)
1099
1115
  and self.current_record in self.group):
1100
1116
  idx = self.group.index(self.current_record)
1101
1117
  if 0 < idx <= len(self.group) - 1:
@@ -1103,7 +1119,8 @@ class Screen(SignalEvent):
1103
1119
  else:
1104
1120
  self.current_record = self.group[-1] if len(self.group) else None
1105
1121
  self.set_cursor(reset_view=False)
1106
- view.display()
1122
+ if view:
1123
+ view.display()
1107
1124
 
1108
1125
  def invalid_message(self, record=None):
1109
1126
  if record is None:
@@ -1174,7 +1191,7 @@ class Screen(SignalEvent):
1174
1191
  if not self.selected_records:
1175
1192
  return []
1176
1193
 
1177
- buttons = self.current_view.get_buttons()
1194
+ buttons = self.current_view.get_buttons() if self.current_view else []
1178
1195
 
1179
1196
  for record in self.selected_records:
1180
1197
  buttons = [b for b in buttons if is_active(record, b)]
@@ -1184,8 +1201,9 @@ class Screen(SignalEvent):
1184
1201
 
1185
1202
  def button(self, button):
1186
1203
  'Execute button on the selected records'
1187
- self.current_view.set_value()
1188
- fields = self.current_view.get_fields()
1204
+ if self.current_view:
1205
+ self.current_view.set_value()
1206
+ fields = self.current_view.get_fields()
1189
1207
  for record in self.selected_records:
1190
1208
  domain = record.expr_eval(
1191
1209
  button.get('states', {})).get('pre_validate', [])
@@ -1199,7 +1217,8 @@ class Screen(SignalEvent):
1199
1217
  if button.get('confirm', False) and not sur(button['confirm']):
1200
1218
  return
1201
1219
  if button.get('type', 'class') == 'class':
1202
- if not self.current_record.save(force_reload=False):
1220
+ record_id = self.current_record.save(force_reload=False)
1221
+ if record_id is False or record_id < 0:
1203
1222
  return
1204
1223
  if button.get('type', 'class') == 'class':
1205
1224
  self._button_class(button)
@@ -1266,7 +1285,9 @@ class Screen(SignalEvent):
1266
1285
  elif action.startswith('switch'):
1267
1286
  self.switch_view(*action.split(None, 2)[1:])
1268
1287
  elif action == 'reload':
1269
- if (self.current_view.view_type in ['tree', 'graph', 'calendar']
1288
+ if (self.current_view
1289
+ and self.current_view.view_type in [
1290
+ 'tree', 'graph', 'calendar']
1270
1291
  and not self.parent):
1271
1292
  self.search_filter()
1272
1293
  elif action == 'reload menu':
@@ -1296,7 +1317,7 @@ class Screen(SignalEvent):
1296
1317
  cls=JSONEncoder, separators=(',', ':'))))
1297
1318
  path = [CONFIG['login.db'], 'model', self.model_name]
1298
1319
  view_ids = [v.view_id for v in self.views] + self.view_ids
1299
- if self.current_view.view_type != 'form':
1320
+ if self.current_view and self.current_view.view_type != 'form':
1300
1321
  if self.search_value:
1301
1322
  search_value = self.search_value
1302
1323
  else:
@@ -1308,8 +1329,9 @@ class Screen(SignalEvent):
1308
1329
  separators=(',', ':'))))
1309
1330
  elif self.current_record and self.current_record.id > -1:
1310
1331
  path.append(str(self.current_record.id))
1311
- i = view_ids.index(self.current_view.view_id)
1312
- view_ids = view_ids[i:] + view_ids[:i]
1332
+ if self.current_view:
1333
+ i = view_ids.index(self.current_view.view_id)
1334
+ view_ids = view_ids[i:] + view_ids[:i]
1313
1335
  if view_ids:
1314
1336
  query_string.append(('views', json.dumps(
1315
1337
  view_ids, separators=(',', ':'))))
@@ -170,10 +170,9 @@ class Password(Char):
170
170
  self.widget.pack_start(
171
171
  self.visibility_checkbox, expand=False, fill=True, padding=0)
172
172
 
173
- def _readonly_set(self, value):
174
- super(Char, self)._readonly_set(value)
175
- self.entry.set_editable(not value)
176
- self.visibility_checkbox.props.visible = not value
177
-
178
173
  def toggle_visibility(self, button):
179
- self.entry.props.visibility = not self.entry.props.visibility
174
+ if self.autocomplete:
175
+ entry = self.entry.get_child()
176
+ else:
177
+ entry = self.entry
178
+ entry.props.visibility = not self.entry.props.visibility
@@ -12,6 +12,7 @@ import cairo
12
12
  from gi.repository import Gdk, Gtk
13
13
 
14
14
  import tryton.rpc as rpc
15
+ from tryton import common
15
16
  from tryton.action import Action
16
17
  from tryton.common import hex2rgb, generateColorscheme, COLOR_SCHEMES
17
18
  from tryton.config import CONFIG
@@ -386,7 +387,8 @@ class Graph(Gtk.DrawingArea):
386
387
  if isinstance(value, datetime.timedelta):
387
388
  value = value.total_seconds()
388
389
  self.datas[x][key] += float(value or 0)
389
- date_format = self.view.screen.context.get('date_format', '%x')
390
+ date_format = common.date_format(
391
+ self.view.screen.context.get('date_format'))
390
392
  datetime_format = date_format + ' %X'
391
393
  if isinstance(minx, datetime.datetime):
392
394
  date = minx
@@ -153,7 +153,8 @@ class EditableTreeView(TreeView):
153
153
  for renderer in column.get_cells():
154
154
  if renderer.props.editing:
155
155
  widget = self.view.get_column_widget(column)
156
- self.on_editing_done(widget.editable, renderer)
156
+ editable = widget.get_editable(renderer)
157
+ self.on_editing_done(editable, renderer)
157
158
  return True
158
159
 
159
160
  def on_keypressed(self, entry, event, renderer):
@@ -28,7 +28,8 @@ from tryton.common import data2pixbuf
28
28
  from tryton.common.completion import get_completion, update_completion
29
29
  from tryton.common.selection import (
30
30
  SelectionMixin, PopdownMixin, selection_shortcuts)
31
- from tryton.common.datetime_ import CellRendererDate, CellRendererTime
31
+ from tryton.common.datetime_ import (
32
+ CellRendererDate, CellRendererTime, date_parse)
32
33
  from tryton.common.domain_parser import quote
33
34
  from tryton.config import CONFIG
34
35
 
@@ -358,6 +359,14 @@ class GenericText(Cell):
358
359
  editable.connect('remove-widget', remove)
359
360
  return False
360
361
 
362
+ def get_editable(self, renderer):
363
+ if self.renderer == renderer:
364
+ return self.editable
365
+ for cell in self.prefixes + self.suffixes:
366
+ editable = cell.get_editable(renderer)
367
+ if editable:
368
+ return editable
369
+
361
370
 
362
371
  class Char(GenericText):
363
372
 
@@ -474,6 +483,17 @@ class Date(GenericText):
474
483
  else:
475
484
  return ''
476
485
 
486
+ def value_from_text(self, record, text, callback=None):
487
+ if isinstance(text, str):
488
+ field = record[self.attrs['name']]
489
+ try:
490
+ # Use a datetime instance and rely on field to convert to the
491
+ # proper type
492
+ text = date_parse(text, self.get_format(record, field))
493
+ except (ValueError, OverflowError):
494
+ text = None
495
+ return super().value_from_text(record, text, callback=callback)
496
+
477
497
 
478
498
  class Time(Date):
479
499
 
@@ -445,7 +445,7 @@ class WinForm(NoModal, InfoBar):
445
445
  record.modified_fields.setdefault('id')
446
446
  result = False
447
447
  else:
448
- result = response_id not in cancel_responses
448
+ result = (response_id not in cancel_responses) and not readonly
449
449
  self.callback(result)
450
450
  self.destroy()
451
451
 
@@ -396,6 +396,8 @@ class WizardDialog(Wizard, NoModal):
396
396
  return True
397
397
 
398
398
  def show(self):
399
+ if not self.screen:
400
+ return
399
401
  view = self.screen.current_view
400
402
  if view.view_type == 'form':
401
403
  expand = False
@@ -130,7 +130,6 @@ class JSONUnmarshaller(object):
130
130
  class Transport(xmlrpc.client.SafeTransport):
131
131
 
132
132
  accept_gzip_encoding = True
133
- encode_threshold = 1400 # common MTU
134
133
 
135
134
  def __init__(
136
135
  self, fingerprints=None, ca_certs=None, session=None):
@@ -233,6 +232,11 @@ class Transport(xmlrpc.client.SafeTransport):
233
232
  self._connection[1].sock.settimeout(DEFAULT_TIMEOUT)
234
233
  return self._connection[1]
235
234
 
235
+ @property
236
+ def encode_threshold(self):
237
+ if self.session:
238
+ return 1400 # common MTU
239
+
236
240
 
237
241
  class ServerProxy(xmlrpc.client.ServerProxy):
238
242
  __id = 0
@@ -24,9 +24,11 @@ def register():
24
24
  imported = set()
25
25
  for path in paths:
26
26
  finder = importlib.machinery.FileFinder(
27
- path, (
28
- importlib.machinery.SourceFileLoader,
29
- importlib.machinery.SOURCE_SUFFIXES))
27
+ path,
28
+ (importlib.machinery.SourceFileLoader,
29
+ importlib.machinery.SOURCE_SUFFIXES),
30
+ (importlib.machinery.SourcelessFileLoader,
31
+ importlib.machinery.BYTECODE_SUFFIXES))
30
32
  for plugin in os.listdir(path):
31
33
  module = os.path.splitext(plugin)[0]
32
34
  if (module.startswith('_') or module in imported):
@@ -188,7 +188,7 @@ class Not(PYSON):
188
188
 
189
189
  @staticmethod
190
190
  def eval(dct, context):
191
- return not dct['v']
191
+ return not Bool(dct['v']).eval(dct, context)
192
192
 
193
193
 
194
194
  class Bool(PYSON):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tryton
3
- Version: 6.0.37
3
+ Version: 6.0.39
4
4
  Summary: Tryton desktop client
5
5
  Home-page: http://www.tryton.org/
6
6
  Download-URL: http://downloads.tryton.org/6.0/
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