|
|
@@ -6,11 +6,10 @@ Python 3.7+
|
|
|
from datetime import datetime
|
|
|
import json
|
|
|
import logging
|
|
|
-import subprocess #@UnusedImport
|
|
|
-import tempfile #@UnusedImport
|
|
|
+import subprocess # @UnusedImport
|
|
|
+import tempfile # @UnusedImport
|
|
|
import zipfile
|
|
|
|
|
|
-from jinja2.environment import Template
|
|
|
from path import Path, TempDir
|
|
|
import pypyodbc
|
|
|
import shapefile
|
|
|
@@ -146,6 +145,8 @@ def check_folder(folder, checker):
|
|
|
|
|
|
report = Report("Contrôle des données de {} au format {}".format(folder.name, checker.stem))
|
|
|
|
|
|
+ db_cache = {}
|
|
|
+
|
|
|
with open(checker, "r") as cf:
|
|
|
config = yaml.load(cf)
|
|
|
|
|
|
@@ -159,7 +160,6 @@ def check_folder(folder, checker):
|
|
|
logger.info("* Traitement de %s", path_.name)
|
|
|
|
|
|
report_file = ReportFile(path_.name)
|
|
|
- report.report_files.append(report_file)
|
|
|
|
|
|
if not path_.isfile():
|
|
|
report_file.add_error("Fichier introuvable")
|
|
|
@@ -274,47 +274,35 @@ def check_folder(folder, checker):
|
|
|
except KeyError:
|
|
|
pass
|
|
|
|
|
|
-# if "in_table" in fieldmodel:
|
|
|
-#
|
|
|
-# db = databases[fieldmodel["in_table"]["db"]]
|
|
|
-# cursor = db.cursor()
|
|
|
-# cursor.execute("SELECT DISTINCT {} FROM {};".format(fieldmodel["in_table"]["field"], fieldmodel["in_table"]["table"]))
|
|
|
-# rows = [val[0] for val in cursor.fetchall()]
|
|
|
-#
|
|
|
-# if not val in rows:
|
|
|
-# report_field.error = "Valeur invalide, pas dans la liste"
|
|
|
-# report_record.add_field(report_field)
|
|
|
-# continue
|
|
|
+ if "in_table" in fieldmodel:
|
|
|
+
|
|
|
+ key = tuple([fieldmodel["in_table"]["db"], fieldmodel["in_table"]["table"], fieldmodel["in_table"]["field"]])
|
|
|
+ if not key in db_cache:
|
|
|
+ db = databases[fieldmodel["in_table"]["db"]]
|
|
|
+ cursor = db.cursor()
|
|
|
+ cursor.execute("SELECT DISTINCT {} FROM {};".format(fieldmodel["in_table"]["field"], fieldmodel["in_table"]["table"]))
|
|
|
+ rows = [val[0] for val in cursor.fetchall()]
|
|
|
+ db_cache[key] = rows
|
|
|
+
|
|
|
+ if not val in db_cache[key]:
|
|
|
+ report_field.error = "Valeur invalide, pas dans la liste"
|
|
|
+ report_record.add_field(report_field)
|
|
|
+ continue
|
|
|
|
|
|
report_record.add_field(report_field)
|
|
|
report_file.add_record(report_record)
|
|
|
-
|
|
|
+ report.report_files.append(report_file)
|
|
|
del sf, records
|
|
|
|
|
|
return report
|
|
|
|
|
|
|
|
|
-def render_to_html(report):
|
|
|
- with open(MAIN / "templates" / "report.j2", "r") as f:
|
|
|
- template = Template(f.read())
|
|
|
-
|
|
|
- return template.render(report=report)
|
|
|
-
|
|
|
-
|
|
|
-# if __name__ == "__main__":
|
|
|
-#
|
|
|
-# subject = MAIN / "work" / "SCOPELEC_CAP_097AP0_REC_180829_OK.zip"
|
|
|
-# checker = MAIN / "resources" / "netgeo_v2-2_doe.yaml"
|
|
|
-#
|
|
|
-# report = check(subject, checker)
|
|
|
-#
|
|
|
-# result = render_to_html(report)
|
|
|
-#
|
|
|
-# result_filename = tempfile.mktemp(".html", dir=MAIN / "website")
|
|
|
-#
|
|
|
-# with open(result_filename, "w+") as f:
|
|
|
-# f.write(result)
|
|
|
-#
|
|
|
-# subprocess.run("start {}".format(result_filename), shell=True)
|
|
|
-#
|
|
|
-# logger.info("-- Fin --")
|
|
|
+if __name__ == "__main__":
|
|
|
+
|
|
|
+ logger.disabled = False
|
|
|
+ subject = MAIN / "work" / "SCOPELEC_CAP_097AP0_REC_180829_OK.zip"
|
|
|
+ checker = MAIN / "checkers" / "netgeo_v2-2_doe.yaml"
|
|
|
+
|
|
|
+ report = check(subject, checker)
|
|
|
+
|
|
|
+ logger.info("-- Fin --")
|