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
udata/tests/test_model.py CHANGED
@@ -1,21 +1,18 @@
1
- import pytest
2
-
3
- from uuid import uuid4, UUID
4
1
  from datetime import date, datetime, timedelta
2
+ from uuid import UUID, uuid4
5
3
 
4
+ import pytest
6
5
  from mongoengine.errors import ValidationError
7
6
  from mongoengine.fields import BaseField
8
7
 
8
+ from udata.errors import ConfigError
9
9
  from udata.i18n import _
10
- from udata.settings import Defaults
11
10
  from udata.models import Dataset
12
- from udata.mongo import db, validate_config, build_test_config
13
- from udata.errors import ConfigError
14
- from udata.tests.helpers import assert_json_equal, assert_equal_dates
11
+ from udata.mongo import build_test_config, db, validate_config
12
+ from udata.settings import Defaults
13
+ from udata.tests.helpers import assert_equal_dates, assert_json_equal
15
14
 
16
- pytestmark = [
17
- pytest.mark.usefixtures('clean_db')
18
- ]
15
+ pytestmark = [pytest.mark.usefixtures("clean_db")]
19
16
 
20
17
 
21
18
  class UUIDTester(db.Document):
@@ -28,15 +25,15 @@ class UUIDAsIdTester(db.Document):
28
25
 
29
26
  class SlugTester(db.Document):
30
27
  title = db.StringField()
31
- slug = db.SlugField(populate_from='title', max_length=1000)
28
+ slug = db.SlugField(populate_from="title", max_length=1000)
32
29
  meta = {
33
- 'allow_inheritance': True,
30
+ "allow_inheritance": True,
34
31
  }
35
32
 
36
33
 
37
34
  class SlugUpdateTester(db.Document):
38
35
  title = db.StringField()
39
- slug = db.SlugField(populate_from='title', update=True)
36
+ slug = db.SlugField(populate_from="title", update=True)
40
37
 
41
38
 
42
39
  class DateTester(db.Document):
@@ -73,13 +70,13 @@ class PrivateURLTester(db.Document):
73
70
 
74
71
  class AutoUUIDFieldTest:
75
72
  def test_auto_populate(self):
76
- '''AutoUUIDField should populate itself if not set'''
73
+ """AutoUUIDField should populate itself if not set"""
77
74
  obj = UUIDTester()
78
75
  assert obj.uuid is not None
79
76
  assert isinstance(obj.uuid, UUID)
80
77
 
81
78
  def test_do_not_overwrite(self):
82
- '''AutoUUIDField shouldn't populate itself if a value is already set'''
79
+ """AutoUUIDField shouldn't populate itself if a value is already set"""
83
80
  uuid = uuid4()
84
81
  obj = UUIDTester(uuid=uuid)
85
82
  assert obj.uuid == uuid
@@ -106,143 +103,143 @@ class AutoUUIDFieldTest:
106
103
 
107
104
  class SlugFieldTest:
108
105
  def test_validate(self):
109
- '''SlugField should validate if not set'''
106
+ """SlugField should validate if not set"""
110
107
  obj = SlugTester(title="A Title")
111
108
  assert obj.slug is None
112
109
  obj.validate()
113
110
 
114
111
  def test_populate(self):
115
- '''SlugField should populate itself on save if not set'''
112
+ """SlugField should populate itself on save if not set"""
116
113
  obj = SlugTester(title="A Title")
117
114
  assert obj.slug is None
118
115
  obj.save()
119
- assert obj.slug == 'a-title'
116
+ assert obj.slug == "a-title"
120
117
 
121
118
  def test_populate_uuid(self):
122
- '''SlugField should detect valid uuid'''
119
+ """SlugField should detect valid uuid"""
123
120
  uuid = uuid4()
124
121
  obj = SlugTester(title=str(uuid))
125
122
  obj.save()
126
123
  assert obj.slug == "{}{}".format(str(uuid), "-uuid")
127
124
 
128
125
  def test_populate_next(self):
129
- '''SlugField should not keep other fields value'''
126
+ """SlugField should not keep other fields value"""
130
127
  obj = SlugTester.objects.create(title="A Title")
131
- obj.slug = 'fake'
128
+ obj.slug = "fake"
132
129
  obj = SlugTester.objects.create(title="Another title")
133
- assert obj.slug == 'another-title'
130
+ assert obj.slug == "another-title"
134
131
 
135
132
  def test_populate_parallel(self):
136
- '''SlugField should not take other instance values'''
133
+ """SlugField should not take other instance values"""
137
134
  obj1 = SlugTester.objects.create(title="A Title")
138
135
  obj = SlugTester.objects.create(title="Another title")
139
- obj1.slug = 'fake'
140
- assert obj.slug == 'another-title'
136
+ obj1.slug = "fake"
137
+ assert obj.slug == "another-title"
141
138
 
142
139
  def test_no_populate(self):
143
- '''SlugField should not populate itself if a value is set'''
144
- obj = SlugTester(title='A Title', slug='a-slug')
140
+ """SlugField should not populate itself if a value is set"""
141
+ obj = SlugTester(title="A Title", slug="a-slug")
145
142
  obj.save()
146
- assert obj.slug == 'a-slug'
143
+ assert obj.slug == "a-slug"
147
144
 
148
145
  def test_populate_update(self):
149
- '''SlugField should populate itself on save and update'''
146
+ """SlugField should populate itself on save and update"""
150
147
  obj = SlugUpdateTester(title="A Title")
151
148
  obj.save()
152
- assert obj.slug == 'a-title'
153
- obj.title = 'Title'
149
+ assert obj.slug == "a-title"
150
+ obj.title = "Title"
154
151
  obj.save()
155
- assert obj.slug == 'title'
152
+ assert obj.slug == "title"
156
153
 
157
154
  def test_no_populate_update(self):
158
- '''SlugField should not populate itself if a value is set'''
155
+ """SlugField should not populate itself if a value is set"""
159
156
  obj = SlugUpdateTester(title="A Title")
160
157
  obj.save()
161
- assert obj.slug == 'a-title'
162
- obj.title = 'Title'
163
- obj.slug = 'other'
158
+ assert obj.slug == "a-title"
159
+ obj.title = "Title"
160
+ obj.slug = "other"
164
161
  obj.save()
165
- assert obj.slug == 'other'
162
+ assert obj.slug == "other"
166
163
 
167
164
  def test_unchanged(self):
168
- '''SlugField should not change on save if not needed'''
165
+ """SlugField should not change on save if not needed"""
169
166
  obj = SlugTester(title="A Title")
170
167
  assert obj.slug is None
171
168
  obj.save()
172
- assert obj.slug == 'a-title'
169
+ assert obj.slug == "a-title"
173
170
  obj.save()
174
- assert obj.slug == 'a-title'
171
+ assert obj.slug == "a-title"
175
172
 
176
173
  def test_changed_no_update(self):
177
- '''SlugField should not update slug if update=False'''
174
+ """SlugField should not update slug if update=False"""
178
175
  obj = SlugTester(title="A Title")
179
176
  obj.save()
180
- assert obj.slug == 'a-title'
181
- obj.title = 'Title'
177
+ assert obj.slug == "a-title"
178
+ obj.title = "Title"
182
179
  obj.save()
183
- assert obj.slug == 'a-title'
180
+ assert obj.slug == "a-title"
184
181
 
185
182
  def test_manually_set(self):
186
- '''SlugField can be manually set'''
187
- obj = SlugTester(title='A title', slug='a-slug')
188
- assert obj.slug == 'a-slug'
183
+ """SlugField can be manually set"""
184
+ obj = SlugTester(title="A title", slug="a-slug")
185
+ assert obj.slug == "a-slug"
189
186
  obj.save()
190
- assert obj.slug == 'a-slug'
187
+ assert obj.slug == "a-slug"
191
188
 
192
189
  def test_work_accross_inheritance(self):
193
- '''SlugField should ensure uniqueness accross inheritance'''
194
- obj = SlugTester.objects.create(title='title')
195
- inherited = InheritedSlugTester.objects.create(title='title')
190
+ """SlugField should ensure uniqueness accross inheritance"""
191
+ obj = SlugTester.objects.create(title="title")
192
+ inherited = InheritedSlugTester.objects.create(title="title")
196
193
  assert obj.slug != inherited.slug
197
194
 
198
195
  def test_crop(self):
199
- '''SlugField should truncate itself on save if not set'''
200
- obj = SlugTester(title='x' * (SlugTester.slug.max_length + 1))
196
+ """SlugField should truncate itself on save if not set"""
197
+ obj = SlugTester(title="x" * (SlugTester.slug.max_length + 1))
201
198
  obj.save()
202
199
  assert len(obj.title) == SlugTester.slug.max_length + 1
203
200
  assert len(obj.slug) == SlugTester.slug.max_length
204
201
 
205
202
  def test_crop_with_index(self):
206
- '''SlugField should truncate itself to keep room for index suffix if not unique'''
207
- first_obj = SlugTester(title='x' * (SlugTester.slug.max_length + 1))
203
+ """SlugField should truncate itself to keep room for index suffix if not unique"""
204
+ first_obj = SlugTester(title="x" * (SlugTester.slug.max_length + 1))
208
205
  first_obj.save()
209
206
  assert len(first_obj.slug) == SlugTester.slug.max_length
210
- assert first_obj.slug.endswith('x')
207
+ assert first_obj.slug.endswith("x")
211
208
  # Try adding a second obj with same title with a slug already at max_length
212
- second_obj = SlugTester(title='x' * (SlugTester.slug.max_length + 1))
209
+ second_obj = SlugTester(title="x" * (SlugTester.slug.max_length + 1))
213
210
  second_obj.save()
214
211
  assert len(second_obj.slug) == SlugTester.slug.max_length
215
- assert second_obj.slug.endswith('-1')
212
+ assert second_obj.slug.endswith("-1")
216
213
  # We could even have 10+ obj with the same title that needs index suffix
217
- [SlugTester(title='x' * (SlugTester.slug.max_length + 1)).save() for i in range(8)]
218
- last_obj = SlugTester(title='x' * (SlugTester.slug.max_length + 1))
214
+ [SlugTester(title="x" * (SlugTester.slug.max_length + 1)).save() for i in range(8)]
215
+ last_obj = SlugTester(title="x" * (SlugTester.slug.max_length + 1))
219
216
  last_obj.save()
220
217
  assert len(last_obj.slug) == SlugTester.slug.max_length
221
- assert last_obj.slug.endswith('-10')
218
+ assert last_obj.slug.endswith("-10")
222
219
 
223
220
  def test_multiple_spaces(self):
224
221
  field = db.SlugField()
225
- assert field.slugify('a b') == 'a-b'
222
+ assert field.slugify("a b") == "a-b"
226
223
 
227
224
  def test_lower_case_default(self):
228
225
  field = db.SlugField()
229
- assert field.slugify('ABC') == 'abc'
226
+ assert field.slugify("ABC") == "abc"
230
227
 
231
228
  def test_lower_case_false(self):
232
229
  field = db.SlugField(lower_case=False)
233
- assert field.slugify('AbC') == 'AbC'
230
+ assert field.slugify("AbC") == "AbC"
234
231
 
235
232
  def test_custom_separator(self):
236
- field = db.SlugField(separator='+')
237
- assert field.slugify('a b') == 'a+b'
233
+ field = db.SlugField(separator="+")
234
+ assert field.slugify("a b") == "a+b"
238
235
 
239
236
  def test_is_stripped(self):
240
237
  field = db.SlugField()
241
- assert field.slugify(' ab ') == 'ab'
238
+ assert field.slugify(" ab ") == "ab"
242
239
 
243
240
  def test_special_chars_are_normalized(self):
244
241
  field = db.SlugField()
245
- assert field.slugify('à-€-ü') == 'a-eur-u'
242
+ assert field.slugify("à-€-ü") == "a-eur-u"
246
243
 
247
244
 
248
245
  class DateFieldTest:
@@ -270,7 +267,7 @@ class DateFieldTest:
270
267
  assert obj.a_date == the_date
271
268
 
272
269
  def test_not_valid(self):
273
- obj = DateTester(a_date='invalid')
270
+ obj = DateTester(a_date="invalid")
274
271
  with pytest.raises(ValidationError):
275
272
  obj.save()
276
273
 
@@ -286,7 +283,7 @@ class DateRangeFieldTest:
286
283
  def test_both_valid(self):
287
284
  start = date(1984, 6, 6)
288
285
  end = date(1984, 6, 7)
289
- obj = DateRangeTester(temporal={'start': start, 'end': end})
286
+ obj = DateRangeTester(temporal={"start": start, "end": end})
290
287
  assert obj.temporal.start == start
291
288
  assert obj.temporal.end == end
292
289
  obj.save()
@@ -297,7 +294,7 @@ class DateRangeFieldTest:
297
294
  def test_both_valid_but_reversed(self):
298
295
  start = date(1984, 6, 6)
299
296
  end = date(1984, 6, 7)
300
- obj = DateRangeTester(temporal={'start': end, 'end': start})
297
+ obj = DateRangeTester(temporal={"start": end, "end": start})
301
298
  assert obj.temporal.start == end
302
299
  assert obj.temporal.end == start
303
300
  obj.save()
@@ -307,7 +304,7 @@ class DateRangeFieldTest:
307
304
 
308
305
  def test_only_start(self):
309
306
  start = date(1984, 6, 6)
310
- obj = DateRangeTester(temporal={'start': start})
307
+ obj = DateRangeTester(temporal={"start": start})
311
308
  assert obj.temporal.start == start
312
309
  assert obj.temporal.end is None
313
310
  obj.save()
@@ -317,7 +314,7 @@ class DateRangeFieldTest:
317
314
 
318
315
  def test_only_end(self):
319
316
  end = date(1984, 6, 7)
320
- obj = DateRangeTester(temporal={'end': end})
317
+ obj = DateRangeTester(temporal={"end": end})
321
318
  assert obj.temporal.start is None
322
319
  assert obj.temporal.end == end
323
320
  obj.save()
@@ -326,7 +323,7 @@ class DateRangeFieldTest:
326
323
  assert obj.temporal.end == end
327
324
 
328
325
  def test_not_valid(self):
329
- obj = DateRangeTester(temporal={'start': 'wrong'})
326
+ obj = DateRangeTester(temporal={"start": "wrong"})
330
327
  with pytest.raises(ValidationError):
331
328
  obj.save()
332
329
 
@@ -338,7 +335,7 @@ class DateRangeFieldTest:
338
335
 
339
336
  def test_only_start_when_required(self):
340
337
  start = date(1984, 6, 6)
341
- obj = RequiredDateRangeTester(temporal={'start': start})
338
+ obj = RequiredDateRangeTester(temporal={"start": start})
342
339
  assert obj.temporal.start == start
343
340
  assert obj.temporal.end is None
344
341
  obj.save()
@@ -348,7 +345,7 @@ class DateRangeFieldTest:
348
345
 
349
346
  def test_only_end_when_required(self):
350
347
  end = date(1984, 6, 7)
351
- obj = RequiredDateRangeTester(temporal={'end': end})
348
+ obj = RequiredDateRangeTester(temporal={"end": end})
352
349
  assert obj.temporal.start is None
353
350
  assert obj.temporal.end == end
354
351
  obj.save()
@@ -366,26 +363,26 @@ class URLFieldTest:
366
363
  assert obj.url is None
367
364
 
368
365
  def test_not_valid(self):
369
- obj = URLTester(url='invalid')
366
+ obj = URLTester(url="invalid")
370
367
  with pytest.raises(ValidationError, match=_('Invalid URL "{url}"').format(url="invalid")):
371
368
  obj.save()
372
369
 
373
370
  def test_strip_spaces(self):
374
- url = ' https://www.somewhere.com/with/spaces/ '
371
+ url = " https://www.somewhere.com/with/spaces/ "
375
372
  obj = URLTester(url=url)
376
373
  obj.save().reload()
377
374
  assert obj.url == url.strip()
378
375
 
379
376
  def test_handle_unicode(self):
380
- url = 'https://www.somewhère.com/with/accënts/'
377
+ url = "https://www.somewhère.com/with/accënts/"
381
378
  obj = URLTester(url=url)
382
379
  obj.save().reload()
383
380
  assert obj.url == url
384
381
 
385
382
  def test_public_private(self):
386
- url = 'http://10.10.0.2/path/'
383
+ url = "http://10.10.0.2/path/"
387
384
  PrivateURLTester(url=url).save()
388
- with pytest.raises(ValidationError, match=_('is a private URL')):
385
+ with pytest.raises(ValidationError, match=_("is a private URL")):
389
386
  URLTester(url=url).save()
390
387
 
391
388
 
@@ -411,8 +408,7 @@ class DatetimedTest:
411
408
  def test_save_last_modified_instance(self):
412
409
  now = datetime.utcnow()
413
410
  earlier = now - timedelta(days=1)
414
- datetimed = DatetimedTester.objects.create(
415
- created_at=earlier, last_modified=earlier)
411
+ datetimed = DatetimedTester.objects.create(created_at=earlier, last_modified=earlier)
416
412
 
417
413
  datetimed.save()
418
414
  datetimed.reload()
@@ -459,14 +455,16 @@ class ExtrasFieldTest:
459
455
  now = datetime.utcnow()
460
456
  today = date.today()
461
457
 
462
- tester = Tester(extras={
463
- 'string': 'string',
464
- 'integer': 5,
465
- 'float': 5.5,
466
- 'datetime': now,
467
- 'date': today,
468
- 'bool': True
469
- })
458
+ tester = Tester(
459
+ extras={
460
+ "string": "string",
461
+ "integer": 5,
462
+ "float": 5.5,
463
+ "datetime": now,
464
+ "date": today,
465
+ "bool": True,
466
+ }
467
+ )
470
468
  tester.validate()
471
469
 
472
470
  def test_can_only_register_db_type(self):
@@ -474,109 +472,120 @@ class ExtrasFieldTest:
474
472
  extras = db.ExtrasField()
475
473
 
476
474
  with pytest.raises(TypeError):
477
- Tester.extras.register('test', datetime)
478
-
479
- @pytest.mark.parametrize('dbtype,value', [
480
- (db.IntField, 42),
481
- (db.FloatField, 0.42),
482
- (db.BooleanField, True),
483
- (db.DateTimeField, datetime.utcnow()),
484
- (db.DateField, date.today()),
485
- ])
475
+ Tester.extras.register("test", datetime)
476
+
477
+ @pytest.mark.parametrize(
478
+ "dbtype,value",
479
+ [
480
+ (db.IntField, 42),
481
+ (db.FloatField, 0.42),
482
+ (db.BooleanField, True),
483
+ (db.DateTimeField, datetime.utcnow()),
484
+ (db.DateField, date.today()),
485
+ ],
486
+ )
486
487
  def test_validate_registered_db_type(self, dbtype, value):
487
488
  class Tester(db.Document):
488
489
  extras = db.ExtrasField()
489
490
 
490
- Tester.extras.register('test', dbtype)
491
+ Tester.extras.register("test", dbtype)
491
492
 
492
- Tester(extras={'test': value}).validate()
493
+ Tester(extras={"test": value}).validate()
493
494
 
494
- @pytest.mark.parametrize('dbtype,value', [
495
- (db.IntField, datetime.utcnow()),
496
- (db.FloatField, datetime.utcnow()),
497
- (db.BooleanField, 42),
498
- (db.DateTimeField, 42),
499
- (db.DateField, 42),
500
- ])
495
+ @pytest.mark.parametrize(
496
+ "dbtype,value",
497
+ [
498
+ (db.IntField, datetime.utcnow()),
499
+ (db.FloatField, datetime.utcnow()),
500
+ (db.BooleanField, 42),
501
+ (db.DateTimeField, 42),
502
+ (db.DateField, 42),
503
+ ],
504
+ )
501
505
  def test_fail_to_validate_wrong_type(self, dbtype, value):
502
506
  class Tester(db.Document):
503
507
  extras = db.ExtrasField()
504
508
 
505
- Tester.extras.register('test', dbtype)
509
+ Tester.extras.register("test", dbtype)
506
510
 
507
511
  with pytest.raises(db.ValidationError):
508
- Tester(extras={'test': value}).validate()
512
+ Tester(extras={"test": value}).validate()
509
513
 
510
514
  def test_validate_custom_type(self):
511
515
  class Tester(db.Document):
512
516
  extras = db.ExtrasField()
513
517
 
514
- @Tester.extras('test')
518
+ @Tester.extras("test")
515
519
  class Custom(BaseField):
516
520
  def validate(self, value):
517
521
  if not isinstance(value, dict):
518
- raise db.ValidationError('Should be a dict instance')
522
+ raise db.ValidationError("Should be a dict instance")
519
523
 
520
- tester = Tester(extras={'test': {}})
524
+ tester = Tester(extras={"test": {}})
521
525
  tester.validate()
522
526
 
523
527
  def test_validate_registered_type_embedded_document(self):
524
528
  class Tester(db.Document):
525
529
  extras = db.ExtrasField()
526
530
 
527
- @Tester.extras('test')
531
+ @Tester.extras("test")
528
532
  class EmbeddedExtra(db.EmbeddedDocument):
529
533
  name = db.StringField(required=True)
530
534
 
531
- tester = Tester(extras={'test': {}})
535
+ tester = Tester(extras={"test": {}})
532
536
  with pytest.raises(ValidationError):
533
537
  tester.validate()
534
538
 
535
- tester.extras['test'] = {'name': 'test'}
539
+ tester.extras["test"] = {"name": "test"}
536
540
  tester.validate()
537
541
 
538
- tester.extras['test'] = EmbeddedExtra(name='test')
542
+ tester.extras["test"] = EmbeddedExtra(name="test")
539
543
  tester.validate()
540
544
 
541
545
  def test_is_json_serializable(self):
542
546
  class Tester(db.Document):
543
547
  extras = db.ExtrasField()
544
548
 
545
- @Tester.extras('embedded')
549
+ @Tester.extras("embedded")
546
550
  class EmbeddedExtra(db.EmbeddedDocument):
547
551
  name = db.StringField(required=True)
548
552
 
549
- tester = Tester(extras={
550
- 'test': {'key': 'value'},
551
- 'embedded': EmbeddedExtra(name='An embedded field'),
552
- 'string': 'a value',
553
- 'integer': 5,
554
- 'float': 5.5,
555
- })
556
-
557
- assert_json_equal(tester.extras, {
558
- 'test': {'key': 'value'},
559
- 'embedded': {'name': 'An embedded field'},
560
- 'string': 'a value',
561
- 'integer': 5,
562
- 'float': 5.5,
563
- })
553
+ tester = Tester(
554
+ extras={
555
+ "test": {"key": "value"},
556
+ "embedded": EmbeddedExtra(name="An embedded field"),
557
+ "string": "a value",
558
+ "integer": 5,
559
+ "float": 5.5,
560
+ }
561
+ )
562
+
563
+ assert_json_equal(
564
+ tester.extras,
565
+ {
566
+ "test": {"key": "value"},
567
+ "embedded": {"name": "An embedded field"},
568
+ "string": "a value",
569
+ "integer": 5,
570
+ "float": 5.5,
571
+ },
572
+ )
564
573
 
565
574
 
566
575
  class ModelResolutionTest:
567
576
  def test_resolve_exact_match(self):
568
- assert db.resolve_model('Dataset') == Dataset
577
+ assert db.resolve_model("Dataset") == Dataset
569
578
 
570
579
  def test_resolve_from_dict(self):
571
- assert db.resolve_model({'class': 'Dataset'}) == Dataset
580
+ assert db.resolve_model({"class": "Dataset"}) == Dataset
572
581
 
573
582
  def test_raise_if_not_found(self):
574
583
  with pytest.raises(ValueError):
575
- db.resolve_model('NotFound')
584
+ db.resolve_model("NotFound")
576
585
 
577
586
  def test_raise_if_not_a_document(self):
578
587
  with pytest.raises(ValueError):
579
- db.resolve_model('UDataMongoEngine')
588
+ db.resolve_model("UDataMongoEngine")
580
589
 
581
590
  def test_raise_if_none(self):
582
591
  with pytest.raises(ValueError):
@@ -584,49 +593,47 @@ class ModelResolutionTest:
584
593
 
585
594
  def test_raise_if_missing_class_entry(self):
586
595
  with pytest.raises(ValueError):
587
- db.resolve_model({'field': 'value'})
596
+ db.resolve_model({"field": "value"})
588
597
 
589
598
 
590
599
  class MongoConfigTest:
591
600
  def test_validate_default_value(self):
592
- validate_config({'MONGODB_HOST': Defaults.MONGODB_HOST})
601
+ validate_config({"MONGODB_HOST": Defaults.MONGODB_HOST})
593
602
 
594
603
  def test_validate_with_auth(self):
595
- validate_config({'MONGODB_HOST': 'mongodb://userid:password@somewhere.com:1234/mydb'})
604
+ validate_config({"MONGODB_HOST": "mongodb://userid:password@somewhere.com:1234/mydb"})
596
605
 
597
606
  def test_raise_exception_on_host_only(self):
598
607
  with pytest.raises(ConfigError):
599
- validate_config({'MONGODB_HOST': 'somehost'})
608
+ validate_config({"MONGODB_HOST": "somehost"})
600
609
 
601
610
  def test_raise_exception_on_missing_db(self):
602
611
  with pytest.raises(ConfigError):
603
- validate_config({'MONGODB_HOST': 'mongodb://somewhere.com:1234'})
612
+ validate_config({"MONGODB_HOST": "mongodb://somewhere.com:1234"})
604
613
  with pytest.raises(ConfigError):
605
- validate_config({'MONGODB_HOST': 'mongodb://somewhere.com:1234/'})
614
+ validate_config({"MONGODB_HOST": "mongodb://somewhere.com:1234/"})
606
615
 
607
616
  def test_warn_on_deprecated_db_port(self):
608
617
  with pytest.deprecated_call():
609
- validate_config({'MONGODB_HOST': Defaults.MONGODB_HOST,
610
- 'MONGODB_PORT': 1234})
618
+ validate_config({"MONGODB_HOST": Defaults.MONGODB_HOST, "MONGODB_PORT": 1234})
611
619
  with pytest.deprecated_call():
612
- validate_config({'MONGODB_HOST': Defaults.MONGODB_HOST,
613
- 'MONGODB_DB': 'udata'})
620
+ validate_config({"MONGODB_HOST": Defaults.MONGODB_HOST, "MONGODB_DB": "udata"})
614
621
 
615
622
  def test_build_test_config_with_MONGODB_HOST_TEST(self):
616
- test_url = 'mongodb://somewhere.com:1234/test'
617
- config = {'MONGODB_HOST_TEST': test_url}
623
+ test_url = "mongodb://somewhere.com:1234/test"
624
+ config = {"MONGODB_HOST_TEST": test_url}
618
625
  build_test_config(config)
619
- assert 'MONGODB_HOST' in config
620
- assert config['MONGODB_HOST'] == test_url
626
+ assert "MONGODB_HOST" in config
627
+ assert config["MONGODB_HOST"] == test_url
621
628
 
622
629
  def test_build_test_config_without_MONGODB_HOST_TEST(self):
623
- config = {'MONGODB_HOST': Defaults.MONGODB_HOST}
624
- expected = '{0}-test'.format(Defaults.MONGODB_HOST)
630
+ config = {"MONGODB_HOST": Defaults.MONGODB_HOST}
631
+ expected = "{0}-test".format(Defaults.MONGODB_HOST)
625
632
  build_test_config(config)
626
- assert config['MONGODB_HOST'] == expected
633
+ assert config["MONGODB_HOST"] == expected
627
634
 
628
635
  def test_build_test_config_should_validate(self):
629
636
  with pytest.raises(ConfigError):
630
- test_url = 'mongodb://somewhere.com:1234'
631
- config = {'MONGODB_HOST_TEST': test_url}
637
+ test_url = "mongodb://somewhere.com:1234"
638
+ config = {"MONGODB_HOST_TEST": test_url}
632
639
  build_test_config(config)