udata 12.0.2.dev16__py3-none-any.whl → 12.0.2.dev18__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 (116) hide show
  1. udata/commands/tests/test_fixtures.py +6 -3
  2. udata/core/badges/tests/test_commands.py +2 -4
  3. udata/core/badges/tests/test_model.py +2 -2
  4. udata/core/pages/tests/test_api.py +0 -2
  5. udata/core/spatial/tests/test_api.py +17 -20
  6. udata/core/spatial/tests/test_models.py +3 -3
  7. udata/core/user/tests/test_user_model.py +2 -6
  8. udata/features/identicon/tests/test_backends.py +3 -13
  9. udata/forms/fields.py +3 -3
  10. udata/forms/widgets.py +2 -2
  11. udata/harvest/tests/ckan/test_ckan_backend.py +300 -337
  12. udata/harvest/tests/ckan/test_ckan_backend_errors.py +94 -99
  13. udata/harvest/tests/ckan/test_ckan_backend_filters.py +128 -122
  14. udata/harvest/tests/ckan/test_dkan_backend.py +39 -51
  15. udata/harvest/tests/test_actions.py +7 -7
  16. udata/harvest/tests/test_api.py +2 -4
  17. udata/harvest/tests/test_base_backend.py +3 -4
  18. udata/harvest/tests/test_dcat_backend.py +5 -16
  19. udata/harvest/tests/test_models.py +2 -4
  20. udata/harvest/tests/test_notifications.py +2 -4
  21. udata/harvest/tests/test_tasks.py +2 -3
  22. udata/mongo/taglist_field.py +3 -3
  23. udata/settings.py +3 -0
  24. udata/tags.py +5 -5
  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 +27 -49
  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 -4
  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/utils.py +1 -1
  109. {udata-12.0.2.dev16.dist-info → udata-12.0.2.dev18.dist-info}/METADATA +1 -1
  110. {udata-12.0.2.dev16.dist-info → udata-12.0.2.dev18.dist-info}/RECORD +114 -116
  111. udata/tests/frontend/__init__.py +0 -23
  112. udata/tests/metrics/conftest.py +0 -15
  113. {udata-12.0.2.dev16.dist-info → udata-12.0.2.dev18.dist-info}/WHEEL +0 -0
  114. {udata-12.0.2.dev16.dist-info → udata-12.0.2.dev18.dist-info}/entry_points.txt +0 -0
  115. {udata-12.0.2.dev16.dist-info → udata-12.0.2.dev18.dist-info}/licenses/LICENSE +0 -0
  116. {udata-12.0.2.dev16.dist-info → udata-12.0.2.dev18.dist-info}/top_level.txt +0 -0
@@ -17,12 +17,12 @@ from udata.core.discussions.factories import DiscussionFactory, MessageDiscussio
17
17
  from udata.core.organization.factories import OrganizationFactory
18
18
  from udata.core.organization.models import Member
19
19
  from udata.core.reuse.factories import ReuseFactory
20
+ from udata.core.spam.models import SpamMixin
20
21
  from udata.core.user.factories import UserFactory
22
+ from udata.tests.api import PytestOnlyAPITestCase
21
23
 
22
24
 
23
- @pytest.mark.usefixtures("clean_db")
24
- class FixturesTest:
25
- @pytest.mark.frontend
25
+ class FixturesTest(PytestOnlyAPITestCase):
26
26
  @pytest.mark.options(FIXTURE_DATASET_SLUGS=["some-test-dataset-slug"])
27
27
  def test_generate_fixtures_file_then_import(self, app, cli, api, monkeypatch):
28
28
  """Test generating fixtures from the current env, then importing them back."""
@@ -108,7 +108,10 @@ class FixturesTest:
108
108
 
109
109
  def test_import_fixtures_from_default_file(self, cli):
110
110
  """Test importing fixtures from udata.commands.fixture.DEFAULT_FIXTURE_FILE."""
111
+ # Deactivate spam detection when testing import fixtures
112
+ SpamMixin.detect_spam_enabled = False
111
113
  cli("import-fixtures")
114
+ SpamMixin.detect_spam_enabled = True
112
115
  assert models.Organization.objects.count() > 0
113
116
  assert models.Dataset.objects.count() > 0
114
117
  assert models.Reuse.objects.count() > 0
@@ -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()
@@ -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)
@@ -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))
udata/forms/fields.py CHANGED
@@ -416,11 +416,11 @@ class TagField(Field):
416
416
  if not self.data:
417
417
  return
418
418
  for tag in self.data:
419
- if not tags.MIN_TAG_LENGTH <= len(tag) <= tags.MAX_TAG_LENGTH:
419
+ if not tags.TAG_MIN_LENGTH <= len(tag) <= tags.TAG_MAX_LENGTH:
420
420
  message = _(
421
421
  'Tag "%(tag)s" must be between %(min)d and %(max)d characters long.',
422
- min=tags.MIN_TAG_LENGTH,
423
- max=tags.MAX_TAG_LENGTH,
422
+ min=tags.TAG_MIN_LENGTH,
423
+ max=tags.TAG_MAX_LENGTH,
424
424
  tag=tag,
425
425
  )
426
426
  raise validators.ValidationError(message)
udata/forms/widgets.py CHANGED
@@ -1,7 +1,7 @@
1
1
  from wtforms import widgets
2
2
 
3
- MIN_TAG_LENGTH = 2
4
- MAX_TAG_LENGTH = 50
3
+ TAG_MIN_LENGTH = 2
4
+ TAG_MAX_LENGTH = 50
5
5
 
6
6
 
7
7
  class WidgetHelper(object):