From 1ccaa1936f0449fccc04acf9dff736558ffe6518 Mon Sep 17 00:00:00 2001 From: mjanez <96422458+mjanez@users.noreply.github.com> Date: Thu, 16 May 2024 09:39:11 +0200 Subject: [PATCH] Improve created/modified dates The commit updates the `last_update.html` template in the `schemingdcat` extension to use the `schemingdcat_parse_localised_date` helper function for displaying the date. This ensures that the date is correctly formatted based on the user's locale. The change improves the user experience by providing a more localized and readable date format for the last update information. --- .gitignore | 1 + ckanext/schemingdcat/helpers.py | 32 ++- .../schemas/dcat/dcat_dataset.yaml | 67 +++-- .../schemas/dcatap/dcatap_dataset.yaml | 87 ++++-- .../schemingdcat/schemas/default_presets.json | 18 +- .../schemas/geodcatap/geodcatap_dataset.yaml | 54 ++-- .../geodcatap_es/geodcatap_es_dataset.yaml | 268 +++++++++++++++++- .../display_snippets/date_localised.html | 3 + .../display_snippets/last_update.html | 2 +- ckanext/schemingdcat/validators.py | 49 ++++ 10 files changed, 489 insertions(+), 92 deletions(-) create mode 100644 ckanext/schemingdcat/templates/schemingdcat/display_snippets/date_localised.html diff --git a/.gitignore b/.gitignore index 11da08a..9651201 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .ropeproject node_modules bower_components +.vscode # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/ckanext/schemingdcat/helpers.py b/ckanext/schemingdcat/helpers.py index 4869824..b7122b8 100644 --- a/ckanext/schemingdcat/helpers.py +++ b/ckanext/schemingdcat/helpers.py @@ -10,6 +10,7 @@ from yaml.loader import SafeLoader from pathlib import Path from functools import lru_cache +import datetime from six.moves.urllib.parse import urlencode @@ -998,4 +999,33 @@ def schemingdcat_package_count_for_source(source_id): search_dict = {'fq': fq, 'include_private': True} context = {'model': model, 'session': model.Session} result = logic.get_action('package_search')(context, search_dict) - return result.get('count', 0) \ No newline at end of file + return result.get('count', 0) + +@helper +def schemingdcat_parse_localised_date(date_=None): + '''Parse a datetime object or timestamp string as a localised date. + If timestamp is badly formatted, then None is returned. + + :param date_: the date + :type date_: datetime or date or ISO string format + :rtype: date + ''' + if not date_: + return None + if isinstance(date_, str): + try: + date_ = ckan_helpers.date_str_to_datetime(date_) + except (TypeError, ValueError): + return None + # check we are now a datetime or date + if isinstance(date_, datetime.datetime): + date_ = date_.date() + elif not isinstance(date_, datetime.date): + return None + + # Format date based on locale + locale = schemingdcat_get_current_lang() + if locale == 'es': + return date_.strftime('%d-%m-%Y') + else: + return date_.strftime('%Y-%m-%d') \ No newline at end of file diff --git a/ckanext/schemingdcat/schemas/dcat/dcat_dataset.yaml b/ckanext/schemingdcat/schemas/dcat/dcat_dataset.yaml index 01965df..b73f4c5 100644 --- a/ckanext/schemingdcat/schemas/dcat/dcat_dataset.yaml +++ b/ckanext/schemingdcat/schemas/dcat/dcat_dataset.yaml @@ -2,8 +2,10 @@ scheming_version: 2 dataset_type: document about: "Datasets/Distributions: Adaptation for CKAN of the Data Catalog Vocabulary (DCAT) - Version 3 (https://www.w3.org/TR/vocab-dcat-3/)." about_url: https://github.com/mjanez/ckanext-schemingdcat -schema_version: 1.0 -schema_date: 2023-08-24 +form_languages: ["en", "es"] +required_language: "en" +schema_version: 2.1 +schema_date: 2024-05-01 schema_name: dcat schema_title: DCAT schema_description: Data Catalog Vocabulary (DCAT) @@ -26,18 +28,19 @@ dataset_fields: en: Basic metadata identification and reference information. es: Información básica de identificación y referencia de los metadatos. -# Dataset title (M) - field_name: title +# Dataset title translated (M) + field_name: title_translated label: en: Dataset title es: Título del conjunto de datos - preset: title - validators: not_empty scheming_required + preset: schemingdcat_fluent_title_translated required: True display_property: dct:title form_placeholder: en: eg. A descriptive title. es: ej. Un título descriptivo. + form_languages: ["en", "es"] + required_language: "en" # Dataset locator (O) ## For all resources that is equivalent to this element, such as a URI (of dcat:Dataset) @@ -73,18 +76,22 @@ dataset_fields: en: "Graphic that provides an illustration of the dataset." es: "Gráfico que ilustra el conjunto de datos." -# Dataset abstract (M) -- field_name: notes +# # Dataset abstract translated (M) +- field_name: notes_translated label: en: Abstract es: Resumen - form_snippet: markdown.html - display_property: dct:description - validators: not_empty scheming_required + preset: schemingdcat_fluent_notes_translated required: True + display_property: dct:description form_placeholder: en: eg. Some useful description about the dataset. es: ej. Una descripción útil sobre el conjunto de datos. + form_languages: ["en", "es"] + required_language: "en" + default_values: + en: Default abstract of the {dataset}. + es: Resumen por defecto del conjunto de datos {dataset}. # Dataset type (M) - field_name: dcat_type @@ -374,23 +381,18 @@ dataset_fields: label: en: Date of creation es: Fecha de creación - validators: not_empty scheming_required display_property: dct:created - required: True - preset: date + preset: date_created # Date of last revision (O) - field_name: modified label: en: Date of last revision es: Fecha de última modificación - validators: not_empty scheming_required display_snippet: schemingdcat/display_snippets/last_update.html display_property: dct:modified - required: True - preset: date + preset: date_modified -##TODO:## # Keyword value (M) - field_name: tag_string label: @@ -403,6 +405,21 @@ dataset_fields: en: A keyword or tag describing the resource.' es: 'Palabra clave o etiqueta que describe el recurso.' +# Keyword URI (M) +## TODO: Improve form_snippet to generate tag_uri auto from tag_string +## TODO: Add as scheming_datastore_choices (helpers.py/#102) http://github.com/ckan/ckanext-scheming/issues/270 +## Only for ckanext-dcat profiles.py +- field_name: tag_uri + label: + en: Keyword URIs + es: URI de palabras clave + preset: multiple_text + display_snippet: schemingdcat/display_snippets/list_keywords.html + form_placeholder: 'http://inspire.ec.europa.eu/metadata-codelist/IACSData/gsaa' + help_text: + en: 'eg.: Metadata code list register (INSPIRE): http://inspire.ec.europa.eu/metadata-codelist' + es: 'ej: Registro de listas controladas de metadatos (INSPIRE): http://inspire.ec.europa.eu/metadata-codelist' + # TODO: Probably better include contact_role and contact_organization (boolean) to distinguish between vcard:Individual and vcard:Organizationto use in ckanext-dcat/profiles.py # Metadata point of contact URI (M) - field_name: contact_uri @@ -673,11 +690,12 @@ dataset_fields: label: en: Provenance statement es: Declaración de procedencia - form_snippet: markdown.html + preset: schemingdcat_fluent_markdown display_property: dct:provenance form_placeholder: en: Means the history of a data set, and the life cycle from collection and acquisition through compilation and derivation to its current form, in accordance with EN ISO-19101. es: Historia de un conjunto de datos y su ciclo de vida desde su recogida y adquisición hasta su compilación y derivación hasta su forma actual, con arreglo a la norma EN ISO-19101. + form_languages: ["en", "es"] # Conformity (M) - field_name: conforms_to @@ -1182,11 +1200,12 @@ dataset_fields: help_text: en: A description of the differences between this version and a previous version of the Dataset. es: Una descripción de las diferencias entre esta versión y una versión anterior del Dataset. + preset: schemingdcat_fluent_markdown display_property: adms:versionNotes - form_snippet: markdown.html form_placeholder: en: eg. Some useful version notes about the dataset. es: ej. Una descripción útil sobre las diferencias de esta versión del conjunto de datos. + form_languages: ["en", "es"] # Dataset validity (O) - field_name: valid @@ -1208,7 +1227,7 @@ resource_fields: display_property: dcat:accessURL display_snippet: schemingdcat/display_snippets/link.html -# Resource title (M) +#FIX: Resource title (M) -- name_translated field dont work - field_name: name label: en: Distribution title @@ -1218,7 +1237,7 @@ resource_fields: es: ej. Web Map Service display_property: dct:title -# Resource abstract (M) +#FIX: Resource abstract (M) -- description_translated field dont work - field_name: description label: en: Distribution abstract @@ -1235,7 +1254,7 @@ resource_fields: en: Date of creation es: Fecha de creación display_property: dct:created - preset: date + preset: date_created # Date of last revision (M) - field_name: modified @@ -1243,7 +1262,7 @@ resource_fields: en: Date of last revision es: Fecha de última modificación display_property: dct:modified - preset: date + preset: date_modified # Resource status (O) - field_name: availability diff --git a/ckanext/schemingdcat/schemas/dcatap/dcatap_dataset.yaml b/ckanext/schemingdcat/schemas/dcatap/dcatap_dataset.yaml index 387f801..10c2c45 100644 --- a/ckanext/schemingdcat/schemas/dcatap/dcatap_dataset.yaml +++ b/ckanext/schemingdcat/schemas/dcatap/dcatap_dataset.yaml @@ -2,8 +2,10 @@ scheming_version: 2 dataset_type: dataset about: "Datasets/Distributions: Adaptation for CKAN of the DCAT-AP vocabulary (https://semiceu.github.io/DCAT-AP/releases/3.0.0/). European context (EU27)" about_url: https://github.com/mjanez/ckanext-schemingdcat -schema_version: 1.0 -schema_date: 2023-08-24 +form_languages: ["en", "es"] +required_language: "en" +schema_version: 2.1 +schema_date: 2024-05-01 schema_name: dcatap schema_title: DCAT-AP schema_description: DCAT Application profile for data portals in Europe (DCAT-AP) @@ -26,18 +28,19 @@ dataset_fields: en: Basic metadata identification and reference information. es: Información básica de identificación y referencia de los metadatos. -# Dataset title (M) - field_name: title +# Dataset title translated (M) + field_name: title_translated label: en: Dataset title es: Título del conjunto de datos - preset: title - validators: not_empty scheming_required + preset: schemingdcat_fluent_title_translated required: True display_property: dct:title form_placeholder: en: eg. A descriptive title. es: ej. Un título descriptivo. + form_languages: ["en", "es"] + required_language: "en" # Dataset locator (O) ## For all resources that is equivalent to this element, such as a URI (of dcat:Dataset) @@ -73,18 +76,22 @@ dataset_fields: en: "Graphic that provides an illustration of the dataset." es: "Gráfico que ilustra el conjunto de datos." -# Dataset abstract (M) -- field_name: notes +# # Dataset abstract translated (M) +- field_name: notes_translated label: en: Abstract es: Resumen - form_snippet: markdown.html - display_property: dct:description - validators: not_empty scheming_required + preset: schemingdcat_fluent_notes_translated required: True + display_property: dct:description form_placeholder: en: eg. Some useful description about the dataset. es: ej. Una descripción útil sobre el conjunto de datos. + form_languages: ["en", "es"] + required_language: "en" + default_values: + en: Default abstract of the {dataset}. + es: Resumen por defecto del conjunto de datos {dataset}. # Dataset type (M) - field_name: dcat_type @@ -374,23 +381,18 @@ dataset_fields: label: en: Date of creation es: Fecha de creación - validators: not_empty scheming_required display_property: dct:created - required: True - preset: date + preset: date_created # Date of last revision (O) - field_name: modified label: en: Date of last revision es: Fecha de última modificación - validators: not_empty scheming_required display_snippet: schemingdcat/display_snippets/last_update.html display_property: dct:modified - required: True - preset: date + preset: date_modified -##TODO:## # Keyword value (M) - field_name: tag_string label: @@ -403,6 +405,21 @@ dataset_fields: en: A keyword or tag describing the resource.' es: 'Palabra clave o etiqueta que describe el recurso.' +# Keyword URI (M) +## TODO: Improve form_snippet to generate tag_uri auto from tag_string +## TODO: Add as scheming_datastore_choices (helpers.py/#102) http://github.com/ckan/ckanext-scheming/issues/270 +## Only for ckanext-dcat profiles.py +- field_name: tag_uri + label: + en: Keyword URIs + es: URI de palabras clave + preset: multiple_text + display_snippet: schemingdcat/display_snippets/list_keywords.html + form_placeholder: 'http://inspire.ec.europa.eu/metadata-codelist/IACSData/gsaa' + help_text: + en: 'eg.: Metadata code list register (INSPIRE): http://inspire.ec.europa.eu/metadata-codelist' + es: 'ej: Registro de listas controladas de metadatos (INSPIRE): http://inspire.ec.europa.eu/metadata-codelist' + # TODO: Probably better include contact_role and contact_organization (boolean) to distinguish between vcard:Individual and vcard:Organizationto use in ckanext-dcat/profiles.py # Metadata point of contact URI (M) - field_name: contact_uri @@ -668,16 +685,17 @@ dataset_fields: es: 'Un identificador alternativo en un contexto particular, puede expresar otros identificadores acuñados localmente o identificadores externos, como DOI, ELI, arΧiv para obras creativas y ORCID, VIAF, ISNI para actores como autores y editores, siempre que los identificadores sean globalmente únicos y estables.' help_allow_html: True -# Provenance statement (M) +# Lineage statement (M) - field_name: provenance label: - en: Provenance statement - es: Declaración de procedencia - form_snippet: markdown.html + en: Lineage statement + es: Declaración de linaje + preset: schemingdcat_fluent_markdown display_property: dct:provenance form_placeholder: en: Means the history of a data set, and the life cycle from collection and acquisition through compilation and derivation to its current form, in accordance with EN ISO-19101. es: Historia de un conjunto de datos y su ciclo de vida desde su recogida y adquisición hasta su compilación y derivación hasta su forma actual, con arreglo a la norma EN ISO-19101. + form_languages: ["en", "es"] # Conformity (M) - field_name: conforms_to @@ -872,6 +890,18 @@ dataset_fields: en: 'URI identifying the related resource. You can include as many properties as you know of references.' es: 'URI que identifica al recurso relacionado. Se pueden incluir tantas propiedades como referencias se conozcan.' +# Purpose (O) +- field_name: purpose + label: + en: Purpose + es: Propósito + form_placeholder: 'Environment management.' + preset: schemingdcat_fluent_text + help_text: + en: 'Summary of the intentions for which the dataset was developed (ISO 19115).' + es: 'Resumen de las intenciones para las que se desarrolló el conjunto de datos (ISO 19115).' + form_languages: ["en", "es"] + # Character encoding (C) - field_name: encoding label: @@ -1182,14 +1212,14 @@ dataset_fields: help_text: en: A description of the differences between this version and a previous version of the Dataset. es: Una descripción de las diferencias entre esta versión y una versión anterior del Dataset. + preset: schemingdcat_fluent_markdown display_property: adms:versionNotes - form_snippet: markdown.html form_placeholder: en: eg. Some useful version notes about the dataset. es: ej. Una descripción útil sobre las diferencias de esta versión del conjunto de datos. + form_languages: ["en", "es"] # Dataset validity (O) -##TODO: To profiles.py - field_name: valid label: en: Dataset validity @@ -1197,7 +1227,6 @@ dataset_fields: display_property: dct:valid preset: date - #--Resource/Distribution (dcat:Distribution) fields--# resource_fields: @@ -1210,7 +1239,7 @@ resource_fields: display_property: dcat:accessURL display_snippet: schemingdcat/display_snippets/link.html -# Resource title (M) +#FIX: Resource title (M) -- name_translated field dont work - field_name: name label: en: Distribution title @@ -1220,7 +1249,7 @@ resource_fields: es: ej. Web Map Service display_property: dct:title -# Resource abstract (M) +#FIX: Resource abstract (M) -- description_translated field dont work - field_name: description label: en: Distribution abstract @@ -1237,7 +1266,7 @@ resource_fields: en: Date of creation es: Fecha de creación display_property: dct:created - preset: date + preset: date_created # Date of last revision (M) - field_name: modified @@ -1245,7 +1274,7 @@ resource_fields: en: Date of last revision es: Fecha de última modificación display_property: dct:modified - preset: date + preset: date_modified # Resource status (O) - field_name: availability diff --git a/ckanext/schemingdcat/schemas/default_presets.json b/ckanext/schemingdcat/schemas/default_presets.json index 7afb6ad..9b59a35 100644 --- a/ckanext/schemingdcat/schemas/default_presets.json +++ b/ckanext/schemingdcat/schemas/default_presets.json @@ -114,10 +114,26 @@ "preset_name": "date", "values": { "form_snippet": "date.html", - "display_snippet": "date.html", + "display_snippet": "schemingdcat/display_snippets/date_localised.html", "validators": "scheming_required isodate convert_to_json_if_date" } }, + { + "preset_name": "date_modified", + "values": { + "form_snippet": null, + "display_snippet": "schemingdcat/display_snippets/date_localised.html", + "validators": "schemingdcat_update_modified scheming_required isodate convert_to_json_if_date" + } + }, + { + "preset_name": "date_created", + "values": { + "form_snippet": "date.html", + "display_snippet": "schemingdcat/display_snippets/date_localised.html", + "validators": "schemingdcat_if_empty_datenow scheming_required isodate convert_to_json_if_date" + } + }, { "preset_name": "datetime", "values": { diff --git a/ckanext/schemingdcat/schemas/geodcatap/geodcatap_dataset.yaml b/ckanext/schemingdcat/schemas/geodcatap/geodcatap_dataset.yaml index 372e8d8..f934696 100644 --- a/ckanext/schemingdcat/schemas/geodcatap/geodcatap_dataset.yaml +++ b/ckanext/schemingdcat/schemas/geodcatap/geodcatap_dataset.yaml @@ -2,8 +2,10 @@ scheming_version: 2 dataset_type: dataset about: "Datasets/Distributions: Adaptation for CKAN of the GeoDCAT-AP metadata schema extended (2.0.0) with ISO-19115 (INSPIRE) mandatory elements. European context (EU27)" about_url: https://github.com/mjanez/ckanext-schemingdcat -schema_version: 1.0 -schema_date: 2023-08-24 +form_languages: ["en", "en"] +required_language: "en" +schema_version: 2.1 +schema_date: 2024-05-01 schema_name: geodcatap schema_title: GeoDCAT-AP schema_description: Geospatial extension for the DCAT application profile for data portals in Europe (GeoDCAT-AP) @@ -26,18 +28,19 @@ dataset_fields: en: Basic metadata identification and reference information. es: Información básica de identificación y referencia de los metadatos. -# Dataset title (M) - field_name: title +# Dataset title translated (M) + field_name: title_translated label: en: Dataset title es: Título del conjunto de datos - preset: title - validators: not_empty scheming_required + preset: schemingdcat_fluent_title_translated required: True display_property: dct:title form_placeholder: en: eg. A descriptive title. es: ej. Un título descriptivo. + form_languages: ["en", "es"] + required_language: "en" # Dataset locator (O) ## For all resources that is equivalent to this element, such as a URI (of dcat:Dataset) @@ -73,18 +76,22 @@ dataset_fields: en: "Graphic that provides an illustration of the dataset." es: "Gráfico que ilustra el conjunto de datos." -# Dataset abstract (M) -- field_name: notes +# # Dataset abstract translated (M) +- field_name: notes_translated label: en: Abstract es: Resumen - form_snippet: markdown.html - display_property: dct:description - validators: not_empty scheming_required + preset: schemingdcat_fluent_notes_translated required: True + display_property: dct:description form_placeholder: en: eg. Some useful description about the dataset. es: ej. Una descripción útil sobre el conjunto de datos. + form_languages: ["en", "es"] + required_language: "en" + default_values: + en: Default abstract of the {dataset}. + es: Resumen por defecto del conjunto de datos {dataset}. # Dataset type (M) - field_name: dcat_type @@ -386,21 +393,17 @@ dataset_fields: label: en: Date of creation es: Fecha de creación - validators: not_empty scheming_required display_property: dct:created - required: True - preset: date + preset: date_created # Date of last revision (O) - field_name: modified label: en: Date of last revision es: Fecha de última modificación - validators: not_empty scheming_required display_snippet: schemingdcat/display_snippets/last_update.html display_property: dct:modified - required: True - preset: date + preset: date_modified # ISO 19115 topic category (M) ## Recommended (GeoDCAT-AP) / INSPIRE Mandatory as topic @@ -759,11 +762,12 @@ dataset_fields: label: en: Lineage statement es: Declaración de linaje - form_snippet: markdown.html + preset: schemingdcat_fluent_markdown display_property: dct:provenance form_placeholder: en: Means the history of a data set, and the life cycle from collection and acquisition through compilation and derivation to its current form, in accordance with EN ISO-19101. es: Historia de un conjunto de datos y su ciclo de vida desde su recogida y adquisición hasta su compilación y derivación hasta su forma actual, con arreglo a la norma EN ISO-19101. + form_languages: ["en", "es"] # Conformity (M) - field_name: conforms_to @@ -987,10 +991,11 @@ dataset_fields: en: Purpose es: Propósito form_placeholder: 'Environment management.' - form_snippet: markdown.html + preset: schemingdcat_fluent_text help_text: en: 'Summary of the intentions for which the dataset was developed (ISO 19115).' es: 'Resumen de las intenciones para las que se desarrolló el conjunto de datos (ISO 19115).' + form_languages: ["en", "es"] # Character encoding (C) - field_name: encoding @@ -1514,11 +1519,12 @@ dataset_fields: help_text: en: A description of the differences between this version and a previous version of the Dataset. es: Una descripción de las diferencias entre esta versión y una versión anterior del Dataset. + preset: schemingdcat_fluent_markdown display_property: adms:versionNotes - form_snippet: markdown.html form_placeholder: en: eg. Some useful version notes about the dataset. es: ej. Una descripción útil sobre las diferencias de esta versión del conjunto de datos. + form_languages: ["en", "es"] # Dataset validity (O) - field_name: valid @@ -1540,7 +1546,7 @@ resource_fields: display_property: dcat:accessURL display_snippet: schemingdcat/display_snippets/link.html -# Resource title (M) +#FIX: Resource title (M) -- name_translated field dont work - field_name: name label: en: Distribution title @@ -1550,7 +1556,7 @@ resource_fields: es: ej. Web Map Service display_property: dct:title -# Resource abstract (M) +#FIX: Resource abstract (M) -- description_translated field dont work - field_name: description label: en: Distribution abstract @@ -1567,7 +1573,7 @@ resource_fields: en: Date of creation es: Fecha de creación display_property: dct:created - preset: date + preset: date_created # Date of last revision (M) - field_name: modified @@ -1575,7 +1581,7 @@ resource_fields: en: Date of last revision es: Fecha de última modificación display_property: dct:modified - preset: date + preset: date_modified # Resource status (O) - field_name: availability diff --git a/ckanext/schemingdcat/schemas/geodcatap_es/geodcatap_es_dataset.yaml b/ckanext/schemingdcat/schemas/geodcatap_es/geodcatap_es_dataset.yaml index 6dc0141..3e99117 100644 --- a/ckanext/schemingdcat/schemas/geodcatap_es/geodcatap_es_dataset.yaml +++ b/ckanext/schemingdcat/schemas/geodcatap_es/geodcatap_es_dataset.yaml @@ -4,8 +4,8 @@ about: "Datasets/Distributions: Adaptation for CKAN of the GeoDCAT-AP metadata s about_url: https://github.com/mjanez/ckanext-schemingdcat, form_languages: ["es", "en"] required_language: "es" -schema_version: 2.0 -schema_date: 2023-10-19 +schema_version: 2.1 +schema_date: 2024-05-01 schema_name: geodcatap_es schema_title: GeoDCAT-AP (ES) schema_description: "Geospatial extension to the DCAT application profile for data portals in Europe (GeoDCAT-AP). It is adapted to the Spanish context and includes compatibility with the Technical Interoperability Standard (NTI-RISP), the open data profile for Spain: https://datos.gob.es/en/documentacion/guia-de-aplicacion-de-la-norma-tecnica-de-interoperabilidad-de-reutilizacion-de" @@ -551,27 +551,147 @@ dataset_fields: en: English es: Inglés value: http://publications.europa.eu/resource/authority/language/ENG + - label: + en: German + es: Alemán + value: http://publications.europa.eu/resource/authority/language/DEU + - label: + en: French + es: Francés + value: http://publications.europa.eu/resource/authority/language/FRA + - label: + en: Italian + es: Italiano + value: http://publications.europa.eu/resource/authority/language/ITA + - label: + en: Dutch + es: Neerlandés + value: http://publications.europa.eu/resource/authority/language/NLD + - label: + en: Danish + es: Danés + value: http://publications.europa.eu/resource/authority/language/DAN + - label: + en: Greek + es: Griego + value: http://publications.europa.eu/resource/authority/language/ELL + - label: + en: Portuguese + es: Portugués + value: http://publications.europa.eu/resource/authority/language/POR + - label: + en: Finnish + es: Finés + value: http://publications.europa.eu/resource/authority/language/FIN + - label: + en: Swedish + es: Sueco + value: http://publications.europa.eu/resource/authority/language/SWE + - label: + en: Czech + es: Checo + value: http://publications.europa.eu/resource/authority/language/CES + - label: + en: Estonian + es: Estonio + value: http://publications.europa.eu/resource/authority/language/EST + - label: + en: Croatian + es: Croata + value: http://publications.europa.eu/resource/authority/language/HRV + - label: + en: Hungarian + es: Húngaro + value: http://publications.europa.eu/resource/authority/language/HUN + - label: + en: Latvian + es: Letón + value: http://publications.europa.eu/resource/authority/language/LAV + - label: + en: Lithuanian + es: Lituano + value: http://publications.europa.eu/resource/authority/language/LIT + - label: + en: Maltese + es: Maltés + value: http://publications.europa.eu/resource/authority/language/MLT + - label: + en: Polish + es: Polaco + value: http://publications.europa.eu/resource/authority/language/POL + - label: + en: Slovak + es: Eslovaco + value: http://publications.europa.eu/resource/authority/language/SLK + - label: + en: Slovene + es: Esloveno + value: http://publications.europa.eu/resource/authority/language/SLV + - label: + en: Romanian + es: Rumano + value: http://publications.europa.eu/resource/authority/language/ROM + - label: + en: Bulgarian + es: Búlgaro + value: http://publications.europa.eu/resource/authority/language/BUL + - label: + en: Irish + es: Irlandés + value: http://publications.europa.eu/resource/authority/language/GLE + - label: + en: Croatian + es: Croata + value: http://publications.europa.eu/resource/authority/language/HRV + - label: + en: Luxembourgish + es: Luxemburgués + value: http://publications.europa.eu/resource/authority/language/LTZ + - label: + en: Slovak + es: Eslovaco + value: http://publications.europa.eu/resource/authority/language/SLK + - label: + en: Slovene + es: Esloveno + value: http://publications.europa.eu/resource/authority/language/SLV + - label: + en: Maltese + es: Maltés + value: http://publications.europa.eu/resource/authority/language/MLT + - label: + en: Polish + es: Polaco + value: http://publications.europa.eu/resource/authority/language/POL + - label: + en: Romanian + es: Rumano + value: http://publications.europa.eu/resource/authority/language/ROM + - label: + en: Bulgarian + es: Búlgaro + value: http://publications.europa.eu/resource/authority/language/BUL + - label: + en: Irish + es: Irlandés + value: http://publications.europa.eu/resource/authority/language/GLE # Date of creation (O) - field_name: created label: en: Date of creation es: Fecha de creación - validators: not_empty scheming_required display_property: dct:created - required: True - preset: date + preset: date_created # Date of last revision (O) - field_name: modified label: en: Date of last revision es: Fecha de última modificación - validators: not_empty scheming_required display_snippet: schemingdcat/display_snippets/last_update.html display_property: dct:modified - required: True - preset: date + preset: date_modified # ISO 19115 topic category (M) ## Recommended (GeoDCAT-AP) / INSPIRE Mandatory as topic @@ -925,7 +1045,7 @@ dataset_fields: es: 'Un identificador alternativo en un contexto particular, puede expresar otros identificadores acuñados localmente o identificadores externos, como DOI, ELI, arΧiv para obras creativas y ORCID, VIAF, ISNI para actores como autores y editores, siempre que los identificadores sean globalmente únicos y estables.' help_allow_html: True -# # Lineage statement (M) +# Lineage statement (M) - field_name: provenance label: en: Lineage statement @@ -1153,7 +1273,7 @@ dataset_fields: en: 'URI identifying the related resource. You can include as many properties as you know of references.' es: 'URI que identifica al recurso relacionado. Se pueden incluir tantas propiedades como referencias se conozcan.' -# # Purpose (O) +# Purpose (O) - field_name: purpose label: en: Purpose @@ -2093,7 +2213,7 @@ resource_fields: en: Date of creation es: Fecha de creación display_property: dct:created - preset: date + preset: date_created # Date of last revision (M) - field_name: modified @@ -2101,7 +2221,7 @@ resource_fields: en: Date of last revision es: Fecha de última modificación display_property: dct:modified - preset: date + preset: date_modified # Resource status (O) - field_name: availability @@ -2219,6 +2339,130 @@ resource_fields: en: English es: Inglés value: http://publications.europa.eu/resource/authority/language/ENG + - label: + en: German + es: Alemán + value: http://publications.europa.eu/resource/authority/language/DEU + - label: + en: French + es: Francés + value: http://publications.europa.eu/resource/authority/language/FRA + - label: + en: Italian + es: Italiano + value: http://publications.europa.eu/resource/authority/language/ITA + - label: + en: Dutch + es: Neerlandés + value: http://publications.europa.eu/resource/authority/language/NLD + - label: + en: Danish + es: Danés + value: http://publications.europa.eu/resource/authority/language/DAN + - label: + en: Greek + es: Griego + value: http://publications.europa.eu/resource/authority/language/ELL + - label: + en: Portuguese + es: Portugués + value: http://publications.europa.eu/resource/authority/language/POR + - label: + en: Finnish + es: Finés + value: http://publications.europa.eu/resource/authority/language/FIN + - label: + en: Swedish + es: Sueco + value: http://publications.europa.eu/resource/authority/language/SWE + - label: + en: Czech + es: Checo + value: http://publications.europa.eu/resource/authority/language/CES + - label: + en: Estonian + es: Estonio + value: http://publications.europa.eu/resource/authority/language/EST + - label: + en: Croatian + es: Croata + value: http://publications.europa.eu/resource/authority/language/HRV + - label: + en: Hungarian + es: Húngaro + value: http://publications.europa.eu/resource/authority/language/HUN + - label: + en: Latvian + es: Letón + value: http://publications.europa.eu/resource/authority/language/LAV + - label: + en: Lithuanian + es: Lituano + value: http://publications.europa.eu/resource/authority/language/LIT + - label: + en: Maltese + es: Maltés + value: http://publications.europa.eu/resource/authority/language/MLT + - label: + en: Polish + es: Polaco + value: http://publications.europa.eu/resource/authority/language/POL + - label: + en: Slovak + es: Eslovaco + value: http://publications.europa.eu/resource/authority/language/SLK + - label: + en: Slovene + es: Esloveno + value: http://publications.europa.eu/resource/authority/language/SLV + - label: + en: Romanian + es: Rumano + value: http://publications.europa.eu/resource/authority/language/ROM + - label: + en: Bulgarian + es: Búlgaro + value: http://publications.europa.eu/resource/authority/language/BUL + - label: + en: Irish + es: Irlandés + value: http://publications.europa.eu/resource/authority/language/GLE + - label: + en: Croatian + es: Croata + value: http://publications.europa.eu/resource/authority/language/HRV + - label: + en: Luxembourgish + es: Luxemburgués + value: http://publications.europa.eu/resource/authority/language/LTZ + - label: + en: Slovak + es: Eslovaco + value: http://publications.europa.eu/resource/authority/language/SLK + - label: + en: Slovene + es: Esloveno + value: http://publications.europa.eu/resource/authority/language/SLV + - label: + en: Maltese + es: Maltés + value: http://publications.europa.eu/resource/authority/language/MLT + - label: + en: Polish + es: Polaco + value: http://publications.europa.eu/resource/authority/language/POL + - label: + en: Romanian + es: Rumano + value: http://publications.europa.eu/resource/authority/language/ROM + - label: + en: Bulgarian + es: Búlgaro + value: http://publications.europa.eu/resource/authority/language/BUL + - label: + en: Irish + es: Irlandés + value: http://publications.europa.eu/resource/authority/language/GLE # Byte size (O) - field_name: size diff --git a/ckanext/schemingdcat/templates/schemingdcat/display_snippets/date_localised.html b/ckanext/schemingdcat/templates/schemingdcat/display_snippets/date_localised.html new file mode 100644 index 0000000..9f6ed79 --- /dev/null +++ b/ckanext/schemingdcat/templates/schemingdcat/display_snippets/date_localised.html @@ -0,0 +1,3 @@ +{% if data[field.field_name] %} + {{ h.schemingdcat_parse_localised_date(data[field.field_name].split()[0]) }} +{% endif %} \ No newline at end of file diff --git a/ckanext/schemingdcat/templates/schemingdcat/display_snippets/last_update.html b/ckanext/schemingdcat/templates/schemingdcat/display_snippets/last_update.html index 535eee1..db9b327 100644 --- a/ckanext/schemingdcat/templates/schemingdcat/display_snippets/last_update.html +++ b/ckanext/schemingdcat/templates/schemingdcat/display_snippets/last_update.html @@ -1,5 +1,5 @@ {% if data[field.field_name] %} - {{ data[field.field_name].split()[0] }} + {{ h.schemingdcat_parse_localised_date(data[field.field_name].split()[0]) }}
{{ _('Show changelog') }} {% endif %} \ No newline at end of file diff --git a/ckanext/schemingdcat/validators.py b/ckanext/schemingdcat/validators.py index d6f66f3..ab78188 100644 --- a/ckanext/schemingdcat/validators.py +++ b/ckanext/schemingdcat/validators.py @@ -16,6 +16,8 @@ unicode_safe, ) +import datetime + import logging from wsgiref.validate import validator from ckanext.fluent.helpers import ( @@ -560,6 +562,53 @@ def validator(key, data, errors, context): return validator +@scheming_validator +@validator +def schemingdcat_if_empty_datenow(field, schema): + """ + Returns a validator function that sets the current datetime as the value for a field if it's empty. + + This validator checks if the value of the field is missing, None, or an empty string. If so, it sets the current datetime in ISO format as the value of the field. + + Args: + field (dict): The field to validate. + A dictionary containing information about the field to be validated. + schema (dict): The schema for the field. + A dictionary containing the schema for the field to be validated. + + Returns: + function: A validation function that can be used to validate the field and set the current datetime if it's empty. + """ + def validator(key, data, errors, context): + value = data[key] + + if value is missing or value is None or value == '': + data[key] = datetime.datetime.now().isoformat() + + return validator + +@scheming_validator +@validator +def schemingdcat_update_modified(field, schema): + """ + Returns a validator function that always sets the current datetime as the value for a field. + + This validator does not check the current value of the field. It always sets the current datetime in ISO format as the value of the field. + + Args: + field (dict): The field to update. + A dictionary containing information about the field to be updated. + schema (dict): The schema for the field. + A dictionary containing the schema for the field to be updated. + + Returns: + function: A validation function that can be used to update the field with the current datetime. + """ + def validator(key, data, errors, context): + data[key] = datetime.datetime.now().isoformat() + + return validator + @validator def multilingual_text_output(value): """