udata 9.1.2.dev30355__py2.py3-none-any.whl → 9.1.2.dev30382__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 +135 -124
- 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 +56 -54
- 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/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/static/chunks/{11.e9b9ca1f3e03d4020377.js → 11.52e531c19f8de80c00cf.js} +3 -3
- udata/static/chunks/{11.e9b9ca1f3e03d4020377.js.map → 11.52e531c19f8de80c00cf.js.map} +1 -1
- udata/static/chunks/{13.038c0d9aa0dfa0181c4b.js → 13.c3343a7f1070061c0e10.js} +2 -2
- udata/static/chunks/{13.038c0d9aa0dfa0181c4b.js.map → 13.c3343a7f1070061c0e10.js.map} +1 -1
- udata/static/chunks/{16.0baa2b64a74a2dcde25c.js → 16.8fa42440ad75ca172e6d.js} +2 -2
- udata/static/chunks/{16.0baa2b64a74a2dcde25c.js.map → 16.8fa42440ad75ca172e6d.js.map} +1 -1
- udata/static/chunks/{19.350a9f150b074b4ecefa.js → 19.9c6c8412729cd6d59cfa.js} +3 -3
- udata/static/chunks/{19.350a9f150b074b4ecefa.js.map → 19.9c6c8412729cd6d59cfa.js.map} +1 -1
- udata/static/chunks/{5.6ebbce2b9b3e696d3da5.js → 5.71d15c2e4f21feee2a9a.js} +3 -3
- udata/static/chunks/{5.6ebbce2b9b3e696d3da5.js.map → 5.71d15c2e4f21feee2a9a.js.map} +1 -1
- udata/static/chunks/{6.d8a5f7b017bcbd083641.js → 6.9139dc098b8ea640b890.js} +3 -3
- udata/static/chunks/{6.d8a5f7b017bcbd083641.js.map → 6.9139dc098b8ea640b890.js.map} +1 -1
- udata/static/common.js +1 -1
- udata/static/common.js.map +1 -1
- 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 +5 -6
- udata/tests/api/test_auth_api.py +395 -321
- udata/tests/api/test_base_api.py +31 -33
- 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 +76 -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_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.dev30382.dist-info}/METADATA +3 -2
- udata-9.1.2.dev30382.dist-info/RECORD +704 -0
- udata-9.1.2.dev30355.dist-info/RECORD +0 -704
- {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30382.dist-info}/LICENSE +0 -0
- {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30382.dist-info}/WHEEL +0 -0
- {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30382.dist-info}/entry_points.txt +0 -0
- {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30382.dist-info}/top_level.txt +0 -0
udata/core/dataset/api_fields.py
CHANGED
|
@@ -1,306 +1,478 @@
|
|
|
1
|
-
from udata.api import api,
|
|
1
|
+
from udata.api import api, base_reference, fields
|
|
2
2
|
from udata.core.badges.fields import badge_fields
|
|
3
|
+
from udata.core.contact_point.api_fields import contact_point_fields
|
|
3
4
|
from udata.core.organization.api_fields import org_ref_fields
|
|
4
5
|
from udata.core.organization.constants import BIGGEST_LOGO_SIZE
|
|
5
6
|
from udata.core.spatial.api_fields import spatial_coverage_fields
|
|
6
7
|
from udata.core.user.api_fields import user_ref_fields
|
|
7
|
-
from udata.core.contact_point.api_fields import contact_point_fields
|
|
8
8
|
|
|
9
9
|
from .constants import (
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
CHECKSUM_TYPES,
|
|
11
|
+
DEFAULT_CHECKSUM_TYPE,
|
|
12
|
+
DEFAULT_FREQUENCY,
|
|
13
|
+
DEFAULT_LICENSE,
|
|
14
|
+
RESOURCE_FILETYPES,
|
|
15
|
+
RESOURCE_TYPES,
|
|
16
|
+
UPDATE_FREQUENCIES,
|
|
12
17
|
)
|
|
13
18
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
checksum_fields = api.model(
|
|
20
|
+
"Checksum",
|
|
21
|
+
{
|
|
22
|
+
"type": fields.String(
|
|
23
|
+
description="The hashing algorithm used to compute the checksum",
|
|
24
|
+
default=DEFAULT_CHECKSUM_TYPE,
|
|
25
|
+
enum=CHECKSUM_TYPES,
|
|
26
|
+
),
|
|
27
|
+
"value": fields.String(description="The resulting checksum/hash", required=True),
|
|
28
|
+
},
|
|
29
|
+
)
|
|
22
30
|
|
|
23
31
|
# Use for schema inside Dataset or Resource
|
|
24
|
-
schema_fields = api.model(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
32
|
+
schema_fields = api.model(
|
|
33
|
+
"Schema",
|
|
34
|
+
{
|
|
35
|
+
"name": fields.String(),
|
|
36
|
+
"version": fields.String(),
|
|
37
|
+
"url": fields.String(),
|
|
38
|
+
},
|
|
39
|
+
)
|
|
29
40
|
|
|
30
|
-
dataset_harvest_fields = api.model(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
description=
|
|
45
|
-
allow_null=True),
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
41
|
+
dataset_harvest_fields = api.model(
|
|
42
|
+
"HarvestDatasetMetadata",
|
|
43
|
+
{
|
|
44
|
+
"backend": fields.String(description="Harvest backend used", allow_null=True),
|
|
45
|
+
"created_at": fields.ISODateTime(
|
|
46
|
+
description="The dataset harvested creation date", allow_null=True, readonly=True
|
|
47
|
+
),
|
|
48
|
+
"modified_at": fields.ISODateTime(
|
|
49
|
+
description="The dataset harvest last modification date", allow_null=True, readonly=True
|
|
50
|
+
),
|
|
51
|
+
"source_id": fields.String(description="The harvester id", allow_null=True),
|
|
52
|
+
"remote_id": fields.String(
|
|
53
|
+
description="The dataset remote id on the source portal", allow_null=True
|
|
54
|
+
),
|
|
55
|
+
"domain": fields.String(description="The harvested domain", allow_null=True),
|
|
56
|
+
"last_update": fields.ISODateTime(description="The last harvest date", allow_null=True),
|
|
57
|
+
"remote_url": fields.String(description="The dataset remote url", allow_null=True),
|
|
58
|
+
"uri": fields.String(description="The dataset harveted uri", allow_null=True),
|
|
59
|
+
"dct_identifier": fields.String(
|
|
60
|
+
description="The dct:identifier property from the harvested dataset", allow_null=True
|
|
61
|
+
),
|
|
62
|
+
"archived_at": fields.ISODateTime(description="The archive date", allow_null=True),
|
|
63
|
+
"archived": fields.String(
|
|
64
|
+
description="The reason the dataset has been archived", allow_null=True
|
|
65
|
+
),
|
|
66
|
+
},
|
|
67
|
+
)
|
|
51
68
|
|
|
52
|
-
resource_harvest_fields = api.model(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
69
|
+
resource_harvest_fields = api.model(
|
|
70
|
+
"HarvestResourceMetadata",
|
|
71
|
+
{
|
|
72
|
+
"created_at": fields.ISODateTime(
|
|
73
|
+
description="The resource harvested creation date", allow_null=True, readonly=True
|
|
74
|
+
),
|
|
75
|
+
"modified_at": fields.ISODateTime(
|
|
76
|
+
description="The resource harvest last modification date",
|
|
77
|
+
allow_null=True,
|
|
78
|
+
readonly=True,
|
|
79
|
+
),
|
|
80
|
+
"uri": fields.String(description="The resource harvest uri", allow_null=True),
|
|
81
|
+
},
|
|
82
|
+
)
|
|
59
83
|
|
|
60
|
-
license_fields = api.model(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
fields.String,
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
fields.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
84
|
+
license_fields = api.model(
|
|
85
|
+
"License",
|
|
86
|
+
{
|
|
87
|
+
"id": fields.String(description="The license identifier", required=True),
|
|
88
|
+
"title": fields.String(description="The resource title", required=True),
|
|
89
|
+
"maintainer": fields.String(description="The license official maintainer"),
|
|
90
|
+
"url": fields.String(description="The license official URL"),
|
|
91
|
+
"flags": fields.List(fields.String, description="Some arbitry flags"),
|
|
92
|
+
"alternate_urls": fields.List(
|
|
93
|
+
fields.String, description="Same alternative known URLs (improve rematch)"
|
|
94
|
+
),
|
|
95
|
+
"alternate_titles": fields.List(
|
|
96
|
+
fields.String, description="Same alternative known titles (improve rematch)"
|
|
97
|
+
),
|
|
98
|
+
},
|
|
99
|
+
)
|
|
75
100
|
|
|
76
|
-
frequency_fields = api.model(
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
101
|
+
frequency_fields = api.model(
|
|
102
|
+
"Frequency",
|
|
103
|
+
{
|
|
104
|
+
"id": fields.String(description="The frequency identifier"),
|
|
105
|
+
"label": fields.String(description="The frequency display name"),
|
|
106
|
+
},
|
|
107
|
+
)
|
|
80
108
|
|
|
81
|
-
resource_internal_fields = api.model(
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
109
|
+
resource_internal_fields = api.model(
|
|
110
|
+
"ResourceInternals",
|
|
111
|
+
{
|
|
112
|
+
"created_at_internal": fields.ISODateTime(
|
|
113
|
+
description="The resource's internal creation date on the site", required=True
|
|
114
|
+
),
|
|
115
|
+
"last_modified_internal": fields.ISODateTime(
|
|
116
|
+
description="The resource's internal last modification date", required=True
|
|
117
|
+
),
|
|
118
|
+
},
|
|
119
|
+
)
|
|
87
120
|
|
|
88
|
-
resource_fields = api.model(
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
description=
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
description=
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
121
|
+
resource_fields = api.model(
|
|
122
|
+
"Resource",
|
|
123
|
+
{
|
|
124
|
+
"id": fields.String(description="The resource unique ID", readonly=True),
|
|
125
|
+
"title": fields.String(description="The resource title", required=True),
|
|
126
|
+
"description": fields.Markdown(description="The resource markdown description"),
|
|
127
|
+
"filetype": fields.String(
|
|
128
|
+
description=("Whether the resource is an uploaded file, " "a remote file or an API"),
|
|
129
|
+
required=True,
|
|
130
|
+
enum=list(RESOURCE_FILETYPES),
|
|
131
|
+
),
|
|
132
|
+
"type": fields.String(
|
|
133
|
+
description=("Resource type (documentation, API...)"),
|
|
134
|
+
required=True,
|
|
135
|
+
enum=list(RESOURCE_TYPES),
|
|
136
|
+
),
|
|
137
|
+
"format": fields.String(description="The resource format", required=True),
|
|
138
|
+
"url": fields.String(description="The resource URL", required=True),
|
|
139
|
+
"latest": fields.String(
|
|
140
|
+
description="The permanent URL redirecting to "
|
|
141
|
+
"the latest version of the resource. When the "
|
|
142
|
+
"resource data is updated, the URL will "
|
|
143
|
+
"change, the latest URL won't.",
|
|
144
|
+
readonly=True,
|
|
145
|
+
),
|
|
146
|
+
"checksum": fields.Nested(
|
|
147
|
+
checksum_fields, allow_null=True, description="A checksum to validate file validity"
|
|
148
|
+
),
|
|
149
|
+
"filesize": fields.Integer(description="The resource file size in bytes"),
|
|
150
|
+
"mime": fields.String(description="The resource mime type"),
|
|
151
|
+
"created_at": fields.ISODateTime(readonly=True, description="The resource creation date"),
|
|
152
|
+
"last_modified": fields.ISODateTime(
|
|
153
|
+
readonly=True, description="The resource last modification date"
|
|
154
|
+
),
|
|
155
|
+
"metrics": fields.Raw(description="The resource metrics", readonly=True),
|
|
156
|
+
"harvest": fields.Nested(
|
|
157
|
+
resource_harvest_fields,
|
|
158
|
+
allow_null=True,
|
|
159
|
+
readonly=True,
|
|
160
|
+
description="Harvest attributes metadata information",
|
|
161
|
+
skip_none=True,
|
|
162
|
+
),
|
|
163
|
+
"extras": fields.Raw(description="Extra attributes as key-value pairs"),
|
|
164
|
+
"preview_url": fields.String(
|
|
165
|
+
description="An optional preview URL to be "
|
|
166
|
+
"loaded as a standalone page (ie. iframe or "
|
|
167
|
+
"new page)",
|
|
168
|
+
readonly=True,
|
|
169
|
+
),
|
|
170
|
+
"schema": fields.Nested(
|
|
171
|
+
schema_fields, allow_null=True, description="Reference to the associated schema"
|
|
172
|
+
),
|
|
173
|
+
"internal": fields.Nested(
|
|
174
|
+
resource_internal_fields,
|
|
175
|
+
readonly=True,
|
|
176
|
+
description="Site internal and specific object's data",
|
|
177
|
+
),
|
|
178
|
+
},
|
|
179
|
+
)
|
|
131
180
|
|
|
132
|
-
upload_fields = api.inherit(
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
181
|
+
upload_fields = api.inherit(
|
|
182
|
+
"UploadedResource",
|
|
183
|
+
resource_fields,
|
|
184
|
+
{
|
|
185
|
+
"success": fields.Boolean(
|
|
186
|
+
description="Whether the upload succeeded or not.", readonly=True, default=True
|
|
187
|
+
),
|
|
188
|
+
},
|
|
189
|
+
)
|
|
137
190
|
|
|
138
|
-
resources_order = api.as_list(fields.String(description=
|
|
191
|
+
resources_order = api.as_list(fields.String(description="Resource ID"))
|
|
139
192
|
|
|
140
|
-
temporal_coverage_fields = api.model(
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
193
|
+
temporal_coverage_fields = api.model(
|
|
194
|
+
"TemporalCoverage",
|
|
195
|
+
{
|
|
196
|
+
"start": fields.ISODateTime(description="The temporal coverage start date", required=True),
|
|
197
|
+
"end": fields.ISODateTime(description="The temporal coverage end date", required=True),
|
|
198
|
+
},
|
|
199
|
+
)
|
|
146
200
|
|
|
147
|
-
dataset_ref_fields = api.inherit(
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
201
|
+
dataset_ref_fields = api.inherit(
|
|
202
|
+
"DatasetReference",
|
|
203
|
+
base_reference,
|
|
204
|
+
{
|
|
205
|
+
"title": fields.String(description="The dataset title", readonly=True),
|
|
206
|
+
"acronym": fields.String(description="An optional dataset acronym", readonly=True),
|
|
207
|
+
"uri": fields.UrlFor(
|
|
208
|
+
"api.dataset",
|
|
209
|
+
lambda d: {"dataset": d},
|
|
210
|
+
description="The API URI for this dataset",
|
|
211
|
+
readonly=True,
|
|
212
|
+
),
|
|
213
|
+
"page": fields.UrlFor(
|
|
214
|
+
"datasets.show",
|
|
215
|
+
lambda d: {"dataset": d},
|
|
216
|
+
description="The web page URL for this dataset",
|
|
217
|
+
readonly=True,
|
|
218
|
+
fallback_endpoint="api.dataset",
|
|
219
|
+
),
|
|
220
|
+
},
|
|
221
|
+
)
|
|
159
222
|
|
|
160
|
-
community_resource_fields = api.inherit(
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
223
|
+
community_resource_fields = api.inherit(
|
|
224
|
+
"CommunityResource",
|
|
225
|
+
resource_fields,
|
|
226
|
+
{
|
|
227
|
+
"dataset": fields.Nested(
|
|
228
|
+
dataset_ref_fields, allow_null=True, description="Reference to the associated dataset"
|
|
229
|
+
),
|
|
230
|
+
"organization": fields.Nested(
|
|
231
|
+
org_ref_fields, allow_null=True, description="The producer organization"
|
|
232
|
+
),
|
|
233
|
+
"owner": fields.Nested(
|
|
234
|
+
user_ref_fields, allow_null=True, description="The user information"
|
|
235
|
+
),
|
|
236
|
+
},
|
|
237
|
+
)
|
|
171
238
|
|
|
172
239
|
community_resource_page_fields = api.model(
|
|
173
|
-
|
|
240
|
+
"CommunityResourcePage", fields.pager(community_resource_fields)
|
|
241
|
+
)
|
|
174
242
|
|
|
175
243
|
#: Default mask to make it lightweight by default
|
|
176
|
-
DEFAULT_MASK =
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
244
|
+
DEFAULT_MASK = ",".join(
|
|
245
|
+
(
|
|
246
|
+
"id",
|
|
247
|
+
"title",
|
|
248
|
+
"acronym",
|
|
249
|
+
"slug",
|
|
250
|
+
"description",
|
|
251
|
+
"created_at",
|
|
252
|
+
"last_modified",
|
|
253
|
+
"deleted",
|
|
254
|
+
"private",
|
|
255
|
+
"tags",
|
|
256
|
+
"badges",
|
|
257
|
+
"resources",
|
|
258
|
+
"frequency",
|
|
259
|
+
"frequency_date",
|
|
260
|
+
"extras",
|
|
261
|
+
"harvest",
|
|
262
|
+
"metrics",
|
|
263
|
+
"organization",
|
|
264
|
+
"owner",
|
|
265
|
+
"schema",
|
|
266
|
+
"temporal_coverage",
|
|
267
|
+
"spatial",
|
|
268
|
+
"license",
|
|
269
|
+
"uri",
|
|
270
|
+
"page",
|
|
271
|
+
"last_update",
|
|
272
|
+
"archived",
|
|
273
|
+
"quality",
|
|
274
|
+
"internal",
|
|
275
|
+
"contact_point",
|
|
276
|
+
)
|
|
277
|
+
)
|
|
182
278
|
|
|
183
|
-
dataset_internal_fields = api.model(
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
279
|
+
dataset_internal_fields = api.model(
|
|
280
|
+
"DatasetInternals",
|
|
281
|
+
{
|
|
282
|
+
"created_at_internal": fields.ISODateTime(
|
|
283
|
+
description="The dataset's internal creation date on the site", required=True
|
|
284
|
+
),
|
|
285
|
+
"last_modified_internal": fields.ISODateTime(
|
|
286
|
+
description="The dataset's internal last modification date", required=True
|
|
287
|
+
),
|
|
288
|
+
},
|
|
289
|
+
)
|
|
189
290
|
|
|
190
|
-
dataset_fields = api.model(
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
description=
|
|
196
|
-
|
|
197
|
-
description
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
fields.
|
|
215
|
-
|
|
216
|
-
description=
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
291
|
+
dataset_fields = api.model(
|
|
292
|
+
"Dataset",
|
|
293
|
+
{
|
|
294
|
+
"id": fields.String(description="The dataset identifier", readonly=True),
|
|
295
|
+
"title": fields.String(description="The dataset title", required=True),
|
|
296
|
+
"acronym": fields.String(description="An optional dataset acronym"),
|
|
297
|
+
"slug": fields.String(description="The dataset permalink string", required=True),
|
|
298
|
+
"description": fields.Markdown(
|
|
299
|
+
description="The dataset description in markdown", required=True
|
|
300
|
+
),
|
|
301
|
+
"created_at": fields.ISODateTime(
|
|
302
|
+
description="This date is computed between harvested creation date if any and site's internal creation date",
|
|
303
|
+
required=True,
|
|
304
|
+
readonly=True,
|
|
305
|
+
),
|
|
306
|
+
"last_modified": fields.ISODateTime(
|
|
307
|
+
description="The dataset last modification date", required=True, readonly=True
|
|
308
|
+
),
|
|
309
|
+
"deleted": fields.ISODateTime(description="The deletion date if deleted", readonly=True),
|
|
310
|
+
"archived": fields.ISODateTime(description="The archival date if archived"),
|
|
311
|
+
"featured": fields.Boolean(description="Is the dataset featured"),
|
|
312
|
+
"private": fields.Boolean(
|
|
313
|
+
description="Is the dataset private to the owner or the organization"
|
|
314
|
+
),
|
|
315
|
+
"tags": fields.List(fields.String),
|
|
316
|
+
"badges": fields.List(
|
|
317
|
+
fields.Nested(badge_fields), description="The dataset badges", readonly=True
|
|
318
|
+
),
|
|
319
|
+
"resources": fields.List(
|
|
320
|
+
fields.Nested(resource_fields, description="The dataset resources")
|
|
321
|
+
),
|
|
322
|
+
"community_resources": fields.List(
|
|
323
|
+
fields.Nested(
|
|
324
|
+
community_resource_fields, description="The dataset community submitted resources"
|
|
325
|
+
)
|
|
326
|
+
),
|
|
327
|
+
"frequency": fields.String(
|
|
328
|
+
description="The update frequency",
|
|
329
|
+
required=True,
|
|
330
|
+
enum=list(UPDATE_FREQUENCIES),
|
|
331
|
+
default=DEFAULT_FREQUENCY,
|
|
332
|
+
),
|
|
333
|
+
"frequency_date": fields.ISODateTime(
|
|
334
|
+
description=(
|
|
335
|
+
"Next expected update date, you will be notified " "once that date is reached."
|
|
336
|
+
)
|
|
337
|
+
),
|
|
338
|
+
"harvest": fields.Nested(
|
|
339
|
+
dataset_harvest_fields,
|
|
340
|
+
readonly=True,
|
|
341
|
+
allow_null=True,
|
|
342
|
+
description="Dataset harvest metadata attributes",
|
|
343
|
+
skip_none=True,
|
|
344
|
+
),
|
|
345
|
+
"extras": fields.Raw(description="Extras attributes as key-value pairs"),
|
|
346
|
+
"metrics": fields.Raw(
|
|
347
|
+
attribute=lambda o: o.get_metrics(), description="The dataset metrics"
|
|
348
|
+
),
|
|
349
|
+
"organization": fields.Nested(
|
|
350
|
+
org_ref_fields, allow_null=True, description="The producer organization"
|
|
351
|
+
),
|
|
352
|
+
"owner": fields.Nested(
|
|
353
|
+
user_ref_fields, allow_null=True, description="The user information"
|
|
354
|
+
),
|
|
355
|
+
"temporal_coverage": fields.Nested(
|
|
356
|
+
temporal_coverage_fields, allow_null=True, description="The temporal coverage"
|
|
357
|
+
),
|
|
358
|
+
"spatial": fields.Nested(
|
|
359
|
+
spatial_coverage_fields, allow_null=True, description="The spatial coverage"
|
|
360
|
+
),
|
|
361
|
+
"license": fields.String(
|
|
362
|
+
attribute="license.id", default=DEFAULT_LICENSE["id"], description="The dataset license"
|
|
363
|
+
),
|
|
364
|
+
"uri": fields.UrlFor(
|
|
365
|
+
"api.dataset",
|
|
366
|
+
lambda o: {"dataset": o},
|
|
367
|
+
description="The dataset API URI",
|
|
368
|
+
required=True,
|
|
369
|
+
),
|
|
370
|
+
"page": fields.UrlFor(
|
|
371
|
+
"datasets.show",
|
|
372
|
+
lambda o: {"dataset": o},
|
|
373
|
+
description="The dataset page URL",
|
|
374
|
+
required=True,
|
|
375
|
+
fallback_endpoint="api.dataset",
|
|
376
|
+
),
|
|
377
|
+
"quality": fields.Raw(description="The dataset quality", readonly=True),
|
|
378
|
+
"last_update": fields.ISODateTime(
|
|
379
|
+
description="The resources last modification date", required=True
|
|
380
|
+
),
|
|
381
|
+
"schema": fields.Nested(
|
|
382
|
+
schema_fields, allow_null=True, description="Reference to the associated schema"
|
|
383
|
+
),
|
|
384
|
+
"internal": fields.Nested(
|
|
385
|
+
dataset_internal_fields,
|
|
386
|
+
readonly=True,
|
|
387
|
+
description="Site internal and specific object's data",
|
|
388
|
+
),
|
|
389
|
+
"contact_point": fields.Nested(
|
|
390
|
+
contact_point_fields, allow_null=True, description="The dataset's contact points"
|
|
391
|
+
),
|
|
392
|
+
},
|
|
393
|
+
mask=DEFAULT_MASK,
|
|
394
|
+
)
|
|
259
395
|
|
|
260
|
-
dataset_page_fields = api.model(
|
|
261
|
-
|
|
396
|
+
dataset_page_fields = api.model(
|
|
397
|
+
"DatasetPage", fields.pager(dataset_fields), mask="data{{{0}}},*".format(DEFAULT_MASK)
|
|
398
|
+
)
|
|
262
399
|
|
|
263
400
|
|
|
264
|
-
dataset_suggestion_fields = api.model(
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
description=
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
401
|
+
dataset_suggestion_fields = api.model(
|
|
402
|
+
"DatasetSuggestion",
|
|
403
|
+
{
|
|
404
|
+
"id": fields.String(description="The dataset identifier"),
|
|
405
|
+
"title": fields.String(description="The dataset title"),
|
|
406
|
+
"acronym": fields.String(description="An optional dataset acronym"),
|
|
407
|
+
"slug": fields.String(description="The dataset permalink string"),
|
|
408
|
+
"image_url": fields.ImageField(
|
|
409
|
+
size=BIGGEST_LOGO_SIZE, description="The dataset (organization) logo URL", readonly=True
|
|
410
|
+
),
|
|
411
|
+
"page": fields.UrlFor(
|
|
412
|
+
"datasets.show_redirect",
|
|
413
|
+
lambda d: {"dataset": d["slug"]},
|
|
414
|
+
description="The web page URL for this dataset",
|
|
415
|
+
fallback_endpoint="api.dataset",
|
|
416
|
+
),
|
|
417
|
+
},
|
|
418
|
+
)
|
|
275
419
|
|
|
276
420
|
|
|
277
|
-
resource_type_fields = api.model(
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
421
|
+
resource_type_fields = api.model(
|
|
422
|
+
"ResourceType",
|
|
423
|
+
{
|
|
424
|
+
"id": fields.String(description="The resource type identifier"),
|
|
425
|
+
"label": fields.String(description="The resource type display name"),
|
|
426
|
+
},
|
|
427
|
+
)
|
|
281
428
|
|
|
282
429
|
# follow the specification of https://schema.data.gouv.fr/schemas/schemas.json
|
|
283
|
-
catalog_schema_fields = api.model(
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
430
|
+
catalog_schema_fields = api.model(
|
|
431
|
+
"CatalogSchema",
|
|
432
|
+
{
|
|
433
|
+
"name": fields.String(),
|
|
434
|
+
"title": fields.String(),
|
|
435
|
+
"description": fields.String(),
|
|
436
|
+
"schema_url": fields.String(description="Often the link to the latest version"),
|
|
437
|
+
"schema_type": fields.String(enum=["tableschema", "datapackage", "jsonschema", "other"]),
|
|
438
|
+
"contact": fields.String(),
|
|
439
|
+
"examples": fields.List(
|
|
440
|
+
fields.Nested(
|
|
441
|
+
api.model(
|
|
442
|
+
"CatalogSchemaExample",
|
|
443
|
+
{
|
|
444
|
+
"title": fields.String(),
|
|
445
|
+
"path": fields.String(),
|
|
446
|
+
},
|
|
447
|
+
)
|
|
448
|
+
)
|
|
449
|
+
),
|
|
450
|
+
"labels": fields.List(fields.String()),
|
|
451
|
+
"consolidation_dataset_id": fields.String(),
|
|
452
|
+
"versions": fields.List(
|
|
453
|
+
fields.Nested(
|
|
454
|
+
api.model(
|
|
455
|
+
"CatalogSchemaVersion",
|
|
456
|
+
{
|
|
457
|
+
"version_name": fields.String(),
|
|
458
|
+
"schema_url": fields.String(),
|
|
459
|
+
},
|
|
460
|
+
)
|
|
461
|
+
)
|
|
462
|
+
),
|
|
463
|
+
"external_doc": fields.String(),
|
|
464
|
+
"external_tool": fields.String(
|
|
465
|
+
description="Link to tools to create a file with this schema"
|
|
466
|
+
),
|
|
467
|
+
"homepage": fields.String(),
|
|
468
|
+
"datapackage_title": fields.String(
|
|
469
|
+
description="Only present if the schema is inside a datapackage"
|
|
470
|
+
),
|
|
471
|
+
"datapackage_name": fields.String(
|
|
472
|
+
description="Only present if the schema is inside a datapackage"
|
|
473
|
+
),
|
|
474
|
+
"datapackage_description": fields.String(
|
|
475
|
+
description="Only present if the schema is inside a datapackage"
|
|
476
|
+
),
|
|
477
|
+
},
|
|
478
|
+
)
|