tryton 7.0.7__py3-none-any.whl → 7.4.4__py3-none-any.whl

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 (105) hide show
  1. tryton/__init__.py +1 -1
  2. tryton/cache.py +34 -0
  3. tryton/common/common.py +149 -73
  4. tryton/common/completion.py +2 -2
  5. tryton/common/datetime_.py +3 -1
  6. tryton/common/domain_inversion.py +2 -1
  7. tryton/common/domain_parser.py +22 -11
  8. tryton/common/popup_menu.py +1 -1
  9. tryton/common/selection.py +6 -3
  10. tryton/common/tempfile.py +34 -0
  11. tryton/config.py +4 -5
  12. tryton/data/locale/bg/LC_MESSAGES/tryton.mo +0 -0
  13. tryton/data/locale/bg/LC_MESSAGES/tryton.po +69 -20
  14. tryton/data/locale/ca/LC_MESSAGES/tryton.mo +0 -0
  15. tryton/data/locale/ca/LC_MESSAGES/tryton.po +70 -25
  16. tryton/data/locale/cs/LC_MESSAGES/tryton.mo +0 -0
  17. tryton/data/locale/cs/LC_MESSAGES/tryton.po +68 -21
  18. tryton/data/locale/de/LC_MESSAGES/tryton.mo +0 -0
  19. tryton/data/locale/de/LC_MESSAGES/tryton.po +71 -26
  20. tryton/data/locale/es/LC_MESSAGES/tryton.mo +0 -0
  21. tryton/data/locale/es/LC_MESSAGES/tryton.po +68 -23
  22. tryton/data/locale/es_419/LC_MESSAGES/tryton.mo +0 -0
  23. tryton/data/locale/es_419/LC_MESSAGES/tryton.po +72 -22
  24. tryton/data/locale/et/LC_MESSAGES/tryton.mo +0 -0
  25. tryton/data/locale/et/LC_MESSAGES/tryton.po +73 -23
  26. tryton/data/locale/fa/LC_MESSAGES/tryton.mo +0 -0
  27. tryton/data/locale/fa/LC_MESSAGES/tryton.po +74 -25
  28. tryton/data/locale/fi/LC_MESSAGES/tryton.mo +0 -0
  29. tryton/data/locale/fi/LC_MESSAGES/tryton.po +63 -20
  30. tryton/data/locale/fr/LC_MESSAGES/tryton.mo +0 -0
  31. tryton/data/locale/fr/LC_MESSAGES/tryton.po +73 -28
  32. tryton/data/locale/hu/LC_MESSAGES/tryton.mo +0 -0
  33. tryton/data/locale/hu/LC_MESSAGES/tryton.po +75 -23
  34. tryton/data/locale/id/LC_MESSAGES/tryton.mo +0 -0
  35. tryton/data/locale/id/LC_MESSAGES/tryton.po +72 -23
  36. tryton/data/locale/it/LC_MESSAGES/tryton.mo +0 -0
  37. tryton/data/locale/it/LC_MESSAGES/tryton.po +73 -24
  38. tryton/data/locale/ja_JP/LC_MESSAGES/tryton.mo +0 -0
  39. tryton/data/locale/lo/LC_MESSAGES/tryton.mo +0 -0
  40. tryton/data/locale/lo/LC_MESSAGES/tryton.po +74 -25
  41. tryton/data/locale/lt/LC_MESSAGES/tryton.mo +0 -0
  42. tryton/data/locale/lt/LC_MESSAGES/tryton.po +73 -23
  43. tryton/data/locale/nl/LC_MESSAGES/tryton.mo +0 -0
  44. tryton/data/locale/nl/LC_MESSAGES/tryton.po +72 -27
  45. tryton/data/locale/pl/LC_MESSAGES/tryton.mo +0 -0
  46. tryton/data/locale/pl/LC_MESSAGES/tryton.po +113 -78
  47. tryton/data/locale/pt/LC_MESSAGES/tryton.mo +0 -0
  48. tryton/data/locale/pt/LC_MESSAGES/tryton.po +73 -24
  49. tryton/data/locale/ro/LC_MESSAGES/tryton.mo +0 -0
  50. tryton/data/locale/ro/LC_MESSAGES/tryton.po +87 -36
  51. tryton/data/locale/ru/LC_MESSAGES/tryton.mo +0 -0
  52. tryton/data/locale/ru/LC_MESSAGES/tryton.po +72 -25
  53. tryton/data/locale/sl/LC_MESSAGES/tryton.mo +0 -0
  54. tryton/data/locale/sl/LC_MESSAGES/tryton.po +77 -26
  55. tryton/data/locale/tr/LC_MESSAGES/tryton.mo +0 -0
  56. tryton/data/locale/tr/LC_MESSAGES/tryton.po +64 -20
  57. tryton/data/locale/uk/LC_MESSAGES/tryton.mo +0 -0
  58. tryton/data/locale/uk/LC_MESSAGES/tryton.po +75 -23
  59. tryton/data/locale/zh_CN/LC_MESSAGES/tryton.mo +0 -0
  60. tryton/data/locale/zh_CN/LC_MESSAGES/tryton.po +76 -24
  61. tryton/device_cookie.py +1 -1
  62. tryton/gui/main.py +14 -12
  63. tryton/gui/window/about.py +1 -1
  64. tryton/gui/window/dblogin.py +2 -2
  65. tryton/gui/window/email_.py +2 -2
  66. tryton/gui/window/form.py +10 -5
  67. tryton/gui/window/log.py +24 -2
  68. tryton/gui/window/tabcontent.py +2 -2
  69. tryton/gui/window/view_form/model/field.py +84 -34
  70. tryton/gui/window/view_form/model/group.py +7 -2
  71. tryton/gui/window/view_form/model/record.py +70 -31
  72. tryton/gui/window/view_form/screen/screen.py +98 -47
  73. tryton/gui/window/view_form/view/calendar_gtk/calendar_.py +15 -9
  74. tryton/gui/window/view_form/view/form.py +6 -12
  75. tryton/gui/window/view_form/view/form_gtk/char.py +5 -6
  76. tryton/gui/window/view_form/view/form_gtk/dictionary.py +49 -29
  77. tryton/gui/window/view_form/view/form_gtk/document.py +15 -10
  78. tryton/gui/window/view_form/view/form_gtk/many2many.py +49 -7
  79. tryton/gui/window/view_form/view/form_gtk/many2one.py +21 -13
  80. tryton/gui/window/view_form/view/form_gtk/multiselection.py +15 -5
  81. tryton/gui/window/view_form/view/form_gtk/one2many.py +42 -10
  82. tryton/gui/window/view_form/view/form_gtk/state_widget.py +6 -2
  83. tryton/gui/window/view_form/view/form_gtk/url.py +8 -4
  84. tryton/gui/window/view_form/view/graph_gtk/graph.py +3 -1
  85. tryton/gui/window/view_form/view/list.py +116 -48
  86. tryton/gui/window/view_form/view/list_gtk/editabletree.py +2 -1
  87. tryton/gui/window/view_form/view/list_gtk/widget.py +58 -23
  88. tryton/gui/window/view_form/view/screen_container.py +3 -5
  89. tryton/gui/window/win_csv.py +6 -12
  90. tryton/gui/window/win_export.py +49 -26
  91. tryton/gui/window/win_form.py +9 -7
  92. tryton/gui/window/win_import.py +45 -15
  93. tryton/gui/window/wizard.py +13 -10
  94. tryton/jsonrpc.py +75 -34
  95. tryton/plugins/__init__.py +5 -3
  96. tryton/pyson.py +57 -6
  97. tryton/rpc.py +18 -0
  98. tryton/tests/test_common_domain_parser.py +31 -2
  99. tryton/translate.py +5 -2
  100. {tryton-7.0.7.data → tryton-7.4.4.data}/scripts/tryton +8 -7
  101. {tryton-7.0.7.dist-info → tryton-7.4.4.dist-info}/METADATA +6 -6
  102. {tryton-7.0.7.dist-info → tryton-7.4.4.dist-info}/RECORD +105 -103
  103. {tryton-7.0.7.dist-info → tryton-7.4.4.dist-info}/WHEEL +1 -1
  104. {tryton-7.0.7.dist-info → tryton-7.4.4.dist-info}/LICENSE +0 -0
  105. {tryton-7.0.7.dist-info → tryton-7.4.4.dist-info}/top_level.txt +0 -0
@@ -26,6 +26,10 @@ msgstr "вкажіть ім'я сервера:порт"
26
26
  msgid "disable thread usage"
27
27
  msgstr ""
28
28
 
29
+ #, python-format
30
+ msgid "Invalid response id (%s) expected %s"
31
+ msgstr ""
32
+
29
33
  #, python-format
30
34
  msgid "Unable to set locale %s"
31
35
  msgstr "Неможливо встановити локалізацію %s"
@@ -76,7 +80,8 @@ msgstr "Ні"
76
80
  msgid "Yes"
77
81
  msgstr "Так"
78
82
 
79
- msgid "Concurrency Exception"
83
+ #, fuzzy
84
+ msgid "Concurrency Warning"
80
85
  msgstr "Виняток одночасного доступу"
81
86
 
82
87
  msgid "This record has been modified while you were editing it."
@@ -107,6 +112,9 @@ msgstr "Закрити"
107
112
  msgid "Application Error"
108
113
  msgstr "Помилка програми"
109
114
 
115
+ msgid "Details"
116
+ msgstr ""
117
+
110
118
  msgid "Report Bug"
111
119
  msgstr "Повідомити про помилку"
112
120
 
@@ -123,21 +131,35 @@ msgstr "Доступна нова версія!"
123
131
  msgid "Download"
124
132
  msgstr "Завантажити"
125
133
 
134
+ msgid "Concurrency Exception"
135
+ msgstr "Виняток одночасного доступу"
136
+
126
137
  #, fuzzy
127
138
  msgid "Could not get a session."
128
139
  msgstr "Не вдалося підключитися до сервера."
129
140
 
141
+ #, fuzzy, python-format
142
+ msgid "Error: \"%s\". Try again later."
143
+ msgstr "Помилка: \"%s\". Повторіть спробу пізніше."
144
+
130
145
  msgid "Too many requests. Try again later."
131
146
  msgstr "Дуже багато запитів. Спробуйте ще раз пізніше."
132
147
 
133
- #, fuzzy
134
- msgid "Not found."
135
- msgstr "Нічого не знайдено."
136
-
137
148
  #, fuzzy
138
149
  msgid "Not Found."
139
150
  msgstr "Нічого не знайдено."
140
151
 
152
+ msgid "Reset forgotten password"
153
+ msgstr ""
154
+
155
+ msgid "Send you an email to reset your password."
156
+ msgstr ""
157
+
158
+ msgid ""
159
+ "A request to reset your password has been sent.\n"
160
+ "Please check your mailbox."
161
+ msgstr ""
162
+
141
163
  msgid "..."
142
164
  msgstr "..."
143
165
 
@@ -218,7 +240,8 @@ msgstr "Звіт..."
218
240
  msgid "Print..."
219
241
  msgstr "Друк..."
220
242
 
221
- msgid "E-Mail..."
243
+ #, fuzzy
244
+ msgid "Email..."
222
245
  msgstr "Ел.пошта..."
223
246
 
224
247
  msgid "Bold"
@@ -330,12 +353,6 @@ msgstr "Довідка"
330
353
  msgid "No result found."
331
354
  msgstr "Нічого не знайдено."
332
355
 
333
- msgid "Favorites"
334
- msgstr "Вибране"
335
-
336
- msgid "Manage..."
337
- msgstr "Керування..."
338
-
339
356
  msgid "Action"
340
357
  msgstr "Дія"
341
358
 
@@ -570,6 +587,9 @@ msgstr "Підключення до сервера Tryton"
570
587
  msgid "Profile:"
571
588
  msgstr "Профіль:"
572
589
 
590
+ msgid "Manage..."
591
+ msgstr "Керування..."
592
+
573
593
  msgid "Host / Database information"
574
594
  msgstr "Сервер / База даних"
575
595
 
@@ -579,8 +599,8 @@ msgstr "Ім'я користувача:"
579
599
  msgid "Unable to complete email entry"
580
600
  msgstr "Не вдалося відправити ел.лист"
581
601
 
582
- #, python-format
583
- msgid "E-mail %s"
602
+ #, fuzzy, python-format
603
+ msgid "Email %s"
584
604
  msgstr "Ел.лист %s"
585
605
 
586
606
  msgid "To:"
@@ -716,6 +736,12 @@ msgstr "Модель:"
716
736
  msgid "ID:"
717
737
  msgstr "ID:"
718
738
 
739
+ msgid "Module:"
740
+ msgstr ""
741
+
742
+ msgid "XML ID:"
743
+ msgstr ""
744
+
719
745
  msgid "Created by:"
720
746
  msgstr "Ким створено:"
721
747
 
@@ -822,10 +848,12 @@ msgstr "_Звіт..."
822
848
  msgid "_Print..."
823
849
  msgstr "_Друк..."
824
850
 
825
- msgid "_E-Mail..."
851
+ #, fuzzy
852
+ msgid "_Email..."
826
853
  msgstr "_Ел.пошта..."
827
854
 
828
- msgid "Send an e-mail using the record"
855
+ #, fuzzy
856
+ msgid "Send an email using the record"
829
857
  msgstr "Надіслати ел.лист, використовуючи запис"
830
858
 
831
859
  msgid "_Export Data..."
@@ -877,6 +905,9 @@ msgstr "Ім'я поля"
877
905
  msgid "CSV Export: %s"
878
906
  msgstr "Експорт CSV: %s"
879
907
 
908
+ msgid "Open"
909
+ msgstr "Відкрити"
910
+
880
911
  msgid "_Save Export"
881
912
  msgstr "_Зберегти експорт"
882
913
 
@@ -892,12 +923,6 @@ msgstr "<b>Попередньо визначені експорти</b>"
892
923
  msgid "Name"
893
924
  msgstr "Ім'я"
894
925
 
895
- msgid "Open"
896
- msgstr "Відкрити"
897
-
898
- msgid "Save"
899
- msgstr "Зберегти"
900
-
901
926
  msgid "Listed Records"
902
927
  msgstr "Записи списку"
903
928
 
@@ -956,6 +981,9 @@ msgstr ""
956
981
  msgid "Add and New"
957
982
  msgstr "Додати значення"
958
983
 
984
+ msgid "Save"
985
+ msgstr "Зберегти"
986
+
959
987
  msgid "Add"
960
988
  msgstr "Додати"
961
989
 
@@ -981,6 +1009,10 @@ msgstr "Відновити вибраний запис <Ins>"
981
1009
  msgid "CSV Import: %s"
982
1010
  msgstr "Імпорт CSV: %s"
983
1011
 
1012
+ #, fuzzy
1013
+ msgid "Import"
1014
+ msgstr "Звіт"
1015
+
984
1016
  msgid "_Auto-Detect"
985
1017
  msgstr "_Автовизначення"
986
1018
 
@@ -1090,7 +1122,19 @@ msgstr "Розмір зображення завеликий."
1090
1122
  msgid "Copy"
1091
1123
  msgstr "Копіювати"
1092
1124
 
1093
- msgid "Paste"
1125
+ #, fuzzy
1126
+ msgid "Copy Row"
1127
+ msgstr "_Копіювати URL"
1128
+
1129
+ #, fuzzy
1130
+ msgid "Copy Rows"
1131
+ msgstr "_Копіювати URL"
1132
+
1133
+ msgid "Copy Column"
1134
+ msgstr ""
1135
+
1136
+ #, fuzzy
1137
+ msgid "Paste Rows"
1094
1138
  msgstr "Вставити"
1095
1139
 
1096
1140
  msgid ".."
@@ -1173,6 +1217,10 @@ msgstr "Додати існуючий запис"
1173
1217
  msgid "Remove selected record"
1174
1218
  msgstr "Видалити вибраний запис"
1175
1219
 
1220
+ #, fuzzy
1221
+ msgid "Restore selected record"
1222
+ msgstr "Видалити вибраний запис"
1223
+
1176
1224
  msgid "Open the record <F2>"
1177
1225
  msgstr "Відкрити запис <F2>"
1178
1226
 
@@ -1188,6 +1236,10 @@ msgstr "Редагувати вибраний запис"
1188
1236
  msgid "Delete selected record"
1189
1237
  msgstr "Видалити вибраний запис"
1190
1238
 
1239
+ #, fuzzy
1240
+ msgid "Undelete selected record"
1241
+ msgstr "Видалити вибраний запис"
1242
+
1191
1243
  #, python-format
1192
1244
  msgid "%s%%"
1193
1245
  msgstr "%s%%"
@@ -29,6 +29,10 @@ msgstr "设置服务器主机名:端口号"
29
29
  msgid "disable thread usage"
30
30
  msgstr "禁用线程"
31
31
 
32
+ #, python-format
33
+ msgid "Invalid response id (%s) expected %s"
34
+ msgstr ""
35
+
32
36
  #, python-format
33
37
  msgid "Unable to set locale %s"
34
38
  msgstr "无法设置 locale %s"
@@ -79,7 +83,8 @@ msgstr "否"
79
83
  msgid "Yes"
80
84
  msgstr "是"
81
85
 
82
- msgid "Concurrency Exception"
86
+ #, fuzzy
87
+ msgid "Concurrency Warning"
83
88
  msgstr "并行操作异常"
84
89
 
85
90
  msgid "This record has been modified while you were editing it."
@@ -110,6 +115,9 @@ msgstr "关闭"
110
115
  msgid "Application Error"
111
116
  msgstr "程序错误"
112
117
 
118
+ msgid "Details"
119
+ msgstr ""
120
+
113
121
  msgid "Report Bug"
114
122
  msgstr "报告Bug"
115
123
 
@@ -126,18 +134,33 @@ msgstr "有新版本可用!"
126
134
  msgid "Download"
127
135
  msgstr "下载"
128
136
 
137
+ msgid "Concurrency Exception"
138
+ msgstr "并行操作异常"
139
+
129
140
  msgid "Could not get a session."
130
141
  msgstr "无法获取会话。"
131
142
 
143
+ #, fuzzy, python-format
144
+ msgid "Error: \"%s\". Try again later."
145
+ msgstr "错误:“%s”。请稍后重试。"
146
+
132
147
  msgid "Too many requests. Try again later."
133
148
  msgstr "请求太多,请稍后重试."
134
149
 
135
- msgid "Not found."
136
- msgstr "无符合条件的数据."
137
-
138
150
  msgid "Not Found."
139
151
  msgstr "无符合条件的数据."
140
152
 
153
+ msgid "Reset forgotten password"
154
+ msgstr ""
155
+
156
+ msgid "Send you an email to reset your password."
157
+ msgstr ""
158
+
159
+ msgid ""
160
+ "A request to reset your password has been sent.\n"
161
+ "Please check your mailbox."
162
+ msgstr ""
163
+
141
164
  msgid "..."
142
165
  msgstr "..."
143
166
 
@@ -217,8 +240,8 @@ msgstr "报告..."
217
240
  msgid "Print..."
218
241
  msgstr "打印..."
219
242
 
220
- msgid "E-Mail..."
221
- msgstr "用电子邮件发送..."
243
+ msgid "Email..."
244
+ msgstr "电子邮件(_E)..."
222
245
 
223
246
  msgid "Bold"
224
247
  msgstr "粗体"
@@ -328,12 +351,6 @@ msgstr "帮助"
328
351
  msgid "No result found."
329
352
  msgstr "无符合条件的数据."
330
353
 
331
- msgid "Favorites"
332
- msgstr "收藏(_V)"
333
-
334
- msgid "Manage..."
335
- msgstr "管理..."
336
-
337
354
  msgid "Action"
338
355
  msgstr "操作"
339
356
 
@@ -564,6 +581,9 @@ msgstr "连接 Tryton 服务器"
564
581
  msgid "Profile:"
565
582
  msgstr "配置:"
566
583
 
584
+ msgid "Manage..."
585
+ msgstr "管理..."
586
+
567
587
  msgid "Host / Database information"
568
588
  msgstr "主机/数据库信息"
569
589
 
@@ -573,8 +593,8 @@ msgstr "用户名:"
573
593
  msgid "Unable to complete email entry"
574
594
  msgstr "无法完成电子邮件输入"
575
595
 
576
- #, python-format
577
- msgid "E-mail %s"
596
+ #, fuzzy, python-format
597
+ msgid "Email %s"
578
598
  msgstr "电子邮件 %s"
579
599
 
580
600
  msgid "To:"
@@ -710,6 +730,12 @@ msgstr "模型:"
710
730
  msgid "ID:"
711
731
  msgstr "标识:"
712
732
 
733
+ msgid "Module:"
734
+ msgstr ""
735
+
736
+ msgid "XML ID:"
737
+ msgstr ""
738
+
713
739
  msgid "Created by:"
714
740
  msgstr "创建者:"
715
741
 
@@ -816,10 +842,12 @@ msgstr "报告(_R)..."
816
842
  msgid "_Print..."
817
843
  msgstr "打印(_P)..."
818
844
 
819
- msgid "_E-Mail..."
820
- msgstr "电子邮件发送(_E)..."
845
+ #, fuzzy
846
+ msgid "_Email..."
847
+ msgstr "电子邮件(_E)..."
821
848
 
822
- msgid "Send an e-mail using the record"
849
+ #, fuzzy
850
+ msgid "Send an email using the record"
823
851
  msgstr "使用当前记录发送电子邮件"
824
852
 
825
853
  msgid "_Export Data..."
@@ -871,6 +899,9 @@ msgstr "字段名"
871
899
  msgid "CSV Export: %s"
872
900
  msgstr "CSV导出:%s"
873
901
 
902
+ msgid "Open"
903
+ msgstr "打开"
904
+
874
905
  msgid "_Save Export"
875
906
  msgstr "保存导出设置(_S)"
876
907
 
@@ -886,12 +917,6 @@ msgstr "<b>预定义导出设置</b>"
886
917
  msgid "Name"
887
918
  msgstr "名称"
888
919
 
889
- msgid "Open"
890
- msgstr "打开"
891
-
892
- msgid "Save"
893
- msgstr "保存"
894
-
895
920
  msgid "Listed Records"
896
921
  msgstr "已列出记录"
897
922
 
@@ -949,6 +974,9 @@ msgstr "保存和新建"
949
974
  msgid "Add and New"
950
975
  msgstr "添加和新建"
951
976
 
977
+ msgid "Save"
978
+ msgstr "保存"
979
+
952
980
  msgid "Add"
953
981
  msgstr "添加"
954
982
 
@@ -974,6 +1002,10 @@ msgstr "已选记录取消删除 <Ins>"
974
1002
  msgid "CSV Import: %s"
975
1003
  msgstr "CSV导入: %s"
976
1004
 
1005
+ #, fuzzy
1006
+ msgid "Import"
1007
+ msgstr "报告(_R)"
1008
+
977
1009
  msgid "_Auto-Detect"
978
1010
  msgstr "自动设置(_A)"
979
1011
 
@@ -1083,7 +1115,19 @@ msgstr "图片尺寸过大."
1083
1115
  msgid "Copy"
1084
1116
  msgstr "复制"
1085
1117
 
1086
- msgid "Paste"
1118
+ #, fuzzy
1119
+ msgid "Copy Row"
1120
+ msgstr "复制(_C)URL"
1121
+
1122
+ #, fuzzy
1123
+ msgid "Copy Rows"
1124
+ msgstr "复制(_C)URL"
1125
+
1126
+ msgid "Copy Column"
1127
+ msgstr ""
1128
+
1129
+ #, fuzzy
1130
+ msgid "Paste Rows"
1087
1131
  msgstr "粘贴"
1088
1132
 
1089
1133
  msgid ".."
@@ -1165,6 +1209,10 @@ msgstr "添加已存在记录"
1165
1209
  msgid "Remove selected record"
1166
1210
  msgstr "删除所选记录"
1167
1211
 
1212
+ #, fuzzy
1213
+ msgid "Restore selected record"
1214
+ msgstr "删除所选记录"
1215
+
1168
1216
  msgid "Open the record <F2>"
1169
1217
  msgstr "打开记录 <F2>"
1170
1218
 
@@ -1180,6 +1228,10 @@ msgstr "编辑所选记录<F2>"
1180
1228
  msgid "Delete selected record"
1181
1229
  msgstr "删除所选记录"
1182
1230
 
1231
+ #, fuzzy
1232
+ msgid "Undelete selected record"
1233
+ msgstr "删除所选记录"
1234
+
1183
1235
  #, python-format
1184
1236
  msgid "%s%%"
1185
1237
  msgstr "%s%%"
tryton/device_cookie.py CHANGED
@@ -20,7 +20,7 @@ def renew():
20
20
  def set_cookie(new_cookie):
21
21
  try:
22
22
  new_cookie = new_cookie()
23
- except Exception:
23
+ except common.RPCException:
24
24
  logger.error("Cannot renew device cookie", exc_info=True)
25
25
  else:
26
26
  _set(new_cookie)
tryton/gui/main.py CHANGED
@@ -401,7 +401,8 @@ class Main(Gtk.Application):
401
401
 
402
402
  RPCExecute('model', 'ir.model', 'global_search', search_text,
403
403
  CONFIG['client.limit'], self.menu_screen.model_name,
404
- context=self.menu_screen.context, callback=set_result)
404
+ context=self.menu_screen.context, callback=set_result,
405
+ process_exception=False)
405
406
  return False
406
407
 
407
408
  def changed(widget):
@@ -462,25 +463,16 @@ class Main(Gtk.Application):
462
463
  'id': id_,
463
464
  })
464
465
 
465
- def _manage_favorites(widget):
466
- Window.create(self.menu_screen.model_name + '.favorite',
467
- mode=['tree', 'form'],
468
- name=_("Favorites"))
469
466
  try:
470
467
  favorites = RPCExecute('model',
471
468
  self.menu_screen.model_name + '.favorite', 'get',
472
469
  process_exception=False)
473
- except Exception:
470
+ except RPCException:
474
471
  return False
475
472
  for id_, name, icon in favorites:
476
473
  menuitem = Gtk.MenuItem(label=name)
477
474
  menuitem.connect('activate', _action_favorite, id_)
478
475
  self.menu_favorite.add(menuitem)
479
- self.menu_favorite.add(Gtk.SeparatorMenuItem())
480
- manage_favorites = Gtk.MenuItem(label=_("Manage..."),
481
- use_underline=True)
482
- manage_favorites.connect('activate', _manage_favorites)
483
- self.menu_favorite.add(manage_favorites)
484
476
  self.menu_favorite.show_all()
485
477
 
486
478
  def favorite_unset(self):
@@ -771,6 +763,9 @@ class Main(Gtk.Application):
771
763
  expand=True, fill=True, padding=0)
772
764
  treeview = screen.current_view.treeview
773
765
  treeview.set_headers_visible(False)
766
+ for col in treeview.get_columns():
767
+ if col._type in {'selection', 'optional', 'drag'}:
768
+ col.set_visible(False)
774
769
 
775
770
  # Favorite column
776
771
  column = Gtk.TreeViewColumn()
@@ -863,7 +858,14 @@ class Main(Gtk.Application):
863
858
  halign=Gtk.Align.START)
864
859
  self.tooltips.set_tip(label, page.name)
865
860
  self.tooltips.enable()
866
- hbox.pack_start(label, expand=True, fill=True, padding=0)
861
+
862
+ def remove_book_middle_click(widget, event):
863
+ if event.button == 2:
864
+ return self._sig_remove_book(widget, page.widget)
865
+ eventbox = Gtk.EventBox()
866
+ eventbox.connect('button-press-event', remove_book_middle_click)
867
+ eventbox.add(label)
868
+ hbox.pack_start(eventbox, expand=True, fill=True, padding=0)
867
869
 
868
870
  button = Gtk.Button()
869
871
  button.set_relief(Gtk.ReliefStyle.NONE)
@@ -11,7 +11,7 @@ from tryton.common import get_toplevel_window
11
11
  from tryton.config import CONFIG, PIXMAPS_DIR
12
12
 
13
13
  COPYRIGHT = '''\
14
- Copyright (C) 2004-2024 Tryton.
14
+ Copyright (C) 2004-2025 Tryton.
15
15
  '''
16
16
  AUTHORS = [
17
17
  'Bertrand Chenal <bertrand.chenal@b2ck.com>',
@@ -7,8 +7,8 @@ import logging
7
7
  import os
8
8
  import re
9
9
  import shutil
10
- import tempfile
11
10
  import threading
11
+ from tempfile import NamedTemporaryFile
12
12
 
13
13
  from gi.repository import GLib, GObject, Gtk
14
14
 
@@ -501,7 +501,7 @@ class DBLogin(object):
501
501
  # reset self.profiles as parsing errors may leave wrong data in
502
502
  # the parser
503
503
  self.profiles = configparser.ConfigParser()
504
- with tempfile.NamedTemporaryFile(
504
+ with NamedTemporaryFile(
505
505
  delete=False, prefix='profiles_', suffix='.cfg',
506
506
  dir=config_dir) as temp_file:
507
507
  temp_name = temp_file.name
@@ -74,7 +74,7 @@ class EmailEntry(Gtk.Entry):
74
74
  RPCExecute(
75
75
  'model', 'ir.email', 'complete', text, CONFIG['client.limit'],
76
76
  process_exception=False, callback=callback)
77
- except Exception:
77
+ except RPCException:
78
78
  logger.warning(
79
79
  _("Unable to complete email entry"), exc_info=True)
80
80
  return False
@@ -106,7 +106,7 @@ class Email(NoModal):
106
106
  self.dialog.set_default_size(*self.default_size())
107
107
  self.dialog.connect('response', self.response)
108
108
 
109
- self.dialog.set_title(_('E-mail %s') % name)
109
+ self.dialog.set_title(_('Email %s') % name)
110
110
 
111
111
  grid = Gtk.Grid(
112
112
  column_spacing=3, row_spacing=3,
tryton/gui/window/form.py CHANGED
@@ -5,7 +5,6 @@ import csv
5
5
  import gettext
6
6
  import locale
7
7
  import os
8
- import tempfile
9
8
  from itertools import zip_longest
10
9
 
11
10
  from gi.repository import Gdk, GLib, Gtk
@@ -13,7 +12,7 @@ from gi.repository import Gdk, GLib, Gtk
13
12
  import tryton.common as common
14
13
  from tryton import plugins
15
14
  from tryton.action import Action
16
- from tryton.common import RPCException, RPCExecute, sur, sur_3b
15
+ from tryton.common import RPCException, RPCExecute, sur, sur_3b, tempfile
17
16
  from tryton.common.common import selection as selection_
18
17
  from tryton.common.popup_menu import popup
19
18
  from tryton.common.underline import set_underline
@@ -66,7 +65,8 @@ class Form(TabContent):
66
65
  if isinstance(res_id, int):
67
66
  res_id = [res_id]
68
67
  self.screen.load(res_id)
69
- self.screen.current_record = self.screen.group.get(res_id[0])
68
+ if res_id:
69
+ self.screen.current_record = self.screen.group.get(res_id[0])
70
70
  self.screen.display()
71
71
  else:
72
72
  if self.screen.current_view.view_type == 'form':
@@ -105,7 +105,9 @@ class Form(TabContent):
105
105
  def compare(self, model, attributes):
106
106
  if not attributes:
107
107
  return False
108
- return (self.model == model
108
+ return (
109
+ self.screen.view_index == 0
110
+ and self.model == model
109
111
  and self.res_id == attributes.get('res_id')
110
112
  and self.attributes.get('domain') == attributes.get('domain')
111
113
  and self.attributes.get('view_ids') == attributes.get('view_ids')
@@ -577,6 +579,7 @@ class Form(TabContent):
577
579
  name = str(position) if position else '_'
578
580
  selected = len(self.screen.selected_records)
579
581
  view_type = self.screen.current_view.view_type
582
+ next_view_type = self.screen.next_view_type
580
583
  has_views = self.screen.number_of_views > 1
581
584
  if selected > 1:
582
585
  name += '#%i' % selected
@@ -592,7 +595,9 @@ class Form(TabContent):
592
595
  for b in self.screen.get_buttons())
593
596
  set_sensitive(button_id, bool(position) and can_be_sensitive)
594
597
  set_sensitive(
595
- 'switch', (position or view_type == 'form') and has_views)
598
+ 'switch',
599
+ (position or view_type == 'form' or next_view_type != 'form')
600
+ and has_views)
596
601
  set_sensitive('remove', self.screen.deletable)
597
602
  set_sensitive('previous', self.screen.has_prev())
598
603
  set_sensitive('next', self.screen.has_next())
tryton/gui/window/log.py CHANGED
@@ -24,7 +24,8 @@ class Log(WinForm):
24
24
  log, = RPCExecute(
25
25
  'model', record.model_name, 'read', [record.id],
26
26
  ['create_uid.rec_name', 'create_date',
27
- 'write_uid.rec_name', 'write_date'], context=context)
27
+ 'write_uid.rec_name', 'write_date',
28
+ 'xml_id'], context=context)
28
29
  except RPCException:
29
30
  return
30
31
 
@@ -53,11 +54,32 @@ class Log(WinForm):
53
54
  label_id.set_mnemonic_widget(entry_id)
54
55
  grid.attach(label_id, 2, 1, 1, 1)
55
56
 
57
+ if log.get('xml_id'):
58
+ module, xml_id = log['xml_id'].split('.', 1)
59
+
60
+ entry_module = Gtk.Entry(editable=False)
61
+ entry_module.set_text(module)
62
+ grid.attach(entry_module, 1, 2, 1, 1)
63
+ label_module = Gtk.Label(
64
+ label=set_underline(_("Module:")),
65
+ use_underline=True, halign=Gtk.Align.END)
66
+ label_module.set_mnemonic_widget(entry_module)
67
+ grid.attach(label_module, 0, 2, 1, 1)
68
+
69
+ entry_xml_id = Gtk.Entry(editable=False)
70
+ entry_xml_id.set_text(xml_id)
71
+ grid.attach(entry_xml_id, 3, 2, 1, 1)
72
+ label_xml_id = Gtk.Label(
73
+ label=set_underline(_("XML ID:")),
74
+ use_underline=True, halign=Gtk.Align.END)
75
+ label_xml_id.set_mnemonic_widget(entry_xml_id)
76
+ grid.attach(label_xml_id, 2, 2, 1, 1)
77
+
56
78
  for i, (user, user_label, date, date_label) in enumerate([
57
79
  ('create_uid.', _("Created by:"),
58
80
  'create_date', _("Created at:")),
59
81
  ('write_uid.', _("Last Modified by:"),
60
- 'write_date', _("Last Modified at:"))], 2):
82
+ 'write_date', _("Last Modified at:"))], 3):
61
83
  entry_user = Gtk.Entry(editable=False, width_chars=50)
62
84
  user = log.get(user)
63
85
  if user:
@@ -141,8 +141,8 @@ class TabContent(InfoBar):
141
141
  accel_path='<tryton>/Form/Print'),
142
142
  ToolbarItem(
143
143
  id='email',
144
- label=_("_E-Mail..."),
145
- tooltip=_("Send an e-mail using the record"),
144
+ label=_("_Email..."),
145
+ tooltip=_("Send an email using the record"),
146
146
  icon_name='tryton-email',
147
147
  accel_path='<tryton>/Form/Email'),
148
148
  None,