Commit 299e4176 authored by Pierre Dittgen's avatar Pierre Dittgen
Browse files

'year-interval-value can now allow year only

parent 1b2b8ffc
......@@ -7,7 +7,7 @@ from __future__ import unicode_literals
Year Interval Value check
Vérifie que l'on a bien une valeur du type "aaaa/aaaa" avec la première année
inférieure à la seconde.
inférieure à la seconde ou une année seulement (si le paramètre allow-year-only est activé)
Messages d'erreur attendus :
- Si la valeur n'est pas du type ^\\d{4}/\\d{4}$ (ex : "toto")
......@@ -22,11 +22,11 @@ from __future__ import unicode_literals
import re
from simpleeval import simple_eval
from goodtables.registry import check
from goodtables.error import Error
YEAR_INTERVAL_RE = re.compile('^(\\d{4})/(\\d{4})$')
YEAR_INTERVAL_RE = re.compile(r'^(\d{4})/(\d{4})$')
YEAR_RE = re.compile(r'^\d{4}$')
# Module API
......@@ -40,6 +40,7 @@ class YearIntervalValue(object):
def __init__(self, column, **options):
self.__column = column
self.allow_year_only = options.get('allow-year-only') in ('true', 'yes')
def check_row(self, cells):
# Get cell
......@@ -60,8 +61,25 @@ class YearIntervalValue(object):
if value == '':
# Checks for interval format
rm = YEAR_INTERVAL_RE.match(value)
if not rm:
# Not an interval, is this a year only?
if self.allow_year_only:
ym = YEAR_RE.match(value)
# No -> add error
if not ym:
return self.err(cell,
"La valeur \"{value}\" n'a pas le format attendu pour une année (AAAA) ou un intervalle d'année (AAAA/AAAA))",
{'value': value})
# This is a year, cool!
# not a period -> add error
return self.err(cell,
"La valeur \"{value}\" n'a pas le format attendu pour une période (AAAA/AAAA).",
{'value': value})
......@@ -218,6 +218,16 @@ def compare_columns_value(err, schema):
return u_err(err, 'Comparaison de colonne', err['message'])
def cohesive_columns_value(err, schema):
return u_err(err, 'Cohérence entre colonnes', err['message'])
def year_interval_value(err, schema):
return u_err(err, 'Année ou période', err['message'])
# Validata pre-checks
# -> Error message is stored in 'message' key
......@@ -302,6 +312,8 @@ ERROR_MESSAGE_FUNC = {
# Validata custom checks
'french-siret-value': french_siret_value,
'compare-columns-value': compare_columns_value,
'cohesive-columns-value': cohesive_columns_value,
'year-interval-value': year_interval_value,
......@@ -341,4 +353,6 @@ ERROR_MESSAGE_DEFAULT_TITLE = {
# Validata custom checks
'french-siret-value': 'n° siret invalide',
'compare-columns-value': 'comparaison de colonne invalide',
'cohesive-columns-value': 'cohérence entre colonnes',
'year-interval-value': 'année ou période',
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment