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
tasks/__init__.py CHANGED
@@ -2,112 +2,116 @@ import itertools
2
2
  import json
3
3
  import os
4
4
  import re
5
-
6
5
  from datetime import datetime
7
6
  from glob import iglob
8
- from os.path import join, exists
7
+ from os.path import exists, join
9
8
  from sys import exit
10
9
 
11
10
  from babel.messages.pofile import read_po, write_po
12
11
  from babel.util import LOCALTZ
13
12
  from invoke import task
14
13
 
15
- from .helpers import ROOT, info, header, success, cyan
14
+ from .helpers import ROOT, cyan, header, info, success
16
15
 
17
- I18N_DOMAIN = 'udata'
16
+ I18N_DOMAIN = "udata"
18
17
 
19
18
 
20
19
  @task
21
20
  def clean(ctx, node=False, translations=False, all=False):
22
- '''Cleanup all build artifacts'''
23
- header('Clean all build artifacts')
21
+ """Cleanup all build artifacts"""
22
+ header("Clean all build artifacts")
24
23
  patterns = [
25
- 'build', 'dist', 'cover', 'docs/_build',
26
- '**/*.pyc', '*.egg-info', '.tox', 'udata/static/*'
24
+ "build",
25
+ "dist",
26
+ "cover",
27
+ "docs/_build",
28
+ "**/*.pyc",
29
+ "*.egg-info",
30
+ ".tox",
31
+ "udata/static/*",
27
32
  ]
28
33
  if node or all:
29
- patterns.append('node_modules')
34
+ patterns.append("node_modules")
30
35
  if translations or all:
31
- patterns.append('udata/translations/*/LC_MESSAGES/udata.mo')
36
+ patterns.append("udata/translations/*/LC_MESSAGES/udata.mo")
32
37
  for pattern in patterns:
33
38
  info(pattern)
34
39
  with ctx.cd(ROOT):
35
- ctx.run('rm -rf {0}'.format(' '.join(patterns)))
40
+ ctx.run("rm -rf {0}".format(" ".join(patterns)))
36
41
 
37
42
 
38
43
  @task
39
44
  def update(ctx, migrate=False):
40
- '''Perform a development update'''
41
- msg = 'Update all dependencies'
45
+ """Perform a development update"""
46
+ msg = "Update all dependencies"
42
47
  if migrate:
43
- msg += ' and migrate data'
48
+ msg += " and migrate data"
44
49
  header(msg)
45
- info('Updating Python dependencies')
50
+ info("Updating Python dependencies")
46
51
  with ctx.cd(ROOT):
47
- ctx.run('pi3 install -e .')
48
- ctx.run('pip install -r requirements/develop.pip')
49
- info('Updating JavaScript dependencies')
50
- ctx.run('npm install')
52
+ ctx.run("pi3 install -e .")
53
+ ctx.run("pip install -r requirements/develop.pip")
54
+ info("Updating JavaScript dependencies")
55
+ ctx.run("npm install")
51
56
  if migrate:
52
- info('Migrating database')
53
- ctx.run('udata db migrate')
57
+ info("Migrating database")
58
+ ctx.run("udata db migrate")
54
59
 
55
60
 
56
61
  @task
57
62
  def i18n(ctx, update=False):
58
- '''Extract translatable strings'''
59
- header('Extract translatable strings')
63
+ """Extract translatable strings"""
64
+ header("Extract translatable strings")
60
65
 
61
- info('Extract Python strings')
66
+ info("Extract Python strings")
62
67
  with ctx.cd(ROOT):
63
- ctx.run('python setup.py extract_messages')
68
+ ctx.run("python setup.py extract_messages")
64
69
 
65
70
  # Fix crowdin requiring Language with `2-digit` iso code in potfile
66
71
  # to produce 2-digit iso code pofile
67
72
  # Opening the catalog also allows to set extra metadata
68
- potfile = join(ROOT, 'udata', 'translations', '{}.pot'.format(I18N_DOMAIN))
69
- with open(potfile, 'rb') as infile:
70
- catalog = read_po(infile, 'en')
71
- catalog.copyright_holder = 'Open Data Team'
72
- catalog.msgid_bugs_address = 'i18n@opendata.team'
73
- catalog.language_team = 'Open Data Team <i18n@opendata.team>'
74
- catalog.last_translator = 'Open Data Team <i18n@opendata.team>'
73
+ potfile = join(ROOT, "udata", "translations", "{}.pot".format(I18N_DOMAIN))
74
+ with open(potfile, "rb") as infile:
75
+ catalog = read_po(infile, "en")
76
+ catalog.copyright_holder = "Open Data Team"
77
+ catalog.msgid_bugs_address = "i18n@opendata.team"
78
+ catalog.language_team = "Open Data Team <i18n@opendata.team>"
79
+ catalog.last_translator = "Open Data Team <i18n@opendata.team>"
75
80
  catalog.revision_date = datetime.now(LOCALTZ)
76
- with open(potfile, 'wb') as outfile:
81
+ with open(potfile, "wb") as outfile:
77
82
  write_po(outfile, catalog, width=80)
78
83
 
79
84
  if update:
80
85
  with ctx.cd(ROOT):
81
- ctx.run('python setup.py update_catalog')
86
+ ctx.run("python setup.py update_catalog")
82
87
 
83
- info('Extract JavaScript strings')
88
+ info("Extract JavaScript strings")
84
89
  keys = set()
85
90
  catalog = {}
86
- catalog_filename = join(ROOT, 'js', 'locales',
87
- '{}.en.json'.format(I18N_DOMAIN))
91
+ catalog_filename = join(ROOT, "js", "locales", "{}.en.json".format(I18N_DOMAIN))
88
92
  if exists(catalog_filename):
89
93
  with open(catalog_filename) as f:
90
94
  catalog = json.load(f)
91
95
 
92
- globs = '*.js', '*.vue', '*.hbs'
96
+ globs = "*.js", "*.vue", "*.hbs"
93
97
  regexps = [
94
98
  re.compile(r'(?:|\.|\s|\{)_\(\s*(?:"|\')(.*?)(?:"|\')\s*(?:\)|,)'), # JS _('trad')
95
99
  re.compile(r'v-i18n="(.*?)"'), # Vue.js directive v-i18n="trad"
96
100
  re.compile(r'"\{\{\{?\s*\'(.*?)\'\s*\|\s*i18n\}\}\}?"'), # Vue.js filter {{ 'trad'|i18n }}
97
101
  re.compile(r'{{_\s*"(.*?)"\s*}}'), # Handlebars {{_ "trad" }}
98
- re.compile(r'{{_\s*\'(.*?)\'\s*}}'), # Handlebars {{_ 'trad' }}
102
+ re.compile(r"{{_\s*\'(.*?)\'\s*}}"), # Handlebars {{_ 'trad' }}
99
103
  re.compile(r'\:[a-z0-9_\-]+="\s*_\(\'(.*?)\'\)\s*"'), # Vue.js binding :prop="_('trad')"
100
104
  ]
101
105
 
102
- for directory, _, _ in os.walk(join(ROOT, 'js')):
106
+ for directory, _, _ in os.walk(join(ROOT, "js")):
103
107
  glob_patterns = (iglob(join(directory, g)) for g in globs)
104
108
  for filename in itertools.chain(*glob_patterns):
105
- print('Extracting messages from {0}'.format(cyan(filename)))
109
+ print("Extracting messages from {0}".format(cyan(filename)))
106
110
  content = open(filename).read()
107
111
  for regexp in regexps:
108
112
  for match in regexp.finditer(content):
109
113
  key = match.group(1)
110
- key = key.replace('\\n', '\n')
114
+ key = key.replace("\\n", "\n")
111
115
  keys.add(key)
112
116
  if key not in catalog:
113
117
  catalog[key] = key
@@ -117,163 +121,161 @@ def i18n(ctx, update=False):
117
121
  if key not in keys:
118
122
  del catalog[key]
119
123
 
120
- with open(catalog_filename, 'w') as f:
121
- json.dump(catalog, f, sort_keys=True, indent=4, ensure_ascii=False,
122
- separators=(',', ': '))
124
+ with open(catalog_filename, "w") as f:
125
+ json.dump(catalog, f, sort_keys=True, indent=4, ensure_ascii=False, separators=(",", ": "))
123
126
 
124
127
 
125
128
  @task
126
129
  def i18nc(ctx):
127
- '''Compile translations'''
128
- header('Compiling translations')
130
+ """Compile translations"""
131
+ header("Compiling translations")
129
132
  with ctx.cd(ROOT):
130
- ctx.run('python setup.py compile_catalog')
133
+ ctx.run("python setup.py compile_catalog")
131
134
 
132
135
 
133
136
  @task(i18nc)
134
137
  def test(ctx, fast=False, report=False, verbose=False, ci=False):
135
- '''Run tests suite'''
136
- header('Run tests suite')
137
- cmd = ['pytest udata']
138
+ """Run tests suite"""
139
+ header("Run tests suite")
140
+ cmd = ["pytest udata"]
138
141
  if ci:
139
- cmd.append('-p no:sugar --color=yes')
142
+ cmd.append("-p no:sugar --color=yes")
140
143
  if verbose:
141
- cmd.append('-v')
144
+ cmd.append("-v")
142
145
  if fast:
143
- cmd.append('-x')
146
+ cmd.append("-x")
144
147
  if report:
145
- cmd.append('--junitxml=reports/python/tests.xml')
148
+ cmd.append("--junitxml=reports/python/tests.xml")
146
149
  with ctx.cd(ROOT):
147
- ctx.run(' '.join(cmd), pty=True)
150
+ ctx.run(" ".join(cmd), pty=True)
148
151
 
149
152
 
150
153
  @task
151
154
  def cover(ctx, html=False):
152
- '''Run tests suite with coverage'''
153
- header('Run tests suite with coverage')
154
- cmd = 'pytest --cov udata --cov-report term'
155
+ """Run tests suite with coverage"""
156
+ header("Run tests suite with coverage")
157
+ cmd = "pytest --cov udata --cov-report term"
155
158
  if html:
156
- cmd = ' '.join((cmd, '--cov-report html:reports/python/cover'))
159
+ cmd = " ".join((cmd, "--cov-report html:reports/python/cover"))
157
160
  with ctx.cd(ROOT):
158
161
  ctx.run(cmd, pty=True)
159
162
 
160
163
 
161
164
  @task
162
165
  def jstest(ctx, watch=False):
163
- '''Run Karma tests suite'''
164
- header('Run Karma/Mocha test suite')
165
- cmd = 'npm run -s test:{0}'.format('watch' if watch else 'unit')
166
+ """Run Karma tests suite"""
167
+ header("Run Karma/Mocha test suite")
168
+ cmd = "npm run -s test:{0}".format("watch" if watch else "unit")
166
169
  with ctx.cd(ROOT):
167
170
  ctx.run(cmd)
168
171
 
169
172
 
170
173
  @task
171
174
  def doc(ctx):
172
- '''Build the documentation'''
173
- header('Building documentation')
175
+ """Build the documentation"""
176
+ header("Building documentation")
174
177
  with ctx.cd(ROOT):
175
- ctx.run('mkdocs serve', pty=True)
178
+ ctx.run("mkdocs serve", pty=True)
176
179
 
177
180
 
178
181
  @task
179
182
  def qa(ctx):
180
- '''Run a quality report'''
181
- header('Performing static analysis')
182
- info('Python static analysis')
183
+ """Run a quality report"""
184
+ header("Performing static analysis")
185
+ info("Python static analysis")
183
186
  with ctx.cd(ROOT):
184
- flake8_results = ctx.run('flake8 udata --jobs 1', pty=True, warn=True)
185
- info('JavaScript static analysis')
187
+ flake8_results = ctx.run("flake8 udata --jobs 1", pty=True, warn=True)
188
+ info("JavaScript static analysis")
186
189
  with ctx.cd(ROOT):
187
- eslint_results = ctx.run('npm -s run lint', pty=True, warn=True)
190
+ eslint_results = ctx.run("npm -s run lint", pty=True, warn=True)
188
191
  if flake8_results.failed or eslint_results.failed:
189
192
  exit(flake8_results.return_code or eslint_results.return_code)
190
- success('OK')
193
+ success("OK")
191
194
 
192
195
 
193
196
  @task
194
- def serve(ctx, host='localhost'):
195
- '''Run a development server'''
197
+ def serve(ctx, host="localhost"):
198
+ """Run a development server"""
196
199
  with ctx.cd(ROOT):
197
- ctx.run('python manage.py serve -d -r -h %s' % host)
200
+ ctx.run("python manage.py serve -d -r -h %s" % host)
198
201
 
199
202
 
200
203
  @task
201
- def work(ctx, loglevel='info'):
202
- '''Run a development worker'''
203
- ctx.run('celery -A udata.worker worker --purge -l %s' % loglevel,
204
- pty=True)
204
+ def work(ctx, loglevel="info"):
205
+ """Run a development worker"""
206
+ ctx.run("celery -A udata.worker worker --purge -l %s" % loglevel, pty=True)
205
207
 
206
208
 
207
209
  @task
208
- def beat(ctx, loglevel='info'):
209
- '''Run celery beat process'''
210
- ctx.run('celery -A udata.worker beat -l %s' % loglevel)
210
+ def beat(ctx, loglevel="info"):
211
+ """Run celery beat process"""
212
+ ctx.run("celery -A udata.worker beat -l %s" % loglevel)
211
213
 
212
214
 
213
215
  @task
214
216
  def assets_build(ctx):
215
- '''Install and compile assets'''
216
- header('Building static assets')
217
+ """Install and compile assets"""
218
+ header("Building static assets")
217
219
  with ctx.cd(ROOT):
218
- ctx.run('npm run assets:build', pty=True)
220
+ ctx.run("npm run assets:build", pty=True)
219
221
 
220
222
 
221
223
  @task
222
224
  def widgets_build(ctx):
223
- '''Compile and minify widgets'''
224
- header('Building widgets')
225
+ """Compile and minify widgets"""
226
+ header("Building widgets")
225
227
  with ctx.cd(ROOT):
226
- ctx.run('npm run widgets:build', pty=True)
228
+ ctx.run("npm run widgets:build", pty=True)
227
229
 
228
230
 
229
231
  @task
230
232
  def oembed_build(ctx):
231
- '''Compile and minify OEmbed assets'''
232
- header('Building OEmbed assets')
233
+ """Compile and minify OEmbed assets"""
234
+ header("Building OEmbed assets")
233
235
  with ctx.cd(ROOT):
234
- ctx.run('npm run oembed:build', pty=True)
236
+ ctx.run("npm run oembed:build", pty=True)
235
237
 
236
238
 
237
239
  @task
238
240
  def assets_watch(ctx):
239
- '''Build assets on change'''
241
+ """Build assets on change"""
240
242
  with ctx.cd(ROOT):
241
- ctx.run('npm run assets:watch', pty=True)
243
+ ctx.run("npm run assets:watch", pty=True)
242
244
 
243
245
 
244
246
  @task
245
247
  def widgets_watch(ctx):
246
- '''Build widgets on changes'''
248
+ """Build widgets on changes"""
247
249
  with ctx.cd(ROOT):
248
- ctx.run('npm run widgets:watch', pty=True)
250
+ ctx.run("npm run widgets:watch", pty=True)
249
251
 
250
252
 
251
253
  @task
252
254
  def oembed_watch(ctx):
253
- '''Build OEmbed assets on changes'''
255
+ """Build OEmbed assets on changes"""
254
256
  with ctx.cd(ROOT):
255
- ctx.run('npm run oembed:watch', pty=True)
257
+ ctx.run("npm run oembed:watch", pty=True)
256
258
 
257
259
 
258
260
  @task(clean, i18nc, assets_build, widgets_build, oembed_build, default=True)
259
261
  def dist(ctx, buildno=None):
260
- '''Package for distribution'''
262
+ """Package for distribution"""
261
263
  perform_dist(ctx, buildno)
262
264
 
263
265
 
264
266
  @task(i18nc)
265
267
  def pydist(ctx, buildno=None):
266
- '''Perform python packaging (without compiling assets)'''
268
+ """Perform python packaging (without compiling assets)"""
267
269
  perform_dist(ctx, buildno)
268
270
 
269
271
 
270
272
  def perform_dist(ctx, buildno=None):
271
- header('Building a distribuable package')
272
- cmd = ['python setup.py']
273
+ header("Building a distribuable package")
274
+ cmd = ["python setup.py"]
273
275
  if buildno:
274
- cmd.append('egg_info -b {0}'.format(buildno))
275
- cmd.append('bdist_wheel')
276
+ cmd.append("egg_info -b {0}".format(buildno))
277
+ cmd.append("bdist_wheel")
276
278
  with ctx.cd(ROOT):
277
- ctx.run(' '.join(cmd), pty=True)
278
- ctx.run('twine check dist/*')
279
- success('Distribution is available in dist directory')
279
+ ctx.run(" ".join(cmd), pty=True)
280
+ ctx.run("twine check dist/*")
281
+ success("Distribution is available in dist directory")
tasks/helpers.py CHANGED
@@ -1,41 +1,41 @@
1
- from os.path import join, abspath, dirname
1
+ from os.path import abspath, dirname, join
2
2
 
3
3
  #: Project absolute root path
4
- ROOT = abspath(join(dirname(__file__), '..'))
4
+ ROOT = abspath(join(dirname(__file__), ".."))
5
5
 
6
6
 
7
7
  def color(code):
8
- '''A simple ANSI color wrapper factory'''
9
- return lambda t: '\033[{0}{1}\033[0;m'.format(code, t)
8
+ """A simple ANSI color wrapper factory"""
9
+ return lambda t: "\033[{0}{1}\033[0;m".format(code, t)
10
10
 
11
11
 
12
- green = color('1;32m')
13
- red = color('1;31m')
14
- blue = color('1;30m')
15
- cyan = color('1;36m')
16
- purple = color('1;35m')
17
- white = color('1;39m')
12
+ green = color("1;32m")
13
+ red = color("1;31m")
14
+ blue = color("1;30m")
15
+ cyan = color("1;36m")
16
+ purple = color("1;35m")
17
+ white = color("1;39m")
18
18
 
19
19
 
20
20
  def header(text, *args, **kwargs):
21
- '''Display an header'''
21
+ """Display an header"""
22
22
  text = text.format(*args, **kwargs)
23
- print(' '.join((blue('>>'), cyan(text))))
23
+ print(" ".join((blue(">>"), cyan(text))))
24
24
 
25
25
 
26
26
  def info(text, *args, **kwargs):
27
- '''Display informations'''
27
+ """Display informations"""
28
28
  text = text.format(*args, **kwargs)
29
- print(' '.join((purple('>>>'), text)))
29
+ print(" ".join((purple(">>>"), text)))
30
30
 
31
31
 
32
32
  def success(text, *args, **kwargs):
33
- '''Display a success message'''
33
+ """Display a success message"""
34
34
  text = text.format(*args, **kwargs)
35
- print(' '.join((green(''), white(text))))
35
+ print(" ".join((green(""), white(text))))
36
36
 
37
37
 
38
38
  def error(text, *args, **kwargs):
39
- '''Display an error message'''
39
+ """Display an error message"""
40
40
  text = text.format(*args, **kwargs)
41
- print(red('✘ {0}'.format(text)))
41
+ print(red("✘ {0}".format(text)))
udata/__init__.py CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env python
2
2
 
3
- '''
3
+ """
4
4
  udata
5
- '''
5
+ """
6
6
 
7
- __version__ = '9.1.2.dev'
8
- __description__ = 'Open data portal'
7
+ __version__ = "9.1.2.dev"
8
+ __description__ = "Open data portal"
udata/admin/views.py CHANGED
@@ -1,13 +1,13 @@
1
1
  from flask import render_template
2
+
2
3
  from udata.auth import login_required
3
4
  from udata.i18n import I18nBlueprint
4
5
 
5
-
6
- blueprint = I18nBlueprint('admin', __name__, url_prefix='/admin')
6
+ blueprint = I18nBlueprint("admin", __name__, url_prefix="/admin")
7
7
 
8
8
 
9
- @blueprint.route('/', defaults={'path': ''})
10
- @blueprint.route('/<path:path>')
9
+ @blueprint.route("/", defaults={"path": ""})
10
+ @blueprint.route("/<path:path>")
11
11
  @login_required
12
12
  def index(path):
13
- return render_template('admin.html')
13
+ return render_template("admin.html")