Explorer
/tmp/fix_upsert.py
← Zurück ↓ Download
#!/usr/bin/env python3
"""Fix the manual ADD_KNOWLEDGE upsert: bindings were shifted (rid landed in
action column). Rewrite with explicit named placeholders."""
src = open('/opt/struktur/obsidian-graphiti-import-staging-p2i/p2i_e2e.py').read()
i = src.find('    kc.execute("""INSERT INTO graphiti_import_queue(source_type,video_id,')
j = src.find('rows = queue_rows', i) if 'rows = queue_rows' in src[i:] else -1
# find the end of the broken execute block: up to kc.commit()
j = src.find('kc.commit()', i)
old = src[i:j]
new = '''    ak_rid = decision.reconciliation_record_id
    import hashlib as _h
    payload_json = _json.dumps({"note": "ADD_KNOWLEDGE pilot",
                                "action": "ADD_KNOWLEDGE"},
                               ensure_ascii=False, sort_keys=True)
    payload_hash = _h.sha256(payload_json.encode("utf-8")).hexdigest()
    post_request_id = _h.sha256((ak_rid + "|" + now).encode()).hexdigest()[:24]
    kc.execute("""INSERT INTO graphiti_import_queue
        (source_type, video_id, obsidian_path, content_hash, file_modified_at,
         graphiti_status, created_at, updated_at, reconciliation_record_id,
         source_version_id, knowledge_unit_identity, action,
         payload_hash, payload_json, post_request_id)
        VALUES
        ('obsidian', NULL, :obsidian_path, :content_hash, NULL,
         'queued', :now, :now, :rid, :vid,
         '__source__', 'ADD_KNOWLEDGE',
         :payload_hash, :payload_json, :post_request_id)
        ON CONFLICT(obsidian_path, content_hash) DO UPDATE SET
         reconciliation_record_id=excluded.reconciliation_record_id,
         source_version_id=excluded.source_version_id,
         action=excluded.action,
         updated_at=excluded.updated_at,
         payload_hash=excluded.payload_hash,
         payload_json=excluded.payload_json,
         post_request_id=excluded.post_request_id""",
        {"obsidian_path": "P2I/e2e-note.md", "content_hash": HEX_A,
         "now": now, "rid": ak_rid, "vid": vid,
         "payload_hash": payload_hash, "payload_json": payload_json,
         "post_request_id": post_request_id})
    '''
src = src[:i] + new + src[j:]
open('/opt/struktur/obsidian-graphiti-import-staging-p2i/p2i_e2e.py', 'w').write(src)
import py_compile
py_compile.compile('/opt/struktur/obsidian-graphiti-import-staging-p2i/p2i_e2e.py', doraise=True)
print('manual upsert rewritten with named params + SYNTAX_OK')