Compare commits
No commits in common. "7a4912d8f1a03ce29d5d2bdd355864ecdfbb0ceb" and "74a45e71908f8180fe2ed43fd6386e1f1555b5c8" have entirely different histories.
7a4912d8f1
...
74a45e7190
|
@ -2,7 +2,7 @@
|
||||||
import logging
|
import logging
|
||||||
import psycopg2
|
import psycopg2
|
||||||
|
|
||||||
from procrusql import HaveTable, HaveColumn, HaveData, Ref, fit, dump_dot
|
from procrusql import HaveTable, HaveColumn, HaveData, Ref, fit
|
||||||
|
|
||||||
logging.basicConfig(format="%(asctime)s %(levelname)s %(name)s %(lineno)d | %(message)s", level=logging.DEBUG)
|
logging.basicConfig(format="%(asctime)s %(levelname)s %(name)s %(lineno)d | %(message)s", level=logging.DEBUG)
|
||||||
|
|
||||||
|
@ -537,6 +537,6 @@ want = [
|
||||||
|
|
||||||
db = psycopg2.connect(dbname="usradm_test", user="usradm")
|
db = psycopg2.connect(dbname="usradm_test", user="usradm")
|
||||||
fit(db, want)
|
fit(db, want)
|
||||||
dump_dot()
|
|
||||||
|
|
||||||
# vim: tw=0
|
# vim: tw=0
|
||||||
|
|
25
procrusql.py
25
procrusql.py
|
@ -38,11 +38,6 @@ class Node:
|
||||||
self.ready = True
|
self.ready = True
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def set_order(self):
|
|
||||||
global order
|
|
||||||
order += 1
|
|
||||||
self.order = order
|
|
||||||
|
|
||||||
class HaveData(Node):
|
class HaveData(Node):
|
||||||
def __init__(self, name, depends, table, key, extra):
|
def __init__(self, name, depends, table, key, extra):
|
||||||
super().__init__(name, depends)
|
super().__init__(name, depends)
|
||||||
|
@ -69,7 +64,6 @@ class HaveData(Node):
|
||||||
self.result = csr.fetchall()
|
self.result = csr.fetchall()
|
||||||
log_check.info("Got %d rows", len(self.result))
|
log_check.info("Got %d rows", len(self.result))
|
||||||
if self.result:
|
if self.result:
|
||||||
self.set_order()
|
|
||||||
self.ok = True
|
self.ok = True
|
||||||
log_state.info("%s is now ok", self.name)
|
log_state.info("%s is now ok", self.name)
|
||||||
return
|
return
|
||||||
|
@ -89,7 +83,6 @@ class HaveData(Node):
|
||||||
self.result = csr.fetchall()
|
self.result = csr.fetchall()
|
||||||
log_action.info("Got %d rows", len(self.result))
|
log_action.info("Got %d rows", len(self.result))
|
||||||
if self.result:
|
if self.result:
|
||||||
self.set_order()
|
|
||||||
self.ok = True
|
self.ok = True
|
||||||
log_state.info("%s is now ok", self.name)
|
log_state.info("%s is now ok", self.name)
|
||||||
return
|
return
|
||||||
|
@ -116,7 +109,6 @@ class HaveTable(Node):
|
||||||
r = csr.fetchall()
|
r = csr.fetchall()
|
||||||
if len(r) == 1:
|
if len(r) == 1:
|
||||||
# Table exists, all ok
|
# Table exists, all ok
|
||||||
self.set_order()
|
|
||||||
self.ok = True
|
self.ok = True
|
||||||
log_state.info("%s is now ok", self.name)
|
log_state.info("%s is now ok", self.name)
|
||||||
return
|
return
|
||||||
|
@ -131,7 +123,6 @@ class HaveTable(Node):
|
||||||
table=sql.Identifier(self.table)
|
table=sql.Identifier(self.table)
|
||||||
)
|
)
|
||||||
csr.execute(q)
|
csr.execute(q)
|
||||||
self.set_order()
|
|
||||||
self.ok = True
|
self.ok = True
|
||||||
log_state.info("%s is now ok", self.name)
|
log_state.info("%s is now ok", self.name)
|
||||||
|
|
||||||
|
@ -163,7 +154,6 @@ class HaveColumn(Node):
|
||||||
r = csr.fetchall()
|
r = csr.fetchall()
|
||||||
if len(r) == 1:
|
if len(r) == 1:
|
||||||
# Column exists, all ok
|
# Column exists, all ok
|
||||||
self.set_order()
|
|
||||||
self.ok = True
|
self.ok = True
|
||||||
log_state.info("%s is now ok", self.name)
|
log_state.info("%s is now ok", self.name)
|
||||||
return
|
return
|
||||||
|
@ -179,7 +169,6 @@ class HaveColumn(Node):
|
||||||
definition=sql.SQL(self.definition),
|
definition=sql.SQL(self.definition),
|
||||||
)
|
)
|
||||||
csr.execute(q)
|
csr.execute(q)
|
||||||
self.set_order()
|
|
||||||
self.ok = True
|
self.ok = True
|
||||||
log_state.info("%s is now ok", self.name)
|
log_state.info("%s is now ok", self.name)
|
||||||
|
|
||||||
|
@ -208,10 +197,9 @@ class Ref:
|
||||||
|
|
||||||
|
|
||||||
def fit(_db, _want):
|
def fit(_db, _want):
|
||||||
global db, want, order
|
global db, want
|
||||||
db = _db
|
db = _db
|
||||||
want = _want
|
want = _want
|
||||||
order = 0
|
|
||||||
while True:
|
while True:
|
||||||
progress = False
|
progress = False
|
||||||
not_ok = 0
|
not_ok = 0
|
||||||
|
@ -230,14 +218,3 @@ def fit(_db, _want):
|
||||||
|
|
||||||
db.commit()
|
db.commit()
|
||||||
log_state.info("Done")
|
log_state.info("Done")
|
||||||
|
|
||||||
def dump_dot():
|
|
||||||
print("digraph {")
|
|
||||||
for w in want:
|
|
||||||
print(f"\t{w.name} [shape=rect]")
|
|
||||||
for d in w.depends:
|
|
||||||
print(f"\t{d} -> {w.name} [constraint=false]")
|
|
||||||
in_order = [w.name for w in sorted(want, key=lambda x: x.order)]
|
|
||||||
for i in range(1, len(in_order)):
|
|
||||||
print(f"\t{in_order[i-1]} -> {in_order[i]} [style=dashed]")
|
|
||||||
print("}")
|
|
||||||
|
|
Loading…
Reference in New Issue