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):
"""