udata 9.1.2.dev30355__py2.py3-none-any.whl → 9.1.2.dev30454__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of udata might be problematic. Click here for more details.
- tasks/__init__.py +109 -107
- tasks/helpers.py +18 -18
- udata/__init__.py +4 -4
- udata/admin/views.py +5 -5
- udata/api/__init__.py +111 -134
- udata/api/commands.py +45 -37
- udata/api/errors.py +5 -4
- udata/api/fields.py +23 -21
- udata/api/oauth2.py +55 -74
- udata/api/parsers.py +15 -15
- udata/api/signals.py +1 -1
- udata/api_fields.py +137 -89
- udata/app.py +58 -55
- udata/assets.py +5 -5
- udata/auth/__init__.py +37 -26
- udata/auth/forms.py +23 -15
- udata/auth/helpers.py +1 -1
- udata/auth/mails.py +3 -3
- udata/auth/password_validation.py +19 -15
- udata/auth/views.py +94 -68
- udata/commands/__init__.py +71 -69
- udata/commands/cache.py +7 -7
- udata/commands/db.py +201 -140
- udata/commands/dcat.py +36 -30
- udata/commands/fixtures.py +100 -84
- udata/commands/images.py +21 -20
- udata/commands/info.py +17 -20
- udata/commands/init.py +10 -10
- udata/commands/purge.py +12 -13
- udata/commands/serve.py +41 -29
- udata/commands/static.py +16 -18
- udata/commands/test.py +20 -20
- udata/commands/tests/fixtures.py +26 -24
- udata/commands/worker.py +31 -33
- udata/core/__init__.py +12 -12
- udata/core/activity/__init__.py +0 -1
- udata/core/activity/api.py +59 -49
- udata/core/activity/models.py +28 -26
- udata/core/activity/signals.py +1 -1
- udata/core/activity/tasks.py +16 -10
- udata/core/badges/api.py +6 -6
- udata/core/badges/commands.py +14 -13
- udata/core/badges/fields.py +8 -5
- udata/core/badges/forms.py +7 -4
- udata/core/badges/models.py +16 -31
- udata/core/badges/permissions.py +1 -3
- udata/core/badges/signals.py +2 -2
- udata/core/badges/tasks.py +3 -2
- udata/core/badges/tests/test_commands.py +10 -10
- udata/core/badges/tests/test_model.py +24 -31
- udata/core/contact_point/api.py +19 -18
- udata/core/contact_point/api_fields.py +21 -14
- udata/core/contact_point/factories.py +2 -2
- udata/core/contact_point/forms.py +7 -6
- udata/core/contact_point/models.py +3 -5
- udata/core/dataservices/api.py +26 -21
- udata/core/dataservices/factories.py +13 -11
- udata/core/dataservices/models.py +35 -40
- udata/core/dataservices/permissions.py +4 -4
- udata/core/dataservices/rdf.py +40 -17
- udata/core/dataservices/tasks.py +4 -3
- udata/core/dataset/actions.py +10 -10
- udata/core/dataset/activities.py +21 -23
- udata/core/dataset/api.py +321 -298
- udata/core/dataset/api_fields.py +443 -271
- udata/core/dataset/apiv2.py +305 -229
- udata/core/dataset/commands.py +38 -36
- udata/core/dataset/constants.py +61 -54
- udata/core/dataset/csv.py +70 -74
- udata/core/dataset/events.py +39 -32
- udata/core/dataset/exceptions.py +8 -4
- udata/core/dataset/factories.py +57 -65
- udata/core/dataset/forms.py +87 -63
- udata/core/dataset/models.py +336 -280
- udata/core/dataset/permissions.py +9 -6
- udata/core/dataset/preview.py +15 -17
- udata/core/dataset/rdf.py +156 -122
- udata/core/dataset/search.py +92 -77
- udata/core/dataset/signals.py +1 -1
- udata/core/dataset/tasks.py +63 -54
- udata/core/discussions/actions.py +5 -5
- udata/core/discussions/api.py +124 -120
- udata/core/discussions/factories.py +2 -2
- udata/core/discussions/forms.py +9 -7
- udata/core/discussions/metrics.py +1 -3
- udata/core/discussions/models.py +25 -24
- udata/core/discussions/notifications.py +18 -14
- udata/core/discussions/permissions.py +3 -3
- udata/core/discussions/signals.py +4 -4
- udata/core/discussions/tasks.py +24 -28
- udata/core/followers/api.py +32 -33
- udata/core/followers/models.py +9 -9
- udata/core/followers/signals.py +3 -3
- udata/core/jobs/actions.py +7 -7
- udata/core/jobs/api.py +99 -92
- udata/core/jobs/commands.py +48 -49
- udata/core/jobs/forms.py +11 -11
- udata/core/jobs/models.py +6 -6
- udata/core/metrics/__init__.py +2 -2
- udata/core/metrics/commands.py +34 -30
- udata/core/metrics/models.py +2 -4
- udata/core/metrics/signals.py +1 -1
- udata/core/metrics/tasks.py +3 -3
- udata/core/organization/activities.py +12 -15
- udata/core/organization/api.py +167 -174
- udata/core/organization/api_fields.py +183 -124
- udata/core/organization/apiv2.py +32 -32
- udata/core/organization/commands.py +20 -22
- udata/core/organization/constants.py +11 -11
- udata/core/organization/csv.py +17 -15
- udata/core/organization/factories.py +8 -11
- udata/core/organization/forms.py +32 -26
- udata/core/organization/metrics.py +2 -1
- udata/core/organization/models.py +87 -67
- udata/core/organization/notifications.py +18 -14
- udata/core/organization/permissions.py +10 -11
- udata/core/organization/rdf.py +14 -14
- udata/core/organization/search.py +30 -28
- udata/core/organization/signals.py +7 -7
- udata/core/organization/tasks.py +42 -61
- udata/core/owned.py +38 -27
- udata/core/post/api.py +82 -81
- udata/core/post/constants.py +8 -5
- udata/core/post/factories.py +4 -4
- udata/core/post/forms.py +13 -14
- udata/core/post/models.py +20 -22
- udata/core/post/tests/test_api.py +30 -32
- udata/core/reports/api.py +8 -7
- udata/core/reports/constants.py +1 -3
- udata/core/reports/models.py +10 -10
- udata/core/reuse/activities.py +15 -19
- udata/core/reuse/api.py +123 -126
- udata/core/reuse/api_fields.py +120 -85
- udata/core/reuse/apiv2.py +11 -10
- udata/core/reuse/constants.py +23 -23
- udata/core/reuse/csv.py +18 -18
- udata/core/reuse/factories.py +5 -9
- udata/core/reuse/forms.py +24 -21
- udata/core/reuse/models.py +55 -51
- udata/core/reuse/permissions.py +2 -2
- udata/core/reuse/search.py +49 -46
- udata/core/reuse/signals.py +1 -1
- udata/core/reuse/tasks.py +4 -5
- udata/core/site/api.py +47 -50
- udata/core/site/factories.py +2 -2
- udata/core/site/forms.py +4 -5
- udata/core/site/models.py +94 -63
- udata/core/site/rdf.py +14 -14
- udata/core/spam/api.py +16 -9
- udata/core/spam/constants.py +4 -4
- udata/core/spam/fields.py +13 -7
- udata/core/spam/models.py +27 -20
- udata/core/spam/signals.py +1 -1
- udata/core/spam/tests/test_spam.py +6 -5
- udata/core/spatial/api.py +72 -80
- udata/core/spatial/api_fields.py +73 -58
- udata/core/spatial/commands.py +67 -64
- udata/core/spatial/constants.py +3 -3
- udata/core/spatial/factories.py +37 -54
- udata/core/spatial/forms.py +27 -26
- udata/core/spatial/geoids.py +17 -17
- udata/core/spatial/models.py +43 -47
- udata/core/spatial/tasks.py +2 -1
- udata/core/spatial/tests/test_api.py +115 -130
- udata/core/spatial/tests/test_fields.py +74 -77
- udata/core/spatial/tests/test_geoid.py +22 -22
- udata/core/spatial/tests/test_models.py +5 -7
- udata/core/spatial/translations.py +16 -16
- udata/core/storages/__init__.py +16 -18
- udata/core/storages/api.py +66 -64
- udata/core/storages/tasks.py +7 -7
- udata/core/storages/utils.py +15 -15
- udata/core/storages/views.py +5 -6
- udata/core/tags/api.py +17 -14
- udata/core/tags/csv.py +4 -4
- udata/core/tags/models.py +8 -5
- udata/core/tags/tasks.py +11 -13
- udata/core/tags/views.py +4 -4
- udata/core/topic/api.py +84 -73
- udata/core/topic/apiv2.py +157 -127
- udata/core/topic/factories.py +3 -4
- udata/core/topic/forms.py +12 -14
- udata/core/topic/models.py +14 -19
- udata/core/topic/parsers.py +26 -26
- udata/core/user/activities.py +30 -29
- udata/core/user/api.py +151 -152
- udata/core/user/api_fields.py +132 -100
- udata/core/user/apiv2.py +7 -7
- udata/core/user/commands.py +38 -38
- udata/core/user/factories.py +8 -9
- udata/core/user/forms.py +14 -11
- udata/core/user/metrics.py +2 -2
- udata/core/user/models.py +68 -69
- udata/core/user/permissions.py +4 -5
- udata/core/user/rdf.py +7 -8
- udata/core/user/tasks.py +2 -2
- udata/core/user/tests/test_user_model.py +24 -16
- udata/cors.py +99 -0
- udata/db/tasks.py +2 -1
- udata/entrypoints.py +35 -31
- udata/errors.py +2 -1
- udata/event/values.py +6 -6
- udata/factories.py +2 -2
- udata/features/identicon/api.py +5 -6
- udata/features/identicon/backends.py +48 -55
- udata/features/identicon/tests/test_backends.py +4 -5
- udata/features/notifications/__init__.py +0 -1
- udata/features/notifications/actions.py +9 -9
- udata/features/notifications/api.py +17 -13
- udata/features/territories/__init__.py +12 -10
- udata/features/territories/api.py +14 -15
- udata/features/territories/models.py +23 -28
- udata/features/transfer/actions.py +8 -11
- udata/features/transfer/api.py +84 -77
- udata/features/transfer/factories.py +2 -1
- udata/features/transfer/models.py +11 -12
- udata/features/transfer/notifications.py +19 -15
- udata/features/transfer/permissions.py +5 -5
- udata/forms/__init__.py +5 -2
- udata/forms/fields.py +164 -172
- udata/forms/validators.py +19 -22
- udata/forms/widgets.py +9 -13
- udata/frontend/__init__.py +31 -26
- udata/frontend/csv.py +68 -58
- udata/frontend/markdown.py +40 -44
- udata/harvest/actions.py +89 -77
- udata/harvest/api.py +294 -238
- udata/harvest/backends/__init__.py +4 -4
- udata/harvest/backends/base.py +128 -111
- udata/harvest/backends/dcat.py +80 -66
- udata/harvest/commands.py +56 -60
- udata/harvest/csv.py +8 -8
- udata/harvest/exceptions.py +6 -3
- udata/harvest/filters.py +24 -23
- udata/harvest/forms.py +27 -28
- udata/harvest/models.py +88 -80
- udata/harvest/notifications.py +15 -10
- udata/harvest/signals.py +13 -13
- udata/harvest/tasks.py +11 -10
- udata/harvest/tests/factories.py +23 -24
- udata/harvest/tests/test_actions.py +136 -166
- udata/harvest/tests/test_api.py +220 -214
- udata/harvest/tests/test_base_backend.py +117 -112
- udata/harvest/tests/test_dcat_backend.py +380 -308
- udata/harvest/tests/test_filters.py +33 -22
- udata/harvest/tests/test_models.py +11 -14
- udata/harvest/tests/test_notifications.py +6 -7
- udata/harvest/tests/test_tasks.py +7 -6
- udata/i18n.py +237 -78
- udata/linkchecker/backends.py +5 -11
- udata/linkchecker/checker.py +23 -22
- udata/linkchecker/commands.py +4 -6
- udata/linkchecker/models.py +6 -6
- udata/linkchecker/tasks.py +18 -20
- udata/mail.py +21 -21
- udata/migrations/2020-07-24-remove-s-from-scope-oauth.py +9 -8
- udata/migrations/2020-08-24-add-fs-filename.py +9 -8
- udata/migrations/2020-09-28-update-reuses-datasets-metrics.py +5 -4
- udata/migrations/2020-10-16-migrate-ods-resources.py +9 -10
- udata/migrations/2021-04-08-update-schema-with-new-structure.py +8 -7
- udata/migrations/2021-05-27-fix-default-schema-name.py +7 -6
- udata/migrations/2021-07-05-remove-unused-badges.py +17 -15
- udata/migrations/2021-07-07-update-schema-for-community-resources.py +7 -6
- udata/migrations/2021-08-17-follow-integrity.py +5 -4
- udata/migrations/2021-08-17-harvest-integrity.py +13 -12
- udata/migrations/2021-08-17-oauth2client-integrity.py +5 -4
- udata/migrations/2021-08-17-transfer-integrity.py +5 -4
- udata/migrations/2021-08-17-users-integrity.py +9 -8
- udata/migrations/2021-12-14-reuse-topics.py +7 -6
- udata/migrations/2022-04-21-improve-extension-detection.py +8 -7
- udata/migrations/2022-09-22-clean-inactive-harvest-datasets.py +16 -14
- udata/migrations/2022-10-10-add-fs_uniquifier-to-user-model.py +6 -6
- udata/migrations/2022-10-10-migrate-harvest-extras.py +36 -26
- udata/migrations/2023-02-08-rename-internal-dates.py +46 -28
- udata/migrations/2024-01-29-fix-reuse-and-dataset-with-private-None.py +10 -8
- udata/migrations/2024-03-22-migrate-activity-kwargs-to-extras.py +6 -4
- udata/migrations/2024-06-11-fix-reuse-datasets-references.py +7 -6
- udata/migrations/__init__.py +123 -105
- udata/models/__init__.py +4 -4
- udata/mongo/__init__.py +13 -11
- udata/mongo/badges_field.py +3 -2
- udata/mongo/datetime_fields.py +13 -12
- udata/mongo/document.py +17 -16
- udata/mongo/engine.py +15 -16
- udata/mongo/errors.py +2 -1
- udata/mongo/extras_fields.py +30 -20
- udata/mongo/queryset.py +12 -12
- udata/mongo/slug_fields.py +38 -28
- udata/mongo/taglist_field.py +1 -2
- udata/mongo/url_field.py +5 -5
- udata/mongo/uuid_fields.py +4 -3
- udata/notifications/__init__.py +1 -1
- udata/notifications/mattermost.py +10 -9
- udata/rdf.py +167 -188
- udata/routing.py +40 -45
- udata/search/__init__.py +18 -19
- udata/search/adapter.py +17 -16
- udata/search/commands.py +44 -51
- udata/search/fields.py +13 -20
- udata/search/query.py +23 -18
- udata/search/result.py +9 -10
- udata/sentry.py +21 -19
- udata/settings.py +262 -198
- udata/sitemap.py +8 -6
- udata/storage/s3.py +20 -13
- udata/tags.py +4 -5
- udata/tasks.py +43 -42
- udata/tests/__init__.py +9 -6
- udata/tests/api/__init__.py +8 -6
- udata/tests/api/test_auth_api.py +395 -321
- udata/tests/api/test_base_api.py +33 -35
- udata/tests/api/test_contact_points.py +7 -9
- udata/tests/api/test_dataservices_api.py +211 -158
- udata/tests/api/test_datasets_api.py +823 -812
- udata/tests/api/test_follow_api.py +13 -15
- udata/tests/api/test_me_api.py +95 -112
- udata/tests/api/test_organizations_api.py +301 -339
- udata/tests/api/test_reports_api.py +35 -25
- udata/tests/api/test_reuses_api.py +134 -139
- udata/tests/api/test_swagger.py +5 -5
- udata/tests/api/test_tags_api.py +18 -25
- udata/tests/api/test_topics_api.py +94 -94
- udata/tests/api/test_transfer_api.py +53 -48
- udata/tests/api/test_user_api.py +128 -141
- udata/tests/apiv2/test_datasets.py +290 -198
- udata/tests/apiv2/test_me_api.py +10 -11
- udata/tests/apiv2/test_organizations.py +56 -74
- udata/tests/apiv2/test_swagger.py +5 -5
- udata/tests/apiv2/test_topics.py +69 -87
- udata/tests/cli/test_cli_base.py +8 -8
- udata/tests/cli/test_db_cli.py +21 -19
- udata/tests/dataservice/test_dataservice_tasks.py +8 -12
- udata/tests/dataset/test_csv_adapter.py +44 -35
- udata/tests/dataset/test_dataset_actions.py +2 -3
- udata/tests/dataset/test_dataset_commands.py +7 -8
- udata/tests/dataset/test_dataset_events.py +36 -29
- udata/tests/dataset/test_dataset_model.py +224 -217
- udata/tests/dataset/test_dataset_rdf.py +142 -131
- udata/tests/dataset/test_dataset_tasks.py +15 -15
- udata/tests/dataset/test_resource_preview.py +10 -13
- udata/tests/features/territories/__init__.py +9 -13
- udata/tests/features/territories/test_territories_api.py +71 -91
- udata/tests/forms/test_basic_fields.py +7 -7
- udata/tests/forms/test_current_user_field.py +39 -66
- udata/tests/forms/test_daterange_field.py +31 -39
- udata/tests/forms/test_dict_field.py +28 -26
- udata/tests/forms/test_extras_fields.py +102 -76
- udata/tests/forms/test_form_field.py +8 -8
- udata/tests/forms/test_image_field.py +33 -26
- udata/tests/forms/test_model_field.py +134 -123
- udata/tests/forms/test_model_list_field.py +7 -7
- udata/tests/forms/test_nested_model_list_field.py +117 -79
- udata/tests/forms/test_publish_as_field.py +36 -65
- udata/tests/forms/test_reference_field.py +34 -53
- udata/tests/forms/test_user_forms.py +23 -21
- udata/tests/forms/test_uuid_field.py +6 -10
- udata/tests/frontend/__init__.py +9 -6
- udata/tests/frontend/test_auth.py +7 -6
- udata/tests/frontend/test_csv.py +81 -96
- udata/tests/frontend/test_hooks.py +43 -43
- udata/tests/frontend/test_markdown.py +211 -191
- udata/tests/helpers.py +32 -37
- udata/tests/models.py +2 -2
- udata/tests/organization/test_csv_adapter.py +21 -16
- udata/tests/organization/test_notifications.py +11 -18
- udata/tests/organization/test_organization_model.py +13 -13
- udata/tests/organization/test_organization_rdf.py +29 -22
- udata/tests/organization/test_organization_tasks.py +16 -17
- udata/tests/plugin.py +79 -73
- udata/tests/reuse/test_reuse_model.py +21 -21
- udata/tests/reuse/test_reuse_task.py +11 -13
- udata/tests/search/__init__.py +11 -12
- udata/tests/search/test_adapter.py +60 -70
- udata/tests/search/test_query.py +16 -16
- udata/tests/search/test_results.py +10 -7
- udata/tests/site/test_site_api.py +11 -16
- udata/tests/site/test_site_metrics.py +20 -30
- udata/tests/site/test_site_model.py +4 -5
- udata/tests/site/test_site_rdf.py +94 -78
- udata/tests/test_activity.py +17 -17
- udata/tests/test_cors.py +62 -0
- udata/tests/test_discussions.py +292 -299
- udata/tests/test_i18n.py +37 -40
- udata/tests/test_linkchecker.py +91 -85
- udata/tests/test_mail.py +13 -17
- udata/tests/test_migrations.py +219 -180
- udata/tests/test_model.py +164 -157
- udata/tests/test_notifications.py +17 -17
- udata/tests/test_owned.py +14 -14
- udata/tests/test_rdf.py +25 -23
- udata/tests/test_routing.py +89 -93
- udata/tests/test_storages.py +137 -128
- udata/tests/test_tags.py +44 -46
- udata/tests/test_topics.py +7 -7
- udata/tests/test_transfer.py +42 -49
- udata/tests/test_uris.py +160 -161
- udata/tests/test_utils.py +79 -71
- udata/tests/user/test_user_rdf.py +5 -9
- udata/tests/workers/test_jobs_commands.py +57 -58
- udata/tests/workers/test_tasks_routing.py +23 -29
- udata/tests/workers/test_workers_api.py +125 -131
- udata/tests/workers/test_workers_helpers.py +6 -6
- udata/tracking.py +4 -6
- udata/uris.py +45 -46
- udata/utils.py +68 -66
- udata/wsgi.py +1 -1
- {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30454.dist-info}/METADATA +7 -3
- udata-9.1.2.dev30454.dist-info/RECORD +706 -0
- udata-9.1.2.dev30355.dist-info/RECORD +0 -704
- {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30454.dist-info}/LICENSE +0 -0
- {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30454.dist-info}/WHEEL +0 -0
- {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30454.dist-info}/entry_points.txt +0 -0
- {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30454.dist-info}/top_level.txt +0 -0
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
"""
|
|
2
2
|
Remove Harvest db integrity problems
|
|
3
3
|
⚠️ long migration
|
|
4
|
-
|
|
4
|
+
"""
|
|
5
|
+
|
|
5
6
|
import logging
|
|
6
7
|
|
|
7
8
|
import mongoengine
|
|
8
9
|
|
|
9
10
|
from udata.core.jobs.models import PeriodicTask
|
|
10
|
-
from udata.harvest.models import
|
|
11
|
+
from udata.harvest.models import HarvestJob, HarvestSource
|
|
11
12
|
|
|
12
13
|
log = logging.getLogger(__name__)
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
def migrate(db):
|
|
16
|
-
|
|
17
|
-
log.info('Processing HarvestJob source references.')
|
|
17
|
+
log.info("Processing HarvestJob source references.")
|
|
18
18
|
|
|
19
19
|
harvest_jobs = HarvestJob.objects().no_cache().all()
|
|
20
20
|
count = 0
|
|
@@ -25,9 +25,9 @@ def migrate(db):
|
|
|
25
25
|
count += 1
|
|
26
26
|
harvest_job.delete()
|
|
27
27
|
|
|
28
|
-
log.info(f
|
|
28
|
+
log.info(f"Completed, removed {count} HarvestJob objects")
|
|
29
29
|
|
|
30
|
-
log.info(
|
|
30
|
+
log.info("Processing HarvestJob items references.")
|
|
31
31
|
|
|
32
32
|
harvest_jobs = HarvestJob.objects.filter(items__0__exists=True).no_cache().all()
|
|
33
33
|
count = 0
|
|
@@ -40,14 +40,15 @@ def migrate(db):
|
|
|
40
40
|
item.dataset = None
|
|
41
41
|
harvest_job.save()
|
|
42
42
|
|
|
43
|
-
log.info(f
|
|
43
|
+
log.info(f"Completed, modified {count} HarvestJob objects")
|
|
44
44
|
|
|
45
|
-
log.info(
|
|
45
|
+
log.info("Processing PeriodicTask objects.")
|
|
46
46
|
|
|
47
|
-
harvest_schedules = PeriodicTask.objects.filter(
|
|
48
|
-
|
|
47
|
+
harvest_schedules = PeriodicTask.objects.filter(
|
|
48
|
+
name__startswith="Harvest", description="Periodic Harvesting"
|
|
49
|
+
)
|
|
49
50
|
hs = HarvestSource.objects.filter(periodic_task__in=harvest_schedules)
|
|
50
51
|
unlegit_schedules = harvest_schedules.filter(id__nin=[h.periodic_task.id for h in hs])
|
|
51
52
|
count = unlegit_schedules.delete()
|
|
52
53
|
|
|
53
|
-
log.info(f
|
|
54
|
+
log.info(f"Completed, removed {count} PeriodicTask objects")
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"""
|
|
2
2
|
Remove Oauth2Client db integrity problems
|
|
3
|
-
|
|
3
|
+
"""
|
|
4
|
+
|
|
4
5
|
import logging
|
|
5
6
|
|
|
6
7
|
import mongoengine
|
|
@@ -11,7 +12,7 @@ log = logging.getLogger(__name__)
|
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
def migrate(db):
|
|
14
|
-
log.info(
|
|
15
|
+
log.info("Processing Transfer objects.")
|
|
15
16
|
|
|
16
17
|
clients = OAuth2Client.objects.no_cache().all()
|
|
17
18
|
|
|
@@ -24,4 +25,4 @@ def migrate(db):
|
|
|
24
25
|
client.organization = None
|
|
25
26
|
client.save()
|
|
26
27
|
|
|
27
|
-
log.info(f
|
|
28
|
+
log.info(f"Completed, modified {count} OAuth2Client objects")
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
"""
|
|
2
2
|
Remove Transfer db integrity problems
|
|
3
3
|
⚠️ long migration
|
|
4
|
-
|
|
4
|
+
"""
|
|
5
|
+
|
|
5
6
|
import logging
|
|
6
7
|
|
|
7
8
|
import mongoengine
|
|
@@ -12,7 +13,7 @@ log = logging.getLogger(__name__)
|
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
def migrate(db):
|
|
15
|
-
log.info(
|
|
16
|
+
log.info("Processing Transfer objects.")
|
|
16
17
|
|
|
17
18
|
transfers = Transfer.objects.no_cache().all()
|
|
18
19
|
|
|
@@ -26,4 +27,4 @@ def migrate(db):
|
|
|
26
27
|
transfer.delete()
|
|
27
28
|
count += 1
|
|
28
29
|
|
|
29
|
-
log.info(f
|
|
30
|
+
log.info(f"Completed, removed {count} Transfer objects")
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"""
|
|
2
2
|
Remove User db integrity problems, and Discussion.subject in the process
|
|
3
|
-
|
|
3
|
+
"""
|
|
4
|
+
|
|
4
5
|
import logging
|
|
5
6
|
|
|
6
7
|
import mongoengine
|
|
@@ -11,7 +12,7 @@ log = logging.getLogger(__name__)
|
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
def migrate(db):
|
|
14
|
-
log.info(
|
|
15
|
+
log.info("Processing Discussion user references.")
|
|
15
16
|
|
|
16
17
|
discussions = Discussion.objects(user__ne=None).no_cache().all()
|
|
17
18
|
remove_count = 0
|
|
@@ -37,9 +38,9 @@ def migrate(db):
|
|
|
37
38
|
discussion.save()
|
|
38
39
|
modif_count += 1
|
|
39
40
|
|
|
40
|
-
log.info(f
|
|
41
|
+
log.info(f"Modified {modif_count} Discussion objects, deleted {remove_count}")
|
|
41
42
|
|
|
42
|
-
log.info(
|
|
43
|
+
log.info("Processing Badges user references.")
|
|
43
44
|
|
|
44
45
|
organizations = Organization.objects.filter(badges__0__exists=True)
|
|
45
46
|
count = 0
|
|
@@ -52,9 +53,9 @@ def migrate(db):
|
|
|
52
53
|
badge.created_by = None
|
|
53
54
|
org.save()
|
|
54
55
|
|
|
55
|
-
log.info(f
|
|
56
|
+
log.info(f"Modified {count} badges")
|
|
56
57
|
|
|
57
|
-
log.info(
|
|
58
|
+
log.info("Processing Request user references.")
|
|
58
59
|
|
|
59
60
|
organizations = Organization.objects.filter(requests__0__exists=True)
|
|
60
61
|
count = 0
|
|
@@ -67,4 +68,4 @@ def migrate(db):
|
|
|
67
68
|
request.handled_by = None
|
|
68
69
|
org.save()
|
|
69
70
|
|
|
70
|
-
log.info(f
|
|
71
|
+
log.info(f"Modified {count} requests")
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"""
|
|
2
2
|
Add a default topic to all reuses in db
|
|
3
|
-
|
|
3
|
+
"""
|
|
4
|
+
|
|
4
5
|
import logging
|
|
5
6
|
|
|
6
7
|
from udata.models import Reuse
|
|
@@ -9,14 +10,14 @@ log = logging.getLogger(__name__)
|
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
def migrate(db):
|
|
12
|
-
log.info(
|
|
13
|
+
log.info("Processing Reuse.")
|
|
13
14
|
|
|
14
15
|
reuses = Reuse.objects().no_cache().timeout(False)
|
|
15
16
|
count = 0
|
|
16
17
|
for reuse in reuses:
|
|
17
|
-
reuse.topic =
|
|
18
|
+
reuse.topic = "others"
|
|
18
19
|
reuse.save()
|
|
19
20
|
count += 1
|
|
20
21
|
|
|
21
|
-
log.info(f
|
|
22
|
-
log.info(
|
|
22
|
+
log.info(f"Modified {count} Reuses objects")
|
|
23
|
+
log.info("Done")
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
"""
|
|
2
2
|
Recompute resources extension with improved detection
|
|
3
|
-
|
|
3
|
+
"""
|
|
4
|
+
|
|
4
5
|
import logging
|
|
5
6
|
|
|
6
|
-
from udata.models import Dataset
|
|
7
7
|
from udata.core.storages.utils import extension
|
|
8
|
+
from udata.models import Dataset
|
|
8
9
|
|
|
9
10
|
log = logging.getLogger(__name__)
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
def migrate(db):
|
|
13
|
-
log.info(
|
|
14
|
+
log.info("Processing Datasets.")
|
|
14
15
|
|
|
15
16
|
datasets = Dataset.objects().no_cache().timeout(False)
|
|
16
17
|
count = 0
|
|
@@ -23,7 +24,7 @@ def migrate(db):
|
|
|
23
24
|
resource.format = detected_format
|
|
24
25
|
count += 1
|
|
25
26
|
if save_dataset:
|
|
26
|
-
dataset.save(signal_kwargs={
|
|
27
|
+
dataset.save(signal_kwargs={"ignores": ["post_save"]})
|
|
27
28
|
|
|
28
|
-
log.info(f
|
|
29
|
-
log.info(
|
|
29
|
+
log.info(f"Modified {count} resource objects")
|
|
30
|
+
log.info("Done")
|
|
@@ -1,34 +1,36 @@
|
|
|
1
|
-
|
|
1
|
+
"""
|
|
2
2
|
Datasets linked to an inactive harvester are archived
|
|
3
|
-
|
|
3
|
+
"""
|
|
4
|
+
|
|
4
5
|
import logging
|
|
5
6
|
|
|
6
7
|
from mongoengine.errors import ValidationError
|
|
7
8
|
|
|
8
|
-
from udata.models import Dataset
|
|
9
9
|
from udata.harvest.actions import archive_harvested_dataset
|
|
10
10
|
from udata.harvest.models import HarvestSource
|
|
11
|
-
|
|
11
|
+
from udata.models import Dataset
|
|
12
12
|
|
|
13
13
|
log = logging.getLogger(__name__)
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
def migrate(db):
|
|
17
|
-
log.info(
|
|
17
|
+
log.info("Computing the list of datasets linked to an inactive harvester.")
|
|
18
18
|
|
|
19
19
|
active_sources = [str(source.id) for source in HarvestSource.objects()]
|
|
20
|
-
dangling_datasets = Dataset.objects(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
dangling_datasets = Dataset.objects(
|
|
21
|
+
**{
|
|
22
|
+
"extras__harvest:source_id__exists": True,
|
|
23
|
+
"extras__harvest:source_id__nin": active_sources,
|
|
24
|
+
"archived": None,
|
|
25
|
+
}
|
|
26
|
+
)
|
|
25
27
|
|
|
26
|
-
log.info(f
|
|
28
|
+
log.info(f"{dangling_datasets.count()} datasets to archive.")
|
|
27
29
|
|
|
28
30
|
for dataset in dangling_datasets:
|
|
29
31
|
try:
|
|
30
|
-
archive_harvested_dataset(dataset, reason=
|
|
32
|
+
archive_harvested_dataset(dataset, reason="harvester-inactive", dryrun=False)
|
|
31
33
|
except ValidationError as e:
|
|
32
|
-
log.error(f
|
|
34
|
+
log.error(f"Error on dataset {dataset.id}: {e}")
|
|
33
35
|
|
|
34
|
-
log.info(
|
|
36
|
+
log.info("Done")
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"""
|
|
2
2
|
Set fs_uniquifier field for every user due to Flask-Security-Too update > v4.0.0
|
|
3
|
-
|
|
3
|
+
"""
|
|
4
|
+
|
|
4
5
|
import logging
|
|
5
6
|
import uuid
|
|
6
7
|
|
|
@@ -8,12 +9,11 @@ from mongoengine.errors import ValidationError
|
|
|
8
9
|
|
|
9
10
|
from udata.models import User
|
|
10
11
|
|
|
11
|
-
|
|
12
12
|
log = logging.getLogger(__name__)
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
def migrate(db):
|
|
16
|
-
log.info(
|
|
16
|
+
log.info("Processing Users fs_uniquifier attribute.")
|
|
17
17
|
|
|
18
18
|
users = User.objects().no_cache().timeout(False)
|
|
19
19
|
for user in users:
|
|
@@ -21,6 +21,6 @@ def migrate(db):
|
|
|
21
21
|
try:
|
|
22
22
|
user.save()
|
|
23
23
|
except ValidationError as e:
|
|
24
|
-
log.error(f
|
|
24
|
+
log.error(f"Error on user {user.id}: {e}")
|
|
25
25
|
|
|
26
|
-
log.info(
|
|
26
|
+
log.info("Completed.")
|
|
@@ -1,57 +1,67 @@
|
|
|
1
|
-
|
|
1
|
+
"""
|
|
2
2
|
Move identifying harvest fields from extras to dedicated harvest metadata fields.
|
|
3
3
|
Clean other extras set at harvest time, they will be re-created if needed.
|
|
4
|
-
|
|
4
|
+
"""
|
|
5
|
+
|
|
5
6
|
import logging
|
|
6
7
|
|
|
7
8
|
from mongoengine.errors import ValidationError
|
|
8
|
-
|
|
9
|
+
|
|
9
10
|
from udata.core.dataset.models import HarvestDatasetMetadata
|
|
11
|
+
from udata.models import Dataset
|
|
10
12
|
|
|
11
13
|
log = logging.getLogger(__name__)
|
|
12
14
|
|
|
13
15
|
|
|
14
16
|
def should_keep(extra):
|
|
15
|
-
extras_to_remove = [
|
|
16
|
-
if extra.startswith(
|
|
17
|
+
extras_to_remove = ["remote_url", "dct:identifier", "uri", "ckan:name", "ckan:source"]
|
|
18
|
+
if extra.startswith("harvest:") or extra.startswith("ods:") or extra in extras_to_remove:
|
|
17
19
|
return False
|
|
18
20
|
return True
|
|
19
21
|
|
|
20
22
|
|
|
21
23
|
def migrate(db):
|
|
22
|
-
log.info(
|
|
24
|
+
log.info("Processing Datasets.")
|
|
23
25
|
|
|
24
|
-
datasets =
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
datasets = (
|
|
27
|
+
Dataset.objects(
|
|
28
|
+
__raw__={
|
|
29
|
+
"$or": [
|
|
30
|
+
{"extras.harvest:remote_id": {"$exists": True}},
|
|
31
|
+
{"extras.harvest:domain": {"$exists": True}},
|
|
32
|
+
{"extras.harvest:source_id": {"$exists": True}},
|
|
33
|
+
],
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
.no_cache()
|
|
37
|
+
.timeout(False)
|
|
38
|
+
)
|
|
31
39
|
|
|
32
40
|
datasets_count = datasets.count()
|
|
33
41
|
for dataset in datasets:
|
|
34
42
|
if not dataset.harvest:
|
|
35
43
|
dataset.harvest = HarvestDatasetMetadata()
|
|
36
|
-
dataset.harvest.remote_id = dataset.extras.pop(
|
|
37
|
-
dataset.harvest.source_id = dataset.extras.pop(
|
|
38
|
-
dataset.harvest.domain = dataset.extras.pop(
|
|
44
|
+
dataset.harvest.remote_id = dataset.extras.pop("harvest:remote_id", None)
|
|
45
|
+
dataset.harvest.source_id = dataset.extras.pop("harvest:source_id", None)
|
|
46
|
+
dataset.harvest.domain = dataset.extras.pop("harvest:domain", None)
|
|
39
47
|
# Keep last_update for archiving reason
|
|
40
|
-
dataset.harvest.last_update = dataset.extras.pop(
|
|
48
|
+
dataset.harvest.last_update = dataset.extras.pop("harvest:last_update", None)
|
|
41
49
|
# Keep any archived reason and date
|
|
42
|
-
dataset.harvest.archived = dataset.extras.pop(
|
|
43
|
-
dataset.harvest.archived_at = dataset.extras.pop(
|
|
50
|
+
dataset.harvest.archived = dataset.extras.pop("harvest:archived", None)
|
|
51
|
+
dataset.harvest.archived_at = dataset.extras.pop("harvest:archived_at", None)
|
|
44
52
|
|
|
45
|
-
dataset.extras = {
|
|
46
|
-
|
|
53
|
+
dataset.extras = {
|
|
54
|
+
extra: dataset.extras[extra] for extra in dataset.extras if should_keep(extra)
|
|
55
|
+
}
|
|
47
56
|
for resource in dataset.resources:
|
|
48
|
-
resource.extras = {
|
|
49
|
-
|
|
57
|
+
resource.extras = {
|
|
58
|
+
extra: resource.extras[extra] for extra in resource.extras if should_keep(extra)
|
|
59
|
+
}
|
|
50
60
|
|
|
51
61
|
try:
|
|
52
62
|
dataset.save()
|
|
53
63
|
except ValidationError as e:
|
|
54
|
-
log.error(f
|
|
64
|
+
log.error(f"Failed to save dataset {dataset.id}: {e}")
|
|
55
65
|
|
|
56
|
-
log.info(f
|
|
57
|
-
log.info(
|
|
66
|
+
log.info(f"Modified {datasets_count} datasets objects")
|
|
67
|
+
log.info("Done")
|
|
@@ -1,48 +1,66 @@
|
|
|
1
|
-
|
|
1
|
+
"""
|
|
2
2
|
The purpose here is to change the dates name in the dataset and resource model.
|
|
3
|
-
|
|
3
|
+
"""
|
|
4
|
+
|
|
4
5
|
import logging
|
|
5
6
|
|
|
6
7
|
from mongoengine.connection import get_db
|
|
8
|
+
|
|
7
9
|
from udata.models import Dataset
|
|
8
10
|
|
|
9
11
|
log = logging.getLogger(__name__)
|
|
10
12
|
|
|
11
13
|
|
|
12
14
|
def migrate(db):
|
|
13
|
-
log.info(
|
|
15
|
+
log.info("Processing Dataset collection.")
|
|
14
16
|
|
|
15
17
|
db = get_db()
|
|
16
18
|
dataset_collection = db.dataset
|
|
17
19
|
|
|
18
|
-
result = dataset_collection.update_many(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
result = dataset_collection.update_many(
|
|
21
|
+
{},
|
|
22
|
+
{
|
|
23
|
+
"$rename": {
|
|
24
|
+
"created_at": "created_at_internal",
|
|
25
|
+
"last_modified": "last_modified_internal",
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
)
|
|
29
|
+
log.info(f"{result.modified_count} Datasets processed.")
|
|
22
30
|
|
|
23
31
|
community_resource_collection = db.community_resource
|
|
24
|
-
result = community_resource_collection.update_many(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
log.info(f
|
|
28
|
-
result = community_resource_collection.update_many({}, {
|
|
29
|
-
log.info(f
|
|
30
|
-
|
|
31
|
-
result = dataset_collection.update_many(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
result = community_resource_collection.update_many(
|
|
33
|
+
{}, {"$rename": {"created_at": "created_at_internal", "modified": "last_modified_internal"}}
|
|
34
|
+
)
|
|
35
|
+
log.info(f"{result.modified_count} Community Resources processed for renaming.")
|
|
36
|
+
result = community_resource_collection.update_many({}, {"$unset": {"published": ""}})
|
|
37
|
+
log.info(f"{result.modified_count} Community Resources processed for published removing.")
|
|
38
|
+
|
|
39
|
+
result = dataset_collection.update_many(
|
|
40
|
+
{},
|
|
41
|
+
[
|
|
42
|
+
{
|
|
43
|
+
"$set": {
|
|
44
|
+
"resources": {
|
|
45
|
+
"$map": {
|
|
46
|
+
"input": "$resources",
|
|
47
|
+
"in": {
|
|
48
|
+
"$mergeObjects": [
|
|
49
|
+
"$$this",
|
|
50
|
+
{
|
|
51
|
+
"created_at_internal": "$$this.created_at",
|
|
52
|
+
"last_modified_internal": "$$this.modified",
|
|
53
|
+
},
|
|
54
|
+
]
|
|
55
|
+
},
|
|
38
56
|
}
|
|
39
57
|
}
|
|
40
|
-
}
|
|
58
|
+
},
|
|
41
59
|
},
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
60
|
+
{"$unset": "resources.created_at"},
|
|
61
|
+
{"$unset": "resources.modified"},
|
|
62
|
+
{"$unset": "resources.published"},
|
|
63
|
+
],
|
|
64
|
+
)
|
|
47
65
|
|
|
48
|
-
log.info(
|
|
66
|
+
log.info("Completed.")
|
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
"""
|
|
2
2
|
Some old dataset/reuse don't have a `private` field. It should be False by default.
|
|
3
|
-
|
|
3
|
+
"""
|
|
4
|
+
|
|
4
5
|
import logging
|
|
5
6
|
|
|
6
|
-
from udata.models import
|
|
7
|
+
from udata.models import Dataset, Reuse
|
|
7
8
|
|
|
8
9
|
log = logging.getLogger(__name__)
|
|
9
10
|
|
|
11
|
+
|
|
10
12
|
def migrate(db):
|
|
11
|
-
log.info(
|
|
13
|
+
log.info("Processing Reuse…")
|
|
12
14
|
|
|
13
15
|
count = Reuse.objects(private=None).update(private=False)
|
|
14
|
-
log.info(f
|
|
16
|
+
log.info(f"Fixed {count} Reuse objects from private None to private False.")
|
|
15
17
|
|
|
16
|
-
log.info(
|
|
18
|
+
log.info("Processing Datasets…")
|
|
17
19
|
count = Dataset.objects(private=None).update(private=False)
|
|
18
|
-
log.info(f
|
|
20
|
+
log.info(f"Fixed {count} Dataset objects from private None to private False.")
|
|
19
21
|
|
|
20
|
-
log.info(
|
|
22
|
+
log.info("Done")
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
"""
|
|
2
2
|
Migrates `Activity.kwargs` to `Activity.extras`.
|
|
3
3
|
"""
|
|
4
|
+
|
|
4
5
|
import logging
|
|
5
6
|
|
|
6
7
|
from mongoengine.connection import get_db
|
|
7
8
|
|
|
8
9
|
log = logging.getLogger(__name__)
|
|
9
10
|
|
|
11
|
+
|
|
10
12
|
def migrate(db):
|
|
11
|
-
log.info(
|
|
13
|
+
log.info("Processing activity objects")
|
|
12
14
|
|
|
13
|
-
result = get_db().activity.update_many(filter={}, update={
|
|
15
|
+
result = get_db().activity.update_many(filter={}, update={"$rename": {"kwargs": "extras"}})
|
|
14
16
|
|
|
15
|
-
log.info(f
|
|
16
|
-
log.info(
|
|
17
|
+
log.info(f"{result.modified_count} activity object(s) migrated")
|
|
18
|
+
log.info("Done")
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
"""
|
|
2
2
|
Add a default topic to all reuses in db
|
|
3
|
-
|
|
3
|
+
"""
|
|
4
|
+
|
|
4
5
|
import logging
|
|
5
6
|
|
|
6
|
-
from bson import DBRef
|
|
7
7
|
import mongoengine
|
|
8
|
+
from bson import DBRef
|
|
8
9
|
|
|
9
10
|
from udata.models import Reuse
|
|
10
11
|
|
|
@@ -12,7 +13,7 @@ log = logging.getLogger(__name__)
|
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
def migrate(db):
|
|
15
|
-
log.info(
|
|
16
|
+
log.info("Processing Reuse.")
|
|
16
17
|
|
|
17
18
|
reuses = Reuse.objects().no_cache().timeout(False)
|
|
18
19
|
count = 0
|
|
@@ -31,5 +32,5 @@ def migrate(db):
|
|
|
31
32
|
reuse.save()
|
|
32
33
|
count += 1
|
|
33
34
|
|
|
34
|
-
log.info(f
|
|
35
|
-
log.info(
|
|
35
|
+
log.info(f"Modified {count} Reuses objects (removed {errors} datasets)")
|
|
36
|
+
log.info("Done")
|