udata 9.1.2.dev30355__py2.py3-none-any.whl → 9.1.2.dev30454__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 (413) 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 +111 -134
  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 +58 -55
  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/cors.py +99 -0
  199. udata/db/tasks.py +2 -1
  200. udata/entrypoints.py +35 -31
  201. udata/errors.py +2 -1
  202. udata/event/values.py +6 -6
  203. udata/factories.py +2 -2
  204. udata/features/identicon/api.py +5 -6
  205. udata/features/identicon/backends.py +48 -55
  206. udata/features/identicon/tests/test_backends.py +4 -5
  207. udata/features/notifications/__init__.py +0 -1
  208. udata/features/notifications/actions.py +9 -9
  209. udata/features/notifications/api.py +17 -13
  210. udata/features/territories/__init__.py +12 -10
  211. udata/features/territories/api.py +14 -15
  212. udata/features/territories/models.py +23 -28
  213. udata/features/transfer/actions.py +8 -11
  214. udata/features/transfer/api.py +84 -77
  215. udata/features/transfer/factories.py +2 -1
  216. udata/features/transfer/models.py +11 -12
  217. udata/features/transfer/notifications.py +19 -15
  218. udata/features/transfer/permissions.py +5 -5
  219. udata/forms/__init__.py +5 -2
  220. udata/forms/fields.py +164 -172
  221. udata/forms/validators.py +19 -22
  222. udata/forms/widgets.py +9 -13
  223. udata/frontend/__init__.py +31 -26
  224. udata/frontend/csv.py +68 -58
  225. udata/frontend/markdown.py +40 -44
  226. udata/harvest/actions.py +89 -77
  227. udata/harvest/api.py +294 -238
  228. udata/harvest/backends/__init__.py +4 -4
  229. udata/harvest/backends/base.py +128 -111
  230. udata/harvest/backends/dcat.py +80 -66
  231. udata/harvest/commands.py +56 -60
  232. udata/harvest/csv.py +8 -8
  233. udata/harvest/exceptions.py +6 -3
  234. udata/harvest/filters.py +24 -23
  235. udata/harvest/forms.py +27 -28
  236. udata/harvest/models.py +88 -80
  237. udata/harvest/notifications.py +15 -10
  238. udata/harvest/signals.py +13 -13
  239. udata/harvest/tasks.py +11 -10
  240. udata/harvest/tests/factories.py +23 -24
  241. udata/harvest/tests/test_actions.py +136 -166
  242. udata/harvest/tests/test_api.py +220 -214
  243. udata/harvest/tests/test_base_backend.py +117 -112
  244. udata/harvest/tests/test_dcat_backend.py +380 -308
  245. udata/harvest/tests/test_filters.py +33 -22
  246. udata/harvest/tests/test_models.py +11 -14
  247. udata/harvest/tests/test_notifications.py +6 -7
  248. udata/harvest/tests/test_tasks.py +7 -6
  249. udata/i18n.py +237 -78
  250. udata/linkchecker/backends.py +5 -11
  251. udata/linkchecker/checker.py +23 -22
  252. udata/linkchecker/commands.py +4 -6
  253. udata/linkchecker/models.py +6 -6
  254. udata/linkchecker/tasks.py +18 -20
  255. udata/mail.py +21 -21
  256. udata/migrations/2020-07-24-remove-s-from-scope-oauth.py +9 -8
  257. udata/migrations/2020-08-24-add-fs-filename.py +9 -8
  258. udata/migrations/2020-09-28-update-reuses-datasets-metrics.py +5 -4
  259. udata/migrations/2020-10-16-migrate-ods-resources.py +9 -10
  260. udata/migrations/2021-04-08-update-schema-with-new-structure.py +8 -7
  261. udata/migrations/2021-05-27-fix-default-schema-name.py +7 -6
  262. udata/migrations/2021-07-05-remove-unused-badges.py +17 -15
  263. udata/migrations/2021-07-07-update-schema-for-community-resources.py +7 -6
  264. udata/migrations/2021-08-17-follow-integrity.py +5 -4
  265. udata/migrations/2021-08-17-harvest-integrity.py +13 -12
  266. udata/migrations/2021-08-17-oauth2client-integrity.py +5 -4
  267. udata/migrations/2021-08-17-transfer-integrity.py +5 -4
  268. udata/migrations/2021-08-17-users-integrity.py +9 -8
  269. udata/migrations/2021-12-14-reuse-topics.py +7 -6
  270. udata/migrations/2022-04-21-improve-extension-detection.py +8 -7
  271. udata/migrations/2022-09-22-clean-inactive-harvest-datasets.py +16 -14
  272. udata/migrations/2022-10-10-add-fs_uniquifier-to-user-model.py +6 -6
  273. udata/migrations/2022-10-10-migrate-harvest-extras.py +36 -26
  274. udata/migrations/2023-02-08-rename-internal-dates.py +46 -28
  275. udata/migrations/2024-01-29-fix-reuse-and-dataset-with-private-None.py +10 -8
  276. udata/migrations/2024-03-22-migrate-activity-kwargs-to-extras.py +6 -4
  277. udata/migrations/2024-06-11-fix-reuse-datasets-references.py +7 -6
  278. udata/migrations/__init__.py +123 -105
  279. udata/models/__init__.py +4 -4
  280. udata/mongo/__init__.py +13 -11
  281. udata/mongo/badges_field.py +3 -2
  282. udata/mongo/datetime_fields.py +13 -12
  283. udata/mongo/document.py +17 -16
  284. udata/mongo/engine.py +15 -16
  285. udata/mongo/errors.py +2 -1
  286. udata/mongo/extras_fields.py +30 -20
  287. udata/mongo/queryset.py +12 -12
  288. udata/mongo/slug_fields.py +38 -28
  289. udata/mongo/taglist_field.py +1 -2
  290. udata/mongo/url_field.py +5 -5
  291. udata/mongo/uuid_fields.py +4 -3
  292. udata/notifications/__init__.py +1 -1
  293. udata/notifications/mattermost.py +10 -9
  294. udata/rdf.py +167 -188
  295. udata/routing.py +40 -45
  296. udata/search/__init__.py +18 -19
  297. udata/search/adapter.py +17 -16
  298. udata/search/commands.py +44 -51
  299. udata/search/fields.py +13 -20
  300. udata/search/query.py +23 -18
  301. udata/search/result.py +9 -10
  302. udata/sentry.py +21 -19
  303. udata/settings.py +262 -198
  304. udata/sitemap.py +8 -6
  305. udata/storage/s3.py +20 -13
  306. udata/tags.py +4 -5
  307. udata/tasks.py +43 -42
  308. udata/tests/__init__.py +9 -6
  309. udata/tests/api/__init__.py +8 -6
  310. udata/tests/api/test_auth_api.py +395 -321
  311. udata/tests/api/test_base_api.py +33 -35
  312. udata/tests/api/test_contact_points.py +7 -9
  313. udata/tests/api/test_dataservices_api.py +211 -158
  314. udata/tests/api/test_datasets_api.py +823 -812
  315. udata/tests/api/test_follow_api.py +13 -15
  316. udata/tests/api/test_me_api.py +95 -112
  317. udata/tests/api/test_organizations_api.py +301 -339
  318. udata/tests/api/test_reports_api.py +35 -25
  319. udata/tests/api/test_reuses_api.py +134 -139
  320. udata/tests/api/test_swagger.py +5 -5
  321. udata/tests/api/test_tags_api.py +18 -25
  322. udata/tests/api/test_topics_api.py +94 -94
  323. udata/tests/api/test_transfer_api.py +53 -48
  324. udata/tests/api/test_user_api.py +128 -141
  325. udata/tests/apiv2/test_datasets.py +290 -198
  326. udata/tests/apiv2/test_me_api.py +10 -11
  327. udata/tests/apiv2/test_organizations.py +56 -74
  328. udata/tests/apiv2/test_swagger.py +5 -5
  329. udata/tests/apiv2/test_topics.py +69 -87
  330. udata/tests/cli/test_cli_base.py +8 -8
  331. udata/tests/cli/test_db_cli.py +21 -19
  332. udata/tests/dataservice/test_dataservice_tasks.py +8 -12
  333. udata/tests/dataset/test_csv_adapter.py +44 -35
  334. udata/tests/dataset/test_dataset_actions.py +2 -3
  335. udata/tests/dataset/test_dataset_commands.py +7 -8
  336. udata/tests/dataset/test_dataset_events.py +36 -29
  337. udata/tests/dataset/test_dataset_model.py +224 -217
  338. udata/tests/dataset/test_dataset_rdf.py +142 -131
  339. udata/tests/dataset/test_dataset_tasks.py +15 -15
  340. udata/tests/dataset/test_resource_preview.py +10 -13
  341. udata/tests/features/territories/__init__.py +9 -13
  342. udata/tests/features/territories/test_territories_api.py +71 -91
  343. udata/tests/forms/test_basic_fields.py +7 -7
  344. udata/tests/forms/test_current_user_field.py +39 -66
  345. udata/tests/forms/test_daterange_field.py +31 -39
  346. udata/tests/forms/test_dict_field.py +28 -26
  347. udata/tests/forms/test_extras_fields.py +102 -76
  348. udata/tests/forms/test_form_field.py +8 -8
  349. udata/tests/forms/test_image_field.py +33 -26
  350. udata/tests/forms/test_model_field.py +134 -123
  351. udata/tests/forms/test_model_list_field.py +7 -7
  352. udata/tests/forms/test_nested_model_list_field.py +117 -79
  353. udata/tests/forms/test_publish_as_field.py +36 -65
  354. udata/tests/forms/test_reference_field.py +34 -53
  355. udata/tests/forms/test_user_forms.py +23 -21
  356. udata/tests/forms/test_uuid_field.py +6 -10
  357. udata/tests/frontend/__init__.py +9 -6
  358. udata/tests/frontend/test_auth.py +7 -6
  359. udata/tests/frontend/test_csv.py +81 -96
  360. udata/tests/frontend/test_hooks.py +43 -43
  361. udata/tests/frontend/test_markdown.py +211 -191
  362. udata/tests/helpers.py +32 -37
  363. udata/tests/models.py +2 -2
  364. udata/tests/organization/test_csv_adapter.py +21 -16
  365. udata/tests/organization/test_notifications.py +11 -18
  366. udata/tests/organization/test_organization_model.py +13 -13
  367. udata/tests/organization/test_organization_rdf.py +29 -22
  368. udata/tests/organization/test_organization_tasks.py +16 -17
  369. udata/tests/plugin.py +79 -73
  370. udata/tests/reuse/test_reuse_model.py +21 -21
  371. udata/tests/reuse/test_reuse_task.py +11 -13
  372. udata/tests/search/__init__.py +11 -12
  373. udata/tests/search/test_adapter.py +60 -70
  374. udata/tests/search/test_query.py +16 -16
  375. udata/tests/search/test_results.py +10 -7
  376. udata/tests/site/test_site_api.py +11 -16
  377. udata/tests/site/test_site_metrics.py +20 -30
  378. udata/tests/site/test_site_model.py +4 -5
  379. udata/tests/site/test_site_rdf.py +94 -78
  380. udata/tests/test_activity.py +17 -17
  381. udata/tests/test_cors.py +62 -0
  382. udata/tests/test_discussions.py +292 -299
  383. udata/tests/test_i18n.py +37 -40
  384. udata/tests/test_linkchecker.py +91 -85
  385. udata/tests/test_mail.py +13 -17
  386. udata/tests/test_migrations.py +219 -180
  387. udata/tests/test_model.py +164 -157
  388. udata/tests/test_notifications.py +17 -17
  389. udata/tests/test_owned.py +14 -14
  390. udata/tests/test_rdf.py +25 -23
  391. udata/tests/test_routing.py +89 -93
  392. udata/tests/test_storages.py +137 -128
  393. udata/tests/test_tags.py +44 -46
  394. udata/tests/test_topics.py +7 -7
  395. udata/tests/test_transfer.py +42 -49
  396. udata/tests/test_uris.py +160 -161
  397. udata/tests/test_utils.py +79 -71
  398. udata/tests/user/test_user_rdf.py +5 -9
  399. udata/tests/workers/test_jobs_commands.py +57 -58
  400. udata/tests/workers/test_tasks_routing.py +23 -29
  401. udata/tests/workers/test_workers_api.py +125 -131
  402. udata/tests/workers/test_workers_helpers.py +6 -6
  403. udata/tracking.py +4 -6
  404. udata/uris.py +45 -46
  405. udata/utils.py +68 -66
  406. udata/wsgi.py +1 -1
  407. {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30454.dist-info}/METADATA +7 -3
  408. udata-9.1.2.dev30454.dist-info/RECORD +706 -0
  409. udata-9.1.2.dev30355.dist-info/RECORD +0 -704
  410. {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30454.dist-info}/LICENSE +0 -0
  411. {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30454.dist-info}/WHEEL +0 -0
  412. {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30454.dist-info}/entry_points.txt +0 -0
  413. {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30454.dist-info}/top_level.txt +0 -0
@@ -1,16 +1,16 @@
1
1
  def test_cli_help(cli):
2
- '''Should display help without errors'''
2
+ """Should display help without errors"""
3
3
  cli()
4
- cli('-?')
5
- cli('-h')
6
- cli('--help')
4
+ cli("-?")
5
+ cli("-h")
6
+ cli("--help")
7
7
 
8
8
 
9
9
  def test_cli_log_and_printing(cli):
10
- '''Should properly log and print'''
11
- cli('test log')
10
+ """Should properly log and print"""
11
+ cli("test log")
12
12
 
13
13
 
14
14
  def test_cli_version(cli):
15
- '''Should display version without errors'''
16
- cli('--version')
15
+ """Should display version without errors"""
16
+ cli("--version")
@@ -5,53 +5,55 @@ import pytest
5
5
 
6
6
  @pytest.fixture
7
7
  def migrations(db):
8
- db.migrations.insert_one({
9
- 'plugin': 'udata',
10
- 'filename': 'test.py',
11
- 'date': datetime.utcnow(),
12
- 'script': 'print("ok")',
13
- 'output': 'ok',
14
- })
8
+ db.migrations.insert_one(
9
+ {
10
+ "plugin": "udata",
11
+ "filename": "test.py",
12
+ "date": datetime.utcnow(),
13
+ "script": 'print("ok")',
14
+ "output": "ok",
15
+ }
16
+ )
15
17
  return db.migrations
16
18
 
17
19
 
18
20
  def test_unrecord_with_complete_filename(cli, migrations):
19
- '''Should display help without errors'''
20
- result = cli('db unrecord udata test.py')
21
+ """Should display help without errors"""
22
+ result = cli("db unrecord udata test.py")
21
23
  assert result.exit_code == 0
22
24
  assert migrations.count_documents({}) == 0
23
25
 
24
26
 
25
27
  def test_unrecord_with_filename_without_extension(cli, migrations):
26
- '''Should display help without errors'''
27
- result = cli('db unrecord udata test')
28
+ """Should display help without errors"""
29
+ result = cli("db unrecord udata test")
28
30
  assert result.exit_code == 0
29
31
  assert migrations.count_documents({}) == 0
30
32
 
31
33
 
32
34
  def test_unrecord_with_single_parameter(cli, migrations):
33
- '''Should display help without errors'''
34
- result = cli('db unrecord udata:test.py')
35
+ """Should display help without errors"""
36
+ result = cli("db unrecord udata:test.py")
35
37
  assert result.exit_code == 0
36
38
  assert migrations.count_documents({}) == 0
37
39
 
38
40
 
39
41
  def test_unrecord_with_single_parameter_without_extension(cli, migrations):
40
- '''Should display help without errors'''
41
- result = cli('db unrecord udata:test')
42
+ """Should display help without errors"""
43
+ result = cli("db unrecord udata:test")
42
44
  assert result.exit_code == 0
43
45
  assert migrations.count_documents({}) == 0
44
46
 
45
47
 
46
48
  def test_unrecord_without_parameters(cli, migrations):
47
- '''Should display help without errors'''
48
- result = cli('db unrecord', check=False)
49
+ """Should display help without errors"""
50
+ result = cli("db unrecord", check=False)
49
51
  assert result.exit_code != 0
50
52
  assert migrations.count_documents({}) == 1
51
53
 
52
54
 
53
55
  def test_unrecord_with_too_many_parameters(cli, migrations):
54
- '''Should display help without errors'''
55
- result = cli('db unrecord udata test.py too many', check=False)
56
+ """Should display help without errors"""
57
+ result = cli("db unrecord udata test.py too many", check=False)
56
58
  assert result.exit_code != 0
57
59
  assert migrations.count_documents({}) == 1
@@ -1,24 +1,20 @@
1
1
  import pytest
2
2
 
3
+ from udata.core.dataservices import tasks
3
4
  from udata.core.dataservices.models import Dataservice
4
5
  from udata.core.user.factories import UserFactory
5
- from udata.core.dataservices import tasks
6
6
  from udata.models import Discussion, Follow, Message, Transfer
7
7
  from udata.utils import faker
8
8
 
9
-
10
- pytestmark = pytest.mark.usefixtures('clean_db')
9
+ pytestmark = pytest.mark.usefixtures("clean_db")
11
10
 
12
11
 
13
12
  def test_purge_dataservices():
14
13
  dataservices = [
15
14
  Dataservice.objects.create(
16
- title='delete me',
17
- base_api_url='https://example.com/api',
18
- deleted_at='2016-01-01'),
19
- Dataservice.objects.create(
20
- title='keep me',
21
- base_api_url='https://example.com/api'),
15
+ title="delete me", base_api_url="https://example.com/api", deleted_at="2016-01-01"
16
+ ),
17
+ Dataservice.objects.create(title="keep me", base_api_url="https://example.com/api"),
22
18
  ]
23
19
 
24
20
  user = UserFactory()
@@ -26,14 +22,14 @@ def test_purge_dataservices():
26
22
  owner=user,
27
23
  recipient=user,
28
24
  subject=dataservices[0],
29
- comment='comment',
25
+ comment="comment",
30
26
  )
31
27
 
32
28
  discussion = Discussion.objects.create(
33
29
  subject=dataservices[0],
34
30
  user=user,
35
- title='test discussion',
36
- discussion=[Message(content=faker.sentence(), posted_by=user)]
31
+ title="test discussion",
32
+ discussion=[Message(content=faker.sentence(), posted_by=user)],
37
33
  )
38
34
 
39
35
  follower = Follow.objects.create(follower=user, following=dataservices[0])
@@ -2,30 +2,33 @@ from datetime import datetime, timedelta
2
2
 
3
3
  import pytest
4
4
 
5
- from udata.core.dataset.csv import ResourcesCsvAdapter, DatasetCsvAdapter
5
+ from udata.core.dataset.csv import DatasetCsvAdapter, ResourcesCsvAdapter
6
6
  from udata.core.dataset.factories import DatasetFactory, ResourceFactory
7
7
  from udata.core.dataset.models import Dataset
8
8
 
9
9
 
10
10
  @pytest.mark.frontend
11
- @pytest.mark.usefixtures('clean_db')
11
+ @pytest.mark.usefixtures("clean_db")
12
12
  class DatasetCSVAdapterTest:
13
-
14
13
  def test_resources_csv_adapter(self):
15
14
  date_created = datetime(2022, 12, 31)
16
15
  date_modified = date_created + timedelta(days=1)
17
16
  another_date = date_created + timedelta(days=42)
18
17
  dataset = DatasetFactory(
19
- resources=[ResourceFactory(harvest={
20
- 'created_at': date_created,
21
- 'modified_at': date_modified,
22
- 'uri': 'http://domain.gouv.fr/dataset/uri',
23
- })],
18
+ resources=[
19
+ ResourceFactory(
20
+ harvest={
21
+ "created_at": date_created,
22
+ "modified_at": date_modified,
23
+ "uri": "http://domain.gouv.fr/dataset/uri",
24
+ }
25
+ )
26
+ ],
24
27
  harvest={
25
- 'domain': 'example.com',
26
- 'backend': 'dummy_backend',
27
- 'modified_at': another_date,
28
- 'created_at': another_date,
28
+ "domain": "example.com",
29
+ "backend": "dummy_backend",
30
+ "modified_at": another_date,
31
+ "created_at": another_date,
29
32
  },
30
33
  )
31
34
  DatasetFactory(resources=[ResourceFactory()])
@@ -44,37 +47,43 @@ class DatasetCSVAdapterTest:
44
47
  date_modified = date_created + timedelta(days=1)
45
48
  harvest_dataset = DatasetFactory(
46
49
  harvest={
47
- 'domain': 'example.com',
48
- 'backend': 'dummy_backend',
49
- 'modified_at': date_modified,
50
- 'created_at': date_created,
50
+ "domain": "example.com",
51
+ "backend": "dummy_backend",
52
+ "modified_at": date_modified,
53
+ "created_at": date_created,
51
54
  },
52
55
  )
53
- resources_dataset = DatasetFactory(resources=[
54
- ResourceFactory(metrics={
55
- 'views': 42,
56
- }),
57
- ResourceFactory(metrics={
58
- 'views': 1337,
59
- }),
60
- ResourceFactory(),
61
- ])
56
+ resources_dataset = DatasetFactory(
57
+ resources=[
58
+ ResourceFactory(
59
+ metrics={
60
+ "views": 42,
61
+ }
62
+ ),
63
+ ResourceFactory(
64
+ metrics={
65
+ "views": 1337,
66
+ }
67
+ ),
68
+ ResourceFactory(),
69
+ ]
70
+ )
62
71
  adapter = DatasetCsvAdapter(Dataset.objects.all())
63
72
 
64
73
  # Build a dict (Dataset ID to dict of header name to value) from the CSV values and headers to simplify testing below.
65
74
  csv = {}
66
75
  for row in adapter.rows():
67
76
  values = dict(zip(adapter.header(), row))
68
- csv[values['id']] = values
77
+ csv[values["id"]] = values
69
78
 
70
79
  harvest_dataset_values = csv[str(harvest_dataset.id)]
71
- assert harvest_dataset_values['harvest.created_at'] == date_created.isoformat()
72
- assert harvest_dataset_values['harvest.modified_at'] == date_modified.isoformat()
73
- assert harvest_dataset_values['harvest.backend'] == 'dummy_backend'
74
- assert harvest_dataset_values['harvest.domain'] == 'example.com'
75
- assert harvest_dataset_values['resources_count'] == 0
76
- assert harvest_dataset_values['downloads'] == 0
77
-
80
+ assert harvest_dataset_values["harvest.created_at"] == date_created.isoformat()
81
+ assert harvest_dataset_values["harvest.modified_at"] == date_modified.isoformat()
82
+ assert harvest_dataset_values["harvest.backend"] == "dummy_backend"
83
+ assert harvest_dataset_values["harvest.domain"] == "example.com"
84
+ assert harvest_dataset_values["resources_count"] == 0
85
+ assert harvest_dataset_values["downloads"] == 0
86
+
78
87
  resources_dataset_values = csv[str(resources_dataset.id)]
79
- assert resources_dataset_values['resources_count'] == 3
80
- assert resources_dataset_values['downloads'] == 1337 + 42
88
+ assert resources_dataset_values["resources_count"] == 3
89
+ assert resources_dataset_values["downloads"] == 1337 + 42
@@ -6,12 +6,11 @@ from udata.core.discussions.models import Discussion
6
6
  from udata.core.user.factories import UserFactory
7
7
 
8
8
 
9
- @pytest.mark.usefixtures('clean_db')
9
+ @pytest.mark.usefixtures("clean_db")
10
10
  class DatasetActionsTest:
11
-
12
11
  def test_dataset_archive(self, app):
13
12
  user = UserFactory()
14
- app.config['ARCHIVE_COMMENT_USER_ID'] = user.id
13
+ app.config["ARCHIVE_COMMENT_USER_ID"] = user.id
15
14
 
16
15
  dataset = DatasetFactory()
17
16
 
@@ -1,17 +1,16 @@
1
- import pytest
2
-
3
1
  from tempfile import NamedTemporaryFile
4
2
 
3
+ import pytest
4
+
5
5
  from udata.core.dataset.factories import DatasetFactory
6
6
 
7
7
 
8
- @pytest.mark.usefixtures('clean_db')
8
+ @pytest.mark.usefixtures("clean_db")
9
9
  class DatasetCommandTest:
10
-
11
10
  def test_dataset_archive_one(self, cli):
12
11
  dataset = DatasetFactory()
13
12
 
14
- cli('dataset', 'archive-one', str(dataset.id))
13
+ cli("dataset", "archive-one", str(dataset.id))
15
14
 
16
15
  dataset.reload()
17
16
  assert dataset.archived is not None
@@ -19,11 +18,11 @@ class DatasetCommandTest:
19
18
  def test_dataset_archive(self, cli):
20
19
  datasets = [DatasetFactory() for _ in range(2)]
21
20
 
22
- with NamedTemporaryFile(mode='w', encoding='utf8') as temp:
23
- temp.write('\n'.join((str(d.id) for d in datasets)))
21
+ with NamedTemporaryFile(mode="w", encoding="utf8") as temp:
22
+ temp.write("\n".join((str(d.id) for d in datasets)))
24
23
  temp.flush()
25
24
 
26
- cli('dataset', 'archive', temp.name)
25
+ cli("dataset", "archive", temp.name)
27
26
 
28
27
  for dataset in datasets:
29
28
  dataset.reload()
@@ -1,75 +1,82 @@
1
- from flask import current_app
2
- import pytest
3
1
  from unittest.mock import patch
4
- from udata.core.dataset.models import Schema
5
2
 
3
+ import pytest
4
+ from flask import current_app
5
+ from requests.compat import json as complexjson
6
+
7
+ from udata.core.dataset.events import serialize_resource_for_event
8
+ from udata.core.dataset.factories import DatasetFactory, ResourceFactory
9
+ from udata.core.dataset.models import Schema
6
10
  from udata.models import Dataset
7
11
  from udata.tests.helpers import assert_emit
8
- from udata.core.dataset.events import serialize_resource_for_event
9
- from udata.core.dataset.factories import ResourceFactory, DatasetFactory
10
- from requests.compat import json as complexjson
11
12
 
12
- @pytest.mark.usefixtures('clean_db')
13
- @pytest.mark.usefixtures('enable_resource_event')
14
- class DatasetEventsTest:
15
13
 
16
- @patch('requests.post')
14
+ @pytest.mark.usefixtures("clean_db")
15
+ @pytest.mark.usefixtures("enable_resource_event")
16
+ class DatasetEventsTest:
17
+ @patch("requests.post")
17
18
  def test_publish_message_resource_created(self, mock_req):
18
19
  dataset = DatasetFactory()
19
20
  resource = ResourceFactory()
20
21
  expected_signals = (Dataset.on_resource_added,)
21
22
 
22
23
  expected_value = {
23
- 'resource_id': str(resource.id),
24
- 'dataset_id': str(dataset.id),
25
- 'document': serialize_resource_for_event(resource)
24
+ "resource_id": str(resource.id),
25
+ "dataset_id": str(dataset.id),
26
+ "document": serialize_resource_for_event(resource),
26
27
  }
27
28
 
28
29
  with assert_emit(*expected_signals):
29
30
  dataset.add_resource(resource)
30
31
 
31
- mock_req.assert_called_with(f"{current_app.config['RESOURCES_ANALYSER_URI']}/api/resource/created/",
32
- json=expected_value)
32
+ mock_req.assert_called_with(
33
+ f"{current_app.config['RESOURCES_ANALYSER_URI']}/api/resource/created/",
34
+ json=expected_value,
35
+ )
33
36
 
34
- @patch('requests.post')
37
+ @patch("requests.post")
35
38
  def test_publish_message_resource_modified(self, mock_req):
36
39
  resource = ResourceFactory(schema=Schema(url="http://localhost/my-schema"))
37
40
  dataset = DatasetFactory(resources=[resource])
38
41
  expected_signals = (Dataset.on_resource_updated,)
39
42
 
40
- resource.description = 'New description'
43
+ resource.description = "New description"
41
44
 
42
45
  expected_value = {
43
- 'resource_id': str(resource.id),
44
- 'dataset_id': str(dataset.id),
45
- 'document': serialize_resource_for_event(resource)
46
+ "resource_id": str(resource.id),
47
+ "dataset_id": str(dataset.id),
48
+ "document": serialize_resource_for_event(resource),
46
49
  }
47
50
 
48
51
  with assert_emit(*expected_signals):
49
52
  dataset.update_resource(resource)
50
53
 
51
- mock_req.assert_called_with(f"{current_app.config['RESOURCES_ANALYSER_URI']}/api/resource/updated/",
52
- json=expected_value)
53
-
54
+ mock_req.assert_called_with(
55
+ f"{current_app.config['RESOURCES_ANALYSER_URI']}/api/resource/updated/",
56
+ json=expected_value,
57
+ )
58
+
54
59
  # Mocking requests call doesn't call the JSON encoder
55
60
  # so calling it manually here to prevent encoding errors.
56
61
  # (for example, encoding Embeds fails)
57
62
  complexjson.dumps(expected_value)
58
63
 
59
- @patch('requests.post')
64
+ @patch("requests.post")
60
65
  def test_publish_message_resource_removed(self, mock_req):
61
66
  resource = ResourceFactory()
62
67
  dataset = DatasetFactory(resources=[resource])
63
68
  expected_signals = (Dataset.on_resource_removed,)
64
69
 
65
70
  expected_value = {
66
- 'resource_id': str(resource.id),
67
- 'dataset_id': str(dataset.id),
68
- 'document': None
71
+ "resource_id": str(resource.id),
72
+ "dataset_id": str(dataset.id),
73
+ "document": None,
69
74
  }
70
75
 
71
76
  with assert_emit(*expected_signals):
72
77
  dataset.remove_resource(resource)
73
78
 
74
- mock_req.assert_called_with(f"{current_app.config['RESOURCES_ANALYSER_URI']}/api/resource/deleted/",
75
- json=expected_value)
79
+ mock_req.assert_called_with(
80
+ f"{current_app.config['RESOURCES_ANALYSER_URI']}/api/resource/deleted/",
81
+ json=expected_value,
82
+ )