This commit is contained in:
mike
2026-06-20 02:43:57 +02:00
parent f1f693523b
commit 0176c1b965
16 changed files with 3820 additions and 394 deletions

View File

@@ -25,6 +25,7 @@ def migrate_schema():
"ALTER TABLE person ADD COLUMN IF NOT EXISTS hidden BOOLEAN DEFAULT FALSE",
"ALTER TABLE person ADD COLUMN IF NOT EXISTS has_background BOOLEAN DEFAULT TRUE",
"ALTER TABLE person ADD COLUMN IF NOT EXISTS source_refs TEXT",
"ALTER TABLE person ADD COLUMN IF NOT EXISTS has_clothing BOOLEAN DEFAULT NULL",
]:
cur.execute(sql)
conn.commit()
@@ -35,15 +36,15 @@ def migrate_schema():
def upsert_person(filename, filepath=None, name=None, group_id=None, tags=None,
embedding=None, clip_description=None, prompt=None, pose=None,
sort_order=None, group_name=None, hidden=None,
has_background=None, source_refs=None):
has_background=None, source_refs=None, has_clothing=None):
conn = get_db_connection()
cur = conn.cursor()
try:
cur.execute("""
INSERT INTO person (filename, filepath, name, group_id, tags, embedding,
clip_description, prompt, pose, sort_order, group_name, hidden,
has_background, source_refs)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
has_background, source_refs, has_clothing)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
ON CONFLICT (filename) DO UPDATE
SET filepath = COALESCE(EXCLUDED.filepath, person.filepath),
name = COALESCE(EXCLUDED.name, person.name),
@@ -57,11 +58,12 @@ def upsert_person(filename, filepath=None, name=None, group_id=None, tags=None,
group_name = COALESCE(EXCLUDED.group_name, person.group_name),
hidden = COALESCE(EXCLUDED.hidden, person.hidden),
has_background = COALESCE(EXCLUDED.has_background, person.has_background),
source_refs = COALESCE(EXCLUDED.source_refs, person.source_refs);
source_refs = COALESCE(EXCLUDED.source_refs, person.source_refs),
has_clothing = COALESCE(EXCLUDED.has_clothing, person.has_clothing);
""", (filename, filepath, name, group_id,
json.dumps(tags) if tags else None,
embedding, clip_description, prompt, pose, sort_order, group_name, hidden,
has_background, source_refs))
has_background, source_refs, has_clothing))
conn.commit()
finally:
cur.close()
@@ -83,7 +85,8 @@ def get_person(filename):
try:
cur.execute("""
SELECT name, group_id, tags, embedding, clip_description, filepath,
prompt, pose, sort_order, group_name, hidden, has_background, source_refs
prompt, pose, sort_order, group_name, hidden, has_background, source_refs,
has_clothing
FROM person WHERE filename = %s
""", (filename,))
return cur.fetchone()
@@ -97,7 +100,8 @@ def list_persons():
try:
cur.execute("""
SELECT filename, name, group_id, clip_description,
prompt, pose, sort_order, group_name, hidden, has_background, source_refs
prompt, pose, sort_order, group_name, hidden, has_background, source_refs,
has_clothing
FROM person
""")
return cur.fetchall()
@@ -194,6 +198,21 @@ def set_group_name(group_id, name):
cur.close()
conn.close()
def get_next_sort_order(group_id):
"""Return max(sort_order)+1 for the group, or 1 if no sorted members exist."""
conn = get_db_connection()
cur = conn.cursor()
try:
cur.execute(
"SELECT COALESCE(MAX(sort_order), 0) + 1 FROM person WHERE group_id = %s",
(group_id,)
)
return cur.fetchone()[0]
finally:
cur.close()
conn.close()
def get_all_group_names():
"""Return {group_id: group_name} for groups that have a name set."""
conn = get_db_connection()