Skip to content

Agregar validación estricta opcional al crear o actualizar recursos #20

@germankay

Description

@germankay

related #10 (comment)

Contexto

Hoy el sistema permite subir o actualizar un resource CSV aunque el archivo sea inválido. Ese comportamiento es flexible y útil en muchos casos, pero algunas instancias de CKAN pueden necesitar una política más estricta, donde los archivos inválidos sean rechazados antes de ser guardados.

Para esos escenarios, sería útil contar con una opción configurable por sysadmin que ejecute la validación durante el alta o actualización del resource y bloquee la operación si el archivo no es válido.

Objetivo

Agregar una configuración opcional que permita validar automáticamente archivos CSV durante resource_create y resource_update, rechazando los archivos inválidos mediante ValidationError.

Propuesta

Incorporar una opción de configuración controlada por sysadmin, por ejemplo:

ckanext.validate.fail_on_invalid_upload = true|false

Cuando esta opción esté habilitada:

  • Se valida automáticamente el CSV durante la creación o actualización del resource.
  • Si la validación falla, se lanza un ValidationError.
  • El archivo inválido no se guarda.

Cuando esté deshabilitada:

  • Se mantiene el comportamiento actual.

Comportamiento esperado

Con validación estricta habilitada

  • Los resources CSV se validan durante create/update.
  • Si el archivo es válido, la operación continúa normalmente.
  • Si el archivo es inválido, se interrumpe la operación.
  • El usuario recibe un mensaje claro con el motivo del error.

Con validación estricta deshabilitada

  • El flujo actual no cambia.
  • La extensión sigue permitiendo validación manual o posterior.

Puntos de integración posibles

La implementación puede engancharse en puntos como:

  • before_create
  • before_update

o el mecanismo equivalente que resulte más apropiado dentro de la extensión.

Alcance inicial

Para una primera versión:

  • Aplicar solo a archivos CSV.
  • Reutilizar la lógica actual de validación.
  • Mostrar errores comprensibles para el usuario final.
  • Hacer que el comportamiento sea completamente configurable.

Fuera de alcance

  • Aplicar esta validación estricta a formatos no CSV.
  • Reemplazar el botón de validación manual.
  • Definir políticas avanzadas distintas según organización, dataset o tipo de usuario.

Tareas

  • Definir la opción de configuración
  • Implementar la validación automática en create/update
  • Lanzar ValidationError cuando el archivo sea inválido
  • Evitar que el resource inválido se persista
  • Mostrar mensajes de error claros en la UI/API
  • Agregar tests para el modo estricto habilitado
  • Agregar tests para el modo estricto deshabilitado
  • Documentar la configuración y su comportamiento

Criterios de aceptación

  • Existe una opción de configuración para habilitar/deshabilitar la validación estricta
  • Cuando está habilitada, un CSV inválido genera ValidationError
  • Cuando está habilitada, el resource inválido no se guarda
  • Cuando está deshabilitada, se conserva el comportamiento actual
  • Los errores son visibles y entendibles para el usuario

Pregunta abierta

Queda por definir cuál debe ser el valor por defecto de la configuración:

  • false, para preservar el comportamiento actual
  • true, para forzar una política estricta por defecto

Notas

Esta funcionalidad es más agresiva que el flujo actual, por lo que debe mantenerse como una opción explícita y configurable por instancia.

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions