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,42 +1,44 @@
1
- import click
2
1
  import json
3
2
  import logging
4
- import requests
5
3
 
4
+ import click
5
+ import requests
6
6
  from bson import ObjectId
7
7
 
8
- from udata.commands import cli, success, exit_with_error
9
- from udata.models import License, Dataset
8
+ from udata.commands import cli, exit_with_error, success
10
9
  from udata.core.dataset.constants import DEFAULT_LICENSE
11
- from .tasks import send_frequency_reminder
10
+ from udata.models import Dataset, License
11
+
12
12
  from . import actions
13
+ from .tasks import send_frequency_reminder
13
14
 
14
15
  log = logging.getLogger(__name__)
15
16
 
16
17
  # Use CKAN license group from opendefinition as default license list
17
- DEFAULT_LICENSE_FILE = 'http://licenses.opendefinition.org/licenses/groups/ckan.json' # noqa
18
+ DEFAULT_LICENSE_FILE = "http://licenses.opendefinition.org/licenses/groups/ckan.json" # noqa
18
19
 
19
20
  FLAGS_MAP = {
20
- 'domain_content': 'domain_content',
21
- 'domain_data': 'domain_data',
22
- 'domain_software': 'domain_software',
23
- 'is_generic': 'generic',
24
- 'is_okd_compliant': 'okd_compliant',
25
- 'is_osi_compliant': 'osi_compliant',
21
+ "domain_content": "domain_content",
22
+ "domain_data": "domain_data",
23
+ "domain_software": "domain_software",
24
+ "is_generic": "generic",
25
+ "is_okd_compliant": "okd_compliant",
26
+ "is_osi_compliant": "osi_compliant",
26
27
  }
27
28
 
29
+
28
30
  @cli.command()
29
- @click.argument('source', default=DEFAULT_LICENSE_FILE)
31
+ @click.argument("source", default=DEFAULT_LICENSE_FILE)
30
32
  def licenses(source=DEFAULT_LICENSE_FILE):
31
- '''Feed the licenses from a JSON file'''
32
- if source.startswith('http'):
33
+ """Feed the licenses from a JSON file"""
34
+ if source.startswith("http"):
33
35
  json_licenses = requests.get(source).json()
34
36
  else:
35
37
  with open(source) as fp:
36
38
  json_licenses = json.load(fp)
37
39
 
38
40
  if len(json_licenses):
39
- log.info('Dropping existing licenses')
41
+ log.info("Dropping existing licenses")
40
42
  License.drop_collection()
41
43
 
42
44
  for json_license in json_licenses:
@@ -46,22 +48,22 @@ def licenses(source=DEFAULT_LICENSE_FILE):
46
48
  flags.append(flag)
47
49
 
48
50
  license = License.objects.create(
49
- id=json_license['id'],
50
- title=json_license['title'],
51
- url=json_license['url'] or None,
52
- maintainer=json_license['maintainer'] or None,
51
+ id=json_license["id"],
52
+ title=json_license["title"],
53
+ url=json_license["url"] or None,
54
+ maintainer=json_license["maintainer"] or None,
53
55
  flags=flags,
54
- active=json_license.get('active', False),
55
- alternate_urls=json_license.get('alternate_urls', []),
56
- alternate_titles=json_license.get('alternate_titles', []),
56
+ active=json_license.get("active", False),
57
+ alternate_urls=json_license.get("alternate_urls", []),
58
+ alternate_titles=json_license.get("alternate_titles", []),
57
59
  )
58
60
  log.info('Added license "%s"', license.title)
59
61
  try:
60
- License.objects.get(id=DEFAULT_LICENSE['id'])
62
+ License.objects.get(id=DEFAULT_LICENSE["id"])
61
63
  except License.DoesNotExist:
62
64
  License.objects.create(**DEFAULT_LICENSE)
63
- log.info('Added license "%s"', DEFAULT_LICENSE['title'])
64
- success('Done')
65
+ log.info('Added license "%s"', DEFAULT_LICENSE["title"])
66
+ success("Done")
65
67
 
66
68
 
67
69
  @cli.command()
@@ -73,33 +75,33 @@ def frequency_reminder():
73
75
  send_frequency_reminder()
74
76
 
75
77
 
76
- @cli.group('dataset')
78
+ @cli.group("dataset")
77
79
  def grp():
78
- '''Dataset related operations'''
80
+ """Dataset related operations"""
79
81
  pass
80
82
 
81
83
 
82
84
  @grp.command()
83
- @click.argument('dataset_id')
84
- @click.option('-c', '--comment', is_flag=True, help='Post a comment when archiving')
85
+ @click.argument("dataset_id")
86
+ @click.option("-c", "--comment", is_flag=True, help="Post a comment when archiving")
85
87
  def archive_one(dataset_id, comment):
86
88
  """Archive one dataset"""
87
89
  try:
88
90
  dataset = Dataset.objects.get(id=dataset_id)
89
91
  except Dataset.DoesNotExist:
90
- exit_with_error('Cannot find a dataset with id %s' % dataset_id)
92
+ exit_with_error("Cannot find a dataset with id %s" % dataset_id)
91
93
  else:
92
94
  actions.archive(dataset, comment)
93
95
 
94
96
 
95
97
  @grp.command()
96
- @click.argument('filepath')
97
- @click.option('-c', '--comment', is_flag=True, help='Post a comment when archiving')
98
+ @click.argument("filepath")
99
+ @click.option("-c", "--comment", is_flag=True, help="Post a comment when archiving")
98
100
  def archive(filepath, comment):
99
101
  """Archive multiple datasets from a list in a file (one id per line)"""
100
102
  count = 0
101
103
  errors = 0
102
- log.info('Archiving datasets...')
104
+ log.info("Archiving datasets...")
103
105
  with open(filepath) as inputfile:
104
106
  for line in inputfile.readlines():
105
107
  line = line.rstrip()
@@ -108,10 +110,10 @@ def archive(filepath, comment):
108
110
  try:
109
111
  dataset = Dataset.objects.get(id=ObjectId(line))
110
112
  except Exception as e: # noqa (Never stop on failure)
111
- log.error('Unable to archive dataset %s: %s', line, e)
113
+ log.error("Unable to archive dataset %s: %s", line, e)
112
114
  errors += 1
113
115
  continue
114
116
  else:
115
117
  actions.archive(dataset, comment)
116
118
  count += 1
117
- log.info('Archived %s datasets, %s failed', count, errors)
119
+ log.info("Archived %s datasets, %s failed", count, errors)
@@ -1,75 +1,82 @@
1
1
  from collections import OrderedDict
2
+
2
3
  from udata.i18n import lazy_gettext as _
3
4
 
4
5
  #: Udata frequencies with their labels
5
6
  #:
6
7
  #: See: http://dublincore.org/groups/collections/frequency/
7
- UPDATE_FREQUENCIES = OrderedDict([ # Dublin core equivalent
8
- ('unknown', _('Unknown')), # N/A
9
- ('punctual', _('Punctual')), # N/A
10
- ('continuous', _('Real time')), # freq:continuous
11
- ('hourly', _('Hourly')), # N/A
12
- ('fourTimesADay', _('Four times a day')), # N/A
13
- ('threeTimesADay', _('Three times a day')), # N/A
14
- ('semidaily', _('Semidaily')), # N/A
15
- ('daily', _('Daily')), # freq:daily
16
- ('fourTimesAWeek', _('Four times a week')), # N/A
17
- ('threeTimesAWeek', _('Three times a week')), # freq:threeTimesAWeek
18
- ('semiweekly', _('Semiweekly')), # freq:semiweekly
19
- ('weekly', _('Weekly')), # freq:weekly
20
- ('biweekly', _('Biweekly')), # freq:bimonthly
21
- ('threeTimesAMonth', _('Three times a month')), # freq:threeTimesAMonth
22
- ('semimonthly', _('Semimonthly')), # freq:semimonthly
23
- ('monthly', _('Monthly')), # freq:monthly
24
- ('bimonthly', _('Bimonthly')), # freq:bimonthly
25
- ('quarterly', _('Quarterly')), # freq:quarterly
26
- ('threeTimesAYear', _('Three times a year')), # freq:threeTimesAYear
27
- ('semiannual', _('Biannual')), # freq:semiannual
28
- ('annual', _('Annual')), # freq:annual
29
- ('biennial', _('Biennial')), # freq:biennial
30
- ('triennial', _('Triennial')), # freq:triennial
31
- ('quinquennial', _('Quinquennial')), # N/A
32
- ('irregular', _('Irregular')), # freq:irregular
33
- ])
8
+ UPDATE_FREQUENCIES = OrderedDict(
9
+ [ # Dublin core equivalent
10
+ ("unknown", _("Unknown")), # N/A
11
+ ("punctual", _("Punctual")), # N/A
12
+ ("continuous", _("Real time")), # freq:continuous
13
+ ("hourly", _("Hourly")), # N/A
14
+ ("fourTimesADay", _("Four times a day")), # N/A
15
+ ("threeTimesADay", _("Three times a day")), # N/A
16
+ ("semidaily", _("Semidaily")), # N/A
17
+ ("daily", _("Daily")), # freq:daily
18
+ ("fourTimesAWeek", _("Four times a week")), # N/A
19
+ ("threeTimesAWeek", _("Three times a week")), # freq:threeTimesAWeek
20
+ ("semiweekly", _("Semiweekly")), # freq:semiweekly
21
+ ("weekly", _("Weekly")), # freq:weekly
22
+ ("biweekly", _("Biweekly")), # freq:bimonthly
23
+ ("threeTimesAMonth", _("Three times a month")), # freq:threeTimesAMonth
24
+ ("semimonthly", _("Semimonthly")), # freq:semimonthly
25
+ ("monthly", _("Monthly")), # freq:monthly
26
+ ("bimonthly", _("Bimonthly")), # freq:bimonthly
27
+ ("quarterly", _("Quarterly")), # freq:quarterly
28
+ ("threeTimesAYear", _("Three times a year")), # freq:threeTimesAYear
29
+ ("semiannual", _("Biannual")), # freq:semiannual
30
+ ("annual", _("Annual")), # freq:annual
31
+ ("biennial", _("Biennial")), # freq:biennial
32
+ ("triennial", _("Triennial")), # freq:triennial
33
+ ("quinquennial", _("Quinquennial")), # N/A
34
+ ("irregular", _("Irregular")), # freq:irregular
35
+ ]
36
+ )
34
37
 
35
38
  #: Map legacy frequencies to currents
36
39
  LEGACY_FREQUENCIES = {
37
- 'fortnighly': 'biweekly',
38
- 'biannual': 'semiannual',
39
- 'realtime': 'continuous',
40
+ "fortnighly": "biweekly",
41
+ "biannual": "semiannual",
42
+ "realtime": "continuous",
40
43
  }
41
44
 
42
- DEFAULT_FREQUENCY = 'unknown'
45
+ DEFAULT_FREQUENCY = "unknown"
43
46
 
44
47
  DEFAULT_LICENSE = {
45
- 'id': 'notspecified',
46
- 'title': "License Not Specified",
47
- 'flags': ["generic"],
48
- 'maintainer': None,
49
- 'url': None,
50
- 'active': True,
48
+ "id": "notspecified",
49
+ "title": "License Not Specified",
50
+ "flags": ["generic"],
51
+ "maintainer": None,
52
+ "url": None,
53
+ "active": True,
51
54
  }
52
55
 
53
- RESOURCE_TYPES = OrderedDict([
54
- ('main', _('Main file')),
55
- ('documentation', _('Documentation')),
56
- ('update', _('Update')),
57
- ('api', _('API')),
58
- ('code', _('Code repository')),
59
- ('other', _('Other')),
60
- ])
56
+ RESOURCE_TYPES = OrderedDict(
57
+ [
58
+ ("main", _("Main file")),
59
+ ("documentation", _("Documentation")),
60
+ ("update", _("Update")),
61
+ ("api", _("API")),
62
+ ("code", _("Code repository")),
63
+ ("other", _("Other")),
64
+ ]
65
+ )
61
66
 
62
- RESOURCE_FILETYPE_FILE = 'file'
63
- RESOURCE_FILETYPES = OrderedDict([
64
- (RESOURCE_FILETYPE_FILE, _('Uploaded file')),
65
- ('remote', _('Remote file')),
66
- ])
67
+ RESOURCE_FILETYPE_FILE = "file"
68
+ RESOURCE_FILETYPES = OrderedDict(
69
+ [
70
+ (RESOURCE_FILETYPE_FILE, _("Uploaded file")),
71
+ ("remote", _("Remote file")),
72
+ ]
73
+ )
67
74
 
68
- CHECKSUM_TYPES = ('sha1', 'sha2', 'sha256', 'md5', 'crc')
69
- DEFAULT_CHECKSUM_TYPE = 'sha1'
75
+ CHECKSUM_TYPES = ("sha1", "sha2", "sha256", "md5", "crc")
76
+ DEFAULT_CHECKSUM_TYPE = "sha1"
70
77
 
71
- PIVOTAL_DATA = 'pivotal-data'
72
- CLOSED_FORMATS = ('pdf', 'doc', 'docx', 'word', 'xls', 'excel', 'xlsx')
78
+ PIVOTAL_DATA = "pivotal-data"
79
+ CLOSED_FORMATS = ("pdf", "doc", "docx", "word", "xls", "excel", "xlsx")
73
80
 
74
81
  # Maximum acceptable Damerau-Levenshtein distance
75
82
  # used to guess license
udata/core/dataset/csv.py CHANGED
@@ -6,42 +6,42 @@ from .models import Dataset, Resource
6
6
 
7
7
  def serialize_spatial_zones(dataset):
8
8
  if dataset.spatial and dataset.spatial.zones:
9
- return ','.join(z.name for z in dataset.spatial.zones)
9
+ return ",".join(z.name for z in dataset.spatial.zones)
10
10
 
11
11
 
12
12
  @csv.adapter(Dataset)
13
13
  class DatasetCsvAdapter(csv.Adapter):
14
14
  fields = (
15
- 'id',
16
- 'title',
17
- 'slug',
18
- 'acronym',
19
- ('url', 'external_url'),
20
- ('organization', 'organization.name'),
21
- ('organization_id', 'organization.id'),
22
- ('owner', 'owner.slug'), # in case it's owned by a user, or introduce 'owner_type'?
23
- ('owner_id', 'owner.id'),
15
+ "id",
16
+ "title",
17
+ "slug",
18
+ "acronym",
19
+ ("url", "external_url"),
20
+ ("organization", "organization.name"),
21
+ ("organization_id", "organization.id"),
22
+ ("owner", "owner.slug"), # in case it's owned by a user, or introduce 'owner_type'?
23
+ ("owner_id", "owner.id"),
24
24
  # 'contact_point', # ?
25
- 'description',
26
- 'frequency',
27
- 'license',
28
- 'temporal_coverage.start',
29
- 'temporal_coverage.end',
30
- 'spatial.granularity',
31
- ('spatial.zones', serialize_spatial_zones),
32
- ('featured', lambda o: o.featured or False),
33
- 'created_at',
34
- 'last_modified',
35
- ('tags', lambda o: ','.join(o.tags)),
36
- ('archived', lambda o: o.archived or False),
37
- ('resources_count', lambda o: len(o.resources)),
38
- ('main_resources_count', lambda o: len([r for r in o.resources if r.type == 'main'])),
39
- 'downloads',
40
- ('harvest.backend', lambda r: r.harvest and r.harvest.backend),
41
- ('harvest.domain', lambda r: r.harvest and r.harvest.domain),
42
- ('harvest.created_at', lambda r: r.harvest and r.harvest.created_at),
43
- ('harvest.modified_at', lambda r: r.harvest and r.harvest.modified_at),
44
- ('quality_score', lambda o: format(o.quality['score'], '.2f')),
25
+ "description",
26
+ "frequency",
27
+ "license",
28
+ "temporal_coverage.start",
29
+ "temporal_coverage.end",
30
+ "spatial.granularity",
31
+ ("spatial.zones", serialize_spatial_zones),
32
+ ("featured", lambda o: o.featured or False),
33
+ "created_at",
34
+ "last_modified",
35
+ ("tags", lambda o: ",".join(o.tags)),
36
+ ("archived", lambda o: o.archived or False),
37
+ ("resources_count", lambda o: len(o.resources)),
38
+ ("main_resources_count", lambda o: len([r for r in o.resources if r.type == "main"])),
39
+ "downloads",
40
+ ("harvest.backend", lambda r: r.harvest and r.harvest.backend),
41
+ ("harvest.domain", lambda r: r.harvest and r.harvest.domain),
42
+ ("harvest.created_at", lambda r: r.harvest and r.harvest.created_at),
43
+ ("harvest.modified_at", lambda r: r.harvest and r.harvest.modified_at),
44
+ ("quality_score", lambda o: format(o.quality["score"], ".2f")),
45
45
  # schema? what is the schema of a dataset?
46
46
  )
47
47
 
@@ -50,62 +50,58 @@ class DatasetCsvAdapter(csv.Adapter):
50
50
 
51
51
 
52
52
  def dataset_field(name, getter=None):
53
- return ('dataset.{0}'.format(name), getter or name)
53
+ return ("dataset.{0}".format(name), getter or name)
54
54
 
55
55
 
56
56
  @csv.adapter(Resource)
57
57
  class ResourcesCsvAdapter(csv.NestedAdapter):
58
58
  fields = (
59
- dataset_field('id'),
60
- dataset_field('title'),
61
- dataset_field('slug'),
62
- dataset_field('url', 'external_url'),
59
+ dataset_field("id"),
60
+ dataset_field("title"),
61
+ dataset_field("slug"),
62
+ dataset_field("url", "external_url"),
63
+ dataset_field("organization", lambda r: r.organization.name if r.organization else None),
63
64
  dataset_field(
64
- 'organization',
65
- lambda r: r.organization.name if r.organization else None),
66
- dataset_field(
67
- 'organization_id',
68
- lambda r: str(r.organization.id) if r.organization else None),
69
- dataset_field('license'),
70
- dataset_field('private'),
71
- dataset_field(
72
- 'archived',
73
- lambda r: r.archived or False),
65
+ "organization_id", lambda r: str(r.organization.id) if r.organization else None
66
+ ),
67
+ dataset_field("license"),
68
+ dataset_field("private"),
69
+ dataset_field("archived", lambda r: r.archived or False),
74
70
  )
75
71
  nested_fields = (
76
- 'id',
77
- 'url',
78
- 'title',
79
- 'description',
80
- 'filetype',
81
- 'type',
82
- 'format',
83
- 'mime',
84
- 'filesize',
85
- ('checksum.type', lambda o: getattr(o.checksum, 'type', None)),
86
- ('checksum.value', lambda o: getattr(o.checksum, 'value', None)),
87
- 'created_at',
88
- ('modified', lambda o: o.last_modified),
89
- ('downloads', lambda o: int(o.metrics.get('views', 0))),
90
- ('harvest.created_at', lambda o: o.harvest and o.harvest.created_at),
91
- ('harvest.modified_at', lambda o: o.harvest and o.harvest.modified_at),
92
- ('schema_name', 'schema.name'),
93
- ('schema_version', 'schema.version'),
94
- ('preview_url', lambda o: o.preview_url or False),
72
+ "id",
73
+ "url",
74
+ "title",
75
+ "description",
76
+ "filetype",
77
+ "type",
78
+ "format",
79
+ "mime",
80
+ "filesize",
81
+ ("checksum.type", lambda o: getattr(o.checksum, "type", None)),
82
+ ("checksum.value", lambda o: getattr(o.checksum, "value", None)),
83
+ "created_at",
84
+ ("modified", lambda o: o.last_modified),
85
+ ("downloads", lambda o: int(o.metrics.get("views", 0))),
86
+ ("harvest.created_at", lambda o: o.harvest and o.harvest.created_at),
87
+ ("harvest.modified_at", lambda o: o.harvest and o.harvest.modified_at),
88
+ ("schema_name", "schema.name"),
89
+ ("schema_version", "schema.version"),
90
+ ("preview_url", lambda o: o.preview_url or False),
95
91
  )
96
- attribute = 'resources'
92
+ attribute = "resources"
97
93
 
98
94
 
99
95
  @csv.adapter(Discussion)
100
96
  class DiscussionCsvAdapter(csv.Adapter):
101
97
  fields = (
102
- 'id',
103
- 'user',
104
- 'subject',
105
- 'title',
106
- ('size', lambda o: len(o.discussion)),
107
- ('messages', lambda o: '\n'.join(msg.content for msg in o.discussion)),
108
- 'created',
109
- 'closed',
110
- 'closed_by',
98
+ "id",
99
+ "user",
100
+ "subject",
101
+ "title",
102
+ ("size", lambda o: len(o.discussion)),
103
+ ("messages", lambda o: "\n".join(msg.content for msg in o.discussion)),
104
+ "created",
105
+ "closed",
106
+ "closed_by",
111
107
  )
@@ -1,52 +1,53 @@
1
1
  import datetime
2
+
2
3
  import requests
3
4
  from flask import current_app
4
5
 
5
- from udata.utils import to_iso_datetime, get_by
6
+ from udata.event.values import EventMessageType
6
7
  from udata.models import Dataset
7
8
  from udata.tasks import task
8
- from udata.event.values import EventMessageType
9
+ from udata.utils import get_by, to_iso_datetime
9
10
 
10
11
 
11
12
  def serialize_resource_for_event(resource):
12
13
  resource_dict = {
13
- 'id': str(resource.id),
14
- 'url': resource.url,
15
- 'format': resource.format,
16
- 'title': resource.title,
17
- 'schema': resource.schema.to_dict() if resource.schema else None,
18
- 'description': resource.description,
19
- 'filetype': resource.filetype,
20
- 'type': resource.type,
21
- 'mime': resource.mime,
22
- 'filesize': resource.filesize,
23
- 'checksum_type': resource.checksum.type if resource.checksum else None,
24
- 'checksum_value': resource.checksum.value if resource.checksum else None,
25
- 'created_at': to_iso_datetime(resource.created_at),
26
- 'last_modified': to_iso_datetime(resource.last_modified)
14
+ "id": str(resource.id),
15
+ "url": resource.url,
16
+ "format": resource.format,
17
+ "title": resource.title,
18
+ "schema": resource.schema.to_dict() if resource.schema else None,
19
+ "description": resource.description,
20
+ "filetype": resource.filetype,
21
+ "type": resource.type,
22
+ "mime": resource.mime,
23
+ "filesize": resource.filesize,
24
+ "checksum_type": resource.checksum.type if resource.checksum else None,
25
+ "checksum_value": resource.checksum.value if resource.checksum else None,
26
+ "created_at": to_iso_datetime(resource.created_at),
27
+ "last_modified": to_iso_datetime(resource.last_modified),
27
28
  }
28
29
  extras = {}
29
30
  for key, value in resource.extras.items():
30
31
  extras[key] = to_iso_datetime(value) if isinstance(value, datetime.datetime) else value
31
- resource_dict.update({'extras': extras})
32
+ resource_dict.update({"extras": extras})
32
33
  if resource.harvest:
33
34
  harvest = {}
34
35
  for key, value in resource.harvest._data.items():
35
36
  harvest[key] = to_iso_datetime(value) if isinstance(value, datetime.datetime) else value
36
- resource_dict.update({'harvest': harvest})
37
+ resource_dict.update({"harvest": harvest})
37
38
  return resource_dict
38
39
 
39
40
 
40
- @task(route='high.resource')
41
+ @task(route="high.resource")
41
42
  def publish(url, document, resource_id, action):
42
43
  if action == EventMessageType.DELETED:
43
44
  resource = None
44
45
  else:
45
- resource = serialize_resource_for_event(get_by(document.resources, 'id', resource_id))
46
+ resource = serialize_resource_for_event(get_by(document.resources, "id", resource_id))
46
47
  payload = {
47
- 'resource_id': str(resource_id),
48
- 'dataset_id': str(document.id),
49
- 'document': resource
48
+ "resource_id": str(resource_id),
49
+ "dataset_id": str(document.id),
50
+ "document": resource,
50
51
  }
51
52
  r = requests.post(url, json=payload)
52
53
  r.raise_for_status()
@@ -54,32 +55,38 @@ def publish(url, document, resource_id, action):
54
55
 
55
56
  @Dataset.on_resource_added.connect
56
57
  def publish_added_resource_message(sender, document, **kwargs):
57
- if current_app.config.get('PUBLISH_ON_RESOURCE_EVENTS') and current_app.config.get('RESOURCES_ANALYSER_URI'):
58
+ if current_app.config.get("PUBLISH_ON_RESOURCE_EVENTS") and current_app.config.get(
59
+ "RESOURCES_ANALYSER_URI"
60
+ ):
58
61
  publish.delay(
59
62
  f"{current_app.config.get('RESOURCES_ANALYSER_URI')}/api/resource/created/",
60
63
  document,
61
- kwargs['resource_id'],
62
- EventMessageType.CREATED
64
+ kwargs["resource_id"],
65
+ EventMessageType.CREATED,
63
66
  )
64
67
 
65
68
 
66
69
  @Dataset.on_resource_updated.connect
67
70
  def publish_updated_resource_message(sender, document, **kwargs):
68
- if current_app.config.get('PUBLISH_ON_RESOURCE_EVENTS') and current_app.config.get('RESOURCES_ANALYSER_URI'):
71
+ if current_app.config.get("PUBLISH_ON_RESOURCE_EVENTS") and current_app.config.get(
72
+ "RESOURCES_ANALYSER_URI"
73
+ ):
69
74
  publish.delay(
70
75
  f"{current_app.config.get('RESOURCES_ANALYSER_URI')}/api/resource/updated/",
71
76
  document,
72
- kwargs['resource_id'],
73
- EventMessageType.MODIFIED
77
+ kwargs["resource_id"],
78
+ EventMessageType.MODIFIED,
74
79
  )
75
80
 
76
81
 
77
82
  @Dataset.on_resource_removed.connect
78
83
  def publish_removed_resource_message(sender, document, **kwargs):
79
- if current_app.config.get('PUBLISH_ON_RESOURCE_EVENTS') and current_app.config.get('RESOURCES_ANALYSER_URI'):
84
+ if current_app.config.get("PUBLISH_ON_RESOURCE_EVENTS") and current_app.config.get(
85
+ "RESOURCES_ANALYSER_URI"
86
+ ):
80
87
  publish.delay(
81
88
  f"{current_app.config.get('RESOURCES_ANALYSER_URI')}/api/resource/deleted/",
82
89
  document,
83
- kwargs['resource_id'],
84
- EventMessageType.DELETED
90
+ kwargs["resource_id"],
91
+ EventMessageType.DELETED,
85
92
  )
@@ -1,18 +1,22 @@
1
1
  class DatasetException(Exception):
2
- '''Base class for all dataset exceptions'''
2
+ """Base class for all dataset exceptions"""
3
+
3
4
  pass
4
5
 
5
6
 
6
7
  class ResourceSchemaException(DatasetException):
7
- '''Raised for resources' schema related exceptions'''
8
+ """Raised for resources' schema related exceptions"""
9
+
8
10
  pass
9
11
 
10
12
 
11
13
  class SchemasCatalogNotFoundException(ResourceSchemaException):
12
- '''Raised when the schema catalog cannot be found'''
14
+ """Raised when the schema catalog cannot be found"""
15
+
13
16
  pass
14
17
 
15
18
 
16
19
  class SchemasCacheUnavailableException(ResourceSchemaException):
17
- '''Raised when the schema catalog cache is not available or is empty'''
20
+ """Raised when the schema catalog cache is not available or is empty"""
21
+
18
22
  pass