tryton 6.8.12__tar.gz → 6.8.14__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 (278) hide show
  1. {tryton-6.8.12 → tryton-6.8.14}/CHANGELOG +10 -0
  2. {tryton-6.8.12 → tryton-6.8.14}/COPYRIGHT +1 -1
  3. {tryton-6.8.12 → tryton-6.8.14}/PKG-INFO +1 -1
  4. {tryton-6.8.12 → tryton-6.8.14}/setup-freeze.py +1 -2
  5. {tryton-6.8.12 → tryton-6.8.14}/tryton/__init__.py +1 -1
  6. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/common.py +10 -3
  7. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/datetime_.py +3 -1
  8. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/bg/LC_MESSAGES/tryton.mo +0 -0
  9. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/ca/LC_MESSAGES/tryton.mo +0 -0
  10. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/cs/LC_MESSAGES/tryton.mo +0 -0
  11. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/de/LC_MESSAGES/tryton.mo +0 -0
  12. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/es/LC_MESSAGES/tryton.mo +0 -0
  13. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/es_419/LC_MESSAGES/tryton.mo +0 -0
  14. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/et/LC_MESSAGES/tryton.mo +0 -0
  15. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/fa/LC_MESSAGES/tryton.mo +0 -0
  16. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/fi/LC_MESSAGES/tryton.mo +0 -0
  17. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/fr/LC_MESSAGES/tryton.mo +0 -0
  18. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/hu/LC_MESSAGES/tryton.mo +0 -0
  19. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/id/LC_MESSAGES/tryton.mo +0 -0
  20. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/it/LC_MESSAGES/tryton.mo +0 -0
  21. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/ja_JP/LC_MESSAGES/tryton.mo +0 -0
  22. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/lo/LC_MESSAGES/tryton.mo +0 -0
  23. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/lt/LC_MESSAGES/tryton.mo +0 -0
  24. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/nl/LC_MESSAGES/tryton.mo +0 -0
  25. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/pl/LC_MESSAGES/tryton.mo +0 -0
  26. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/pt/LC_MESSAGES/tryton.mo +0 -0
  27. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/ro/LC_MESSAGES/tryton.mo +0 -0
  28. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/ru/LC_MESSAGES/tryton.mo +0 -0
  29. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/sl/LC_MESSAGES/tryton.mo +0 -0
  30. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/tr/LC_MESSAGES/tryton.mo +0 -0
  31. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/uk/LC_MESSAGES/tryton.mo +0 -0
  32. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/zh_CN/LC_MESSAGES/tryton.mo +0 -0
  33. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/screen/screen.py +60 -36
  34. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/char.py +5 -6
  35. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/graph_gtk/graph.py +3 -1
  36. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/list_gtk/editabletree.py +2 -1
  37. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/list_gtk/widget.py +21 -1
  38. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/win_form.py +1 -1
  39. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/win_import.py +9 -4
  40. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/wizard.py +2 -0
  41. {tryton-6.8.12 → tryton-6.8.14}/tryton/jsonrpc.py +5 -1
  42. {tryton-6.8.12 → tryton-6.8.14}/tryton/plugins/__init__.py +5 -3
  43. {tryton-6.8.12 → tryton-6.8.14}/tryton/pyson.py +1 -1
  44. {tryton-6.8.12 → tryton-6.8.14}/tryton.egg-info/PKG-INFO +1 -1
  45. {tryton-6.8.12 → tryton-6.8.14}/LICENSE +0 -0
  46. {tryton-6.8.12 → tryton-6.8.14}/MANIFEST.in +0 -0
  47. {tryton-6.8.12 → tryton-6.8.14}/README.rst +0 -0
  48. {tryton-6.8.12 → tryton-6.8.14}/bin/tryton +0 -0
  49. {tryton-6.8.12 → tryton-6.8.14}/catalan.nsh +0 -0
  50. {tryton-6.8.12 → tryton-6.8.14}/darwin/gtk-3.0/gdk-pixbuf.loaders +0 -0
  51. {tryton-6.8.12 → tryton-6.8.14}/darwin/gtk-3.0/gtk.immodules +0 -0
  52. {tryton-6.8.12 → tryton-6.8.14}/doc/conf.py +0 -0
  53. {tryton-6.8.12 → tryton-6.8.14}/doc/glossary.rst +0 -0
  54. {tryton-6.8.12 → tryton-6.8.14}/doc/index.rst +0 -0
  55. {tryton-6.8.12 → tryton-6.8.14}/doc/installation.rst +0 -0
  56. {tryton-6.8.12 → tryton-6.8.14}/doc/releases.rst +0 -0
  57. {tryton-6.8.12 → tryton-6.8.14}/doc/usage.rst +0 -0
  58. {tryton-6.8.12 → tryton-6.8.14}/english.nsh +0 -0
  59. {tryton-6.8.12 → tryton-6.8.14}/farsi.nsh +0 -0
  60. {tryton-6.8.12 → tryton-6.8.14}/french.nsh +0 -0
  61. {tryton-6.8.12 → tryton-6.8.14}/german.nsh +0 -0
  62. {tryton-6.8.12 → tryton-6.8.14}/make-darwin-installer.sh +0 -0
  63. {tryton-6.8.12 → tryton-6.8.14}/make-win32-installer.sh +0 -0
  64. {tryton-6.8.12 → tryton-6.8.14}/portuguese.nsh +0 -0
  65. {tryton-6.8.12 → tryton-6.8.14}/setup.cfg +0 -0
  66. {tryton-6.8.12 → tryton-6.8.14}/setup.nsi +0 -0
  67. {tryton-6.8.12 → tryton-6.8.14}/setup.py +0 -0
  68. {tryton-6.8.12 → tryton-6.8.14}/slovenian.nsh +0 -0
  69. {tryton-6.8.12 → tryton-6.8.14}/spanish.nsh +0 -0
  70. {tryton-6.8.12 → tryton-6.8.14}/tox.ini +0 -0
  71. {tryton-6.8.12 → tryton-6.8.14}/tryton/action/__init__.py +0 -0
  72. {tryton-6.8.12 → tryton-6.8.14}/tryton/action/main.py +0 -0
  73. {tryton-6.8.12 → tryton-6.8.14}/tryton/bus.py +0 -0
  74. {tryton-6.8.12 → tryton-6.8.14}/tryton/client.py +0 -0
  75. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/__init__.py +0 -0
  76. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/button.py +0 -0
  77. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/cellrendererbinary.py +0 -0
  78. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/cellrendererbutton.py +0 -0
  79. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/cellrendererclickablepixbuf.py +0 -0
  80. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/cellrenderercombo.py +0 -0
  81. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/cellrendererfloat.py +0 -0
  82. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/cellrendererinteger.py +0 -0
  83. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/cellrenderertext.py +0 -0
  84. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/cellrenderertoggle.py +0 -0
  85. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/completion.py +0 -0
  86. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/domain_inversion.py +0 -0
  87. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/domain_parser.py +0 -0
  88. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/entry_position.py +0 -0
  89. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/environment.py +0 -0
  90. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/focus.py +0 -0
  91. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/htmltextbuffer.py +0 -0
  92. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/number_entry.py +0 -0
  93. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/popup_menu.py +0 -0
  94. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/richtext.py +0 -0
  95. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/selection.py +0 -0
  96. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/timedelta.py +0 -0
  97. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/underline.py +0 -0
  98. {tryton-6.8.12 → tryton-6.8.14}/tryton/common/widget_style.py +0 -0
  99. {tryton-6.8.12 → tryton-6.8.14}/tryton/config.py +0 -0
  100. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/bg/LC_MESSAGES/tryton.po +0 -0
  101. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/ca/LC_MESSAGES/tryton.po +0 -0
  102. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/cs/LC_MESSAGES/tryton.po +0 -0
  103. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/de/LC_MESSAGES/tryton.po +0 -0
  104. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/es/LC_MESSAGES/tryton.po +0 -0
  105. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/es_419/LC_MESSAGES/tryton.po +0 -0
  106. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/et/LC_MESSAGES/tryton.po +0 -0
  107. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/fa/LC_MESSAGES/tryton.po +0 -0
  108. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/fi/LC_MESSAGES/tryton.po +0 -0
  109. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/fr/LC_MESSAGES/tryton.po +0 -0
  110. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/hu/LC_MESSAGES/tryton.po +0 -0
  111. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/id/LC_MESSAGES/tryton.po +0 -0
  112. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/it/LC_MESSAGES/tryton.po +0 -0
  113. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/ja_JP/LC_MESSAGES/tryton.po +0 -0
  114. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/lo/LC_MESSAGES/tryton.po +0 -0
  115. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/lt/LC_MESSAGES/tryton.po +0 -0
  116. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/nl/LC_MESSAGES/tryton.po +0 -0
  117. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/pl/LC_MESSAGES/tryton.po +0 -0
  118. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/pt/LC_MESSAGES/tryton.po +0 -0
  119. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/ro/LC_MESSAGES/tryton.po +0 -0
  120. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/ru/LC_MESSAGES/tryton.po +0 -0
  121. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/sl/LC_MESSAGES/tryton.po +0 -0
  122. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/tr/LC_MESSAGES/tryton.po +0 -0
  123. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/tryton.pot +0 -0
  124. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/uk/LC_MESSAGES/tryton.po +0 -0
  125. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/locale/zh_CN/LC_MESSAGES/tryton.po +0 -0
  126. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/LICENSE +0 -0
  127. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-add.svg +0 -0
  128. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-archive.svg +0 -0
  129. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-arrow-down.svg +0 -0
  130. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-arrow-left.svg +0 -0
  131. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-arrow-right.svg +0 -0
  132. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-arrow-up.svg +0 -0
  133. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-attach.svg +0 -0
  134. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-back.svg +0 -0
  135. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-bookmark-border.svg +0 -0
  136. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-bookmark.svg +0 -0
  137. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-bookmarks.svg +0 -0
  138. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-cancel.svg +0 -0
  139. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-clear.svg +0 -0
  140. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-close.svg +0 -0
  141. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-copy.svg +0 -0
  142. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-create.svg +0 -0
  143. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-date.svg +0 -0
  144. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-delete.svg +0 -0
  145. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-drag.svg +0 -0
  146. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-email.svg +0 -0
  147. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-error.svg +0 -0
  148. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-exit.svg +0 -0
  149. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-export.svg +0 -0
  150. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-filter.svg +0 -0
  151. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-format-align-center.svg +0 -0
  152. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-format-align-justify.svg +0 -0
  153. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-format-align-left.svg +0 -0
  154. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-format-align-right.svg +0 -0
  155. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-format-bold.svg +0 -0
  156. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-format-color-text.svg +0 -0
  157. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-format-italic.svg +0 -0
  158. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-format-underline.svg +0 -0
  159. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-forward.svg +0 -0
  160. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-history.svg +0 -0
  161. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-icon.png +0 -0
  162. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-icon.svg +0 -0
  163. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-import.svg +0 -0
  164. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-info.svg +0 -0
  165. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-launch.svg +0 -0
  166. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-link.svg +0 -0
  167. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-log.svg +0 -0
  168. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-menu.svg +0 -0
  169. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-note.svg +0 -0
  170. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-ok.svg +0 -0
  171. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-open.svg +0 -0
  172. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-print.svg +0 -0
  173. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-public.svg +0 -0
  174. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-question.svg +0 -0
  175. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-refresh.svg +0 -0
  176. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-remove.svg +0 -0
  177. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-save.svg +0 -0
  178. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-search.svg +0 -0
  179. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-send.svg +0 -0
  180. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-star-border.svg +0 -0
  181. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-star.svg +0 -0
  182. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-switch.svg +0 -0
  183. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-translate.svg +0 -0
  184. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-unarchive.svg +0 -0
  185. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-undo.svg +0 -0
  186. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton-warning.svg +0 -0
  187. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton.icns +0 -0
  188. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton.ico +0 -0
  189. {tryton-6.8.12 → tryton-6.8.14}/tryton/data/pixmaps/tryton/tryton.svg +0 -0
  190. {tryton-6.8.12 → tryton-6.8.14}/tryton/device_cookie.py +0 -0
  191. {tryton-6.8.12 → tryton-6.8.14}/tryton/exceptions.py +0 -0
  192. {tryton-6.8.12 → tryton-6.8.14}/tryton/fingerprints.py +0 -0
  193. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/__init__.py +0 -0
  194. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/main.py +0 -0
  195. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/__init__.py +0 -0
  196. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/about.py +0 -0
  197. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/attachment.py +0 -0
  198. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/board.py +0 -0
  199. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/dblogin.py +0 -0
  200. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/email_.py +0 -0
  201. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/form.py +0 -0
  202. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/infobar.py +0 -0
  203. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/limit.py +0 -0
  204. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/log.py +0 -0
  205. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/nomodal.py +0 -0
  206. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/note.py +0 -0
  207. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/preference.py +0 -0
  208. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/revision.py +0 -0
  209. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/tabcontent.py +0 -0
  210. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_board/__init__.py +0 -0
  211. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_board/action.py +0 -0
  212. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_board/view_board.py +0 -0
  213. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/__init__.py +0 -0
  214. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/model/__init__.py +0 -0
  215. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/model/field.py +0 -0
  216. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/model/group.py +0 -0
  217. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/model/record.py +0 -0
  218. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/screen/__init__.py +0 -0
  219. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/__init__.py +0 -0
  220. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/calendar_.py +0 -0
  221. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/calendar_gtk/__init__.py +0 -0
  222. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py +0 -0
  223. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/calendar_gtk/dates_period.py +0 -0
  224. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/calendar_gtk/toolbar.py +0 -0
  225. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form.py +0 -0
  226. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/__init__.py +0 -0
  227. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/binary.py +0 -0
  228. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/calendar_.py +0 -0
  229. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/checkbox.py +0 -0
  230. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/dictionary.py +0 -0
  231. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/document.py +0 -0
  232. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/float.py +0 -0
  233. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/image.py +0 -0
  234. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/integer.py +0 -0
  235. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/many2many.py +0 -0
  236. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/many2one.py +0 -0
  237. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/multiselection.py +0 -0
  238. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/one2many.py +0 -0
  239. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/one2one.py +0 -0
  240. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/progressbar.py +0 -0
  241. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/pyson.py +0 -0
  242. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/reference.py +0 -0
  243. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/richtextbox.py +0 -0
  244. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/selection.py +0 -0
  245. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/state_widget.py +0 -0
  246. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/textbox.py +0 -0
  247. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/timedelta.py +0 -0
  248. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/url.py +0 -0
  249. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/form_gtk/widget.py +0 -0
  250. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/graph.py +0 -0
  251. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/graph_gtk/__init__.py +0 -0
  252. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/graph_gtk/bar.py +0 -0
  253. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/graph_gtk/line.py +0 -0
  254. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/graph_gtk/pie.py +0 -0
  255. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/list.py +0 -0
  256. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/list_form.py +0 -0
  257. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/list_gtk/__init__.py +0 -0
  258. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/view_form/view/screen_container.py +0 -0
  259. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/win_csv.py +0 -0
  260. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/win_export.py +0 -0
  261. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/win_search.py +0 -0
  262. {tryton-6.8.12 → tryton-6.8.14}/tryton/gui/window/window.py +0 -0
  263. {tryton-6.8.12 → tryton-6.8.14}/tryton/plugins/translation/__init__.py +0 -0
  264. {tryton-6.8.12 → tryton-6.8.14}/tryton/rpc.py +0 -0
  265. {tryton-6.8.12 → tryton-6.8.14}/tryton/tests/__init__.py +0 -0
  266. {tryton-6.8.12 → tryton-6.8.14}/tryton/tests/test_common.py +0 -0
  267. {tryton-6.8.12 → tryton-6.8.14}/tryton/tests/test_common_domain_parser.py +0 -0
  268. {tryton-6.8.12 → tryton-6.8.14}/tryton/tests/test_common_selection.py +0 -0
  269. {tryton-6.8.12 → tryton-6.8.14}/tryton/tests/test_common_timedelta.py +0 -0
  270. {tryton-6.8.12 → tryton-6.8.14}/tryton/translate.py +0 -0
  271. {tryton-6.8.12 → tryton-6.8.14}/tryton.desktop +0 -0
  272. {tryton-6.8.12 → tryton-6.8.14}/tryton.egg-info/SOURCES.txt +0 -0
  273. {tryton-6.8.12 → tryton-6.8.14}/tryton.egg-info/dependency_links.txt +0 -0
  274. {tryton-6.8.12 → tryton-6.8.14}/tryton.egg-info/not-zip-safe +0 -0
  275. {tryton-6.8.12 → tryton-6.8.14}/tryton.egg-info/requires.txt +0 -0
  276. {tryton-6.8.12 → tryton-6.8.14}/tryton.egg-info/top_level.txt +0 -0
  277. {tryton-6.8.12 → tryton-6.8.14}/win32/gtk-3.0/gdk-pixbuf.loaders +0 -0
  278. {tryton-6.8.12 → tryton-6.8.14}/win32/gtk-3.0/gtk.immodules +0 -0
@@ -1,4 +1,14 @@
1
1
 
2
+ Version 6.8.14 - 2024-05-01
3
+ ---------------------------
4
+ * Bug fixes (see mercurial logs for details)
5
+
6
+
7
+ Version 6.8.13 - 2024-04-17
8
+ ---------------------------
9
+ * Bug fixes (see mercurial logs for details)
10
+
11
+
2
12
  Version 6.8.12 - 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.8.12
3
+ Version: 6.8.14
4
4
  Summary: Tryton desktop client
5
5
  Home-page: http://www.tryton.org/
6
6
  Download-URL: http://downloads.tryton.org/6.8/
@@ -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.8.12"
3
+ __version__ = "6.8.14"
4
4
  import locale
5
5
 
6
6
  import gi
@@ -229,7 +229,7 @@ class ModelAccess(object):
229
229
  self._models = rpc.execute('model', 'ir.model', 'list_models',
230
230
  rpc.CONTEXT)
231
231
  except TrytonServerError:
232
- pass
232
+ logger.error("Unable to get model list.")
233
233
 
234
234
  def __getitem__(self, model):
235
235
  if model in self._access:
@@ -243,7 +243,14 @@ class ModelAccess(object):
243
243
  access = rpc.execute('model', 'ir.model.access', 'get_access',
244
244
  self._models[to_load], rpc.CONTEXT)
245
245
  except TrytonServerError:
246
- access = {}
246
+ logger.error("Unable to get access for %s.", model)
247
+ access = {
248
+ model: {
249
+ 'read': True,
250
+ 'write': False,
251
+ 'create': False,
252
+ 'delete': False},
253
+ }
247
254
  self._access.update(access)
248
255
  return self._access[model]
249
256
 
@@ -1260,7 +1267,7 @@ class RPCProgress(object):
1260
1267
 
1261
1268
  def return_():
1262
1269
  if self.exception:
1263
- raise self.exception
1270
+ raise RPCException(self.exception)
1264
1271
  else:
1265
1272
  return self.res
1266
1273
 
@@ -9,7 +9,9 @@ from gi.repository import Gdk, GObject, Gtk
9
9
 
10
10
  from .common import IconFactory
11
11
 
12
- __all__ = ['Date', 'CellRendererDate', 'Time', 'CellRendererTime', 'DateTime']
12
+ __all__ = [
13
+ 'Date', 'CellRendererDate', 'Time', 'CellRendererTime', 'DateTime',
14
+ 'date_parse']
13
15
 
14
16
  _ = gettext.gettext
15
17
 
@@ -114,11 +114,10 @@ class Screen:
114
114
  return child
115
115
 
116
116
  # Remove first level Viewport and ScrolledWindow to fill the Vbox
117
- for widget in [
118
- self.context_screen.screen_container.viewport,
119
- self.context_screen.current_view.widget.get_children()[0],
120
- ]:
121
- remove_bin(widget)
117
+ remove_bin(self.context_screen.screen_container.viewport)
118
+ if self.context_screen.current_view:
119
+ remove_bin(
120
+ self.context_screen.current_view.widget.get_children()[0])
122
121
 
123
122
  self.screen_container.filter_vbox.pack_start(
124
123
  context_widget, expand=False, fill=True, padding=0)
@@ -515,7 +514,8 @@ class Screen:
515
514
  self.group.destroy()
516
515
 
517
516
  def default_row_activate(self):
518
- if (self.current_view.view_type == 'tree'
517
+ if (self.current_view
518
+ and self.current_view.view_type == 'tree'
519
519
  and int(self.current_view.attributes.get('keyword_open', 0))):
520
520
  return Action.exec_keyword('tree_open', {
521
521
  'model': self.model_name,
@@ -637,7 +637,7 @@ class Screen:
637
637
 
638
638
  def new(self, default=True, rec_name=None):
639
639
  previous_view = self.current_view
640
- if self.current_view.view_type == 'calendar':
640
+ if self.current_view and self.current_view.view_type == 'calendar':
641
641
  selected_date = self.current_view.get_selected_date()
642
642
  if self.current_view and not self.current_view.creatable:
643
643
  self.switch_view(creatable=True)
@@ -690,16 +690,19 @@ class Screen:
690
690
 
691
691
  def save_current(self):
692
692
  if not self.current_record:
693
- if self.current_view.view_type == 'tree' and len(self.group):
693
+ if (self.current_view
694
+ and self.current_view.view_type == 'tree'
695
+ and len(self.group)):
694
696
  self.current_record = self.group[0]
695
697
  else:
696
698
  return True
697
- self.current_view.set_value()
698
699
  saved = False
699
700
  record_id = None
700
- fields = self.current_view.get_fields()
701
+ if self.current_view:
702
+ self.current_view.set_value()
703
+ fields = self.current_view.get_fields()
701
704
  path = self.current_record.get_path(self.group)
702
- if self.current_view.view_type == 'tree':
705
+ if self.current_view and self.current_view.view_type == 'tree':
703
706
  # False value must be not saved
704
707
  saved = all((
705
708
  x is not False and x >= 0
@@ -709,7 +712,7 @@ class Screen:
709
712
  record_id = self.current_record.save(force_reload=True)
710
713
  # False value must be not saved
711
714
  saved = record_id is not False and record_id >= 0
712
- else:
715
+ elif self.current_view:
713
716
  self.set_cursor()
714
717
  self.current_view.display()
715
718
  return False
@@ -737,17 +740,19 @@ class Screen:
737
740
  def get(self):
738
741
  if not self.current_record:
739
742
  return None
740
- self.current_view.set_value()
743
+ if self.current_view:
744
+ self.current_view.set_value()
741
745
  return self.current_record.get()
742
746
 
743
747
  def get_on_change_value(self):
744
748
  if not self.current_record:
745
749
  return None
746
- self.current_view.set_value()
750
+ if self.current_view:
751
+ self.current_view.set_value()
747
752
  return self.current_record.get_on_change_value()
748
753
 
749
754
  def modified(self):
750
- if self.current_view.view_type != 'tree':
755
+ if self.current_view and self.current_view.view_type != 'tree':
751
756
  if self.current_record:
752
757
  if self.current_record.modified or self.current_record.id < 0:
753
758
  return True
@@ -755,7 +760,7 @@ class Screen:
755
760
  for record in self.group:
756
761
  if record.modified or record.id < 0:
757
762
  return True
758
- if self.current_view.modified:
763
+ if self.current_view and self.current_view.modified:
759
764
  return True
760
765
  return False
761
766
 
@@ -821,6 +826,8 @@ class Screen:
821
826
 
822
827
  def set_tree_state(self):
823
828
  view = self.current_view
829
+ if not view:
830
+ return
824
831
  if view.view_type not in {'tree', 'form', 'list-form'}:
825
832
  return
826
833
  if id(view) in self.tree_states_done:
@@ -930,7 +937,8 @@ class Screen:
930
937
 
931
938
  def load(self, ids, set_cursor=True, modified=False, position=-1):
932
939
  self.group.load(ids, modified=modified, position=position)
933
- self.current_view.reset()
940
+ if self.current_view:
941
+ self.current_view.reset()
934
942
  if ids and self.current_view.view_type != 'calendar':
935
943
  self.display(ids[0])
936
944
  else:
@@ -950,7 +958,7 @@ class Screen:
950
958
  self.current_record = self.group[0]
951
959
  else:
952
960
  self.current_record = None
953
- if self.views:
961
+ if self.views and self.current_view:
954
962
  self.search_active(self.current_view.view_type
955
963
  in ('tree', 'graph', 'calendar'))
956
964
  for view in self.views:
@@ -982,7 +990,8 @@ class Screen:
982
990
 
983
991
  def _get_next_record(self, test=False):
984
992
  view = self.current_view
985
- if (view.view_type in {'tree', 'form'}
993
+ if (view
994
+ and view.view_type in {'tree', 'form'}
986
995
  and self.current_record
987
996
  and self.current_record.group):
988
997
  group = self.current_record.group
@@ -1010,12 +1019,14 @@ class Screen:
1010
1019
  record = next
1011
1020
  break
1012
1021
  return record
1013
- elif (view.view_type == 'list-form' and len(self.group)
1022
+ elif (view
1023
+ and view.view_type == 'list-form'
1024
+ and len(self.group)
1014
1025
  and self.current_record in self.group):
1015
1026
  idx = self.group.index(self.current_record)
1016
1027
  if 0 <= idx < len(self.group) - 1:
1017
1028
  return self.group[idx + 1]
1018
- elif view.view_type == 'calendar':
1029
+ elif view and view.view_type == 'calendar':
1019
1030
  record = self.current_record
1020
1031
  goocalendar = view.widgets.get('goocalendar')
1021
1032
  if goocalendar:
@@ -1049,15 +1060,18 @@ class Screen:
1049
1060
 
1050
1061
  def display_next(self):
1051
1062
  view = self.current_view
1052
- view.set_value()
1063
+ if view:
1064
+ view.set_value()
1053
1065
  self.set_cursor(reset_view=False)
1054
1066
  self.current_record = self._get_next_record()
1055
1067
  self.set_cursor(reset_view=False)
1056
- view.display()
1068
+ if view:
1069
+ view.display()
1057
1070
 
1058
1071
  def _get_prev_record(self, test=False):
1059
1072
  view = self.current_view
1060
- if (view.view_type in {'tree', 'form'}
1073
+ if (view
1074
+ and view.view_type in {'tree', 'form'}
1061
1075
  and self.current_record
1062
1076
  and self.current_record.group):
1063
1077
  group = self.current_record.group
@@ -1075,7 +1089,7 @@ class Screen:
1075
1089
  if parent and record.model_name == parent.model_name:
1076
1090
  record = parent
1077
1091
  return record
1078
- elif view.view_type == 'calendar':
1092
+ elif view and view.view_type == 'calendar':
1079
1093
  record = self.current_record
1080
1094
  goocalendar = view.widgets.get('goocalendar')
1081
1095
  if goocalendar:
@@ -1100,7 +1114,9 @@ class Screen:
1100
1114
  if prev_id >= 0:
1101
1115
  return events[prev_id].record
1102
1116
  break
1103
- elif (view.view_type == 'list-form' and len(self.group)
1117
+ elif (view
1118
+ and view.view_type == 'list-form'
1119
+ and len(self.group)
1104
1120
  and self.current_record in self.group):
1105
1121
  idx = self.group.index(self.current_record)
1106
1122
  if 0 < idx <= len(self.group) - 1:
@@ -1114,11 +1130,13 @@ class Screen:
1114
1130
 
1115
1131
  def display_prev(self):
1116
1132
  view = self.current_view
1117
- view.set_value()
1133
+ if view:
1134
+ view.set_value()
1118
1135
  self.set_cursor(reset_view=False)
1119
1136
  self.current_record = self._get_prev_record()
1120
1137
  self.set_cursor(reset_view=False)
1121
- view.display()
1138
+ if view:
1139
+ view.display()
1122
1140
 
1123
1141
  def invalid_message(self, record=None):
1124
1142
  if record is None:
@@ -1191,7 +1209,7 @@ class Screen:
1191
1209
  if not self.selected_records:
1192
1210
  return []
1193
1211
 
1194
- buttons = self.current_view.get_buttons()
1212
+ buttons = self.current_view.get_buttons() if self.current_view else []
1195
1213
 
1196
1214
  for record in self.selected_records:
1197
1215
  buttons = [b for b in buttons if is_active(record, b)]
@@ -1201,8 +1219,9 @@ class Screen:
1201
1219
 
1202
1220
  def button(self, button):
1203
1221
  'Execute button on the selected records'
1204
- self.current_view.set_value()
1205
- fields = self.current_view.get_fields()
1222
+ if self.current_view:
1223
+ self.current_view.set_value()
1224
+ fields = self.current_view.get_fields()
1206
1225
  for record in self.selected_records:
1207
1226
  domain = record.expr_eval(
1208
1227
  button.get('states', {})).get('pre_validate', [])
@@ -1216,7 +1235,8 @@ class Screen:
1216
1235
  if button.get('confirm', False) and not sur(button['confirm']):
1217
1236
  return
1218
1237
  if button.get('type', 'class') == 'class':
1219
- if not self.current_record.save(force_reload=False):
1238
+ record_id = self.current_record.save(force_reload=False)
1239
+ if record_id is False or record_id < 0:
1220
1240
  return
1221
1241
  if button.get('type', 'class') == 'class':
1222
1242
  self._button_class(button)
@@ -1247,6 +1267,7 @@ class Screen:
1247
1267
  except RPCException:
1248
1268
  action = None
1249
1269
  self.reload(ids, written=True)
1270
+ self.record_saved()
1250
1271
  if isinstance(action, str):
1251
1272
  self.client_action(action)
1252
1273
  elif action:
@@ -1283,7 +1304,9 @@ class Screen:
1283
1304
  elif action.startswith('switch'):
1284
1305
  self.switch_view(*action.split(None, 2)[1:])
1285
1306
  elif action == 'reload':
1286
- if (self.current_view.view_type in ['tree', 'graph', 'calendar']
1307
+ if (self.current_view
1308
+ and self.current_view.view_type in [
1309
+ 'tree', 'graph', 'calendar']
1287
1310
  and not self.parent):
1288
1311
  self.search_filter()
1289
1312
  elif action == 'reload menu':
@@ -1313,7 +1336,7 @@ class Screen:
1313
1336
  cls=JSONEncoder, separators=(',', ':'))))
1314
1337
  path = [CONFIG['login.db'], 'model', self.model_name]
1315
1338
  view_ids = [v.view_id for v in self.views] + self.view_ids
1316
- if self.current_view.view_type != 'form':
1339
+ if self.current_view and self.current_view.view_type != 'form':
1317
1340
  if self.search_value:
1318
1341
  search_value = self.search_value
1319
1342
  else:
@@ -1325,8 +1348,9 @@ class Screen:
1325
1348
  separators=(',', ':'))))
1326
1349
  elif self.current_record and self.current_record.id > -1:
1327
1350
  path.append(str(self.current_record.id))
1328
- i = view_ids.index(self.current_view.view_id)
1329
- view_ids = view_ids[i:] + view_ids[:i]
1351
+ if self.current_view:
1352
+ i = view_ids.index(self.current_view.view_id)
1353
+ view_ids = view_ids[i:] + view_ids[:i]
1330
1354
  if view_ids:
1331
1355
  query_string.append(('views', json.dumps(
1332
1356
  view_ids, separators=(',', ':'))))
@@ -171,10 +171,9 @@ class Password(Char):
171
171
  self.widget.pack_start(
172
172
  self.visibility_checkbox, expand=False, fill=True, padding=0)
173
173
 
174
- def _readonly_set(self, value):
175
- super(Char, self)._readonly_set(value)
176
- self.entry.set_editable(not value)
177
- self.visibility_checkbox.props.visible = not value
178
-
179
174
  def toggle_visibility(self, button):
180
- self.entry.props.visibility = not self.entry.props.visibility
175
+ if self.autocomplete:
176
+ entry = self.entry.get_child()
177
+ else:
178
+ entry = self.entry
179
+ entry.props.visibility = not self.entry.props.visibility
@@ -12,6 +12,7 @@ from dateutil.relativedelta import relativedelta
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 COLOR_SCHEMES, generateColorscheme, hex2rgb
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
@@ -163,7 +163,8 @@ class EditableTreeView(TreeView):
163
163
  for renderer in column.get_cells():
164
164
  if renderer.props.editing:
165
165
  widget = self.view.get_column_widget(column)
166
- self.on_editing_done(widget.editable, renderer)
166
+ editable = widget.get_editable(renderer)
167
+ self.on_editing_done(editable, renderer)
167
168
  return True
168
169
 
169
170
  def on_keypressed(self, entry, event, renderer):
@@ -23,7 +23,8 @@ from tryton.common.cellrenderertext import (
23
23
  CellRendererText, CellRendererTextCompletion)
24
24
  from tryton.common.cellrenderertoggle import CellRendererToggle
25
25
  from tryton.common.completion import get_completion, update_completion
26
- from tryton.common.datetime_ import CellRendererDate, CellRendererTime
26
+ from tryton.common.datetime_ import (
27
+ CellRendererDate, CellRendererTime, date_parse)
27
28
  from tryton.common.domain_parser import quote
28
29
  from tryton.common.selection import (
29
30
  PopdownMixin, SelectionMixin, selection_shortcuts)
@@ -376,6 +377,14 @@ class GenericText(Cell):
376
377
  editable.connect('remove-widget', remove)
377
378
  return False
378
379
 
380
+ def get_editable(self, renderer):
381
+ if self.renderer == renderer:
382
+ return self.editable
383
+ for cell in self.prefixes + self.suffixes:
384
+ editable = cell.get_editable(renderer)
385
+ if editable:
386
+ return editable
387
+
379
388
 
380
389
  class Char(GenericText):
381
390
 
@@ -493,6 +502,17 @@ class Date(GenericText):
493
502
  else:
494
503
  return ''
495
504
 
505
+ def value_from_text(self, record, text, callback=None):
506
+ if isinstance(text, str):
507
+ field = record[self.attrs['name']]
508
+ try:
509
+ # Use a datetime instance and rely on field to convert to the
510
+ # proper type
511
+ text = date_parse(text, self.get_format(record, field))
512
+ except (ValueError, OverflowError):
513
+ text = None
514
+ return super().value_from_text(record, text, callback=callback)
515
+
496
516
 
497
517
  class Time(Date):
498
518
 
@@ -447,7 +447,7 @@ class WinForm(NoModal, InfoBar):
447
447
  record.modified_fields.setdefault('id')
448
448
  result = False
449
449
  else:
450
- result = response_id not in cancel_responses
450
+ result = (response_id not in cancel_responses) and not readonly
451
451
  if self.callback:
452
452
  self.callback(result)
453
453
  self.destroy()
@@ -2,6 +2,7 @@
2
2
  # this repository contains the full copyright notices and license terms.
3
3
  import base64
4
4
  import csv
5
+ import datetime as dt
5
6
  import gettext
6
7
  import locale
7
8
  from decimal import Decimal
@@ -10,7 +11,6 @@ from gi.repository import Gtk
10
11
 
11
12
  import tryton.common as common
12
13
  from tryton.common import RPCException, RPCExecute
13
- from tryton.common.datetime_ import date_parse
14
14
  from tryton.gui.window.win_csv import WinCSV
15
15
 
16
16
  _ = gettext.gettext
@@ -211,13 +211,18 @@ class WinImport(WinCSV):
211
211
  val = locale.atof(val)
212
212
  elif type_ == 'numeric':
213
213
  val = Decimal(locale.delocalize(val))
214
- elif type_ in ['date', 'datetime']:
215
- val = date_parse(val, common.date_format())
214
+ elif type_ == 'date':
215
+ val = dt.datetime.strptime(
216
+ val, common.date_format()).date()
217
+ elif type_ == 'datetime':
218
+ val = dt.datetime.strptime(
219
+ val, common.date_format() + ' %X')
216
220
  elif type_ == 'binary':
217
221
  val = base64.b64decode(val)
218
222
  row.append(val)
219
223
  data.append(row)
220
- except (IOError, UnicodeDecodeError, csv.Error) as exception:
224
+ except (IOError, UnicodeDecodeError, csv.Error, ValueError) \
225
+ as exception:
221
226
  common.warning(str(exception), _("Import failed"))
222
227
  return
223
228
  try:
@@ -402,6 +402,8 @@ class WizardDialog(Wizard, NoModal):
402
402
  return True
403
403
 
404
404
  def show(self):
405
+ if not self.screen:
406
+ return
405
407
  view = self.screen.current_view
406
408
  if view.view_type == 'form':
407
409
  expand = False
@@ -138,7 +138,6 @@ class JSONUnmarshaller(object):
138
138
  class Transport(xmlrpc.client.SafeTransport):
139
139
 
140
140
  accept_gzip_encoding = True
141
- encode_threshold = 1400 # common MTU
142
141
 
143
142
  def __init__(
144
143
  self, fingerprints=None, ca_certs=None, session=None):
@@ -241,6 +240,11 @@ class Transport(xmlrpc.client.SafeTransport):
241
240
  self._connection[1].sock.settimeout(DEFAULT_TIMEOUT)
242
241
  return self._connection[1]
243
242
 
243
+ @property
244
+ def encode_threshold(self):
245
+ if self.session:
246
+ return 1400 # common MTU
247
+
244
248
 
245
249
  class ServerProxy(xmlrpc.client.ServerProxy):
246
250
  __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):
@@ -196,7 +196,7 @@ class Not(PYSON):
196
196
 
197
197
  @staticmethod
198
198
  def eval(dct, context):
199
- return not dct['v']
199
+ return not Bool(dct['v']).eval(dct, context)
200
200
 
201
201
 
202
202
  class Bool(PYSON):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tryton
3
- Version: 6.8.12
3
+ Version: 6.8.14
4
4
  Summary: Tryton desktop client
5
5
  Home-page: http://www.tryton.org/
6
6
  Download-URL: http://downloads.tryton.org/6.8/
File without changes