feat(ai-studio): add main workspace tab
This commit is contained in:
@@ -452,6 +452,51 @@ def list_assets(project_id, kind=None, include_missing=True, path=None, conn=Non
|
||||
return _fetch_all(database, sql, params, ImageStudioAsset)
|
||||
|
||||
|
||||
def asset_reference_counts(asset_id, path=None, conn=None):
|
||||
"""Return selection/job references for one asset before pool removal."""
|
||||
|
||||
asset_id = int(asset_id)
|
||||
with _connection(conn, path) as database:
|
||||
selection_count = database.execute(
|
||||
"SELECT COUNT(*) FROM image_studio_selections WHERE asset_id = ?",
|
||||
(asset_id,),
|
||||
).fetchone()[0]
|
||||
source_job_count = database.execute(
|
||||
"SELECT COUNT(*) FROM image_studio_jobs WHERE source_asset_id = ?",
|
||||
(asset_id,),
|
||||
).fetchone()[0]
|
||||
output_job_count = database.execute(
|
||||
"SELECT COUNT(*) FROM image_studio_jobs WHERE output_asset_id = ?",
|
||||
(asset_id,),
|
||||
).fetchone()[0]
|
||||
return {
|
||||
"selection": int(selection_count),
|
||||
"source_job": int(source_job_count),
|
||||
"output_job": int(output_job_count),
|
||||
"total": int(selection_count + source_job_count + output_job_count),
|
||||
}
|
||||
|
||||
|
||||
def remove_asset_if_unused(asset_id, path=None, conn=None):
|
||||
"""Remove one pool asset row only when no job or selection references it.
|
||||
|
||||
The local image file is intentionally kept on disk. AI工场 removal is a
|
||||
pool-level operation, not a destructive file cleanup.
|
||||
"""
|
||||
|
||||
asset_id = int(asset_id)
|
||||
with _connection(conn, path) as database:
|
||||
asset = get_asset(asset_id, conn=database)
|
||||
if asset is None:
|
||||
raise db.DbError("照片不存在")
|
||||
counts = asset_reference_counts(asset_id, conn=database)
|
||||
if counts["total"]:
|
||||
raise db.DbError("照片正在被生成任务或终选引用,不能移除")
|
||||
with database:
|
||||
database.execute("DELETE FROM image_studio_assets WHERE id = ?", (asset_id,))
|
||||
return asset
|
||||
|
||||
|
||||
def sync_original_asset_urls(project_id, image_urls, path=None, conn=None):
|
||||
"""Store the read-only Shopee main image URL snapshot as remote-only assets."""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user