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
Criterios de aceptación
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.
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_createyresource_update, rechazando los archivos inválidos medianteValidationError.Propuesta
Incorporar una opción de configuración controlada por sysadmin, por ejemplo:
ckanext.validate.fail_on_invalid_upload = true|falseCuando esta opción esté habilitada:
ValidationError.Cuando esté deshabilitada:
Comportamiento esperado
Con validación estricta habilitada
Con validación estricta deshabilitada
Puntos de integración posibles
La implementación puede engancharse en puntos como:
before_createbefore_updateo el mecanismo equivalente que resulte más apropiado dentro de la extensión.
Alcance inicial
Para una primera versión:
Fuera de alcance
Tareas
ValidationErrorcuando el archivo sea inválidoCriterios de aceptación
ValidationErrorPregunta abierta
Queda por definir cuál debe ser el valor por defecto de la configuración:
false, para preservar el comportamiento actualtrue, para forzar una política estricta por defectoNotas
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.