You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.4 KiB

import psycopg2 as psy
import regles
def verifRegle(co):
cur=co.cursor()
cur.execute('''SELECT type,addresse,valeur FROM Status ORDER BY type,addresse;''')
res=cur.fetchall()
dataState={}
for row in res:
dataState[(row[0],int(row[1]))]=int(row[2])
listRules=regles.getRegles()
for rule in listRules:
ruleWarning=0
condition=len(rule[0])
for i in rule[0]:
if (i[0],i[1]) in dataState:
if dataState[(i[0],i[1])]==i[2]:
ruleWarning+=1
if ruleWarning>=condition:
if (rule[1][0],rule[1][1]) in dataState:
if dataState[(rule[1][0],rule[1][1])]==rule[1][2]:
return False
return True
def ecritureBDD(lStatus,connec):
co = None
try:
co = psy.connect(host=connec[0],database=connec[1],user=connec[2],password=connec[3])
cur = co.cursor()
for i in lStatus:
cur.execute("INSERT INTO Status VALUES (%s,%s,%s ) ON CONFLICT (addresse,type) DO UPDATE SET valeur=%s;",(i[1],i[0],i[2],i[2]))
if verifRegle(co):
co.commit()
else:
print("A rule has been violated. The system is endangered. The database")
co.rollback()
cur.close()
except(Exception,psy.DatabaseError) as error:
print(error)
finally:
if co is not None:
co.close()