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
@@ -1,20 +1,20 @@
1
- '''
1
+ """
2
2
  Remove Harvest db integrity problems
3
3
  ⚠️ long migration
4
- '''
4
+ """
5
+
5
6
  import logging
6
7
 
7
8
  import mongoengine
8
9
 
9
10
  from udata.core.jobs.models import PeriodicTask
10
- from udata.harvest.models import HarvestSource, HarvestJob
11
+ from udata.harvest.models import HarvestJob, HarvestSource
11
12
 
12
13
  log = logging.getLogger(__name__)
13
14
 
14
15
 
15
16
  def migrate(db):
16
-
17
- log.info('Processing HarvestJob source references.')
17
+ log.info("Processing HarvestJob source references.")
18
18
 
19
19
  harvest_jobs = HarvestJob.objects().no_cache().all()
20
20
  count = 0
@@ -25,9 +25,9 @@ def migrate(db):
25
25
  count += 1
26
26
  harvest_job.delete()
27
27
 
28
- log.info(f'Completed, removed {count} HarvestJob objects')
28
+ log.info(f"Completed, removed {count} HarvestJob objects")
29
29
 
30
- log.info('Processing HarvestJob items references.')
30
+ log.info("Processing HarvestJob items references.")
31
31
 
32
32
  harvest_jobs = HarvestJob.objects.filter(items__0__exists=True).no_cache().all()
33
33
  count = 0
@@ -40,14 +40,15 @@ def migrate(db):
40
40
  item.dataset = None
41
41
  harvest_job.save()
42
42
 
43
- log.info(f'Completed, modified {count} HarvestJob objects')
43
+ log.info(f"Completed, modified {count} HarvestJob objects")
44
44
 
45
- log.info('Processing PeriodicTask objects.')
45
+ log.info("Processing PeriodicTask objects.")
46
46
 
47
- harvest_schedules = PeriodicTask.objects.filter(name__startswith='Harvest',
48
- description='Periodic Harvesting')
47
+ harvest_schedules = PeriodicTask.objects.filter(
48
+ name__startswith="Harvest", description="Periodic Harvesting"
49
+ )
49
50
  hs = HarvestSource.objects.filter(periodic_task__in=harvest_schedules)
50
51
  unlegit_schedules = harvest_schedules.filter(id__nin=[h.periodic_task.id for h in hs])
51
52
  count = unlegit_schedules.delete()
52
53
 
53
- log.info(f'Completed, removed {count} PeriodicTask objects')
54
+ log.info(f"Completed, removed {count} PeriodicTask objects")
@@ -1,6 +1,7 @@
1
- '''
1
+ """
2
2
  Remove Oauth2Client db integrity problems
3
- '''
3
+ """
4
+
4
5
  import logging
5
6
 
6
7
  import mongoengine
@@ -11,7 +12,7 @@ log = logging.getLogger(__name__)
11
12
 
12
13
 
13
14
  def migrate(db):
14
- log.info('Processing Transfer objects.')
15
+ log.info("Processing Transfer objects.")
15
16
 
16
17
  clients = OAuth2Client.objects.no_cache().all()
17
18
 
@@ -24,4 +25,4 @@ def migrate(db):
24
25
  client.organization = None
25
26
  client.save()
26
27
 
27
- log.info(f'Completed, modified {count} OAuth2Client objects')
28
+ log.info(f"Completed, modified {count} OAuth2Client objects")
@@ -1,7 +1,8 @@
1
- '''
1
+ """
2
2
  Remove Transfer db integrity problems
3
3
  ⚠️ long migration
4
- '''
4
+ """
5
+
5
6
  import logging
6
7
 
7
8
  import mongoengine
@@ -12,7 +13,7 @@ log = logging.getLogger(__name__)
12
13
 
13
14
 
14
15
  def migrate(db):
15
- log.info('Processing Transfer objects.')
16
+ log.info("Processing Transfer objects.")
16
17
 
17
18
  transfers = Transfer.objects.no_cache().all()
18
19
 
@@ -26,4 +27,4 @@ def migrate(db):
26
27
  transfer.delete()
27
28
  count += 1
28
29
 
29
- log.info(f'Completed, removed {count} Transfer objects')
30
+ log.info(f"Completed, removed {count} Transfer objects")
@@ -1,6 +1,7 @@
1
- '''
1
+ """
2
2
  Remove User db integrity problems, and Discussion.subject in the process
3
- '''
3
+ """
4
+
4
5
  import logging
5
6
 
6
7
  import mongoengine
@@ -11,7 +12,7 @@ log = logging.getLogger(__name__)
11
12
 
12
13
 
13
14
  def migrate(db):
14
- log.info('Processing Discussion user references.')
15
+ log.info("Processing Discussion user references.")
15
16
 
16
17
  discussions = Discussion.objects(user__ne=None).no_cache().all()
17
18
  remove_count = 0
@@ -37,9 +38,9 @@ def migrate(db):
37
38
  discussion.save()
38
39
  modif_count += 1
39
40
 
40
- log.info(f'Modified {modif_count} Discussion objects, deleted {remove_count}')
41
+ log.info(f"Modified {modif_count} Discussion objects, deleted {remove_count}")
41
42
 
42
- log.info('Processing Badges user references.')
43
+ log.info("Processing Badges user references.")
43
44
 
44
45
  organizations = Organization.objects.filter(badges__0__exists=True)
45
46
  count = 0
@@ -52,9 +53,9 @@ def migrate(db):
52
53
  badge.created_by = None
53
54
  org.save()
54
55
 
55
- log.info(f'Modified {count} badges')
56
+ log.info(f"Modified {count} badges")
56
57
 
57
- log.info('Processing Request user references.')
58
+ log.info("Processing Request user references.")
58
59
 
59
60
  organizations = Organization.objects.filter(requests__0__exists=True)
60
61
  count = 0
@@ -67,4 +68,4 @@ def migrate(db):
67
68
  request.handled_by = None
68
69
  org.save()
69
70
 
70
- log.info(f'Modified {count} requests')
71
+ log.info(f"Modified {count} requests")
@@ -1,6 +1,7 @@
1
- '''
1
+ """
2
2
  Add a default topic to all reuses in db
3
- '''
3
+ """
4
+
4
5
  import logging
5
6
 
6
7
  from udata.models import Reuse
@@ -9,14 +10,14 @@ log = logging.getLogger(__name__)
9
10
 
10
11
 
11
12
  def migrate(db):
12
- log.info('Processing Reuse.')
13
+ log.info("Processing Reuse.")
13
14
 
14
15
  reuses = Reuse.objects().no_cache().timeout(False)
15
16
  count = 0
16
17
  for reuse in reuses:
17
- reuse.topic = 'others'
18
+ reuse.topic = "others"
18
19
  reuse.save()
19
20
  count += 1
20
21
 
21
- log.info(f'Modified {count} Reuses objects')
22
- log.info('Done')
22
+ log.info(f"Modified {count} Reuses objects")
23
+ log.info("Done")
@@ -1,16 +1,17 @@
1
- '''
1
+ """
2
2
  Recompute resources extension with improved detection
3
- '''
3
+ """
4
+
4
5
  import logging
5
6
 
6
- from udata.models import Dataset
7
7
  from udata.core.storages.utils import extension
8
+ from udata.models import Dataset
8
9
 
9
10
  log = logging.getLogger(__name__)
10
11
 
11
12
 
12
13
  def migrate(db):
13
- log.info('Processing Datasets.')
14
+ log.info("Processing Datasets.")
14
15
 
15
16
  datasets = Dataset.objects().no_cache().timeout(False)
16
17
  count = 0
@@ -23,7 +24,7 @@ def migrate(db):
23
24
  resource.format = detected_format
24
25
  count += 1
25
26
  if save_dataset:
26
- dataset.save(signal_kwargs={'ignores': ['post_save']})
27
+ dataset.save(signal_kwargs={"ignores": ["post_save"]})
27
28
 
28
- log.info(f'Modified {count} resource objects')
29
- log.info('Done')
29
+ log.info(f"Modified {count} resource objects")
30
+ log.info("Done")
@@ -1,34 +1,36 @@
1
- '''
1
+ """
2
2
  Datasets linked to an inactive harvester are archived
3
- '''
3
+ """
4
+
4
5
  import logging
5
6
 
6
7
  from mongoengine.errors import ValidationError
7
8
 
8
- from udata.models import Dataset
9
9
  from udata.harvest.actions import archive_harvested_dataset
10
10
  from udata.harvest.models import HarvestSource
11
-
11
+ from udata.models import Dataset
12
12
 
13
13
  log = logging.getLogger(__name__)
14
14
 
15
15
 
16
16
  def migrate(db):
17
- log.info('Computing the list of datasets linked to an inactive harvester.')
17
+ log.info("Computing the list of datasets linked to an inactive harvester.")
18
18
 
19
19
  active_sources = [str(source.id) for source in HarvestSource.objects()]
20
- dangling_datasets = Dataset.objects(**{
21
- 'extras__harvest:source_id__exists': True,
22
- 'extras__harvest:source_id__nin': active_sources,
23
- 'archived': None
24
- })
20
+ dangling_datasets = Dataset.objects(
21
+ **{
22
+ "extras__harvest:source_id__exists": True,
23
+ "extras__harvest:source_id__nin": active_sources,
24
+ "archived": None,
25
+ }
26
+ )
25
27
 
26
- log.info(f'{dangling_datasets.count()} datasets to archive.')
28
+ log.info(f"{dangling_datasets.count()} datasets to archive.")
27
29
 
28
30
  for dataset in dangling_datasets:
29
31
  try:
30
- archive_harvested_dataset(dataset, reason='harvester-inactive', dryrun=False)
32
+ archive_harvested_dataset(dataset, reason="harvester-inactive", dryrun=False)
31
33
  except ValidationError as e:
32
- log.error(f'Error on dataset {dataset.id}: {e}')
34
+ log.error(f"Error on dataset {dataset.id}: {e}")
33
35
 
34
- log.info('Done')
36
+ log.info("Done")
@@ -1,6 +1,7 @@
1
- '''
1
+ """
2
2
  Set fs_uniquifier field for every user due to Flask-Security-Too update > v4.0.0
3
- '''
3
+ """
4
+
4
5
  import logging
5
6
  import uuid
6
7
 
@@ -8,12 +9,11 @@ from mongoengine.errors import ValidationError
8
9
 
9
10
  from udata.models import User
10
11
 
11
-
12
12
  log = logging.getLogger(__name__)
13
13
 
14
14
 
15
15
  def migrate(db):
16
- log.info('Processing Users fs_uniquifier attribute.')
16
+ log.info("Processing Users fs_uniquifier attribute.")
17
17
 
18
18
  users = User.objects().no_cache().timeout(False)
19
19
  for user in users:
@@ -21,6 +21,6 @@ def migrate(db):
21
21
  try:
22
22
  user.save()
23
23
  except ValidationError as e:
24
- log.error(f'Error on user {user.id}: {e}')
24
+ log.error(f"Error on user {user.id}: {e}")
25
25
 
26
- log.info('Completed.')
26
+ log.info("Completed.")
@@ -1,57 +1,67 @@
1
- '''
1
+ """
2
2
  Move identifying harvest fields from extras to dedicated harvest metadata fields.
3
3
  Clean other extras set at harvest time, they will be re-created if needed.
4
- '''
4
+ """
5
+
5
6
  import logging
6
7
 
7
8
  from mongoengine.errors import ValidationError
8
- from udata.models import Dataset
9
+
9
10
  from udata.core.dataset.models import HarvestDatasetMetadata
11
+ from udata.models import Dataset
10
12
 
11
13
  log = logging.getLogger(__name__)
12
14
 
13
15
 
14
16
  def should_keep(extra):
15
- extras_to_remove = ['remote_url', 'dct:identifier', 'uri', 'ckan:name', 'ckan:source']
16
- if extra.startswith('harvest:') or extra.startswith('ods:') or extra in extras_to_remove:
17
+ extras_to_remove = ["remote_url", "dct:identifier", "uri", "ckan:name", "ckan:source"]
18
+ if extra.startswith("harvest:") or extra.startswith("ods:") or extra in extras_to_remove:
17
19
  return False
18
20
  return True
19
21
 
20
22
 
21
23
  def migrate(db):
22
- log.info('Processing Datasets.')
24
+ log.info("Processing Datasets.")
23
25
 
24
- datasets = Dataset.objects(__raw__={
25
- '$or': [
26
- {'extras.harvest:remote_id': {'$exists': True}},
27
- {'extras.harvest:domain': {'$exists': True}},
28
- {'extras.harvest:source_id': {'$exists': True}},
29
- ],
30
- }).no_cache().timeout(False)
26
+ datasets = (
27
+ Dataset.objects(
28
+ __raw__={
29
+ "$or": [
30
+ {"extras.harvest:remote_id": {"$exists": True}},
31
+ {"extras.harvest:domain": {"$exists": True}},
32
+ {"extras.harvest:source_id": {"$exists": True}},
33
+ ],
34
+ }
35
+ )
36
+ .no_cache()
37
+ .timeout(False)
38
+ )
31
39
 
32
40
  datasets_count = datasets.count()
33
41
  for dataset in datasets:
34
42
  if not dataset.harvest:
35
43
  dataset.harvest = HarvestDatasetMetadata()
36
- dataset.harvest.remote_id = dataset.extras.pop('harvest:remote_id', None)
37
- dataset.harvest.source_id = dataset.extras.pop('harvest:source_id', None)
38
- dataset.harvest.domain = dataset.extras.pop('harvest:domain', None)
44
+ dataset.harvest.remote_id = dataset.extras.pop("harvest:remote_id", None)
45
+ dataset.harvest.source_id = dataset.extras.pop("harvest:source_id", None)
46
+ dataset.harvest.domain = dataset.extras.pop("harvest:domain", None)
39
47
  # Keep last_update for archiving reason
40
- dataset.harvest.last_update = dataset.extras.pop('harvest:last_update', None)
48
+ dataset.harvest.last_update = dataset.extras.pop("harvest:last_update", None)
41
49
  # Keep any archived reason and date
42
- dataset.harvest.archived = dataset.extras.pop('harvest:archived', None)
43
- dataset.harvest.archived_at = dataset.extras.pop('harvest:archived_at', None)
50
+ dataset.harvest.archived = dataset.extras.pop("harvest:archived", None)
51
+ dataset.harvest.archived_at = dataset.extras.pop("harvest:archived_at", None)
44
52
 
45
- dataset.extras = {extra: dataset.extras[extra] for extra in dataset.extras
46
- if should_keep(extra)}
53
+ dataset.extras = {
54
+ extra: dataset.extras[extra] for extra in dataset.extras if should_keep(extra)
55
+ }
47
56
  for resource in dataset.resources:
48
- resource.extras = {extra: resource.extras[extra] for extra in resource.extras
49
- if should_keep(extra)}
57
+ resource.extras = {
58
+ extra: resource.extras[extra] for extra in resource.extras if should_keep(extra)
59
+ }
50
60
 
51
61
  try:
52
62
  dataset.save()
53
63
  except ValidationError as e:
54
- log.error(f'Failed to save dataset {dataset.id}: {e}')
64
+ log.error(f"Failed to save dataset {dataset.id}: {e}")
55
65
 
56
- log.info(f'Modified {datasets_count} datasets objects')
57
- log.info('Done')
66
+ log.info(f"Modified {datasets_count} datasets objects")
67
+ log.info("Done")
@@ -1,48 +1,66 @@
1
- '''
1
+ """
2
2
  The purpose here is to change the dates name in the dataset and resource model.
3
- '''
3
+ """
4
+
4
5
  import logging
5
6
 
6
7
  from mongoengine.connection import get_db
8
+
7
9
  from udata.models import Dataset
8
10
 
9
11
  log = logging.getLogger(__name__)
10
12
 
11
13
 
12
14
  def migrate(db):
13
- log.info('Processing Dataset collection.')
15
+ log.info("Processing Dataset collection.")
14
16
 
15
17
  db = get_db()
16
18
  dataset_collection = db.dataset
17
19
 
18
- result = dataset_collection.update_many({}, {'$rename': {
19
- 'created_at': 'created_at_internal',
20
- 'last_modified': 'last_modified_internal'}})
21
- log.info(f'{result.modified_count} Datasets processed.')
20
+ result = dataset_collection.update_many(
21
+ {},
22
+ {
23
+ "$rename": {
24
+ "created_at": "created_at_internal",
25
+ "last_modified": "last_modified_internal",
26
+ }
27
+ },
28
+ )
29
+ log.info(f"{result.modified_count} Datasets processed.")
22
30
 
23
31
  community_resource_collection = db.community_resource
24
- result = community_resource_collection.update_many({}, {'$rename': {
25
- 'created_at': 'created_at_internal',
26
- 'modified': 'last_modified_internal'}})
27
- log.info(f'{result.modified_count} Community Resources processed for renaming.')
28
- result = community_resource_collection.update_many({}, {'$unset': { 'published': "" }})
29
- log.info(f'{result.modified_count} Community Resources processed for published removing.')
30
-
31
- result = dataset_collection.update_many({}, [{
32
- '$set': {
33
- 'resources': {
34
- '$map': {
35
- 'input': '$resources',
36
- 'in': {
37
- '$mergeObjects': ['$$this', { 'created_at_internal': '$$this.created_at', 'last_modified_internal': '$$this.modified' }]
32
+ result = community_resource_collection.update_many(
33
+ {}, {"$rename": {"created_at": "created_at_internal", "modified": "last_modified_internal"}}
34
+ )
35
+ log.info(f"{result.modified_count} Community Resources processed for renaming.")
36
+ result = community_resource_collection.update_many({}, {"$unset": {"published": ""}})
37
+ log.info(f"{result.modified_count} Community Resources processed for published removing.")
38
+
39
+ result = dataset_collection.update_many(
40
+ {},
41
+ [
42
+ {
43
+ "$set": {
44
+ "resources": {
45
+ "$map": {
46
+ "input": "$resources",
47
+ "in": {
48
+ "$mergeObjects": [
49
+ "$$this",
50
+ {
51
+ "created_at_internal": "$$this.created_at",
52
+ "last_modified_internal": "$$this.modified",
53
+ },
54
+ ]
55
+ },
38
56
  }
39
57
  }
40
- }
58
+ },
41
59
  },
42
- },
43
- { '$unset': 'resources.created_at'},
44
- { '$unset': 'resources.modified'},
45
- { '$unset': 'resources.published'}
46
- ])
60
+ {"$unset": "resources.created_at"},
61
+ {"$unset": "resources.modified"},
62
+ {"$unset": "resources.published"},
63
+ ],
64
+ )
47
65
 
48
- log.info('Completed.')
66
+ log.info("Completed.")
@@ -1,20 +1,22 @@
1
- '''
1
+ """
2
2
  Some old dataset/reuse don't have a `private` field. It should be False by default.
3
- '''
3
+ """
4
+
4
5
  import logging
5
6
 
6
- from udata.models import Reuse, Dataset
7
+ from udata.models import Dataset, Reuse
7
8
 
8
9
  log = logging.getLogger(__name__)
9
10
 
11
+
10
12
  def migrate(db):
11
- log.info('Processing Reuse…')
13
+ log.info("Processing Reuse…")
12
14
 
13
15
  count = Reuse.objects(private=None).update(private=False)
14
- log.info(f'Fixed {count} Reuse objects from private None to private False.')
16
+ log.info(f"Fixed {count} Reuse objects from private None to private False.")
15
17
 
16
- log.info('Processing Datasets…')
18
+ log.info("Processing Datasets…")
17
19
  count = Dataset.objects(private=None).update(private=False)
18
- log.info(f'Fixed {count} Dataset objects from private None to private False.')
20
+ log.info(f"Fixed {count} Dataset objects from private None to private False.")
19
21
 
20
- log.info('Done')
22
+ log.info("Done")
@@ -1,16 +1,18 @@
1
1
  """
2
2
  Migrates `Activity.kwargs` to `Activity.extras`.
3
3
  """
4
+
4
5
  import logging
5
6
 
6
7
  from mongoengine.connection import get_db
7
8
 
8
9
  log = logging.getLogger(__name__)
9
10
 
11
+
10
12
  def migrate(db):
11
- log.info('Processing activity objects')
13
+ log.info("Processing activity objects")
12
14
 
13
- result = get_db().activity.update_many(filter={}, update={'$rename': {'kwargs': 'extras'}})
15
+ result = get_db().activity.update_many(filter={}, update={"$rename": {"kwargs": "extras"}})
14
16
 
15
- log.info(f'{result.modified_count} activity object(s) migrated')
16
- log.info('Done')
17
+ log.info(f"{result.modified_count} activity object(s) migrated")
18
+ log.info("Done")
@@ -1,10 +1,11 @@
1
- '''
1
+ """
2
2
  Add a default topic to all reuses in db
3
- '''
3
+ """
4
+
4
5
  import logging
5
6
 
6
- from bson import DBRef
7
7
  import mongoengine
8
+ from bson import DBRef
8
9
 
9
10
  from udata.models import Reuse
10
11
 
@@ -12,7 +13,7 @@ log = logging.getLogger(__name__)
12
13
 
13
14
 
14
15
  def migrate(db):
15
- log.info('Processing Reuse.')
16
+ log.info("Processing Reuse.")
16
17
 
17
18
  reuses = Reuse.objects().no_cache().timeout(False)
18
19
  count = 0
@@ -31,5 +32,5 @@ def migrate(db):
31
32
  reuse.save()
32
33
  count += 1
33
34
 
34
- log.info(f'Modified {count} Reuses objects (removed {errors} datasets)')
35
- log.info('Done')
35
+ log.info(f"Modified {count} Reuses objects (removed {errors} datasets)")
36
+ log.info("Done")