udata 9.1.2.dev30355__py2.py3-none-any.whl → 9.1.2.dev30382__py2.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 udata might be problematic. Click here for more details.

Files changed (425) hide show
  1. tasks/__init__.py +109 -107
  2. tasks/helpers.py +18 -18
  3. udata/__init__.py +4 -4
  4. udata/admin/views.py +5 -5
  5. udata/api/__init__.py +135 -124
  6. udata/api/commands.py +45 -37
  7. udata/api/errors.py +5 -4
  8. udata/api/fields.py +23 -21
  9. udata/api/oauth2.py +55 -74
  10. udata/api/parsers.py +15 -15
  11. udata/api/signals.py +1 -1
  12. udata/api_fields.py +137 -89
  13. udata/app.py +56 -54
  14. udata/assets.py +5 -5
  15. udata/auth/__init__.py +37 -26
  16. udata/auth/forms.py +23 -15
  17. udata/auth/helpers.py +1 -1
  18. udata/auth/mails.py +3 -3
  19. udata/auth/password_validation.py +19 -15
  20. udata/auth/views.py +94 -68
  21. udata/commands/__init__.py +71 -69
  22. udata/commands/cache.py +7 -7
  23. udata/commands/db.py +201 -140
  24. udata/commands/dcat.py +36 -30
  25. udata/commands/fixtures.py +100 -84
  26. udata/commands/images.py +21 -20
  27. udata/commands/info.py +17 -20
  28. udata/commands/init.py +10 -10
  29. udata/commands/purge.py +12 -13
  30. udata/commands/serve.py +41 -29
  31. udata/commands/static.py +16 -18
  32. udata/commands/test.py +20 -20
  33. udata/commands/tests/fixtures.py +26 -24
  34. udata/commands/worker.py +31 -33
  35. udata/core/__init__.py +12 -12
  36. udata/core/activity/__init__.py +0 -1
  37. udata/core/activity/api.py +59 -49
  38. udata/core/activity/models.py +28 -26
  39. udata/core/activity/signals.py +1 -1
  40. udata/core/activity/tasks.py +16 -10
  41. udata/core/badges/api.py +6 -6
  42. udata/core/badges/commands.py +14 -13
  43. udata/core/badges/fields.py +8 -5
  44. udata/core/badges/forms.py +7 -4
  45. udata/core/badges/models.py +16 -31
  46. udata/core/badges/permissions.py +1 -3
  47. udata/core/badges/signals.py +2 -2
  48. udata/core/badges/tasks.py +3 -2
  49. udata/core/badges/tests/test_commands.py +10 -10
  50. udata/core/badges/tests/test_model.py +24 -31
  51. udata/core/contact_point/api.py +19 -18
  52. udata/core/contact_point/api_fields.py +21 -14
  53. udata/core/contact_point/factories.py +2 -2
  54. udata/core/contact_point/forms.py +7 -6
  55. udata/core/contact_point/models.py +3 -5
  56. udata/core/dataservices/api.py +26 -21
  57. udata/core/dataservices/factories.py +13 -11
  58. udata/core/dataservices/models.py +35 -40
  59. udata/core/dataservices/permissions.py +4 -4
  60. udata/core/dataservices/rdf.py +40 -17
  61. udata/core/dataservices/tasks.py +4 -3
  62. udata/core/dataset/actions.py +10 -10
  63. udata/core/dataset/activities.py +21 -23
  64. udata/core/dataset/api.py +321 -298
  65. udata/core/dataset/api_fields.py +443 -271
  66. udata/core/dataset/apiv2.py +305 -229
  67. udata/core/dataset/commands.py +38 -36
  68. udata/core/dataset/constants.py +61 -54
  69. udata/core/dataset/csv.py +70 -74
  70. udata/core/dataset/events.py +39 -32
  71. udata/core/dataset/exceptions.py +8 -4
  72. udata/core/dataset/factories.py +57 -65
  73. udata/core/dataset/forms.py +87 -63
  74. udata/core/dataset/models.py +336 -280
  75. udata/core/dataset/permissions.py +9 -6
  76. udata/core/dataset/preview.py +15 -17
  77. udata/core/dataset/rdf.py +156 -122
  78. udata/core/dataset/search.py +92 -77
  79. udata/core/dataset/signals.py +1 -1
  80. udata/core/dataset/tasks.py +63 -54
  81. udata/core/discussions/actions.py +5 -5
  82. udata/core/discussions/api.py +124 -120
  83. udata/core/discussions/factories.py +2 -2
  84. udata/core/discussions/forms.py +9 -7
  85. udata/core/discussions/metrics.py +1 -3
  86. udata/core/discussions/models.py +25 -24
  87. udata/core/discussions/notifications.py +18 -14
  88. udata/core/discussions/permissions.py +3 -3
  89. udata/core/discussions/signals.py +4 -4
  90. udata/core/discussions/tasks.py +24 -28
  91. udata/core/followers/api.py +32 -33
  92. udata/core/followers/models.py +9 -9
  93. udata/core/followers/signals.py +3 -3
  94. udata/core/jobs/actions.py +7 -7
  95. udata/core/jobs/api.py +99 -92
  96. udata/core/jobs/commands.py +48 -49
  97. udata/core/jobs/forms.py +11 -11
  98. udata/core/jobs/models.py +6 -6
  99. udata/core/metrics/__init__.py +2 -2
  100. udata/core/metrics/commands.py +34 -30
  101. udata/core/metrics/models.py +2 -4
  102. udata/core/metrics/signals.py +1 -1
  103. udata/core/metrics/tasks.py +3 -3
  104. udata/core/organization/activities.py +12 -15
  105. udata/core/organization/api.py +167 -174
  106. udata/core/organization/api_fields.py +183 -124
  107. udata/core/organization/apiv2.py +32 -32
  108. udata/core/organization/commands.py +20 -22
  109. udata/core/organization/constants.py +11 -11
  110. udata/core/organization/csv.py +17 -15
  111. udata/core/organization/factories.py +8 -11
  112. udata/core/organization/forms.py +32 -26
  113. udata/core/organization/metrics.py +2 -1
  114. udata/core/organization/models.py +87 -67
  115. udata/core/organization/notifications.py +18 -14
  116. udata/core/organization/permissions.py +10 -11
  117. udata/core/organization/rdf.py +14 -14
  118. udata/core/organization/search.py +30 -28
  119. udata/core/organization/signals.py +7 -7
  120. udata/core/organization/tasks.py +42 -61
  121. udata/core/owned.py +38 -27
  122. udata/core/post/api.py +82 -81
  123. udata/core/post/constants.py +8 -5
  124. udata/core/post/factories.py +4 -4
  125. udata/core/post/forms.py +13 -14
  126. udata/core/post/models.py +20 -22
  127. udata/core/post/tests/test_api.py +30 -32
  128. udata/core/reports/api.py +8 -7
  129. udata/core/reports/constants.py +1 -3
  130. udata/core/reports/models.py +10 -10
  131. udata/core/reuse/activities.py +15 -19
  132. udata/core/reuse/api.py +123 -126
  133. udata/core/reuse/api_fields.py +120 -85
  134. udata/core/reuse/apiv2.py +11 -10
  135. udata/core/reuse/constants.py +23 -23
  136. udata/core/reuse/csv.py +18 -18
  137. udata/core/reuse/factories.py +5 -9
  138. udata/core/reuse/forms.py +24 -21
  139. udata/core/reuse/models.py +55 -51
  140. udata/core/reuse/permissions.py +2 -2
  141. udata/core/reuse/search.py +49 -46
  142. udata/core/reuse/signals.py +1 -1
  143. udata/core/reuse/tasks.py +4 -5
  144. udata/core/site/api.py +47 -50
  145. udata/core/site/factories.py +2 -2
  146. udata/core/site/forms.py +4 -5
  147. udata/core/site/models.py +94 -63
  148. udata/core/site/rdf.py +14 -14
  149. udata/core/spam/api.py +16 -9
  150. udata/core/spam/constants.py +4 -4
  151. udata/core/spam/fields.py +13 -7
  152. udata/core/spam/models.py +27 -20
  153. udata/core/spam/signals.py +1 -1
  154. udata/core/spam/tests/test_spam.py +6 -5
  155. udata/core/spatial/api.py +72 -80
  156. udata/core/spatial/api_fields.py +73 -58
  157. udata/core/spatial/commands.py +67 -64
  158. udata/core/spatial/constants.py +3 -3
  159. udata/core/spatial/factories.py +37 -54
  160. udata/core/spatial/forms.py +27 -26
  161. udata/core/spatial/geoids.py +17 -17
  162. udata/core/spatial/models.py +43 -47
  163. udata/core/spatial/tasks.py +2 -1
  164. udata/core/spatial/tests/test_api.py +115 -130
  165. udata/core/spatial/tests/test_fields.py +74 -77
  166. udata/core/spatial/tests/test_geoid.py +22 -22
  167. udata/core/spatial/tests/test_models.py +5 -7
  168. udata/core/spatial/translations.py +16 -16
  169. udata/core/storages/__init__.py +16 -18
  170. udata/core/storages/api.py +66 -64
  171. udata/core/storages/tasks.py +7 -7
  172. udata/core/storages/utils.py +15 -15
  173. udata/core/storages/views.py +5 -6
  174. udata/core/tags/api.py +17 -14
  175. udata/core/tags/csv.py +4 -4
  176. udata/core/tags/models.py +8 -5
  177. udata/core/tags/tasks.py +11 -13
  178. udata/core/tags/views.py +4 -4
  179. udata/core/topic/api.py +84 -73
  180. udata/core/topic/apiv2.py +157 -127
  181. udata/core/topic/factories.py +3 -4
  182. udata/core/topic/forms.py +12 -14
  183. udata/core/topic/models.py +14 -19
  184. udata/core/topic/parsers.py +26 -26
  185. udata/core/user/activities.py +30 -29
  186. udata/core/user/api.py +151 -152
  187. udata/core/user/api_fields.py +132 -100
  188. udata/core/user/apiv2.py +7 -7
  189. udata/core/user/commands.py +38 -38
  190. udata/core/user/factories.py +8 -9
  191. udata/core/user/forms.py +14 -11
  192. udata/core/user/metrics.py +2 -2
  193. udata/core/user/models.py +68 -69
  194. udata/core/user/permissions.py +4 -5
  195. udata/core/user/rdf.py +7 -8
  196. udata/core/user/tasks.py +2 -2
  197. udata/core/user/tests/test_user_model.py +24 -16
  198. udata/db/tasks.py +2 -1
  199. udata/entrypoints.py +35 -31
  200. udata/errors.py +2 -1
  201. udata/event/values.py +6 -6
  202. udata/factories.py +2 -2
  203. udata/features/identicon/api.py +5 -6
  204. udata/features/identicon/backends.py +48 -55
  205. udata/features/identicon/tests/test_backends.py +4 -5
  206. udata/features/notifications/__init__.py +0 -1
  207. udata/features/notifications/actions.py +9 -9
  208. udata/features/notifications/api.py +17 -13
  209. udata/features/territories/__init__.py +12 -10
  210. udata/features/territories/api.py +14 -15
  211. udata/features/territories/models.py +23 -28
  212. udata/features/transfer/actions.py +8 -11
  213. udata/features/transfer/api.py +84 -77
  214. udata/features/transfer/factories.py +2 -1
  215. udata/features/transfer/models.py +11 -12
  216. udata/features/transfer/notifications.py +19 -15
  217. udata/features/transfer/permissions.py +5 -5
  218. udata/forms/__init__.py +5 -2
  219. udata/forms/fields.py +164 -172
  220. udata/forms/validators.py +19 -22
  221. udata/forms/widgets.py +9 -13
  222. udata/frontend/__init__.py +31 -26
  223. udata/frontend/csv.py +68 -58
  224. udata/frontend/markdown.py +40 -44
  225. udata/harvest/actions.py +89 -77
  226. udata/harvest/api.py +294 -238
  227. udata/harvest/backends/__init__.py +4 -4
  228. udata/harvest/backends/base.py +128 -111
  229. udata/harvest/backends/dcat.py +80 -66
  230. udata/harvest/commands.py +56 -60
  231. udata/harvest/csv.py +8 -8
  232. udata/harvest/exceptions.py +6 -3
  233. udata/harvest/filters.py +24 -23
  234. udata/harvest/forms.py +27 -28
  235. udata/harvest/models.py +88 -80
  236. udata/harvest/notifications.py +15 -10
  237. udata/harvest/signals.py +13 -13
  238. udata/harvest/tasks.py +11 -10
  239. udata/harvest/tests/factories.py +23 -24
  240. udata/harvest/tests/test_actions.py +136 -166
  241. udata/harvest/tests/test_api.py +220 -214
  242. udata/harvest/tests/test_base_backend.py +117 -112
  243. udata/harvest/tests/test_dcat_backend.py +380 -308
  244. udata/harvest/tests/test_filters.py +33 -22
  245. udata/harvest/tests/test_models.py +11 -14
  246. udata/harvest/tests/test_notifications.py +6 -7
  247. udata/harvest/tests/test_tasks.py +7 -6
  248. udata/i18n.py +237 -78
  249. udata/linkchecker/backends.py +5 -11
  250. udata/linkchecker/checker.py +23 -22
  251. udata/linkchecker/commands.py +4 -6
  252. udata/linkchecker/models.py +6 -6
  253. udata/linkchecker/tasks.py +18 -20
  254. udata/mail.py +21 -21
  255. udata/migrations/2020-07-24-remove-s-from-scope-oauth.py +9 -8
  256. udata/migrations/2020-08-24-add-fs-filename.py +9 -8
  257. udata/migrations/2020-09-28-update-reuses-datasets-metrics.py +5 -4
  258. udata/migrations/2020-10-16-migrate-ods-resources.py +9 -10
  259. udata/migrations/2021-04-08-update-schema-with-new-structure.py +8 -7
  260. udata/migrations/2021-05-27-fix-default-schema-name.py +7 -6
  261. udata/migrations/2021-07-05-remove-unused-badges.py +17 -15
  262. udata/migrations/2021-07-07-update-schema-for-community-resources.py +7 -6
  263. udata/migrations/2021-08-17-follow-integrity.py +5 -4
  264. udata/migrations/2021-08-17-harvest-integrity.py +13 -12
  265. udata/migrations/2021-08-17-oauth2client-integrity.py +5 -4
  266. udata/migrations/2021-08-17-transfer-integrity.py +5 -4
  267. udata/migrations/2021-08-17-users-integrity.py +9 -8
  268. udata/migrations/2021-12-14-reuse-topics.py +7 -6
  269. udata/migrations/2022-04-21-improve-extension-detection.py +8 -7
  270. udata/migrations/2022-09-22-clean-inactive-harvest-datasets.py +16 -14
  271. udata/migrations/2022-10-10-add-fs_uniquifier-to-user-model.py +6 -6
  272. udata/migrations/2022-10-10-migrate-harvest-extras.py +36 -26
  273. udata/migrations/2023-02-08-rename-internal-dates.py +46 -28
  274. udata/migrations/2024-01-29-fix-reuse-and-dataset-with-private-None.py +10 -8
  275. udata/migrations/2024-03-22-migrate-activity-kwargs-to-extras.py +6 -4
  276. udata/migrations/2024-06-11-fix-reuse-datasets-references.py +7 -6
  277. udata/migrations/__init__.py +123 -105
  278. udata/models/__init__.py +4 -4
  279. udata/mongo/__init__.py +13 -11
  280. udata/mongo/badges_field.py +3 -2
  281. udata/mongo/datetime_fields.py +13 -12
  282. udata/mongo/document.py +17 -16
  283. udata/mongo/engine.py +15 -16
  284. udata/mongo/errors.py +2 -1
  285. udata/mongo/extras_fields.py +30 -20
  286. udata/mongo/queryset.py +12 -12
  287. udata/mongo/slug_fields.py +38 -28
  288. udata/mongo/taglist_field.py +1 -2
  289. udata/mongo/url_field.py +5 -5
  290. udata/mongo/uuid_fields.py +4 -3
  291. udata/notifications/__init__.py +1 -1
  292. udata/notifications/mattermost.py +10 -9
  293. udata/rdf.py +167 -188
  294. udata/routing.py +40 -45
  295. udata/search/__init__.py +18 -19
  296. udata/search/adapter.py +17 -16
  297. udata/search/commands.py +44 -51
  298. udata/search/fields.py +13 -20
  299. udata/search/query.py +23 -18
  300. udata/search/result.py +9 -10
  301. udata/sentry.py +21 -19
  302. udata/settings.py +262 -198
  303. udata/sitemap.py +8 -6
  304. udata/static/chunks/{11.e9b9ca1f3e03d4020377.js → 11.52e531c19f8de80c00cf.js} +3 -3
  305. udata/static/chunks/{11.e9b9ca1f3e03d4020377.js.map → 11.52e531c19f8de80c00cf.js.map} +1 -1
  306. udata/static/chunks/{13.038c0d9aa0dfa0181c4b.js → 13.c3343a7f1070061c0e10.js} +2 -2
  307. udata/static/chunks/{13.038c0d9aa0dfa0181c4b.js.map → 13.c3343a7f1070061c0e10.js.map} +1 -1
  308. udata/static/chunks/{16.0baa2b64a74a2dcde25c.js → 16.8fa42440ad75ca172e6d.js} +2 -2
  309. udata/static/chunks/{16.0baa2b64a74a2dcde25c.js.map → 16.8fa42440ad75ca172e6d.js.map} +1 -1
  310. udata/static/chunks/{19.350a9f150b074b4ecefa.js → 19.9c6c8412729cd6d59cfa.js} +3 -3
  311. udata/static/chunks/{19.350a9f150b074b4ecefa.js.map → 19.9c6c8412729cd6d59cfa.js.map} +1 -1
  312. udata/static/chunks/{5.6ebbce2b9b3e696d3da5.js → 5.71d15c2e4f21feee2a9a.js} +3 -3
  313. udata/static/chunks/{5.6ebbce2b9b3e696d3da5.js.map → 5.71d15c2e4f21feee2a9a.js.map} +1 -1
  314. udata/static/chunks/{6.d8a5f7b017bcbd083641.js → 6.9139dc098b8ea640b890.js} +3 -3
  315. udata/static/chunks/{6.d8a5f7b017bcbd083641.js.map → 6.9139dc098b8ea640b890.js.map} +1 -1
  316. udata/static/common.js +1 -1
  317. udata/static/common.js.map +1 -1
  318. udata/storage/s3.py +20 -13
  319. udata/tags.py +4 -5
  320. udata/tasks.py +43 -42
  321. udata/tests/__init__.py +9 -6
  322. udata/tests/api/__init__.py +5 -6
  323. udata/tests/api/test_auth_api.py +395 -321
  324. udata/tests/api/test_base_api.py +31 -33
  325. udata/tests/api/test_contact_points.py +7 -9
  326. udata/tests/api/test_dataservices_api.py +211 -158
  327. udata/tests/api/test_datasets_api.py +823 -812
  328. udata/tests/api/test_follow_api.py +13 -15
  329. udata/tests/api/test_me_api.py +95 -112
  330. udata/tests/api/test_organizations_api.py +301 -339
  331. udata/tests/api/test_reports_api.py +35 -25
  332. udata/tests/api/test_reuses_api.py +134 -139
  333. udata/tests/api/test_swagger.py +5 -5
  334. udata/tests/api/test_tags_api.py +18 -25
  335. udata/tests/api/test_topics_api.py +94 -94
  336. udata/tests/api/test_transfer_api.py +53 -48
  337. udata/tests/api/test_user_api.py +128 -141
  338. udata/tests/apiv2/test_datasets.py +290 -198
  339. udata/tests/apiv2/test_me_api.py +10 -11
  340. udata/tests/apiv2/test_organizations.py +56 -74
  341. udata/tests/apiv2/test_swagger.py +5 -5
  342. udata/tests/apiv2/test_topics.py +69 -87
  343. udata/tests/cli/test_cli_base.py +8 -8
  344. udata/tests/cli/test_db_cli.py +21 -19
  345. udata/tests/dataservice/test_dataservice_tasks.py +8 -12
  346. udata/tests/dataset/test_csv_adapter.py +44 -35
  347. udata/tests/dataset/test_dataset_actions.py +2 -3
  348. udata/tests/dataset/test_dataset_commands.py +7 -8
  349. udata/tests/dataset/test_dataset_events.py +36 -29
  350. udata/tests/dataset/test_dataset_model.py +224 -217
  351. udata/tests/dataset/test_dataset_rdf.py +142 -131
  352. udata/tests/dataset/test_dataset_tasks.py +15 -15
  353. udata/tests/dataset/test_resource_preview.py +10 -13
  354. udata/tests/features/territories/__init__.py +9 -13
  355. udata/tests/features/territories/test_territories_api.py +71 -91
  356. udata/tests/forms/test_basic_fields.py +7 -7
  357. udata/tests/forms/test_current_user_field.py +39 -66
  358. udata/tests/forms/test_daterange_field.py +31 -39
  359. udata/tests/forms/test_dict_field.py +28 -26
  360. udata/tests/forms/test_extras_fields.py +102 -76
  361. udata/tests/forms/test_form_field.py +8 -8
  362. udata/tests/forms/test_image_field.py +33 -26
  363. udata/tests/forms/test_model_field.py +134 -123
  364. udata/tests/forms/test_model_list_field.py +7 -7
  365. udata/tests/forms/test_nested_model_list_field.py +117 -79
  366. udata/tests/forms/test_publish_as_field.py +36 -65
  367. udata/tests/forms/test_reference_field.py +34 -53
  368. udata/tests/forms/test_user_forms.py +23 -21
  369. udata/tests/forms/test_uuid_field.py +6 -10
  370. udata/tests/frontend/__init__.py +9 -6
  371. udata/tests/frontend/test_auth.py +7 -6
  372. udata/tests/frontend/test_csv.py +81 -96
  373. udata/tests/frontend/test_hooks.py +43 -43
  374. udata/tests/frontend/test_markdown.py +211 -191
  375. udata/tests/helpers.py +32 -37
  376. udata/tests/models.py +2 -2
  377. udata/tests/organization/test_csv_adapter.py +21 -16
  378. udata/tests/organization/test_notifications.py +11 -18
  379. udata/tests/organization/test_organization_model.py +13 -13
  380. udata/tests/organization/test_organization_rdf.py +29 -22
  381. udata/tests/organization/test_organization_tasks.py +16 -17
  382. udata/tests/plugin.py +76 -73
  383. udata/tests/reuse/test_reuse_model.py +21 -21
  384. udata/tests/reuse/test_reuse_task.py +11 -13
  385. udata/tests/search/__init__.py +11 -12
  386. udata/tests/search/test_adapter.py +60 -70
  387. udata/tests/search/test_query.py +16 -16
  388. udata/tests/search/test_results.py +10 -7
  389. udata/tests/site/test_site_api.py +11 -16
  390. udata/tests/site/test_site_metrics.py +20 -30
  391. udata/tests/site/test_site_model.py +4 -5
  392. udata/tests/site/test_site_rdf.py +94 -78
  393. udata/tests/test_activity.py +17 -17
  394. udata/tests/test_discussions.py +292 -299
  395. udata/tests/test_i18n.py +37 -40
  396. udata/tests/test_linkchecker.py +91 -85
  397. udata/tests/test_mail.py +13 -17
  398. udata/tests/test_migrations.py +219 -180
  399. udata/tests/test_model.py +164 -157
  400. udata/tests/test_notifications.py +17 -17
  401. udata/tests/test_owned.py +14 -14
  402. udata/tests/test_rdf.py +25 -23
  403. udata/tests/test_routing.py +89 -93
  404. udata/tests/test_storages.py +137 -128
  405. udata/tests/test_tags.py +44 -46
  406. udata/tests/test_topics.py +7 -7
  407. udata/tests/test_transfer.py +42 -49
  408. udata/tests/test_uris.py +160 -161
  409. udata/tests/test_utils.py +79 -71
  410. udata/tests/user/test_user_rdf.py +5 -9
  411. udata/tests/workers/test_jobs_commands.py +57 -58
  412. udata/tests/workers/test_tasks_routing.py +23 -29
  413. udata/tests/workers/test_workers_api.py +125 -131
  414. udata/tests/workers/test_workers_helpers.py +6 -6
  415. udata/tracking.py +4 -6
  416. udata/uris.py +45 -46
  417. udata/utils.py +68 -66
  418. udata/wsgi.py +1 -1
  419. {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30382.dist-info}/METADATA +3 -2
  420. udata-9.1.2.dev30382.dist-info/RECORD +704 -0
  421. udata-9.1.2.dev30355.dist-info/RECORD +0 -704
  422. {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30382.dist-info}/LICENSE +0 -0
  423. {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30382.dist-info}/WHEEL +0 -0
  424. {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30382.dist-info}/entry_points.txt +0 -0
  425. {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30382.dist-info}/top_level.txt +0 -0
@@ -50,10 +50,7 @@ class ModelFieldTestMixin(object):
50
50
  def test_with_valid_json_data_ref(self):
51
51
  nested = Nested.objects.create(name=faker.name())
52
52
  model = self.model()
53
- form = self.form.from_json({'nested': {
54
- 'class': 'Nested',
55
- 'id': str(nested.id)
56
- }})
53
+ form = self.form.from_json({"nested": {"class": "Nested", "id": str(nested.id)}})
57
54
 
58
55
  form.validate()
59
56
  self.assertEqual(form.errors, {})
@@ -66,35 +63,26 @@ class ModelFieldTestMixin(object):
66
63
 
67
64
  def test_with_invalid_ref_class(self):
68
65
  nested = Nested.objects.create(name=faker.name())
69
- form = self.form.from_json({'nested': {
70
- 'class': 'Bad',
71
- 'id': str(nested.id)
72
- }})
66
+ form = self.form.from_json({"nested": {"class": "Bad", "id": str(nested.id)}})
73
67
 
74
68
  form.validate()
75
- self.assertIn('nested', form.errors)
76
- self.assertEqual(len(form.errors['nested']), 1)
69
+ self.assertIn("nested", form.errors)
70
+ self.assertEqual(len(form.errors["nested"]), 1)
77
71
 
78
72
  def test_with_invalid_ref_id(self):
79
73
  Nested.objects.create(name=faker.name())
80
- form = self.form.from_json({'nested': {
81
- 'class': 'Nested',
82
- 'id': 'bad'
83
- }})
74
+ form = self.form.from_json({"nested": {"class": "Nested", "id": "bad"}})
84
75
 
85
76
  form.validate()
86
- self.assertIn('nested', form.errors)
87
- self.assertEqual(len(form.errors['nested']), 1)
77
+ self.assertIn("nested", form.errors)
78
+ self.assertEqual(len(form.errors["nested"]), 1)
88
79
 
89
80
  def test_not_found(self):
90
- form = self.form.from_json({'nested': {
91
- 'class': 'Nested',
92
- 'id': str(ObjectId())
93
- }})
81
+ form = self.form.from_json({"nested": {"class": "Nested", "id": str(ObjectId())}})
94
82
 
95
83
  form.validate()
96
- self.assertIn('nested', form.errors)
97
- self.assertEqual(len(form.errors['nested']), 1)
84
+ self.assertIn("nested", form.errors)
85
+ self.assertEqual(len(form.errors["nested"]), 1)
98
86
 
99
87
 
100
88
  class ModelFieldWithReferenceTest(ModelFieldTestMixin, TestCase):
@@ -104,9 +92,7 @@ class ModelFieldWithReferenceTest(ModelFieldTestMixin, TestCase):
104
92
  def test_with_valid_form_data_id_only(self):
105
93
  nested = Nested.objects.create(name=faker.name())
106
94
  model = WithReference()
107
- form = WithReferenceForm(MultiDict({
108
- 'nested': str(nested.id)
109
- }))
95
+ form = WithReferenceForm(MultiDict({"nested": str(nested.id)}))
110
96
 
111
97
  form.validate()
112
98
  self.assertEqual(form.errors, {})
@@ -120,7 +106,7 @@ class ModelFieldWithReferenceTest(ModelFieldTestMixin, TestCase):
120
106
  def test_with_valid_json_data_id_only(self):
121
107
  nested = Nested.objects.create(name=faker.name())
122
108
  model = WithReference()
123
- form = WithReferenceForm.from_json({'nested': str(nested.id)})
109
+ form = WithReferenceForm.from_json({"nested": str(nested.id)})
124
110
 
125
111
  form.validate()
126
112
  self.assertEqual(form.errors, {})
@@ -133,20 +119,22 @@ class ModelFieldWithReferenceTest(ModelFieldTestMixin, TestCase):
133
119
 
134
120
  def test_with_invalid_id(self):
135
121
  Nested.objects.create(name=faker.name())
136
- form = WithReferenceForm.from_json({'nested': 'bad'})
122
+ form = WithReferenceForm.from_json({"nested": "bad"})
137
123
 
138
124
  form.validate()
139
- self.assertIn('nested', form.errors)
140
- self.assertEqual(len(form.errors['nested']), 1)
125
+ self.assertIn("nested", form.errors)
126
+ self.assertEqual(len(form.errors["nested"]), 1)
141
127
 
142
128
 
143
129
  class Nested2(db.Document):
144
- '''A dummy model just to nesting/ReferenceField'''
130
+ """A dummy model just to nesting/ReferenceField"""
131
+
145
132
  name = db.StringField()
146
133
 
147
134
 
148
135
  class Nested3(db.Document):
149
- '''A dummy model just to nesting/ReferenceField'''
136
+ """A dummy model just to nesting/ReferenceField"""
137
+
150
138
  name = db.StringField()
151
139
 
152
140
 
@@ -178,21 +166,19 @@ class ModelFieldWithGenericTest(ModelFieldTestMixin, TestCase):
178
166
 
179
167
  def test_with_valid_form_data_id_only(self):
180
168
  nested = Nested.objects.create(name=faker.name())
181
- form = WithGenericForm(MultiDict({
182
- 'nested': str(nested.id)
183
- }))
169
+ form = WithGenericForm(MultiDict({"nested": str(nested.id)}))
184
170
 
185
171
  form.validate()
186
- self.assertIn('nested', form.errors)
187
- self.assertEqual(len(form.errors['nested']), 1)
172
+ self.assertIn("nested", form.errors)
173
+ self.assertEqual(len(form.errors["nested"]), 1)
188
174
 
189
175
  def test_with_valid_json_data_id_only(self):
190
176
  nested = Nested.objects.create(name=faker.name())
191
- form = WithGenericForm.from_json({'nested': str(nested.id)})
177
+ form = WithGenericForm.from_json({"nested": str(nested.id)})
192
178
 
193
179
  form.validate()
194
- self.assertIn('nested', form.errors)
195
- self.assertEqual(len(form.errors['nested']), 1)
180
+ self.assertIn("nested", form.errors)
181
+ self.assertEqual(len(form.errors["nested"]), 1)
196
182
 
197
183
 
198
184
  class ModelFieldWithGenericChoicesTest(ModelFieldTestMixin, TestCase):
@@ -201,29 +187,24 @@ class ModelFieldWithGenericChoicesTest(ModelFieldTestMixin, TestCase):
201
187
 
202
188
  def test_with_valid_form_data_id_only(self):
203
189
  nested = Nested.objects.create(name=faker.name())
204
- form = WithGenericChoicesForm(MultiDict({
205
- 'nested': str(nested.id)
206
- }))
190
+ form = WithGenericChoicesForm(MultiDict({"nested": str(nested.id)}))
207
191
 
208
192
  form.validate()
209
- self.assertIn('nested', form.errors)
210
- self.assertEqual(len(form.errors['nested']), 1)
193
+ self.assertIn("nested", form.errors)
194
+ self.assertEqual(len(form.errors["nested"]), 1)
211
195
 
212
196
  def test_with_valid_json_data_id_only(self):
213
197
  nested = Nested.objects.create(name=faker.name())
214
- form = WithGenericChoicesForm.from_json({'nested': str(nested.id)})
198
+ form = WithGenericChoicesForm.from_json({"nested": str(nested.id)})
215
199
 
216
200
  form.validate()
217
- self.assertIn('nested', form.errors)
218
- self.assertEqual(len(form.errors['nested']), 1)
201
+ self.assertIn("nested", form.errors)
202
+ self.assertEqual(len(form.errors["nested"]), 1)
219
203
 
220
204
  def test_with_ref_class_not_in_choices(self):
221
205
  nested = Nested.objects.create(name=faker.name())
222
- form = self.form.from_json({'nested': {
223
- 'class': 'Nested3',
224
- 'id': str(nested.id)
225
- }})
206
+ form = self.form.from_json({"nested": {"class": "Nested3", "id": str(nested.id)}})
226
207
 
227
208
  form.validate()
228
- self.assertIn('nested', form.errors)
229
- self.assertEqual(len(form.errors['nested']), 1)
209
+ self.assertIn("nested", form.errors)
210
+ self.assertEqual(len(form.errors["nested"]), 1)
@@ -1,32 +1,34 @@
1
+ import pytest
2
+
1
3
  from udata.auth.forms import ExtendedRegisterForm
2
4
  from udata.core.user.forms import UserProfileForm
3
5
 
4
- import pytest
5
-
6
- pytestmark = [
7
- pytest.mark.usefixtures('clean_db')
8
- ]
6
+ pytestmark = [pytest.mark.usefixtures("clean_db")]
9
7
 
10
8
 
11
9
  def test_register_form_accepts_no_url():
12
- form = ExtendedRegisterForm.from_json({
13
- 'email': 'a@a.fr',
14
- 'password': 'passpass',
15
- 'password_confirm': 'passpass',
16
- 'first_name': 'azeaezr http://dumdum.fr',
17
- 'last_name': 'azeaze https://etalab.studio',
18
- })
10
+ form = ExtendedRegisterForm.from_json(
11
+ {
12
+ "email": "a@a.fr",
13
+ "password": "passpass",
14
+ "password_confirm": "passpass",
15
+ "first_name": "azeaezr http://dumdum.fr",
16
+ "last_name": "azeaze https://etalab.studio",
17
+ }
18
+ )
19
19
  form.validate()
20
- assert 'first_name' in form.errors and 'last_name' in form.errors
20
+ assert "first_name" in form.errors and "last_name" in form.errors
21
21
 
22
22
 
23
23
  def test_user_profile_form_accepts_no_url():
24
- form = UserProfileForm.from_json({
25
- 'email': 'a@a.fr',
26
- 'password': 'passpass',
27
- 'password_confirm': 'passpass',
28
- 'first_name': 'azeaezr http://dumdum.fr',
29
- 'last_name': 'azeaze https://etalab.studio',
30
- })
24
+ form = UserProfileForm.from_json(
25
+ {
26
+ "email": "a@a.fr",
27
+ "password": "passpass",
28
+ "password_confirm": "passpass",
29
+ "first_name": "azeaezr http://dumdum.fr",
30
+ "last_name": "azeaze https://etalab.studio",
31
+ }
32
+ )
31
33
  form.validate()
32
- assert 'first_name' in form.errors and 'last_name' in form.errors
34
+ assert "first_name" in form.errors and "last_name" in form.errors
@@ -39,9 +39,7 @@ class UUIDFieldTest(TestCase):
39
39
 
40
40
  fake = Fake()
41
41
  id = uuid.uuid4()
42
- form = FakeForm(MultiDict({
43
- 'id': str(id)
44
- }))
42
+ form = FakeForm(MultiDict({"id": str(id)}))
45
43
 
46
44
  form.validate()
47
45
  self.assertEqual(form.errors, {})
@@ -55,11 +53,9 @@ class UUIDFieldTest(TestCase):
55
53
 
56
54
  fake = Fake()
57
55
  id = uuid.uuid4()
58
- form = FakeForm(MultiDict({
59
- 'id': str(id)
60
- }))
56
+ form = FakeForm(MultiDict({"id": str(id)}))
61
57
 
62
- form = FakeForm.from_json({'id': str(id)})
58
+ form = FakeForm.from_json({"id": str(id)})
63
59
  form.validate()
64
60
  self.assertEqual(form.errors, {})
65
61
 
@@ -70,8 +66,8 @@ class UUIDFieldTest(TestCase):
70
66
  def test_with_invalid_uuid_string(self):
71
67
  Fake, FakeForm = self.factory()
72
68
 
73
- form = FakeForm(MultiDict({'id': 'not-an-uuid'}))
69
+ form = FakeForm(MultiDict({"id": "not-an-uuid"}))
74
70
 
75
71
  form.validate()
76
- self.assertIn('id', form.errors)
77
- self.assertEqual(len(form.errors['id']), 1)
72
+ self.assertIn("id", form.errors)
73
+ self.assertEqual(len(form.errors["id"]), 1)
@@ -1,8 +1,9 @@
1
1
  import json
2
2
  import re
3
+
3
4
  import pytest
4
5
 
5
- from udata.tests import TestCase, WebTestMixin, DBTestMixin
6
+ from udata.tests import DBTestMixin, TestCase, WebTestMixin
6
7
 
7
8
 
8
9
  class FrontTestCase(WebTestMixin, DBTestMixin, TestCase):
@@ -12,11 +13,13 @@ class FrontTestCase(WebTestMixin, DBTestMixin, TestCase):
12
13
  # In the pattern below, we extract the content of the JSON-LD script
13
14
  # The first ? is used to name the extracted string
14
15
  # The second ? is used to express the non-greediness of the extraction
15
- pattern = (r'<script id="json_ld" type="application/ld\+json">'
16
- r'(?P<json_ld>[\s\S]*?)'
17
- r'</script>')
18
- data = response.data.decode('utf8')
16
+ pattern = (
17
+ r'<script id="json_ld" type="application/ld\+json">'
18
+ r"(?P<json_ld>[\s\S]*?)"
19
+ r"</script>"
20
+ )
21
+ data = response.data.decode("utf8")
19
22
  search = re.search(pattern, data)
20
23
  self.assertIsNotNone(search, (pattern, data))
21
- json_ld = search.group('json_ld')
24
+ json_ld = search.group("json_ld")
22
25
  return json.loads(json_ld)
@@ -1,24 +1,25 @@
1
- from flask import url_for, current_app
1
+ from flask import current_app, url_for
2
2
  from flask_security.utils import hash_data
3
+
3
4
  from udata.core.user.factories import AdminFactory
4
5
 
5
6
  from . import FrontTestCase
6
7
 
7
8
 
8
9
  class AuthTest(FrontTestCase):
9
- modules = ['admin']
10
+ modules = ["admin"]
10
11
 
11
12
  def test_change_mail(self):
12
13
  user = self.login(AdminFactory())
13
- url = url_for('security.change_email')
14
+ url = url_for("security.change_email")
14
15
 
15
- new_email = 'test@test.com'
16
+ new_email = "test@test.com"
16
17
 
17
- security = current_app.extensions['security']
18
+ security = current_app.extensions["security"]
18
19
 
19
20
  data = [str(user.fs_uniquifier), hash_data(user.email), new_email]
20
21
  token = security.confirm_serializer.dumps(data)
21
- confirmation_link = url_for('security.confirm_change_email', token=token, _external=True)
22
+ confirmation_link = url_for("security.confirm_change_email", token=token, _external=True)
22
23
 
23
24
  resp = self.get(confirmation_link, follow_redirects=True)
24
25
  assert resp.status_code == 200