udata 12.0.2.dev17__py3-none-any.whl → 12.0.2.dev19__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 (115) hide show
  1. udata/commands/tests/test_fixtures.py +2 -3
  2. udata/core/badges/tests/test_commands.py +2 -4
  3. udata/core/badges/tests/test_model.py +2 -2
  4. udata/core/dataservices/models.py +4 -0
  5. udata/core/dataservices/search.py +1 -1
  6. udata/core/dataset/search.py +2 -2
  7. udata/core/organization/search.py +1 -1
  8. udata/core/pages/tests/test_api.py +0 -2
  9. udata/core/reuse/search.py +1 -1
  10. udata/core/spatial/tests/test_api.py +17 -20
  11. udata/core/spatial/tests/test_models.py +3 -3
  12. udata/core/user/tests/test_user_model.py +2 -6
  13. udata/features/identicon/tests/test_backends.py +3 -13
  14. udata/harvest/tests/ckan/test_ckan_backend.py +300 -337
  15. udata/harvest/tests/ckan/test_ckan_backend_errors.py +94 -99
  16. udata/harvest/tests/ckan/test_ckan_backend_filters.py +128 -122
  17. udata/harvest/tests/ckan/test_dkan_backend.py +39 -51
  18. udata/harvest/tests/test_actions.py +7 -7
  19. udata/harvest/tests/test_api.py +2 -4
  20. udata/harvest/tests/test_base_backend.py +3 -4
  21. udata/harvest/tests/test_dcat_backend.py +4 -6
  22. udata/harvest/tests/test_models.py +2 -4
  23. udata/harvest/tests/test_notifications.py +2 -4
  24. udata/harvest/tests/test_tasks.py +2 -3
  25. udata/tests/__init__.py +40 -58
  26. udata/tests/api/__init__.py +87 -2
  27. udata/tests/api/test_activities_api.py +17 -23
  28. udata/tests/api/test_auth_api.py +2 -4
  29. udata/tests/api/test_contact_points.py +48 -54
  30. udata/tests/api/test_dataservices_api.py +0 -2
  31. udata/tests/api/test_datasets_api.py +15 -29
  32. udata/tests/api/test_me_api.py +4 -6
  33. udata/tests/api/test_organizations_api.py +19 -38
  34. udata/tests/api/test_reports_api.py +0 -4
  35. udata/tests/api/test_reuses_api.py +9 -19
  36. udata/tests/api/test_swagger.py +2 -3
  37. udata/tests/api/test_tags_api.py +6 -7
  38. udata/tests/api/test_transfer_api.py +0 -2
  39. udata/tests/api/test_user_api.py +8 -10
  40. udata/tests/apiv2/test_datasets.py +0 -4
  41. udata/tests/apiv2/test_me_api.py +0 -2
  42. udata/tests/apiv2/test_organizations.py +0 -2
  43. udata/tests/apiv2/test_swagger.py +2 -3
  44. udata/tests/apiv2/test_topics.py +0 -2
  45. udata/tests/cli/test_cli_base.py +14 -12
  46. udata/tests/cli/test_db_cli.py +51 -54
  47. udata/tests/contact_point/test_contact_point_models.py +2 -2
  48. udata/tests/dataservice/test_csv_adapter.py +2 -5
  49. udata/tests/dataservice/test_dataservice_rdf.py +3 -6
  50. udata/tests/dataservice/test_dataservice_tasks.py +36 -38
  51. udata/tests/dataset/test_csv_adapter.py +2 -5
  52. udata/tests/dataset/test_dataset_actions.py +2 -4
  53. udata/tests/dataset/test_dataset_commands.py +2 -4
  54. udata/tests/dataset/test_dataset_events.py +3 -3
  55. udata/tests/dataset/test_dataset_model.py +6 -7
  56. udata/tests/dataset/test_dataset_rdf.py +6 -9
  57. udata/tests/dataset/test_dataset_recommendations.py +2 -2
  58. udata/tests/dataset/test_dataset_tasks.py +66 -68
  59. udata/tests/dataset/test_resource_preview.py +39 -48
  60. udata/tests/dataset/test_transport_tasks.py +2 -2
  61. udata/tests/features/territories/__init__.py +0 -6
  62. udata/tests/features/territories/test_territories_api.py +25 -24
  63. udata/tests/forms/test_current_user_field.py +2 -2
  64. udata/tests/forms/test_dict_field.py +2 -4
  65. udata/tests/forms/test_extras_fields.py +2 -3
  66. udata/tests/forms/test_image_field.py +2 -2
  67. udata/tests/forms/test_model_field.py +2 -4
  68. udata/tests/forms/test_publish_as_field.py +2 -4
  69. udata/tests/forms/test_user_forms.py +26 -29
  70. udata/tests/frontend/test_auth.py +2 -3
  71. udata/tests/frontend/test_csv.py +5 -6
  72. udata/tests/frontend/test_error_handlers.py +2 -3
  73. udata/tests/frontend/test_hooks.py +5 -7
  74. udata/tests/frontend/test_markdown.py +3 -4
  75. udata/tests/helpers.py +2 -7
  76. udata/tests/metrics/test_metrics.py +52 -48
  77. udata/tests/metrics/test_tasks.py +154 -150
  78. udata/tests/organization/test_csv_adapter.py +2 -5
  79. udata/tests/organization/test_notifications.py +2 -4
  80. udata/tests/organization/test_organization_model.py +3 -4
  81. udata/tests/organization/test_organization_rdf.py +2 -8
  82. udata/tests/plugin.py +6 -110
  83. udata/tests/reuse/test_reuse_model.py +3 -4
  84. udata/tests/site/test_site_api.py +0 -2
  85. udata/tests/site/test_site_csv_exports.py +0 -2
  86. udata/tests/site/test_site_metrics.py +2 -4
  87. udata/tests/site/test_site_model.py +2 -2
  88. udata/tests/site/test_site_rdf.py +3 -6
  89. udata/tests/test_activity.py +3 -3
  90. udata/tests/test_api_fields.py +6 -9
  91. udata/tests/test_cors.py +0 -2
  92. udata/tests/test_dcat_commands.py +2 -3
  93. udata/tests/test_discussions.py +2 -7
  94. udata/tests/test_mail.py +4 -10
  95. udata/tests/test_migrations.py +413 -419
  96. udata/tests/test_model.py +10 -11
  97. udata/tests/test_notifications.py +2 -3
  98. udata/tests/test_owned.py +3 -3
  99. udata/tests/test_routing.py +5 -5
  100. udata/tests/test_storages.py +6 -5
  101. udata/tests/test_tags.py +2 -1
  102. udata/tests/test_topics.py +2 -4
  103. udata/tests/test_transfer.py +4 -5
  104. udata/tests/topic/test_topic_tasks.py +25 -27
  105. udata/tests/user/test_user_rdf.py +2 -8
  106. udata/tests/workers/test_jobs_commands.py +2 -2
  107. udata/tests/workers/test_tasks_routing.py +27 -27
  108. {udata-12.0.2.dev17.dist-info → udata-12.0.2.dev19.dist-info}/METADATA +1 -1
  109. {udata-12.0.2.dev17.dist-info → udata-12.0.2.dev19.dist-info}/RECORD +113 -115
  110. udata/tests/frontend/__init__.py +0 -23
  111. udata/tests/metrics/conftest.py +0 -15
  112. {udata-12.0.2.dev17.dist-info → udata-12.0.2.dev19.dist-info}/WHEEL +0 -0
  113. {udata-12.0.2.dev17.dist-info → udata-12.0.2.dev19.dist-info}/entry_points.txt +0 -0
  114. {udata-12.0.2.dev17.dist-info → udata-12.0.2.dev19.dist-info}/licenses/LICENSE +0 -0
  115. {udata-12.0.2.dev17.dist-info → udata-12.0.2.dev19.dist-info}/top_level.txt +0 -0
@@ -19,11 +19,10 @@ from udata.core.organization.models import Member
19
19
  from udata.core.reuse.factories import ReuseFactory
20
20
  from udata.core.spam.models import SpamMixin
21
21
  from udata.core.user.factories import UserFactory
22
+ from udata.tests.api import PytestOnlyAPITestCase
22
23
 
23
24
 
24
- @pytest.mark.usefixtures("clean_db")
25
- class FixturesTest:
26
- @pytest.mark.frontend
25
+ class FixturesTest(PytestOnlyAPITestCase):
27
26
  @pytest.mark.options(FIXTURE_DATASET_SLUGS=["some-test-dataset-slug"])
28
27
  def test_generate_fixtures_file_then_import(self, app, cli, api, monkeypatch):
29
28
  """Test generating fixtures from the current env, then importing them back."""
@@ -1,13 +1,11 @@
1
1
  from tempfile import NamedTemporaryFile
2
2
 
3
- import pytest
4
-
5
3
  from udata.core.organization.constants import CERTIFIED, PUBLIC_SERVICE
6
4
  from udata.core.organization.factories import OrganizationFactory
5
+ from udata.tests.api import PytestOnlyDBTestCase
7
6
 
8
7
 
9
- @pytest.mark.usefixtures("clean_db")
10
- class BadgeCommandTest:
8
+ class BadgeCommandTest(PytestOnlyDBTestCase):
11
9
  def toggle(self, path_or_id, kind):
12
10
  return self.cli("badges", "toggle", path_or_id, kind)
13
11
 
@@ -2,7 +2,7 @@ from udata.api_fields import field
2
2
  from udata.auth import login_user
3
3
  from udata.core.user.factories import UserFactory
4
4
  from udata.mongo import db
5
- from udata.tests import DBTestMixin, TestCase
5
+ from udata.tests.api import DBTestCase
6
6
 
7
7
  from ..models import Badge, BadgeMixin, BadgesList
8
8
 
@@ -33,7 +33,7 @@ class Fake(db.Document, FakeBadgeMixin):
33
33
  pass
34
34
 
35
35
 
36
- class BadgeMixinTest(DBTestMixin, TestCase):
36
+ class BadgeMixinTest(DBTestCase):
37
37
  def test_attributes(self):
38
38
  """It should have a badge list"""
39
39
  fake = Fake.objects.create()
@@ -323,6 +323,10 @@ class Dataservice(Auditable, WithMetrics, Linkable, Owned, db.Document):
323
323
  "views",
324
324
  ]
325
325
 
326
+ @property
327
+ def is_visible(self):
328
+ return not self.is_hidden
329
+
326
330
  @property
327
331
  def is_hidden(self):
328
332
  return self.private or self.deleted_at or self.archived_at
@@ -79,7 +79,7 @@ class DataserviceSearch(ModelSearchAdapter):
79
79
 
80
80
  @classmethod
81
81
  def is_indexable(cls, dataservice: Dataservice) -> bool:
82
- return dataservice.deleted_at is None and not dataservice.private
82
+ return dataservice.is_visible
83
83
 
84
84
  @classmethod
85
85
  def mongo_search(cls, args):
@@ -54,8 +54,8 @@ class DatasetSearch(ModelSearchAdapter):
54
54
  }
55
55
 
56
56
  @classmethod
57
- def is_indexable(cls, dataset):
58
- return dataset.deleted is None and dataset.archived is None and not dataset.private
57
+ def is_indexable(cls, dataset: Dataset):
58
+ return dataset.is_visible
59
59
 
60
60
  @classmethod
61
61
  def mongo_search(cls, args):
@@ -29,7 +29,7 @@ class OrganizationSearch(search.ModelSearchAdapter):
29
29
  }
30
30
 
31
31
  @classmethod
32
- def is_indexable(cls, org):
32
+ def is_indexable(cls, org: Organization):
33
33
  return org.deleted is None
34
34
 
35
35
  @classmethod
@@ -6,8 +6,6 @@ from udata.tests.api import APITestCase
6
6
 
7
7
 
8
8
  class PageAPITest(APITestCase):
9
- modules = []
10
-
11
9
  def test_create_get_update(self):
12
10
  self.login()
13
11
  datasets = DatasetFactory.create_batch(3)
@@ -40,7 +40,7 @@ class ReuseSearch(ModelSearchAdapter):
40
40
 
41
41
  @classmethod
42
42
  def is_indexable(cls, reuse: Reuse) -> bool:
43
- return reuse.deleted is None and len(reuse.datasets) > 0 and not reuse.private
43
+ return reuse.is_visible
44
44
 
45
45
  @classmethod
46
46
  def mongo_search(cls, args):
@@ -1,3 +1,4 @@
1
+ import pytest
1
2
  from flask import url_for
2
3
 
3
4
  from udata.core.dataset.factories import DatasetFactory
@@ -13,15 +14,12 @@ from udata.core.spatial.tasks import compute_geozones_metrics
13
14
  from udata.tests.api import APITestCase
14
15
  from udata.tests.api.test_datasets_api import SAMPLE_GEOM
15
16
  from udata.tests.features.territories import (
16
- TerritoriesSettings,
17
17
  create_geozones_fixtures,
18
18
  )
19
19
  from udata.utils import faker
20
20
 
21
21
 
22
22
  class SpatialApiTest(APITestCase):
23
- modules = []
24
-
25
23
  def test_zones_api_one(self):
26
24
  zone = GeoZoneFactory()
27
25
 
@@ -65,7 +63,7 @@ class SpatialApiTest(APITestCase):
65
63
  for i in range(4):
66
64
  GeoZoneFactory(name="name-test-{0}".format(i) if i % 2 else faker.word())
67
65
 
68
- response = self.get(url_for("api.suggest_zones"), qs={"q": "name-test", "size": "5"})
66
+ response = self.get(url_for("api.suggest_zones", q="name-test", size=5))
69
67
  self.assert200(response)
70
68
 
71
69
  self.assertEqual(len(response.json), 2)
@@ -84,7 +82,7 @@ class SpatialApiTest(APITestCase):
84
82
  for _ in range(2):
85
83
  GeoZoneFactory()
86
84
 
87
- response = self.get(url_for("api.suggest_zones"), qs={"q": zone.id})
85
+ response = self.get(url_for("api.suggest_zones", q=zone.id))
88
86
  self.assert200(response)
89
87
 
90
88
  self.assertEqual(response.json[0]["id"], zone["id"])
@@ -96,7 +94,7 @@ class SpatialApiTest(APITestCase):
96
94
  country_zone = GeoZoneFactory(name="name-test-country", level=country_level.id)
97
95
  region_zone = GeoZoneFactory(name="name-test-region", level=region_level.id)
98
96
 
99
- response = self.get(url_for("api.suggest_zones"), qs={"q": "name-test", "size": "5"})
97
+ response = self.get(url_for("api.suggest_zones", q="name-test", size=5))
100
98
  self.assert200(response)
101
99
 
102
100
  self.assertEqual(len(response.json), 2)
@@ -108,7 +106,7 @@ class SpatialApiTest(APITestCase):
108
106
  for i in range(4):
109
107
  GeoZoneFactory(code="code-test-{0}".format(i) if i % 2 else faker.word())
110
108
 
111
- response = self.get(url_for("api.suggest_zones"), qs={"q": "code-test", "size": "5"})
109
+ response = self.get(url_for("api.suggest_zones", q="code-test", size=5))
112
110
  self.assert200(response)
113
111
 
114
112
  self.assertEqual(len(response.json), 2)
@@ -126,7 +124,7 @@ class SpatialApiTest(APITestCase):
126
124
  for i in range(3):
127
125
  GeoZoneFactory(name=5 * "{0}".format(i), code=3 * "{0}".format(i))
128
126
 
129
- response = self.get(url_for("api.suggest_zones"), qs={"q": "xxxxxx", "size": "5"})
127
+ response = self.get(url_for("api.suggest_zones", q="xxxxxx", size=5))
130
128
  self.assert200(response)
131
129
  self.assertEqual(len(response.json), 0)
132
130
 
@@ -135,7 +133,7 @@ class SpatialApiTest(APITestCase):
135
133
  for i in range(4):
136
134
  GeoZoneFactory(name="name-testé-{0}".format(i) if i % 2 else faker.word())
137
135
 
138
- response = self.get(url_for("api.suggest_zones"), qs={"q": "name-testé", "size": "5"})
136
+ response = self.get(url_for("api.suggest_zones", q="name-testé", size=5))
139
137
  self.assert200(response)
140
138
 
141
139
  self.assertEqual(len(response.json), 2)
@@ -150,7 +148,7 @@ class SpatialApiTest(APITestCase):
150
148
 
151
149
  def test_suggest_zones_empty(self):
152
150
  """It should not provide zones suggestion if no data is present"""
153
- response = self.get(url_for("api.suggest_zones"), qs={"q": "xxxxxx", "size": "5"})
151
+ response = self.get(url_for("api.suggest_zones", q="xxxxxx", size=5))
154
152
  self.assert200(response)
155
153
  self.assertEqual(len(response.json), 0)
156
154
 
@@ -194,7 +192,7 @@ class SpatialApiTest(APITestCase):
194
192
  organization=organization, spatial=SpatialCoverageFactory(zones=[paca.id])
195
193
  )
196
194
 
197
- response = self.get(url_for("api.zone_datasets", id=paca.id), qs={"size": 2})
195
+ response = self.get(url_for("api.zone_datasets", id=paca.id, size=2))
198
196
  self.assert200(response)
199
197
  self.assertEqual(len(response.json), 2)
200
198
 
@@ -206,7 +204,7 @@ class SpatialApiTest(APITestCase):
206
204
  organization=organization, spatial=SpatialCoverageFactory(zones=[paca.id])
207
205
  )
208
206
 
209
- response = self.get(url_for("api.zone_datasets", id=paca.id), qs={"dynamic": 1})
207
+ response = self.get(url_for("api.zone_datasets", id=paca.id, dynamic=1))
210
208
  self.assert200(response)
211
209
  # No dynamic datasets given that the setting is deactivated by default.
212
210
  self.assertEqual(len(response.json), 3)
@@ -219,7 +217,7 @@ class SpatialApiTest(APITestCase):
219
217
  organization=organization, spatial=SpatialCoverageFactory(zones=[paca.id])
220
218
  )
221
219
 
222
- response = self.get(url_for("api.zone_datasets", id=paca.id), qs={"dynamic": 1, "size": 2})
220
+ response = self.get(url_for("api.zone_datasets", id=paca.id, dynamic=1, size=2))
223
221
  self.assert200(response)
224
222
  # No dynamic datasets given that the setting is deactivated by default.
225
223
  self.assertEqual(len(response.json), 2)
@@ -260,10 +258,11 @@ class SpatialApiTest(APITestCase):
260
258
  self.assertEqual(response.json["features"][1]["properties"]["datasets"], 3)
261
259
 
262
260
 
261
+ @pytest.mark.options(
262
+ ACTIVATE_TERRITORIES=True,
263
+ HANDLED_LEVELS=("fr:commune", "fr:departement", "fr:region", "country"),
264
+ )
263
265
  class SpatialTerritoriesApiTest(APITestCase):
264
- modules = []
265
- settings = TerritoriesSettings
266
-
267
266
  def test_zone_datasets_with_dynamic_and_setting(self):
268
267
  paca, bdr, arles = create_geozones_fixtures()
269
268
  organization = OrganizationFactory()
@@ -272,7 +271,7 @@ class SpatialTerritoriesApiTest(APITestCase):
272
271
  organization=organization, spatial=SpatialCoverageFactory(zones=[paca.id])
273
272
  )
274
273
 
275
- response = self.get(url_for("api.zone_datasets", id=paca.id), qs={"dynamic": 1})
274
+ response = self.get(url_for("api.zone_datasets", id=paca.id, dynamic=1))
276
275
  self.assert200(response)
277
276
  # No dynamic datasets given that they are added by udata-front extension.
278
277
  self.assertEqual(len(response.json), 3)
@@ -285,15 +284,13 @@ class SpatialTerritoriesApiTest(APITestCase):
285
284
  organization=organization, spatial=SpatialCoverageFactory(zones=[paca.id])
286
285
  )
287
286
 
288
- response = self.get(url_for("api.zone_datasets", id=paca.id), qs={"dynamic": 1, "size": 2})
287
+ response = self.get(url_for("api.zone_datasets", id=paca.id, dynamic=1, size=2))
289
288
  self.assert200(response)
290
289
  # No dynamic datasets given that they are added by udata-front extension.
291
290
  self.assertEqual(len(response.json), 2)
292
291
 
293
292
 
294
293
  class DatasetsSpatialAPITest(APITestCase):
295
- modules = []
296
-
297
294
  def test_create_spatial_zones(self):
298
295
  paca, _, _ = create_geozones_fixtures()
299
296
  granularity = spatial_granularities[0][0]
@@ -1,6 +1,6 @@
1
1
  from datetime import timedelta
2
2
 
3
- from udata.tests import DBTestMixin, TestCase
3
+ from udata.tests.api import DBTestCase
4
4
 
5
5
  from ..factories import GeoZoneFactory
6
6
  from ..models import GeoZone, SpatialCoverage
@@ -8,7 +8,7 @@ from ..models import GeoZone, SpatialCoverage
8
8
  A_YEAR = timedelta(days=365)
9
9
 
10
10
 
11
- class SpacialCoverageTest(DBTestMixin, TestCase):
11
+ class SpacialCoverageTest(DBTestCase):
12
12
  def test_top_label_empty(self):
13
13
  coverage = SpatialCoverage()
14
14
  self.assertIsNone(coverage.top_label)
@@ -19,7 +19,7 @@ class SpacialCoverageTest(DBTestMixin, TestCase):
19
19
  self.assertEqual(coverage.top_label, "name")
20
20
 
21
21
 
22
- class SpatialTemporalResolutionTest(DBTestMixin, TestCase):
22
+ class SpatialTemporalResolutionTest(DBTestCase):
23
23
  def test_resolve_id_only(self):
24
24
  zone = GeoZoneFactory()
25
25
  for i in range(3):
@@ -6,14 +6,10 @@ from udata.core.followers.models import Follow
6
6
  from udata.core.organization.factories import OrganizationFactory
7
7
  from udata.core.user.factories import UserFactory
8
8
  from udata.core.user.models import User
9
+ from udata.tests.api import APITestCase
9
10
 
10
- pytestmark = pytest.mark.usefixtures("clean_db")
11
-
12
-
13
- @pytest.mark.frontend
14
- class UserModelTest:
15
- modules = [] # Required for mails
16
11
 
12
+ class UserModelTest(APITestCase):
17
13
  def test_mark_as_deleted(self):
18
14
  user = UserFactory()
19
15
  other_user = UserFactory()
@@ -1,20 +1,10 @@
1
- import pytest
2
-
3
1
  from udata.features.identicon.backends import internal
2
+ from udata.tests.api import PytestOnlyAPITestCase
4
3
  from udata.tests.helpers import assert200
5
4
  from udata.utils import faker
6
5
 
7
- pytestmark = pytest.mark.usefixtures("app")
8
-
9
-
10
- def assert_stream_equal(response1, response2):
11
- __tracebackhide__ = True
12
- stream1 = list(response1.iter_encoded())
13
- stream2 = list(response2.iter_encoded())
14
- assert stream1 == stream2
15
-
16
6
 
17
- class InternalBackendTest:
7
+ class InternalBackendTest(PytestOnlyAPITestCase):
18
8
  def test_base_rendering(self):
19
9
  response = internal(faker.word(), 32)
20
10
  assert200(response)
@@ -25,4 +15,4 @@ class InternalBackendTest:
25
15
 
26
16
  def test_render_twice_the_same(self):
27
17
  identifier = faker.word()
28
- assert_stream_equal(internal(identifier, 32), internal(identifier, 32))
18
+ self.assertStreamEqual(internal(identifier, 32), internal(identifier, 32))