import sqlite3, subprocess, json, csv
p='/opt/struktur/obsidian-graphiti-import/obsidian_graphiti_import.db'; c=sqlite3.connect('file:'+p+'?mode=ro',uri=True)
keys=[r[0] for r in c.execute("select import_key from files where status='retry' order by id")]
env=subprocess.check_output(['docker','inspect','graphiti-neo4j','--format','{{range .Config.Env}}{{println .}}{{end}}'],text=True)
auth=[x.split('=',1)[1] for x in env.splitlines() if x.startswith('NEO4J_AUTH=')][0]; user,pw=auth.split('/',1)
lit=json.dumps(keys)
q=f'''UNWIND {lit} AS vid OPTIONAL MATCH (n:Episodic) WHERE ANY(k IN keys(n) WHERE (CASE WHEN n[k] IS :: LIST<ANY> THEN reduce(s='', x IN n[k] | s + ' ' + toString(x)) ELSE toString(n[k]) END) CONTAINS vid) RETURN vid, CASE WHEN n IS NULL THEN '' ELSE toString(n.uuid) END AS episode_uuid ORDER BY vid, episode_uuid'''
r=subprocess.run(['docker','exec','graphiti-neo4j','cypher-shell','-u',user,'-p',pw,'--format','plain','--non-interactive',q],text=True,capture_output=True)
print('RC',r.returncode); print(r.stderr); print(r.stdout)