[dataimport] Fix lcsv files
authorSylvain Thénault <sylvain.thenault@logilab.fr>
Wed, 29 Mar 2017 15:41:45 +0200
changeset 2553 0145618f8da7
parent 2551 ac722d56776b
child 2555 0ae7957cf9e3
[dataimport] Fix lcsv files Added a test checking that we've a consistent number of separators in each line of lcsv files. This led to fix some some headers as well as some definitions containing the separator in text, leading to no error but unconsidered text. Along the way, uniformize column labels. We do not mind fixing definitions in existing database for now, since there are now production databases in the wild yet. Related to #17066564
cubicweb_seda/dataimport.py
cubicweb_seda/migration/data/classification_levels.csv
cubicweb_seda/migration/data/code_keyword_type.csv
cubicweb_seda/migration/data/encodings.csv
cubicweb_seda/migration/data/event_types.csv
cubicweb_seda/migration/data/final_action_appraisal_code_type.csv
cubicweb_seda/migration/data/languages.csv
cubicweb_seda/migration/data/level_type.csv
cubicweb_seda/migration/data/mime_types.csv
--- a/cubicweb_seda/dataimport.py	Wed Mar 29 15:38:03 2017 +0200
+++ b/cubicweb_seda/dataimport.py	Wed Mar 29 15:41:45 2017 +0200
@@ -102,7 +102,7 @@
                                     raise_on_error=True, extid_as_cwuri=False)
 
 
-def lcsv_check(cnx, store, fname, scheme_uri):
+def lcsv_check(cnx, store, fname, scheme_uri, separator=';'):
     """Simply check data file consistency."""
     counter = count()
 
@@ -110,11 +110,21 @@
         return text_type(next(counter)) + val
 
     with open(join(dirname(__file__), 'migration', 'data', fname)) as stream:
-        lcsv2rdf = lcsv.LCSV2RDF(stream, ';', 'utf-8',
+        lcsv2rdf = lcsv.LCSV2RDF(stream, separator, 'utf-8',
                                  # XXX drop once skos is released
                                  uri_generator=uri_generator, uri_cls=text_type)
         list(lcsv2rdf.triples())
 
+        # also check there are the expected number of separator for each line
+        stream.seek(0)
+        expected_separators = stream.readline().count(separator)
+        for i, line in enumerate(stream):
+            if line.count(separator) != expected_separators:
+                linenum = i + 2
+                raise AssertionError('Got %s %s on line %s of %s, %s where expected'
+                                     % (line.count(separator), separator, linenum,
+                                        fname, expected_separators))
+
 
 def init_seda_scheme(cnx, title):
     """Create a scheme to hold SEDA concepts with the given title.
--- a/cubicweb_seda/migration/data/classification_levels.csv	Wed Mar 29 15:38:03 2017 +0200
+++ b/cubicweb_seda/migration/data/classification_levels.csv	Wed Mar 29 15:41:45 2017 +0200
@@ -1,7 +1,7 @@
-#;$id;label;
-type;url;string;
-lang;;seda-2;
-url;skos:Concept;skos:prefLabel;
+#;$id;label
+type;url;string
+lang;;seda-2
+url;skos:Concept;skos:prefLabel
 ;;Confidentiel-Défense
 ;;Secret-Défense
 ;;Très Secret-Défense
--- a/cubicweb_seda/migration/data/code_keyword_type.csv	Wed Mar 29 15:38:03 2017 +0200
+++ b/cubicweb_seda/migration/data/code_keyword_type.csv	Wed Mar 29 15:41:45 2017 +0200
@@ -1,4 +1,4 @@
-#;$id;label
+#;$id;libellé SEDA;libellé français
 type;url;string;string
 lang;;seda;fr
 url;skos:Concept;skos:prefLabel;skos:prefLabel
--- a/cubicweb_seda/migration/data/encodings.csv	Wed Mar 29 15:38:03 2017 +0200
+++ b/cubicweb_seda/migration/data/encodings.csv	Wed Mar 29 15:41:45 2017 +0200
@@ -1,4 +1,4 @@
-#;$id;seda 2 value;seda 1 and 0.2 value;label;
+#;$id;libellé SEDA 2;libellé SEDA antérieur;libellé anglais
 type;url;string;string;string
 lang;;seda-2;seda;en
 url;skos:Concept;skos:prefLabel;skos:prefLabel;skos:prefLabel
--- a/cubicweb_seda/migration/data/event_types.csv	Wed Mar 29 15:38:03 2017 +0200
+++ b/cubicweb_seda/migration/data/event_types.csv	Wed Mar 29 15:41:45 2017 +0200
@@ -1,7 +1,7 @@
-#;$id;label;
-type;url;string;
-lang;;seda-2;
-url;skos:Concept;skos:prefLabel;
+#;$id;libellé SEDA 2
+type;url;string
+lang;;seda-2
+url;skos:Concept;skos:prefLabel
 ;;Created
 ;;Revised
 ;;Updated
--- a/cubicweb_seda/migration/data/final_action_appraisal_code_type.csv	Wed Mar 29 15:38:03 2017 +0200
+++ b/cubicweb_seda/migration/data/final_action_appraisal_code_type.csv	Wed Mar 29 15:41:45 2017 +0200
@@ -1,4 +1,4 @@
-#;$id;label
+#;$id;libellé SEDA 2;libellé SEDA antérieur;libellé français
 type;url;string;string;string
 lang;;seda-2;seda;fr
 url;skos:Concept;skos:prefLabel;skos:prefLabel;skos:prefLabel
--- a/cubicweb_seda/migration/data/languages.csv	Wed Mar 29 15:38:03 2017 +0200
+++ b/cubicweb_seda/migration/data/languages.csv	Wed Mar 29 15:41:45 2017 +0200
@@ -1,7 +1,7 @@
-#;$id;label;alt label;
-type;url;string;string;
-lang;;seda-2;en;
-url;skos:Concept;skos:prefLabel;skos:prefLabel;
+#;$id;libellé SEDA 2;libellé anglais
+type;url;string;string
+lang;;seda-2;en
+url;skos:Concept;skos:prefLabel;skos:prefLabel
 ;;yob;Yoba
 ;;bqy;Bengkala Sign Language
 ;;nuv;Northern Nuni
--- a/cubicweb_seda/migration/data/level_type.csv	Wed Mar 29 15:38:03 2017 +0200
+++ b/cubicweb_seda/migration/data/level_type.csv	Wed Mar 29 15:41:45 2017 +0200
@@ -1,5 +1,5 @@
-#;$id;Libellé court (utilisé pour l'échange);Libellé long;définition
-type;url;string;string;string
+#;$id;Libellé SEDA 2;Libellé SEDA antérieur;Libellé français;Définition
+type;url;string;string;string;string
 lang;;seda-2;seda;fr;fr
 url;skos:Concept;skos:prefLabel;skos:prefLabel;skos:prefLabel;skos:definition
 ;;Class ;class ;Classe;Cette valeur, issue de la tradition archivistique allemande, ne correspond pas pour l'instant aux pratiques archivistiques françaises
@@ -7,8 +7,8 @@
 ;;File ;file ;Dossier;Ensemble de documents regroupés, soit par le producteur pour son usage courant, soit dans le processus du classement d'archives, parce qu'ils concernent un même sujet ou une même affaire. Le dossier est ordinairement l'unité de base à l'intérieur d'une série organique
 ;;Fonds ;fonds ;Fonds ;Ensemble de documents quels que soit leur type et leur support, créé ou reçu de manière organique et utilisé par une personne physique ou morale dans l'exercice de ses activités
 ;;Item ;item ;Pièce;Plus petite unité documentaire, par exemple une lettre, un mémoire, un rapport, une photographie, un enregistrement sonore
-;;RecordGrp ;recordgrp ;Groupe de documents;Niveau de description intermédiaire qui ne correspond pas à une division organique (sous-fonds, série ou sous-série organique); parties au sein d'une collection, versements, épaves d'un fonds, subdivisions de fonds dont on ne connait pas la nature exacte, sous-ensemble classés thématiquement
-;;Series ;series ;Serie organique ;Division organique d'un fonds, correspondant à un ensemble de dossiers maintenus groupés parce qu'ils résultent d'une même activité, se rapportent à une même fonction ou à un même sujet ou revêtent une même forme
-;;Subfonds ;subfonds ;Sous fonds;Division organique d'un fonds correspondant aux divisions administratives de l'institution ou de l'organisme producteur, ou, à défaut, à un regroupement géographique, chronologique, fonctionnel ou autre des documents; quand le producteur a une structure hiérarchique complexe , chaque sous-fonds est lui-même subdivisé, autant que nécessaire pour refléter les niveaux hiérarchiques
+;;RecordGrp ;recordgrp ;Groupe de documents;Niveau de description intermédiaire qui ne correspond pas à une division organique (sous-fonds, série ou sous-série organique). Parties au sein d'une collection, versements, épaves d'un fonds, subdivisions de fonds dont on ne connait pas la nature exacte, sous-ensemble classés thématiquement
+;;Series ;series ;Série organique ;Division organique d'un fonds, correspondant à un ensemble de dossiers maintenus groupés parce qu'ils résultent d'une même activité, se rapportent à une même fonction ou à un même sujet ou revêtent une même forme
+;;Subfonds ;subfonds ;Sous-fonds;Division organique d'un fonds correspondant aux divisions administratives de l'institution ou de l'organisme producteur, ou, à défaut, à un regroupement géographique, chronologique, fonctionnel ou autre des documents. Quand le producteur a une structure hiérarchique complexe , chaque sous-fonds est lui-même subdivisé, autant que nécessaire pour refléter les niveaux hiérarchiques
 ;;SubGrp ;subgrp ;Sous-groupe de documents;Subdivision du groupe de documents
 ;;Subseries ;subseries ;Sous-série organique;Subdivision de la série organique
--- a/cubicweb_seda/migration/data/mime_types.csv	Wed Mar 29 15:38:03 2017 +0200
+++ b/cubicweb_seda/migration/data/mime_types.csv	Wed Mar 29 15:41:45 2017 +0200
@@ -1,7 +1,7 @@
-#;$id;label;alt label;
-type;url;string;string;
-lang;;seda-2;en;
-url;skos:Concept;skos:prefLabel;skos:prefLabel;
+#;$id;libellé SEDA 2;libellé anglais
+type;url;string;string
+lang;;seda-2;en
+url;skos:Concept;skos:prefLabel;skos:prefLabel
 ;;application/1d-interleaved-parityfec;1d-interleaved-parityfec
 ;;application/3gpp-ims+xml;3gpp-ims+xml
 ;;application/activemessage;activemessage