udata 7.0.7.dev28410__py2.py3-none-any.whl → 7.0.7.dev28426__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 (50) hide show
  1. udata/core/badges/tests/test_commands.py +2 -1
  2. udata/core/dataset/api.py +3 -2
  3. udata/core/dataset/api_fields.py +2 -5
  4. udata/core/dataset/apiv2.py +2 -3
  5. udata/core/dataset/commands.py +5 -5
  6. udata/core/dataset/constants.py +82 -0
  7. udata/core/dataset/forms.py +2 -0
  8. udata/core/dataset/models.py +2 -87
  9. udata/core/dataset/rdf.py +2 -1
  10. udata/core/dataset/search.py +2 -3
  11. udata/core/dataset/tasks.py +2 -1
  12. udata/core/discussions/constants.py +1 -0
  13. udata/core/discussions/forms.py +2 -1
  14. udata/core/discussions/models.py +0 -4
  15. udata/core/organization/api.py +2 -1
  16. udata/core/organization/api_fields.py +1 -4
  17. udata/core/organization/constants.py +29 -0
  18. udata/core/organization/forms.py +2 -4
  19. udata/core/organization/models.py +2 -34
  20. udata/core/organization/tasks.py +2 -1
  21. udata/core/post/constants.py +9 -0
  22. udata/core/post/forms.py +2 -1
  23. udata/core/post/models.py +1 -11
  24. udata/core/reuse/api.py +2 -1
  25. udata/core/reuse/api_fields.py +1 -1
  26. udata/core/reuse/constants.py +37 -0
  27. udata/core/reuse/factories.py +2 -1
  28. udata/core/reuse/forms.py +3 -2
  29. udata/core/reuse/models.py +2 -38
  30. udata/core/spam/api.py +1 -1
  31. udata/core/spam/constants.py +5 -0
  32. udata/core/spam/fields.py +1 -1
  33. udata/core/spam/models.py +1 -5
  34. udata/core/spam/tests/test_spam.py +2 -2
  35. udata/core/spatial/constants.py +9 -0
  36. udata/core/spatial/models.py +3 -14
  37. udata/core/user/api_fields.py +1 -3
  38. udata/core/user/constants.py +2 -0
  39. udata/core/user/forms.py +1 -1
  40. udata/core/user/models.py +1 -1
  41. udata/tests/api/test_datasets_api.py +2 -3
  42. udata/tests/api/test_reuses_api.py +2 -1
  43. udata/tests/dataset/test_dataset_model.py +3 -4
  44. udata/tests/site/test_site_metrics.py +2 -1
  45. {udata-7.0.7.dev28410.dist-info → udata-7.0.7.dev28426.dist-info}/METADATA +2 -1
  46. {udata-7.0.7.dev28410.dist-info → udata-7.0.7.dev28426.dist-info}/RECORD +50 -42
  47. {udata-7.0.7.dev28410.dist-info → udata-7.0.7.dev28426.dist-info}/LICENSE +0 -0
  48. {udata-7.0.7.dev28410.dist-info → udata-7.0.7.dev28426.dist-info}/WHEEL +0 -0
  49. {udata-7.0.7.dev28410.dist-info → udata-7.0.7.dev28426.dist-info}/entry_points.txt +0 -0
  50. {udata-7.0.7.dev28410.dist-info → udata-7.0.7.dev28426.dist-info}/top_level.txt +0 -0
@@ -2,7 +2,8 @@ import pytest
2
2
 
3
3
  from tempfile import NamedTemporaryFile
4
4
 
5
- from udata.models import Badge, CERTIFIED, PUBLIC_SERVICE
5
+ from udata.models import Badge
6
+ from udata.core.organization.constants import CERTIFIED, PUBLIC_SERVICE
6
7
  from udata.core.organization.factories import OrganizationFactory
7
8
 
8
9
 
udata/core/dataset/api.py CHANGED
@@ -57,9 +57,10 @@ from .api_fields import (
57
57
  from udata.linkchecker.checker import check_resource
58
58
  from udata.core.topic.models import Topic
59
59
  from .models import (
60
- Dataset, Resource, Checksum, License, UPDATE_FREQUENCIES,
61
- CommunityResource, RESOURCE_TYPES, ResourceSchema, get_resource
60
+ Dataset, Resource, Checksum, License,
61
+ CommunityResource, ResourceSchema, get_resource
62
62
  )
63
+ from .constants import UPDATE_FREQUENCIES, RESOURCE_TYPES
63
64
  from .permissions import DatasetEditPermission, ResourceEditPermission
64
65
  from .forms import (
65
66
  ResourceForm, DatasetForm, CommunityResourceForm, ResourcesListForm
@@ -1,20 +1,17 @@
1
1
  from udata.api import api, fields, base_reference
2
2
  from udata.core.badges.api import badge_fields
3
3
  from udata.core.organization.api_fields import org_ref_fields
4
- from udata.core.organization.models import LOGO_SIZES
4
+ from udata.core.organization.constants import BIGGEST_LOGO_SIZE
5
5
  from udata.core.spatial.api_fields import spatial_coverage_fields
6
6
  from udata.core.user.api_fields import user_ref_fields
7
7
  from udata.core.contact_point.api_fields import contact_point_fields
8
8
 
9
- from .models import (
9
+ from .constants import (
10
10
  UPDATE_FREQUENCIES, RESOURCE_FILETYPES, DEFAULT_FREQUENCY,
11
11
  CHECKSUM_TYPES, DEFAULT_CHECKSUM_TYPE, DEFAULT_LICENSE, RESOURCE_TYPES
12
12
  )
13
13
 
14
14
 
15
- BIGGEST_LOGO_SIZE = LOGO_SIZES[0]
16
-
17
-
18
15
  checksum_fields = api.model('Checksum', {
19
16
  'type': fields.String(
20
17
  description='The hashing algorithm used to compute the checksum',
@@ -25,9 +25,8 @@ from .api_fields import (
25
25
  )
26
26
  from udata.core.spatial.api_fields import geojson
27
27
  from udata.core.contact_point.api_fields import contact_point_fields
28
- from .models import (
29
- Dataset, UPDATE_FREQUENCIES, DEFAULT_FREQUENCY, DEFAULT_LICENSE, CommunityResource
30
- )
28
+ from .models import Dataset, CommunityResource
29
+ from .constants import UPDATE_FREQUENCIES, DEFAULT_FREQUENCY, DEFAULT_LICENSE
31
30
  from .api import ResourceMixin
32
31
  from .permissions import DatasetEditPermission, ResourceEditPermission
33
32
  from .search import DatasetSearch
@@ -6,12 +6,16 @@ import requests
6
6
  from bson import ObjectId
7
7
 
8
8
  from udata.commands import cli, success, exit_with_error
9
- from udata.models import License, DEFAULT_LICENSE, Dataset
9
+ from udata.models import License, Dataset
10
+ from udata.core.dataset.constants import DEFAULT_LICENSE
10
11
  from .tasks import send_frequency_reminder
11
12
  from . import actions
12
13
 
13
14
  log = logging.getLogger(__name__)
14
15
 
16
+ # Use CKAN license group from opendefinition as default license list
17
+ DEFAULT_LICENSE_FILE = 'http://licenses.opendefinition.org/licenses/groups/ckan.json' # noqa
18
+
15
19
  FLAGS_MAP = {
16
20
  'domain_content': 'domain_content',
17
21
  'domain_data': 'domain_data',
@@ -21,10 +25,6 @@ FLAGS_MAP = {
21
25
  'is_osi_compliant': 'osi_compliant',
22
26
  }
23
27
 
24
- # Use CKAN license group from opendefinition as default license list
25
- DEFAULT_LICENSE_FILE = 'http://licenses.opendefinition.org/licenses/groups/ckan.json' # noqa
26
-
27
-
28
28
  @cli.command()
29
29
  @click.argument('source', default=DEFAULT_LICENSE_FILE)
30
30
  def licenses(source=DEFAULT_LICENSE_FILE):
@@ -0,0 +1,82 @@
1
+ from collections import OrderedDict
2
+ from udata.i18n import lazy_gettext as _
3
+
4
+ #: Udata frequencies with their labels
5
+ #:
6
+ #: See: http://dublincore.org/groups/collections/frequency/
7
+ UPDATE_FREQUENCIES = OrderedDict([ # Dublin core equivalent
8
+ ('unknown', _('Unknown')), # N/A
9
+ ('punctual', _('Punctual')), # N/A
10
+ ('continuous', _('Real time')), # freq:continuous
11
+ ('hourly', _('Hourly')), # N/A
12
+ ('fourTimesADay', _('Four times a day')), # N/A
13
+ ('threeTimesADay', _('Three times a day')), # N/A
14
+ ('semidaily', _('Semidaily')), # N/A
15
+ ('daily', _('Daily')), # freq:daily
16
+ ('fourTimesAWeek', _('Four times a week')), # N/A
17
+ ('threeTimesAWeek', _('Three times a week')), # freq:threeTimesAWeek
18
+ ('semiweekly', _('Semiweekly')), # freq:semiweekly
19
+ ('weekly', _('Weekly')), # freq:weekly
20
+ ('biweekly', _('Biweekly')), # freq:bimonthly
21
+ ('threeTimesAMonth', _('Three times a month')), # freq:threeTimesAMonth
22
+ ('semimonthly', _('Semimonthly')), # freq:semimonthly
23
+ ('monthly', _('Monthly')), # freq:monthly
24
+ ('bimonthly', _('Bimonthly')), # freq:bimonthly
25
+ ('quarterly', _('Quarterly')), # freq:quarterly
26
+ ('threeTimesAYear', _('Three times a year')), # freq:threeTimesAYear
27
+ ('semiannual', _('Biannual')), # freq:semiannual
28
+ ('annual', _('Annual')), # freq:annual
29
+ ('biennial', _('Biennial')), # freq:biennial
30
+ ('triennial', _('Triennial')), # freq:triennial
31
+ ('quinquennial', _('Quinquennial')), # N/A
32
+ ('irregular', _('Irregular')), # freq:irregular
33
+ ])
34
+
35
+ #: Map legacy frequencies to currents
36
+ LEGACY_FREQUENCIES = {
37
+ 'fortnighly': 'biweekly',
38
+ 'biannual': 'semiannual',
39
+ 'realtime': 'continuous',
40
+ }
41
+
42
+ DEFAULT_FREQUENCY = 'unknown'
43
+
44
+ DEFAULT_LICENSE = {
45
+ 'id': 'notspecified',
46
+ 'title': "License Not Specified",
47
+ 'flags': ["generic"],
48
+ 'maintainer': None,
49
+ 'url': None,
50
+ 'active': True,
51
+ }
52
+
53
+ RESOURCE_TYPES = OrderedDict([
54
+ ('main', _('Main file')),
55
+ ('documentation', _('Documentation')),
56
+ ('update', _('Update')),
57
+ ('api', _('API')),
58
+ ('code', _('Code repository')),
59
+ ('other', _('Other')),
60
+ ])
61
+
62
+ RESOURCE_FILETYPE_FILE = 'file'
63
+ RESOURCE_FILETYPES = OrderedDict([
64
+ (RESOURCE_FILETYPE_FILE, _('Uploaded file')),
65
+ ('remote', _('Remote file')),
66
+ ])
67
+
68
+ CHECKSUM_TYPES = ('sha1', 'sha2', 'sha256', 'md5', 'crc')
69
+ DEFAULT_CHECKSUM_TYPE = 'sha1'
70
+
71
+ PIVOTAL_DATA = 'pivotal-data'
72
+ CLOSED_FORMATS = ('pdf', 'doc', 'docx', 'word', 'xls', 'excel', 'xlsx')
73
+
74
+ # Maximum acceptable Damerau-Levenshtein distance
75
+ # used to guess license
76
+ # (ie. number of allowed character changes)
77
+ MAX_DISTANCE = 2
78
+
79
+ SCHEMA_CACHE_DURATION = 60 * 5 # In seconds
80
+
81
+ TITLE_SIZE_LIMIT = 350
82
+ DESCRIPTION_SIZE_LIMIT = 100000
@@ -8,6 +8,8 @@ from udata.core.spatial.forms import SpatialCoverageField
8
8
 
9
9
  from .models import (
10
10
  Dataset, Resource, Schema, License, Checksum, CommunityResource,
11
+ )
12
+ from .constants import (
11
13
  UPDATE_FREQUENCIES, DEFAULT_FREQUENCY, RESOURCE_FILETYPES, CHECKSUM_TYPES,
12
14
  LEGACY_FREQUENCIES, RESOURCE_TYPES, TITLE_SIZE_LIMIT, DESCRIPTION_SIZE_LIMIT,
13
15
  )
@@ -1,7 +1,6 @@
1
1
  import logging
2
2
 
3
3
  from datetime import datetime, timedelta
4
- from collections import OrderedDict
5
4
  from urllib.parse import urlparse
6
5
 
7
6
  from blinker import signal
@@ -24,101 +23,17 @@ from udata.i18n import lazy_gettext as _
24
23
  from udata.utils import get_by, hash_url, to_naive_datetime
25
24
  from udata.uris import ValidationError, endpoint_for
26
25
  from udata.uris import validate as validate_url
26
+ from .constants import CHECKSUM_TYPES, CLOSED_FORMATS, DEFAULT_LICENSE, LEGACY_FREQUENCIES, MAX_DISTANCE, PIVOTAL_DATA, RESOURCE_FILETYPES, RESOURCE_TYPES, SCHEMA_CACHE_DURATION, UPDATE_FREQUENCIES
27
27
 
28
28
  from .preview import get_preview_url
29
29
  from .exceptions import (
30
30
  SchemasCatalogNotFoundException, SchemasCacheUnavailableException
31
31
  )
32
32
 
33
- __all__ = (
34
- 'License', 'Resource', 'Schema', 'Dataset', 'Checksum', 'CommunityResource',
35
- 'UPDATE_FREQUENCIES', 'LEGACY_FREQUENCIES', 'RESOURCE_FILETYPES',
36
- 'PIVOTAL_DATA', 'DEFAULT_LICENSE', 'RESOURCE_TYPES',
37
- 'ResourceSchema'
38
- )
33
+ __all__ = ('License', 'Resource', 'Schema', 'Dataset', 'Checksum', 'CommunityResource', 'ResourceSchema')
39
34
 
40
35
  log = logging.getLogger(__name__)
41
36
 
42
- #: Udata frequencies with their labels
43
- #:
44
- #: See: http://dublincore.org/groups/collections/frequency/
45
- UPDATE_FREQUENCIES = OrderedDict([ # Dublin core equivalent
46
- ('unknown', _('Unknown')), # N/A
47
- ('punctual', _('Punctual')), # N/A
48
- ('continuous', _('Real time')), # freq:continuous
49
- ('hourly', _('Hourly')), # N/A
50
- ('fourTimesADay', _('Four times a day')), # N/A
51
- ('threeTimesADay', _('Three times a day')), # N/A
52
- ('semidaily', _('Semidaily')), # N/A
53
- ('daily', _('Daily')), # freq:daily
54
- ('fourTimesAWeek', _('Four times a week')), # N/A
55
- ('threeTimesAWeek', _('Three times a week')), # freq:threeTimesAWeek
56
- ('semiweekly', _('Semiweekly')), # freq:semiweekly
57
- ('weekly', _('Weekly')), # freq:weekly
58
- ('biweekly', _('Biweekly')), # freq:bimonthly
59
- ('threeTimesAMonth', _('Three times a month')), # freq:threeTimesAMonth
60
- ('semimonthly', _('Semimonthly')), # freq:semimonthly
61
- ('monthly', _('Monthly')), # freq:monthly
62
- ('bimonthly', _('Bimonthly')), # freq:bimonthly
63
- ('quarterly', _('Quarterly')), # freq:quarterly
64
- ('threeTimesAYear', _('Three times a year')), # freq:threeTimesAYear
65
- ('semiannual', _('Biannual')), # freq:semiannual
66
- ('annual', _('Annual')), # freq:annual
67
- ('biennial', _('Biennial')), # freq:biennial
68
- ('triennial', _('Triennial')), # freq:triennial
69
- ('quinquennial', _('Quinquennial')), # N/A
70
- ('irregular', _('Irregular')), # freq:irregular
71
- ])
72
-
73
- #: Map legacy frequencies to currents
74
- LEGACY_FREQUENCIES = {
75
- 'fortnighly': 'biweekly',
76
- 'biannual': 'semiannual',
77
- 'realtime': 'continuous',
78
- }
79
-
80
- DEFAULT_FREQUENCY = 'unknown'
81
-
82
- DEFAULT_LICENSE = {
83
- 'id': 'notspecified',
84
- 'title': "License Not Specified",
85
- 'flags': ["generic"],
86
- 'maintainer': None,
87
- 'url': None,
88
- 'active': True,
89
- }
90
-
91
- RESOURCE_TYPES = OrderedDict([
92
- ('main', _('Main file')),
93
- ('documentation', _('Documentation')),
94
- ('update', _('Update')),
95
- ('api', _('API')),
96
- ('code', _('Code repository')),
97
- ('other', _('Other')),
98
- ])
99
-
100
- RESOURCE_FILETYPE_FILE = 'file'
101
- RESOURCE_FILETYPES = OrderedDict([
102
- (RESOURCE_FILETYPE_FILE, _('Uploaded file')),
103
- ('remote', _('Remote file')),
104
- ])
105
-
106
- CHECKSUM_TYPES = ('sha1', 'sha2', 'sha256', 'md5', 'crc')
107
- DEFAULT_CHECKSUM_TYPE = 'sha1'
108
-
109
- PIVOTAL_DATA = 'pivotal-data'
110
- CLOSED_FORMATS = ('pdf', 'doc', 'docx', 'word', 'xls', 'excel', 'xlsx')
111
-
112
- # Maximum acceptable Damerau-Levenshtein distance
113
- # used to guess license
114
- # (ie. number of allowed character changes)
115
- MAX_DISTANCE = 2
116
-
117
- SCHEMA_CACHE_DURATION = 60 * 5 # In seconds
118
-
119
- TITLE_SIZE_LIMIT = 350
120
- DESCRIPTION_SIZE_LIMIT = 100000
121
-
122
37
 
123
38
  def get_json_ld_extra(key, value):
124
39
  '''Serialize an extras key, value pair into JSON-LD'''
udata/core/dataset/rdf.py CHANGED
@@ -28,7 +28,8 @@ from udata.rdf import (
28
28
  from udata.utils import get_by, safe_unicode
29
29
  from udata.uris import endpoint_for
30
30
 
31
- from .models import Dataset, Resource, Checksum, License, UPDATE_FREQUENCIES
31
+ from .models import Dataset, Resource, Checksum, License
32
+ from .constants import UPDATE_FREQUENCIES
32
33
 
33
34
  log = logging.getLogger(__name__)
34
35
 
@@ -7,9 +7,8 @@ from udata.search import (
7
7
  ModelTermsFilter, BoolFilter, Filter,
8
8
  TemporalCoverageFilter
9
9
  )
10
- from udata.core.spatial.models import (
11
- admin_levels, ADMIN_LEVEL_MAX
12
- )
10
+ from udata.core.spatial.models import admin_levels
11
+ from udata.core.spatial.constants import ADMIN_LEVEL_MAX
13
12
  from udata.core.dataset.api import DatasetApiParser, DEFAULT_SORTING
14
13
  from udata.utils import to_iso_datetime
15
14
 
@@ -17,7 +17,8 @@ from udata.models import (Follow, Discussion, Activity, Topic,
17
17
  Organization, Transfer, db)
18
18
  from udata.tasks import job
19
19
 
20
- from .models import Dataset, Resource, CommunityResource, UPDATE_FREQUENCIES, Checksum
20
+ from .models import Dataset, Resource, CommunityResource, Checksum
21
+ from .constants import UPDATE_FREQUENCIES
21
22
 
22
23
  log = get_task_logger(__name__)
23
24
 
@@ -0,0 +1 @@
1
+ COMMENT_SIZE_LIMIT = 50000
@@ -1,7 +1,8 @@
1
1
  from udata.forms import ModelForm, Form, fields, validators
2
2
  from udata.i18n import lazy_gettext as _
3
3
 
4
- from .models import Discussion, COMMENT_SIZE_LIMIT
4
+ from .models import Discussion
5
+ from .constants import COMMENT_SIZE_LIMIT
5
6
 
6
7
  __all__ = ('DiscussionCreateForm', 'DiscussionCommentForm')
7
8
 
@@ -5,13 +5,9 @@ from udata.models import db
5
5
  from udata.core.spam.models import SpamMixin, spam_protected
6
6
  from .signals import (on_new_discussion, on_discussion_closed, on_new_discussion_comment)
7
7
 
8
-
9
8
  log = logging.getLogger(__name__)
10
9
 
11
10
 
12
- COMMENT_SIZE_LIMIT = 50000
13
-
14
-
15
11
  class Message(SpamMixin, db.EmbeddedDocument):
16
12
  content = db.StringField(required=True)
17
13
  posted_on = db.DateTimeField(default=datetime.utcnow, required=True)
@@ -16,7 +16,8 @@ from udata.rdf import (
16
16
  from .forms import (
17
17
  OrganizationForm, MembershipRequestForm, MembershipRefuseForm, MemberForm
18
18
  )
19
- from .models import Organization, MembershipRequest, Member, ORG_ROLES
19
+ from .models import Organization, MembershipRequest, Member
20
+ from .constants import ORG_ROLES
20
21
  from .permissions import (
21
22
  EditOrganizationPermission, OrganizationPrivatePermission
22
23
  )
@@ -1,10 +1,7 @@
1
1
  from udata.api import api, fields, base_reference
2
2
  from udata.core.badges.api import badge_fields
3
3
 
4
- from .models import ORG_ROLES, DEFAULT_ROLE, MEMBERSHIP_STATUS, LOGO_SIZES
5
-
6
- BIGGEST_LOGO_SIZE = LOGO_SIZES[0]
7
-
4
+ from .constants import ORG_ROLES, DEFAULT_ROLE, MEMBERSHIP_STATUS, BIGGEST_LOGO_SIZE
8
5
 
9
6
  org_ref_fields = api.inherit('OrganizationReference', base_reference, {
10
7
  'name': fields.String(description='The organization name', readonly=True),
@@ -0,0 +1,29 @@
1
+ from udata.i18n import lazy_gettext as _
2
+
3
+ ORG_ROLES = {
4
+ 'admin': _('Administrator'),
5
+ 'editor': _('Editor'),
6
+ }
7
+ DEFAULT_ROLE = 'editor'
8
+
9
+
10
+ MEMBERSHIP_STATUS = {
11
+ 'pending': _('Pending'),
12
+ 'accepted': _('Accepted'),
13
+ 'refused': _('Refused'),
14
+ }
15
+
16
+ LOGO_MAX_SIZE = 500
17
+ LOGO_SIZES = [100, 60, 25]
18
+ BIGGEST_LOGO_SIZE = LOGO_SIZES[0]
19
+
20
+ PUBLIC_SERVICE = 'public-service'
21
+ CERTIFIED = 'certified'
22
+ ASSOCIATION = 'Association'
23
+ COMPANY = 'Company'
24
+ LOCAL_AUTHORITY = 'Local authority'
25
+
26
+ TITLE_SIZE_LIMIT = 350
27
+ DESCRIPTION_SIZE_LIMIT = 100000
28
+
29
+ ORG_BID_SIZE_LIMIT = 14
@@ -4,10 +4,8 @@ from udata.auth import current_user
4
4
  from udata.forms import Form, ModelForm, fields, validators
5
5
  from udata.i18n import lazy_gettext as _
6
6
 
7
- from .models import (
8
- Organization, MembershipRequest, Member, LOGO_SIZES, ORG_ROLES,
9
- TITLE_SIZE_LIMIT, DESCRIPTION_SIZE_LIMIT
10
- )
7
+ from .models import Organization, MembershipRequest, Member
8
+ from .constants import DESCRIPTION_SIZE_LIMIT, LOGO_SIZES, ORG_ROLES, TITLE_SIZE_LIMIT
11
9
 
12
10
  __all__ = (
13
11
  'OrganizationForm',
@@ -10,42 +10,10 @@ from udata.frontend.markdown import mdstrip
10
10
  from udata.models import db, BadgeMixin, WithMetrics
11
11
  from udata.i18n import lazy_gettext as _
12
12
  from udata.uris import endpoint_for
13
+ from .constants import ASSOCIATION, CERTIFIED, COMPANY, LOCAL_AUTHORITY, LOGO_SIZES, ORG_BID_SIZE_LIMIT, ORG_ROLES, DEFAULT_ROLE, MEMBERSHIP_STATUS, LOGO_MAX_SIZE, PUBLIC_SERVICE
13
14
 
14
15
 
15
- __all__ = (
16
- 'Organization', 'Team', 'Member', 'MembershipRequest',
17
- 'ORG_ROLES', 'MEMBERSHIP_STATUS', 'PUBLIC_SERVICE', 'CERTIFIED',
18
- 'ASSOCIATION', 'COMPANY', 'LOCAL_AUTHORITY'
19
- )
20
-
21
-
22
- ORG_ROLES = {
23
- 'admin': _('Administrator'),
24
- 'editor': _('Editor'),
25
- }
26
- DEFAULT_ROLE = 'editor'
27
-
28
-
29
- MEMBERSHIP_STATUS = {
30
- 'pending': _('Pending'),
31
- 'accepted': _('Accepted'),
32
- 'refused': _('Refused'),
33
- }
34
-
35
- LOGO_MAX_SIZE = 500
36
- LOGO_SIZES = [100, 60, 25]
37
-
38
- PUBLIC_SERVICE = 'public-service'
39
- CERTIFIED = 'certified'
40
- ASSOCIATION = 'Association'
41
- COMPANY = 'Company'
42
- LOCAL_AUTHORITY = 'Local authority'
43
-
44
- TITLE_SIZE_LIMIT = 350
45
- DESCRIPTION_SIZE_LIMIT = 100000
46
-
47
- ORG_BID_SIZE_LIMIT = 14
48
-
16
+ __all__ = ('Organization', 'Team', 'Member', 'MembershipRequest')
49
17
 
50
18
  class Team(db.EmbeddedDocument):
51
19
  name = db.StringField(required=True)
@@ -7,7 +7,8 @@ from udata.tasks import job, task, get_logger
7
7
 
8
8
  from udata.core.badges.tasks import notify_new_badge
9
9
 
10
- from .models import Organization, CERTIFIED, PUBLIC_SERVICE, COMPANY, ASSOCIATION, LOCAL_AUTHORITY
10
+ from .models import Organization
11
+ from .constants import CERTIFIED, PUBLIC_SERVICE, COMPANY, ASSOCIATION, LOCAL_AUTHORITY
11
12
 
12
13
  log = get_logger(__name__)
13
14
 
@@ -0,0 +1,9 @@
1
+ from udata.i18n import lazy_gettext as _
2
+ from collections import OrderedDict
3
+
4
+ IMAGE_SIZES = [400, 100, 50]
5
+
6
+ BODY_TYPES = OrderedDict([
7
+ ('markdown', _('Markdown')),
8
+ ('html', _('HTML')),
9
+ ])
udata/core/post/forms.py CHANGED
@@ -1,7 +1,8 @@
1
1
  from udata.forms import ModelForm, fields, validators, widgets
2
2
  from udata.i18n import lazy_gettext as _
3
3
 
4
- from .models import Post, IMAGE_SIZES
4
+ from .models import Post
5
+ from .constants import IMAGE_SIZES
5
6
 
6
7
 
7
8
  __all__ = ('PostForm', )
udata/core/post/models.py CHANGED
@@ -1,23 +1,13 @@
1
- from collections import OrderedDict
2
-
3
1
  from flask import url_for
4
2
 
5
3
  from udata.core.storages import images, default_image_basename
6
4
  from udata.i18n import lazy_gettext as _
7
5
  from udata.models import db
8
-
6
+ from .constants import BODY_TYPES, IMAGE_SIZES
9
7
 
10
8
  __all__ = ('Post', )
11
9
 
12
10
 
13
- IMAGE_SIZES = [400, 100, 50]
14
-
15
- BODY_TYPES = OrderedDict([
16
- ('markdown', _('Markdown')),
17
- ('html', _('HTML')),
18
- ])
19
-
20
-
21
11
  class PostQuerySet(db.BaseQuerySet):
22
12
  def published(self):
23
13
  return self(published__ne=None).order_by('-published')
udata/core/reuse/api.py CHANGED
@@ -23,7 +23,8 @@ from .api_fields import (
23
23
  reuse_topic_fields
24
24
  )
25
25
  from .forms import ReuseForm
26
- from .models import Reuse, REUSE_TYPES, REUSE_TOPICS
26
+ from .models import Reuse
27
+ from .constants import REUSE_TYPES, REUSE_TOPICS
27
28
  from .permissions import ReuseEditPermission
28
29
 
29
30
 
@@ -5,7 +5,7 @@ from udata.core.dataset.api_fields import dataset_fields
5
5
  from udata.core.organization.api_fields import org_ref_fields
6
6
  from udata.core.user.api_fields import user_ref_fields
7
7
 
8
- from .models import REUSE_TOPICS, REUSE_TYPES, IMAGE_SIZES
8
+ from .constants import REUSE_TOPICS, REUSE_TYPES, IMAGE_SIZES
9
9
 
10
10
  BIGGEST_IMAGE_SIZE = IMAGE_SIZES[0]
11
11
 
@@ -0,0 +1,37 @@
1
+ from udata.i18n import lazy_gettext as _
2
+
3
+ REUSE_TYPES = {
4
+ 'api': _('API'),
5
+ 'application': _('Application'),
6
+ 'idea': _('Idea'),
7
+ 'news_article': _('News Article'),
8
+ 'paper': _('Paper'),
9
+ 'post': _('Post'),
10
+ 'visualization': _('Visualization'),
11
+ 'hardware': _('Connected device'),
12
+ }
13
+
14
+ REUSE_TOPICS = {
15
+ 'health': _('Health'),
16
+ 'transport_and_mobility': _('Transport and mobility'),
17
+ 'housing_and_development': _('Housing and development'),
18
+ 'food_and_agriculture': _('Food and agriculture'),
19
+ 'culture_and_recreation': _('Culture and recreation'),
20
+ 'economy_and_business': _('Economy and business'),
21
+ 'environment_and_energy': _('Environment and energy'),
22
+ 'work_and_training': _('Work and training'),
23
+ 'politics_and_public_life': _('Politics and public life'),
24
+ 'safety_and_security': _('Safety and security'),
25
+ 'education_and_research': _('Education and research'),
26
+ 'society_and_demography': _('Society and demography'),
27
+ 'law_and_justice': _('Law and justice'),
28
+ 'open_data_tools': _('Open data tools'),
29
+ 'others': _('Others'),
30
+ }
31
+
32
+
33
+ IMAGE_SIZES = [500, 100, 50, 25]
34
+ IMAGE_MAX_SIZE = 800
35
+
36
+ TITLE_SIZE_LIMIT = 350
37
+ DESCRIPTION_SIZE_LIMIT = 100000
@@ -6,7 +6,8 @@ from udata.core.dataset.factories import DatasetFactory
6
6
  from udata.factories import ModelFactory
7
7
  from udata.utils import faker
8
8
 
9
- from .models import Reuse, REUSE_TYPES, REUSE_TOPICS
9
+ from .models import Reuse
10
+ from .constants import REUSE_TYPES, REUSE_TOPICS
10
11
 
11
12
 
12
13
  class ReuseFactory(ModelFactory):
udata/core/reuse/forms.py CHANGED
@@ -1,8 +1,9 @@
1
1
  from udata.forms import ModelForm, fields, validators
2
2
  from udata.i18n import lazy_gettext as _
3
- from udata.models import Reuse, REUSE_TYPES, REUSE_TOPICS
3
+ from udata.models import Reuse
4
+ from udata.core.reuse.constants import REUSE_TYPES, REUSE_TOPICS
4
5
 
5
- from .models import IMAGE_SIZES, TITLE_SIZE_LIMIT, DESCRIPTION_SIZE_LIMIT
6
+ from .constants import IMAGE_SIZES, TITLE_SIZE_LIMIT, DESCRIPTION_SIZE_LIMIT
6
7
 
7
8
  __all__ = ('ReuseForm', )
8
9
 
@@ -8,45 +8,9 @@ from udata.i18n import lazy_gettext as _
8
8
  from udata.models import db, BadgeMixin, WithMetrics
9
9
  from udata.utils import hash_url
10
10
  from udata.uris import endpoint_for
11
+ from .constants import IMAGE_MAX_SIZE, IMAGE_SIZES, REUSE_TOPICS, REUSE_TYPES
11
12
 
12
- __all__ = ('Reuse', 'REUSE_TYPES', 'REUSE_TOPICS')
13
-
14
-
15
- REUSE_TYPES = {
16
- 'api': _('API'),
17
- 'application': _('Application'),
18
- 'idea': _('Idea'),
19
- 'news_article': _('News Article'),
20
- 'paper': _('Paper'),
21
- 'post': _('Post'),
22
- 'visualization': _('Visualization'),
23
- 'hardware': _('Connected device'),
24
- }
25
-
26
- REUSE_TOPICS = {
27
- 'health': _('Health'),
28
- 'transport_and_mobility': _('Transport and mobility'),
29
- 'housing_and_development': _('Housing and development'),
30
- 'food_and_agriculture': _('Food and agriculture'),
31
- 'culture_and_recreation': _('Culture and recreation'),
32
- 'economy_and_business': _('Economy and business'),
33
- 'environment_and_energy': _('Environment and energy'),
34
- 'work_and_training': _('Work and training'),
35
- 'politics_and_public_life': _('Politics and public life'),
36
- 'safety_and_security': _('Safety and security'),
37
- 'education_and_research': _('Education and research'),
38
- 'society_and_demography': _('Society and demography'),
39
- 'law_and_justice': _('Law and justice'),
40
- 'open_data_tools': _('Open data tools'),
41
- 'others': _('Others'),
42
- }
43
-
44
-
45
- IMAGE_SIZES = [500, 100, 50, 25]
46
- IMAGE_MAX_SIZE = 800
47
-
48
- TITLE_SIZE_LIMIT = 350
49
- DESCRIPTION_SIZE_LIMIT = 100000
13
+ __all__ = ('Reuse',)
50
14
 
51
15
 
52
16
  class ReuseQuerySet(db.OwnedQuerySet):
udata/core/spam/api.py CHANGED
@@ -4,7 +4,7 @@ from udata.api import api, API
4
4
  from udata.auth import admin_permission
5
5
  from udata.core.discussions.models import Discussion
6
6
  from udata.core.spam.fields import potential_spam_fields
7
- from udata.core.spam.models import POTENTIAL_SPAM
7
+ from udata.core.spam.constants import POTENTIAL_SPAM
8
8
  from udata.utils import id_or_404
9
9
 
10
10
 
@@ -0,0 +1,5 @@
1
+ NOT_CHECKED = 'not_checked'
2
+ POTENTIAL_SPAM = 'potential_spam'
3
+ NO_SPAM = 'no_spam'
4
+
5
+ SPAM_STATUS_CHOICES = [NOT_CHECKED, POTENTIAL_SPAM, NO_SPAM]
udata/core/spam/fields.py CHANGED
@@ -1,5 +1,5 @@
1
1
  from udata.api import api, fields
2
- from .models import SPAM_STATUS_CHOICES
2
+ from .constants import SPAM_STATUS_CHOICES
3
3
 
4
4
  spam_fields = api.model('Spam', {
5
5
  'status': fields.String(description='Status', enum=SPAM_STATUS_CHOICES, readonly=True),
udata/core/spam/models.py CHANGED
@@ -5,11 +5,7 @@ from udata.models import db
5
5
  from .signals import on_new_potential_spam
6
6
  from mongoengine import signals
7
7
 
8
- NOT_CHECKED = 'not_checked'
9
- POTENTIAL_SPAM = 'potential_spam'
10
- NO_SPAM = 'no_spam'
11
-
12
- SPAM_STATUS_CHOICES = [NOT_CHECKED, POTENTIAL_SPAM, NO_SPAM]
8
+ from .constants import NO_SPAM, POTENTIAL_SPAM, SPAM_STATUS_CHOICES, NOT_CHECKED
13
9
 
14
10
 
15
11
  class SpamInfo(db.EmbeddedDocument):
@@ -1,10 +1,10 @@
1
1
  import logging
2
2
  import pytest
3
3
  from udata.tests import TestCase
4
- from udata.tests.helpers import assert_not_emit
5
4
  from udata.models import db
6
5
 
7
- from ..models import POTENTIAL_SPAM, SpamMixin
6
+ from ..models import SpamMixin
7
+ from ..constants import POTENTIAL_SPAM
8
8
 
9
9
 
10
10
  log = logging.getLogger(__name__)
@@ -0,0 +1,9 @@
1
+ from udata.i18n import L_
2
+
3
+ BASE_GRANULARITIES = [
4
+ ('poi', L_('POI')),
5
+ ('other', L_('Other')),
6
+ ]
7
+
8
+ ADMIN_LEVEL_MIN = 1
9
+ ADMIN_LEVEL_MAX = 110
@@ -4,25 +4,14 @@ from werkzeug.utils import cached_property
4
4
 
5
5
  from udata.app import cache
6
6
  from udata.uris import endpoint_for
7
- from udata.i18n import _, L_, get_locale, language
7
+ from udata.i18n import _, get_locale, language
8
8
  from udata.models import db
9
9
 
10
10
  from . import geoids
11
+ from .constants import ADMIN_LEVEL_MIN, ADMIN_LEVEL_MAX, BASE_GRANULARITIES
11
12
 
12
13
 
13
- __all__ = (
14
- 'GeoLevel', 'GeoZone', 'SpatialCoverage', 'BASE_GRANULARITIES',
15
- 'spatial_granularities',
16
- )
17
-
18
-
19
- BASE_GRANULARITIES = [
20
- ('poi', L_('POI')),
21
- ('other', L_('Other')),
22
- ]
23
-
24
- ADMIN_LEVEL_MIN = 1
25
- ADMIN_LEVEL_MAX = 110
14
+ __all__ = ('GeoLevel', 'GeoZone', 'SpatialCoverage', 'spatial_granularities')
26
15
 
27
16
 
28
17
  class GeoLevel(db.Document):
@@ -1,9 +1,7 @@
1
1
  from udata.auth.helpers import current_user_is_admin_or_self
2
2
  from udata.api import api, fields, base_reference
3
3
 
4
- from .models import AVATAR_SIZES
5
-
6
- BIGGEST_AVATAR_SIZE = AVATAR_SIZES[0]
4
+ from .constants import BIGGEST_AVATAR_SIZE
7
5
 
8
6
 
9
7
  user_ref_fields = api.inherit('UserReference', base_reference, {
@@ -0,0 +1,2 @@
1
+ AVATAR_SIZES = [500, 200, 100, 32, 25]
2
+ BIGGEST_AVATAR_SIZE = AVATAR_SIZES[0]
udata/core/user/forms.py CHANGED
@@ -2,7 +2,7 @@ from udata.forms import ModelForm, fields, validators
2
2
  from udata.i18n import lazy_gettext as _
3
3
  from udata.models import User
4
4
 
5
- from .models import AVATAR_SIZES
5
+ from .constants import AVATAR_SIZES
6
6
 
7
7
 
8
8
  __all__ = ('UserProfileForm', 'UserProfileAdminForm')
udata/core/user/models.py CHANGED
@@ -19,10 +19,10 @@ from udata.i18n import lazy_gettext as _
19
19
  from udata.models import db, WithMetrics, Follow
20
20
  from udata.core.discussions.models import Discussion
21
21
  from udata.core.storages import avatars, default_image_basename
22
+ from .constants import AVATAR_SIZES
22
23
 
23
24
  __all__ = ('User', 'Role', 'datastore')
24
25
 
25
- AVATAR_SIZES = [500, 200, 100, 32, 25]
26
26
 
27
27
 
28
28
  # TODO: use simple text for role
@@ -25,9 +25,8 @@ from udata.core.spatial.factories import SpatialCoverageFactory
25
25
  from udata.core.topic.factories import TopicFactory
26
26
  from udata.core.user.factories import AdminFactory, UserFactory
27
27
  from udata.i18n import gettext as _
28
- from udata.models import (LEGACY_FREQUENCIES, RESOURCE_TYPES,
29
- UPDATE_FREQUENCIES, CommunityResource, Dataset,
30
- Follow, Member, db)
28
+ from udata.models import CommunityResource, Dataset, Follow, Member, db
29
+ from udata.core.dataset.constants import LEGACY_FREQUENCIES, RESOURCE_TYPES, UPDATE_FREQUENCIES
31
30
  from udata.tags import MAX_TAG_LENGTH, MIN_TAG_LENGTH
32
31
  from udata.tests.features.territories import create_geozones_fixtures
33
32
  from udata.tests.helpers import assert200, assert404, assert204
@@ -10,7 +10,8 @@ from udata.core.user.factories import AdminFactory
10
10
  from udata.core.reuse.factories import ReuseFactory
11
11
  from udata.core.organization.factories import OrganizationFactory
12
12
  from udata.core.user.factories import UserFactory
13
- from udata.models import Reuse, Follow, Member, REUSE_TOPICS, REUSE_TYPES
13
+ from udata.models import Reuse, Follow, Member
14
+ from udata.core.reuse.constants import REUSE_TOPICS, REUSE_TYPES
14
15
  from udata.utils import faker
15
16
 
16
17
  from udata.tests.helpers import (
@@ -3,12 +3,11 @@ from datetime import datetime, timedelta
3
3
  import pytest
4
4
  import requests
5
5
  from flask import current_app
6
- from mongoengine import post_save, ValidationError
6
+ from mongoengine import post_save
7
7
 
8
8
  from udata.app import cache
9
- from udata.models import (
10
- db, Dataset, License, LEGACY_FREQUENCIES, ResourceSchema, UPDATE_FREQUENCIES, Schema, FieldValidationError
11
- )
9
+ from udata.models import db, Dataset, License, ResourceSchema, Schema
10
+ from udata.core.dataset.constants import LEGACY_FREQUENCIES, UPDATE_FREQUENCIES
12
11
  from udata.core.dataset.models import HarvestDatasetMetadata, HarvestResourceMetadata
13
12
  from udata.core.dataset.factories import (
14
13
  ResourceFactory, DatasetFactory, CommunityResourceFactory, LicenseFactory, ResourceSchemaMockData
@@ -4,7 +4,8 @@ from udata.core.dataset.factories import DatasetFactory, HiddenDatasetFactory, O
4
4
  from udata.core.reuse.factories import VisibleReuseFactory
5
5
  from udata.harvest.tests.factories import HarvestSourceFactory
6
6
  from udata.core.site.factories import SiteFactory
7
- from udata.models import Badge, PUBLIC_SERVICE
7
+ from udata.models import Badge
8
+ from udata.core.organization.constants import PUBLIC_SERVICE
8
9
 
9
10
 
10
11
  @pytest.mark.usefixtures('clean_db')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: udata
3
- Version: 7.0.7.dev28410
3
+ Version: 7.0.7.dev28426
4
4
  Summary: Open data portal
5
5
  Home-page: https://github.com/opendatateam/udata
6
6
  Author: Opendata Team
@@ -139,6 +139,7 @@ It is collectively taken care of by members of the
139
139
  ## Current (in progress)
140
140
 
141
141
  - Topic: add filters in API [#3007](https://github.com/opendatateam/udata/pull/3007)
142
+ - Move constants outside `models.py` files to `constants.py` [#3001](https://github.com/opendatateam/udata/pull/3001)
142
143
 
143
144
  ## 7.0.6 (2024-03-29)
144
145
 
@@ -67,7 +67,7 @@ udata/core/badges/permissions.py,sha256=5jFKFG4OlVp0pL0xSa7AGO0Ttn0QMsy9xEY2jTfK
67
67
  udata/core/badges/signals.py,sha256=T12kgKO1lmIbdXlKnRmedYRnJzC2PZIMkrtcA1U2mNo,237
68
68
  udata/core/badges/tasks.py,sha256=LA1Sd0B0uUa6OANqmx0t-kDNK99uGePwwtilsdj9Evw,431
69
69
  udata/core/badges/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
- udata/core/badges/tests/test_commands.py,sha256=yodBaD426tkGAc-HTAWl2v2wzwQ6WNoa-V6VtLdJk1Q,1319
70
+ udata/core/badges/tests/test_commands.py,sha256=BcfB0eo8ICCF5E0Z2ryu0pmp6istFZEt56mZkJMQTPo,1364
71
71
  udata/core/badges/tests/test_model.py,sha256=vM0j4mf0oj7tYGb9OkTK6wOx2uct8vj3C-7pM0jdn78,4929
72
72
  udata/core/contact_point/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
73
  udata/core/contact_point/api.py,sha256=PyurW-Je4iRJlagyvDOkIhp_xINHqghNIiHjtqQTL0I,1918
@@ -78,29 +78,31 @@ udata/core/contact_point/models.py,sha256=sazF_oCe-Vdm-EQdQ6TfcHqmt11rKo36FT88ZX
78
78
  udata/core/dataset/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
79
  udata/core/dataset/actions.py,sha256=3pzBg_qOR-w7fwPpTOKUHXWC9lkjALbOn1UQFmmT-s0,1199
80
80
  udata/core/dataset/activities.py,sha256=qQnHNL0hOB1IGtQl7JsnVOiUsWT0gm-pts9uDyR3bvU,1536
81
- udata/core/dataset/api.py,sha256=UD9O_S3vO1kmrJzbcKuO88lcW8CYR2D66JLeYMUHjWk,28727
82
- udata/core/dataset/api_fields.py,sha256=u26bdsTwnSLkLpXcF068QwqeN69PvXuUtvvt1PUDnTE,14358
83
- udata/core/dataset/apiv2.py,sha256=3vz7t-T_2HXmqBKPxLYGoVHn8m95ikMEd8J8gfVUmLI,15737
84
- udata/core/dataset/commands.py,sha256=UO769j5PBjLNRDgy5pBEZVRgwuTBBhbwkhwmx4CEgdo,3673
81
+ udata/core/dataset/api.py,sha256=2vs6wbIhc1fN4mCZ88nK7kM5oQ9CZ5OwQXrSwc57Z8I,28750
82
+ udata/core/dataset/api_fields.py,sha256=6gSj6GP_PNQtsIcbLDMjC56GPNOtlm3IL_OlNGRIG2E,14335
83
+ udata/core/dataset/apiv2.py,sha256=XzEwtmC53Mw0mq8NEMCD2cN52pCmrUkPu0adUj4wGyw,15751
84
+ udata/core/dataset/commands.py,sha256=dbK7gMYH4G6pOPiYtmL3yomzg5MGqTaG97_UM9Smu_k,3712
85
+ udata/core/dataset/constants.py,sha256=Twml-I5mGiIdTkiDV1D4bXqi_TcNhcEc-QFxorUKHM4,3138
85
86
  udata/core/dataset/csv.py,sha256=d6JMuvlov_vR7EN10rJa6Q03Il0PfbzMTHQIud5H8qg,3240
86
87
  udata/core/dataset/events.py,sha256=DI71VfRc1eDTtgWQ3TJx5gtUw2MO0O_CVLCKLq0OIF0,3207
87
88
  udata/core/dataset/exceptions.py,sha256=uI_NvZRZMr_MtYQBYdLD8tk-BIUeDDfMMcrWwqV7mi8,494
88
89
  udata/core/dataset/factories.py,sha256=_sAW0FeEPC5bIKVCnjxnWmKBNU5jRss1AjVaQaMi8Lo,2737
89
- udata/core/dataset/forms.py,sha256=auVYxLrPMdtvf2uhgEpJviHiQOSfLpBJdpZ3dXwcjNs,6154
90
- udata/core/dataset/models.py,sha256=T9dBPoeex6ohQqPcDKxwAb6GhqGN0rED7Vjw6MLDz2s,39461
90
+ udata/core/dataset/forms.py,sha256=kICGBzoTal_ipXw9DqhnOWKQK8x7scQI9mEe0JGMt9g,6181
91
+ udata/core/dataset/models.py,sha256=E_n4E6f7_XUzovHs9KonwhO3cDUKjgenH_01_j_gsUk,36425
91
92
  udata/core/dataset/permissions.py,sha256=3F2J7le3_rEYNhh88o3hSRWHAAt01_yHJM6RPmvCrRo,1090
92
93
  udata/core/dataset/preview.py,sha256=puPKT3fBD7ezAcT6owh0JK1_rGNDFZOqgT223qGn3LY,2597
93
- udata/core/dataset/rdf.py,sha256=pwYQLzpWXAZWThOMVx70pusTb7SzLgk7wh_9-ldPFAY,22808
94
- udata/core/dataset/search.py,sha256=GAdXBI8RhBXPUxd9Mp-44QB-Evwk5Be5XZZJ64T8bQQ,5282
94
+ udata/core/dataset/rdf.py,sha256=oQqVpDvDCQKsfp5LKlIXACxLg89LpA2ydbkICxZCvT0,22830
95
+ udata/core/dataset/search.py,sha256=Ca23ljX7TZiKZKiAZQIH5xwS2tjXQcTDzieAJd-E22c,5314
95
96
  udata/core/dataset/signals.py,sha256=TK6dfrOUitZZkGGOh6XmhYqYvIjzZpI70JTLV4k-JRM,161
96
- udata/core/dataset/tasks.py,sha256=VB1sQ6Fwbax46IRLGyZUDPGgGOWBYrzAlKzV3npDCyM,8412
97
+ udata/core/dataset/tasks.py,sha256=UYdm_O9hA0yo7cCNQFvZE9pGzUshkc3Wr4Gpel2aupU,8434
97
98
  udata/core/discussions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
99
  udata/core/discussions/actions.py,sha256=l8FaRpNdnwq5M7IYA9lh1qhhTlk2XOnYkgt0dLJpowU,789
99
100
  udata/core/discussions/api.py,sha256=YlLxVA3GFcek8Q9Qb-R8KbNza2Ia3a9zNTU9PGewims,8554
101
+ udata/core/discussions/constants.py,sha256=nbZgXESpg0TykIGPxW8xUtHtk7TwQoyOL0Ky4U4B7c8,27
100
102
  udata/core/discussions/factories.py,sha256=NQd_tD0Izrm67uO5HuuClmluteACrRd9PHrb2IkQ0P0,350
101
- udata/core/discussions/forms.py,sha256=PJ1z_q2erqG3aoRrbITKeUeuHcUO-iiL1pp7WU2lnb8,806
103
+ udata/core/discussions/forms.py,sha256=daDc8vPDhaXjiEyniugiRC6pyv6OsflgIyO-KoAn6i8,828
102
104
  udata/core/discussions/metrics.py,sha256=qtgyDhM1aPgh8bGU-h-962EKR3J44imC155JVi6jvJI,362
103
- udata/core/discussions/models.py,sha256=MTnUgcQgcX1K7GscYMvWdiS7EcTUbFljxM0QGoPNfUE,3391
105
+ udata/core/discussions/models.py,sha256=zU4EldaJtE-9pGlabetIlOFF_y3Kag2GxpNtwmk4jQ4,3361
104
106
  udata/core/discussions/notifications.py,sha256=1lsu8WyyOL4bdt0lx6IW5wTxmQ5gS_7FoncN53g3ToQ,927
105
107
  udata/core/discussions/permissions.py,sha256=q3tXNuNmuXCvZhKyudROcwXF53l-IeDR3pfKSh_hIL0,636
106
108
  udata/core/discussions/signals.py,sha256=zjuF-TiFwu9U_RcgZtHB2Z3W4oBx5hVZy6CCAl5Ekug,543
@@ -125,39 +127,42 @@ udata/core/metrics/signals.py,sha256=Xs_k-9lWzsoZU5Joli-41FNgvIVvbAejkjSFB6DHxh0
125
127
  udata/core/metrics/tasks.py,sha256=Z7La3-zPB5j6qJoPKr_MgjNZhqscZCmNLPa711ZBkdY,797
126
128
  udata/core/organization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
129
  udata/core/organization/activities.py,sha256=fOBujmduVoTxJph2C6Z4qHeQHOaJT9IsZooEDCWC4BA,1140
128
- udata/core/organization/api.py,sha256=dqXecBhVMvLb2xUcqno25oX1DwBDKg2qxjItDlvEtNQ,17429
129
- udata/core/organization/api_fields.py,sha256=x1UXdRnwNzJ4veyJJc-S5MxbnoArAM7rrUn1OIZXo7E,5426
130
+ udata/core/organization/api.py,sha256=kqcjsus3Mnso5dxnMACYIDWhSuXBTCVgYctFa7rhgT8,17451
131
+ udata/core/organization/api_fields.py,sha256=5NEePyZ515DqpDVHf1HWQJhUXsb8H74LVywlAC5_I44,5400
130
132
  udata/core/organization/apiv2.py,sha256=VAU_y9Zz-VhBgS-LWVbGOEZdSt3b44nZd5bzTV2wU8g,3206
131
133
  udata/core/organization/commands.py,sha256=FaSYxyWfQDR5tWvrAXmwcF2VMREOC13XTK8DD4vp_sY,1623
134
+ udata/core/organization/constants.py,sha256=XGVnItrJTG0hcVKRK5sPmx44KHC9r_EKtj_y0MmBt0o,563
132
135
  udata/core/organization/csv.py,sha256=x0afMfhWYvx_karwuw5jXqBhMbzkrsiEuAq1wTVurZI,1491
133
136
  udata/core/organization/factories.py,sha256=5BABVcDhEChRhJsDfCDm8WyJG4l9j3H1_OFZa3VtlVs,646
134
- udata/core/organization/forms.py,sha256=SLREg-Sfza7uQcFEOqfUBhCbP2U8Ek2gWX2xe5EUWpA,3540
137
+ udata/core/organization/forms.py,sha256=JXXv4tQGbIbICti7RXLVZdnc6VujATmLhDrHIsFxBME,3550
135
138
  udata/core/organization/metrics.py,sha256=nQiRscXRgpuzpfg5nNE6-kyJqk36KdRXKD_G5MmiJok,750
136
- udata/core/organization/models.py,sha256=gmsAtJQerGQZ6fNG3klDIe7NHL_LC31SOP3Itq6aP8Q,8750
139
+ udata/core/organization/models.py,sha256=Y7iFRQY6m87nKZNUMK9qsZJXZ6xzA6t2q_YxAm8K7Dg,8315
137
140
  udata/core/organization/notifications.py,sha256=j-2LIHZ5y5QuVietWAWOrAqf4v1HMCtSDZ0w7V-z_1c,763
138
141
  udata/core/organization/permissions.py,sha256=cNIPiPgXVW2hvKqbuKHA_62tX2xaT8jiVJ3BEfnsHn0,1299
139
142
  udata/core/organization/rdf.py,sha256=ZSoxyZDj_5g6hv7lbTIy6bIW3xwvQy27rWNgJwtZ6LE,1762
140
143
  udata/core/organization/search.py,sha256=8DdHqKv6jmLibfts667BoUjc0YrmnM8V4lBJnyRIaE0,2127
141
144
  udata/core/organization/signals.py,sha256=dm2fVzwX3TZV_c5qDx61glcWKgb7TSx2JaaMfBG0Q6o,488
142
- udata/core/organization/tasks.py,sha256=feZoRSGH9zSny3g6BsihPqhnn9kPC041UgP0lsr8L4E,5766
145
+ udata/core/organization/tasks.py,sha256=UKW1dDNUxuLPPwruayYujJJTcgfPx7PFfqW6i9wQxYE,5788
143
146
  udata/core/post/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
144
147
  udata/core/post/api.py,sha256=eH9dw8u7_Tx6FP19Dvv91nyRGHSWKPR1pTzSkVXIeA4,5369
148
+ udata/core/post/constants.py,sha256=ibocNUJ1s1mw88QCrKz8n1DSkOBnWuSqo7Y5-Yd75kg,196
145
149
  udata/core/post/factories.py,sha256=0aXYbf11Rl0KJyntNE0LjPaUnpvr4YqvqdTPfvGlyvM,619
146
- udata/core/post/forms.py,sha256=PKnuCHxjuDLwSZjYO2oxFhEPQ-9BA3UusIxNlYb8p7M,946
147
- udata/core/post/models.py,sha256=bfdvXreSaeUHBiy1RrDr6_a3L_PtwdjOwIIxexrZUpE,2021
150
+ udata/core/post/forms.py,sha256=ff1efEcFkPRVMWA9YtvCAx0Msy69I7P34WgZsh_jK1E,968
151
+ udata/core/post/models.py,sha256=7OyMCIiQzj2OXsYdQon1_HOyiA06nXj1VAqbNVf5EK4,1910
148
152
  udata/core/post/permissions.py,sha256=uofU0TehhOGYyUoRXf3wuy816_D3xwMmaJbDvV336sw,83
149
153
  udata/core/post/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
154
  udata/core/post/tests/test_api.py,sha256=LSJQQDUtUVdpwZNpnJaX3yNQYyjkjTTyO7mHnR5DR_I,3948
151
155
  udata/core/reuse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
156
  udata/core/reuse/activities.py,sha256=rdl_CR3RJPBMonsHYmPnPVDvCYozNdXN2H1ILrTItNQ,1417
153
- udata/core/reuse/api.py,sha256=PUDfEKJD6MrNBQwu5q39ikIXs0mYKkzjI_-CBq9lHFc,10187
154
- udata/core/reuse/api_fields.py,sha256=tBzRduvfuqM0_t_9uMoCmPnzQp0MLDEozh01tBcwdl0,4865
157
+ udata/core/reuse/api.py,sha256=5z5tH7debD_rMmineB-fQ-lNKpZySA5u7TL7dd5hlag,10209
158
+ udata/core/reuse/api_fields.py,sha256=NF0bSKWepyNzzKtG2MibflZrqNwf1FPtNqjpbTSAONY,4868
155
159
  udata/core/reuse/apiv2.py,sha256=Op4f6pSMdUuLcCwNadojJfHfU6UYohrzSxlJbRn3wHc,824
160
+ udata/core/reuse/constants.py,sha256=pbCR1xX9v4tdewlOx8bgNmy1-5V9OXIbpNjJivnQ--A,1215
156
161
  udata/core/reuse/csv.py,sha256=k-syWGC7hJnqfaOtPRFFn8P8skCDcrnMWNWbJ3fUyXo,727
157
- udata/core/reuse/factories.py,sha256=JsV7arI2IteRpI6C2OpB4JnahhO5wHtQW1xFZG1UO4k,840
158
- udata/core/reuse/forms.py,sha256=cRkN7fUbR7issmkSDU0tTcvHXvPFsyCFol69q__nPl8,1764
162
+ udata/core/reuse/factories.py,sha256=lTABDzgyxDhgTQhjsJb54B0TtTyu2uXlcN_1fU29G_8,862
163
+ udata/core/reuse/forms.py,sha256=UI3dYNgx9r9QxN-f2voxIXE_Dsx7lpLxuOsmc0VtXj4,1805
159
164
  udata/core/reuse/metrics.py,sha256=uh0CxErJ8OxrQvajCSfKvQRbhB9rXKzTZ1AhyEMQvP0,161
160
- udata/core/reuse/models.py,sha256=JbqN9J7pN1DSBjYrF0m2iWZh8PTKoeCAl3-i5dhU5PU,6988
165
+ udata/core/reuse/models.py,sha256=qBbvgxPiLhgizpJ5XVFCixWjRub3NY_sg3WsQehTZZ0,5861
161
166
  udata/core/reuse/permissions.py,sha256=-7lq32HuhIswR-yGv3Mp02cuEdG0YNam4VB2OnZZVEs,560
162
167
  udata/core/reuse/search.py,sha256=I3FX-9YP_cEqw5GFwFv2iqLZExeaQXsak13RMSCN7t8,2886
163
168
  udata/core/reuse/signals.py,sha256=2vv668u8miJ9t6H-FwRgXcWwsYMQem3oLNXp36rKtno,155
@@ -169,20 +174,22 @@ udata/core/site/forms.py,sha256=lPnxm0MDhK7_ORzPgJLcCAPMj59hDrJ80gwRSW-jtIo,469
169
174
  udata/core/site/models.py,sha256=96IZHtPaMio7VMNCdP1Km_SL1GlMErwBuDqgUXfzKVY,5981
170
175
  udata/core/site/rdf.py,sha256=ONKksnuZTFH9Hdd6BE42a1769zJynna68rG-M30PAZQ,1858
171
176
  udata/core/spam/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
172
- udata/core/spam/api.py,sha256=ehYtb6Dei1eZYcGbWhpSUDphZ7TMRZDjl4Zv-snZ5cA,1671
173
- udata/core/spam/fields.py,sha256=tzS2PSJrV0ebmp3X2Y0GUwUL8EVd0NtuUTTWq3Af-sM,307
174
- udata/core/spam/models.py,sha256=FQ7W36yJhQZa-uOxggJj8HtNuNxM4uW_8M1xW_u6uTQ,8032
177
+ udata/core/spam/api.py,sha256=8tVRPorw56kxgN64kme5nLkUfh8Gai9QyqT8aNQn9Xo,1674
178
+ udata/core/spam/constants.py,sha256=M-wvYlcFnpUDortccIKFHWZ45vbNuMPWSvqKm2itn4w,143
179
+ udata/core/spam/fields.py,sha256=ppazY9bGnz7mujmDndbxG3pPG_1HDUJCbIufxyD1UNQ,310
180
+ udata/core/spam/models.py,sha256=u07LqZbxyeGq68UVtpZzEM9ihqOp52jIX8oJwuVGK5Q,7969
175
181
  udata/core/spam/signals.py,sha256=4VVLyC2I39LFAot4P56nHzY0xumjMBDz_N0Ff_kgBd0,159
176
182
  udata/core/spam/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
177
- udata/core/spam/tests/test_spam.py,sha256=IuSRVoVCLBjJuoCXnPZx8XjtRyt5q2LrSBtIp8Hovg4,702
183
+ udata/core/spam/tests/test_spam.py,sha256=CBXXnyKMlMFBpFLzSVL6yG8nZ8lV9RAElxWe4XFVdGA,677
178
184
  udata/core/spatial/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
185
  udata/core/spatial/api.py,sha256=tlApg3JpqbO6CwEwp1LzZ1hyPQreVEgF3H5yrcAPE74,5848
180
186
  udata/core/spatial/api_fields.py,sha256=ymGK3FyE2KNlASOU5GiPgZGeBjjOqnOyCOcRCbuw3D8,2629
181
187
  udata/core/spatial/commands.py,sha256=qdJ4mUg3NUTrGx6L5MKPh1usvxmeCn8xMCZNGKyjWYE,6914
188
+ udata/core/spatial/constants.py,sha256=u_4OwAAVYqT0VX6nw_Hc4wIRUPcYww19EFJcnWuMZNo,146
182
189
  udata/core/spatial/factories.py,sha256=GxUU8nRtSoGPw2m3Q-al0PYps2oSnlqC-bM7Eeu14rk,3288
183
190
  udata/core/spatial/forms.py,sha256=tXlYKge5Rc8L8pOjfUo1-9howgVJZDAh7q8xTIlbBww,3218
184
191
  udata/core/spatial/geoids.py,sha256=UqCto4dtQYPXOxyG7sx_0npzM6yvId40ngw3eAlmioQ,1159
185
- udata/core/spatial/models.py,sha256=WA1jXgw6LYU_5uRrB8WXDIYYFZl4mzbRnJ5_VMkobRA,5105
192
+ udata/core/spatial/models.py,sha256=SSCnNtk7xyRx7n2v118rn4aD5aUvwvNbxlzk0XUCl6Y,5022
186
193
  udata/core/spatial/translations.py,sha256=7BjZAMPObm1fwM5U_wnrlpcG-1FtMoS6Z5E3h3Y3sog,533
187
194
  udata/core/spatial/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
188
195
  udata/core/spatial/tests/test_api.py,sha256=BySPgLpHvWs3vBIX2_7vJkuqfrFBIsTHtdg6PXOsE_U,10171
@@ -211,12 +218,13 @@ udata/core/topic/permissions.py,sha256=RtFPPlxuU_Bv7ip6LDO4AoPrKFnIOEs9cCMXaSSmE
211
218
  udata/core/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
212
219
  udata/core/user/activities.py,sha256=AMRbYgum8uJXAS3L-ddQN-xKtKRvsmesDZ0ItBY_jS0,2799
213
220
  udata/core/user/api.py,sha256=QQmTsUfm_RB698xkRPSSZduGPtvMM1WKGzupdUICFw4,12738
214
- udata/core/user/api_fields.py,sha256=1wIRNnux_MsaJnIAAJW79fIhoOZLc2YDRqfd_SDB-Ls,5081
221
+ udata/core/user/api_fields.py,sha256=aWw-vaLy5KqE8vr6HtWzoAbzHI8aoi9BV-m-oY7FJfo,5052
215
222
  udata/core/user/commands.py,sha256=DlNBFaojhhPHH4kZazp0NMwYWnzPZXBba_vqH-cfR1U,3156
223
+ udata/core/user/constants.py,sha256=aTluhTR2RGZ_cdG7-mkEoT5Ndbg8BNUwwzCOld0aLMY,77
216
224
  udata/core/user/factories.py,sha256=JiY-AghapelwhAVAExiUEHS1odyIu4PppWuhtZnkjBY,790
217
- udata/core/user/forms.py,sha256=3VmR3GE9gJQltMTWErh5YfAdw1NmEtSBnnR1oLi0K1Q,989
225
+ udata/core/user/forms.py,sha256=XKhZFiXtTp_o0J4feLI2RQAjsmrf2CsyRQJ8n_gFVVg,992
218
226
  udata/core/user/metrics.py,sha256=sHw76gkprLp0oKWJf1uQqShBbgC43lZm7A5OSCuueAw,895
219
- udata/core/user/models.py,sha256=THwBeGHqADTDyuP6Ym5UKzD8vxRlvcH16YmkC6cvzeg,9506
227
+ udata/core/user/models.py,sha256=VTIdPE4yROvcIUFpEd6GH0IA_v36pACWqFo3i1Ko-YM,9503
220
228
  udata/core/user/permissions.py,sha256=unBqNHcTAFYpN_kn0FTDLOYMPyWVeOvW7TQyeJkUI-M,436
221
229
  udata/core/user/rdf.py,sha256=pE0ISNBgQ3AnbtuzCE91XQmi5Cq_S0cMehbaqZFww7Q,867
222
230
  udata/core/user/tasks.py,sha256=drBhjauaydPcZb7y4ton6PhlXd5rmmZe5EbPWCzELkA,317
@@ -571,12 +579,12 @@ udata/tests/api/__init__.py,sha256=Tz_WigHLDlnJNKOKzEAnJswkKiLtHlIpCE54-wgocgM,9
571
579
  udata/tests/api/test_auth_api.py,sha256=3Zhn2A29poZIcCJ_R9_-LkR3xOFUTw1aTquiZVXQ2F0,20306
572
580
  udata/tests/api/test_base_api.py,sha256=DRX5nuFIj51GFmMIAxUzoW1yiq1apNgr1vS4U4agzeg,2319
573
581
  udata/tests/api/test_contact_points.py,sha256=MJm8B06iaUqIZCqxll3NViFwUCxwqZZ4u9e9s1h8MgU,1056
574
- udata/tests/api/test_datasets_api.py,sha256=Wdy0HfWKVtMBhMA9OJVs3WXOpmVi_dKlx1-OoekKNw0,81204
582
+ udata/tests/api/test_datasets_api.py,sha256=X4Mp4HZJ6CNkmsl49piIHY4ZpZZht18faC3ReoqakGc,81190
575
583
  udata/tests/api/test_fields.py,sha256=OW85Z5MES5HeWOpapeem8OvR1cIcrqW-xMWpdZO4LZ8,1033
576
584
  udata/tests/api/test_follow_api.py,sha256=0h54P_Dfbo07u6tg0Rbai1WWgWb19ZLN2HGv4oLCWfg,3383
577
585
  udata/tests/api/test_me_api.py,sha256=8OthqVYQKZrFoGuJ7zAvoLJx1IclPNzPdD5Tnzmh3rM,14163
578
586
  udata/tests/api/test_organizations_api.py,sha256=HxeTqP14wlWGaQt4fpQljuRy98HWnmL1QelcxbJDmV0,32704
579
- udata/tests/api/test_reuses_api.py,sha256=gQ-o4JXK2S6z2yW13-i8e81pCdr9j2yyM1KinPbkc5g,16971
587
+ udata/tests/api/test_reuses_api.py,sha256=GSoZ6SBRdMg6o0xKSQWtCSfvzqz_vZxERU567Rq1_GY,17009
580
588
  udata/tests/api/test_swagger.py,sha256=tLg452rCD5Q0AgFXOVZKMM6jGiWwC5diX5PxbdYni0o,760
581
589
  udata/tests/api/test_tags_api.py,sha256=xSIx_x5gqKz6BJCXKEsTqA_CR4BF1nG5NxEyfp9dy0o,2579
582
590
  udata/tests/api/test_topics_api.py,sha256=RItjoO7g2o2BZ34cOHJvPoSus_jIe-AYHFrX_iaHQ4o,9322
@@ -596,7 +604,7 @@ udata/tests/dataset/test_csv_adapter.py,sha256=2r5z4FuqG9pWgUyfDUw8afQYK5nIKE8XX
596
604
  udata/tests/dataset/test_dataset_actions.py,sha256=4_0F_TCSCfHpzqDt659c8hG4GpkWjVtmT4bAPgmE4B8,723
597
605
  udata/tests/dataset/test_dataset_commands.py,sha256=TAgVdimIcBVmcSNKXKXbhmCGYRo8Keh_InBNiS6UlkM,802
598
606
  udata/tests/dataset/test_dataset_events.py,sha256=zt6F4j_vOBfMxDW6vBVQ5PGwr0d4s6LGw0cGkt9BlvI,2835
599
- udata/tests/dataset/test_dataset_model.py,sha256=m-LtxaxNlXwNxtG_yoBYZ3lu6DdOR82ms4TDlK1a5KY,29776
607
+ udata/tests/dataset/test_dataset_model.py,sha256=Mgq_qFh7pY8QFDke9HWezXTO6dqjd8qoRI8i01Qan-o,29769
600
608
  udata/tests/dataset/test_dataset_rdf.py,sha256=0lyHiP9eZdIHUkvgQQ6Dw_LMaXX2SHTxiJdLIorizaw,29389
601
609
  udata/tests/dataset/test_dataset_tasks.py,sha256=BN5qcvq6753WcpPOZd7vL1iIEW36ZBZrb2Lszb4eWEM,2283
602
610
  udata/tests/dataset/test_resource_preview.py,sha256=q1C9W9dO3nLWaR3-hpUOPYW17hCmQ3raty9Bl4FX3hg,3947
@@ -639,7 +647,7 @@ udata/tests/search/test_query.py,sha256=wtgC4rkaxe8vIaWOcANZ1yFFkEKTdNHj2yiTaYI-
639
647
  udata/tests/search/test_results.py,sha256=yjeqxNKVbjMxxvUsZb7csfU3wsV_YNjBDnfYRw5QN-s,1998
640
648
  udata/tests/site/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
641
649
  udata/tests/site/test_site_api.py,sha256=XIjRH-iiwKdwmX145bQflxOatfIChi5RLikIMwJSbjQ,2276
642
- udata/tests/site/test_site_metrics.py,sha256=z0_kLpV5SNUBgvR5y3T_uv1m2xD9aBDdQc6tjI6ARXw,2218
650
+ udata/tests/site/test_site_metrics.py,sha256=Sn9dQORwe-fvoyA7ZAnF63Cq5CwUGq1myH8Xe0EtfDA,2263
643
651
  udata/tests/site/test_site_model.py,sha256=nAx9JjEKdfjdw1Kj5Rs7P5FEePoATtCuOYPiSXEnVD0,1313
644
652
  udata/tests/site/test_site_rdf.py,sha256=M360uq2A6hl1WhmyRmRjvzuSqz_YFIUQNPR4vqWnYnE,9687
645
653
  udata/tests/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -664,9 +672,9 @@ udata/translations/pt/LC_MESSAGES/udata.mo,sha256=zCVMB-a4-mLM1jNyYMk58rgVRaVIwQ
664
672
  udata/translations/pt/LC_MESSAGES/udata.po,sha256=avfWczvlLBKSohyB55-4TLmUGMU_Rze4XmAo4OTk2v0,43513
665
673
  udata/translations/sr/LC_MESSAGES/udata.mo,sha256=ScuqdpaV4y1ZIpBAEfxeaKdzkyGZL0mJmKMoG6w0iRQ,28553
666
674
  udata/translations/sr/LC_MESSAGES/udata.po,sha256=QpgEXh1eHjztPa7oNLXd_sds1DC95A-STTtZyTE4m-E,50093
667
- udata-7.0.7.dev28410.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
668
- udata-7.0.7.dev28410.dist-info/METADATA,sha256=7NK8ToqaPXg_f86QirGUcBqziTraRBZ8oWQLcYmStyE,120234
669
- udata-7.0.7.dev28410.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
670
- udata-7.0.7.dev28410.dist-info/entry_points.txt,sha256=3SKiqVy4HUqxf6iWspgMqH8d88Htk6KoLbG1BU-UddQ,451
671
- udata-7.0.7.dev28410.dist-info/top_level.txt,sha256=39OCg-VWFWOq4gCKnjKNu-s3OwFlZIu_dVH8Gl6ndHw,12
672
- udata-7.0.7.dev28410.dist-info/RECORD,,
675
+ udata-7.0.7.dev28426.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
676
+ udata-7.0.7.dev28426.dist-info/METADATA,sha256=jM0zNhnCckMsaLktRWBASo3c0izdaCtWWjM0tSAqCbc,120352
677
+ udata-7.0.7.dev28426.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
678
+ udata-7.0.7.dev28426.dist-info/entry_points.txt,sha256=3SKiqVy4HUqxf6iWspgMqH8d88Htk6KoLbG1BU-UddQ,451
679
+ udata-7.0.7.dev28426.dist-info/top_level.txt,sha256=39OCg-VWFWOq4gCKnjKNu-s3OwFlZIu_dVH8Gl6ndHw,12
680
+ udata-7.0.7.dev28426.dist-info/RECORD,,