This repository has been archived on 2021-09-15. You can view files and clone it, but cannot push or open issues or pull requests.
ModuleWeb/INITBASE/loader.py

204 lines
6.7 KiB
Python
Executable File

# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import MySQLdb as mdb
import sys
import re
def insert (cur, table, dict) :
keys = ""
datas = ""
for key , data in dict.items() :
keys += key + ","
datas += "\"" + str(data) + "\","
req = "INSERT INTO " + table + "(" + keys[:-1] + ")" + " VALUES (" + datas[:-1] + ")"
#print(req)
cur.execute(req)
return cur.lastrowid
try :
listeTechnique = {}
listeMatiere= {}
listeDomaine = {}
listeDesignation = {}
listeAuteur = {}
listeDatation = {}
con = mdb.connect('127.0.0.1', 'root', 'l3miashs2015', 'moduleweb',charset='utf8')
cur = con.cursor()
# Suppresion des données existantes dan la bd
cur.execute("TRUNCATE table auteurs")
cur.execute("TRUNCATE table matieres")
cur.execute("TRUNCATE table techniques")
cur.execute("TRUNCATE table domaines")
cur.execute("TRUNCATE table datations")
cur.execute("TRUNCATE table oeuvres")
# On parcourt le fichier xml
tree = ET.parse('inventaire.xml')
root = tree.getroot()
# Pour chaque oeuvre
for o in root.iter('oeuvre'):
idtechnique = "NULL"
idmatiere = "NULL"
iddomaine= "NULL"
iddesignation = "NULL"
iddesignation2 = "NULL"
iddesignation3 = "NULL"
idauteur = "NULL"
idauteur2 = "NULL"
image = "NULL"
iddatation = "NULL"
technique = None
matiere = None
domaine = None
designation = None
designation2 = None
designation3 = None
auteur = None
auteur2 = None
datation = None
datation2 = None
# On parcourt tout les tags
for child in o :
if child.tag == 'auteur1' :
auteur = child.text.encode('utf-8')
elif child.tag == 'auteur2' :
auteur2 = child.text.encode('utf-8')
elif child.tag == 'datation1':
datation = child.text.encode('utf-8')
elif child.tag == 'datation2':
datation2 = child.text.encode('utf-8')
elif child.tag == 'designation':
designation1 = child.text.encode('utf-8')
elif child.tag == 'designation2':
designation2 = child.text.encode('utf-8')
elif child.tag == 'designation3':
designation3 = child.text.encode('utf-8')
elif child.tag == 'domaine':
domaine = child.text.encode('utf-8')
elif child.tag == 'matiere':
matiere = child.text.encode('utf-8')
elif child.tag == 'technique':
technique = child.text.encode('utf-8')
elif child.tag == 'image' :
image = child.text.encode('utf-8')
# On s'interesee qu'aux oeuvres ayant une image
if image != "NULL" :
if str(datation)+str(datation2) in listeDatation :
iddatation = listeDatation[str(datation)+str(datation2)]
else :
if datation is not None and datation2 is not None :
if re.compile("vers").search(datation.lower()) or re.compile("avant").search(datation.lower()):
try:
datas = {"dateDebut" : datation2.split("-")[0] + "-01-01", "dateFin" : datation2.split("-")[1] + "-12-31"}
iddatation = insert(cur,"datations",datas)
except Exception, e:
if re.compile("^[0-9]{4}[ ]").match(datation.lower()) :
datas = {"dateDebut" : datation.split(" ")[0] + "-01-01", "dateFin" : datation.split(" ")[0] + "-12-31"}
iddatation = insert(cur,"datations",datas)
elif re.compile("^[0-9]{4}-[0-9]{4}$").search(datation.lower()) and re.compile("^[0-9]{4}-[0-9]{4}$").search(datation2.lower()) :
datas = {"dateDebut" : datation.split("-")[0] + "-01-01", "dateFin" : datation2.split("-")[1] + "-12-31"}
iddatation = insert(cur,"datations",datas)
elif re.compile("^[0-9]{4}[ ]").match(datation.lower()) and re.compile("^[0-9]{4}[ ]").match(datation2.lower()) :
datas = {"dateDebut" : datation.split(" ")[0] + "-01-01", "dateFin" : datation2.split(" ")[0] + "-12-31"}
iddatation = insert(cur,"datations",datas)
elif re.compile("^[0-9]{4}-[0-9]{4}[ ]").match(datation.lower()) and re.compile("^[0-9]{4}-[0-9]{4}[ ]").match(datation2.lower()) :
datas = {"dateDebut" : datation.split("-")[0] + "-01-01", "dateFin" : datation2.split("-")[1].split(" ")[0] + "-12-31"}
iddatation = insert(cur,"datations",datas)
elif re.compile("^[0-9]{4}-[0-9]{4}[ ]").match(datation.lower()) and re.compile("^[0-9]{4}-[0-9]{4}").match(datation2.lower()) :
datas = {"dateDebut" : datation.split("-")[0] + "-01-01", "dateFin" : datation2.split("-")[1].split(" ")[0] + "-12-31"}
iddatation = insert(cur,"datations",datas)
if datation is not None and datation2 is None :
if re.compile("^[0-9]{4}[ ]").match(datation.lower()) :
datas = {"dateDebut" : datation.split(" ")[0] + "-01-01", "dateFin" : datation.split(" ")[0] + "-12-31"}
iddatation = insert(cur,"datations",datas)
elif re.compile("^[0-9]{4}$").match(datation.lower()) :
datas = {"dateDebut" : datation + "-01-01", "dateFin" : datation + "-12-31"}
iddatation = insert(cur,"datations",datas)
elif re.compile("^[0-9]{4}-[0-9]{4}$").match(datation.lower()) :
datas = {"dateDebut" : datation.split("-")[0] + "-01-01", "dateFin" : datation.split("-")[1] + "-12-31"}
iddatation = insert(cur,"datations",datas)
if iddatation != "NULL" :
listeDatation[str(datation)+str(datation2) ] = iddatation
if technique is not None :
if not technique in listeTechnique :
datas = { "nom" : technique}
idtechnique = insert(cur,"techniques",datas)
listeTechnique[technique] = idtechnique
else :
idtechnique = listeTechnique[technique]
if matiere is not None :
if not matiere in listeMatiere :
datas = { "nom" : matiere}
idmatiere = insert(cur,"matieres",datas)
listeMatiere[matiere] = idmatiere
else :
idmatiere = listeMatiere[matiere]
if domaine is not None :
if not domaine in listeDomaine :
datas = { "nom" : domaine}
iddomaine = insert(cur,"domaines",datas)
listeDomaine[domaine] = iddomaine
else :
iddomaine = listeDomaine[domaine]
if auteur is not None :
if not auteur in listeAuteur :
datas = { "nom" : auteur}
idauteur = insert(cur,"auteurs", datas)
listeAuteur[auteur] = idauteur
else :
idauteur = listeAuteur[auteur]
datas = {"technique_id" : idtechnique, "domaine_id" : iddomaine, "matiere_id" : idmatiere,
"image" : image, "designation" : con.escape_string(designation1), "auteur_id" : idauteur}
for key , data in datas.items() :
if data == "NULL" :
del datas[key]
idoeuvre = insert(cur,"oeuvres",datas)
con.commit()
except mdb.Error, e:
if con:
con.rollback()
print("Error %d: %s" % (e.args[0],e.args[1]))
sys.exit(1)
finally:
if con:
con.close()