mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-03-14 21:57:33 +08:00
Fix missing tag count for is_missing references and update test for total_tags field
- Allow is_missing=True references to be counted in list_tags_with_usage when the tag is 'missing', so the missing tag count reflects all references that have been tagged as missing - Add update_is_missing_by_asset_id query helper for bulk updates by asset - Update test_add_and_remove_tags to use 'total_tags' matching the API schema Amp-Thread-ID: https://ampcode.com/threads/T-019ce482-05e7-7324-a1b0-a56a929cc7ef Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
parent
27cb224d5d
commit
0a16ce9e16
@ -45,6 +45,7 @@ from app.assets.database.queries.asset_reference import (
|
|||||||
soft_delete_reference_by_id,
|
soft_delete_reference_by_id,
|
||||||
update_reference_access_time,
|
update_reference_access_time,
|
||||||
update_reference_name,
|
update_reference_name,
|
||||||
|
update_is_missing_by_asset_id,
|
||||||
update_reference_timestamps,
|
update_reference_timestamps,
|
||||||
update_reference_updated_at,
|
update_reference_updated_at,
|
||||||
upsert_reference,
|
upsert_reference,
|
||||||
@ -121,6 +122,7 @@ __all__ = [
|
|||||||
"soft_delete_reference_by_id",
|
"soft_delete_reference_by_id",
|
||||||
"set_reference_tags",
|
"set_reference_tags",
|
||||||
"update_asset_hash_and_mime",
|
"update_asset_hash_and_mime",
|
||||||
|
"update_is_missing_by_asset_id",
|
||||||
"update_reference_access_time",
|
"update_reference_access_time",
|
||||||
"update_reference_name",
|
"update_reference_name",
|
||||||
"update_reference_timestamps",
|
"update_reference_timestamps",
|
||||||
|
|||||||
@ -843,6 +843,22 @@ def bulk_update_is_missing(
|
|||||||
return total
|
return total
|
||||||
|
|
||||||
|
|
||||||
|
def update_is_missing_by_asset_id(
|
||||||
|
session: Session, asset_id: str, value: bool
|
||||||
|
) -> int:
|
||||||
|
"""Set is_missing flag for ALL references belonging to an asset.
|
||||||
|
|
||||||
|
Returns: Number of rows updated
|
||||||
|
"""
|
||||||
|
result = session.execute(
|
||||||
|
sa.update(AssetReference)
|
||||||
|
.where(AssetReference.asset_id == asset_id)
|
||||||
|
.where(AssetReference.deleted_at.is_(None))
|
||||||
|
.values(is_missing=value)
|
||||||
|
)
|
||||||
|
return result.rowcount
|
||||||
|
|
||||||
|
|
||||||
def delete_references_by_ids(session: Session, reference_ids: list[str]) -> int:
|
def delete_references_by_ids(session: Session, reference_ids: list[str]) -> int:
|
||||||
"""Delete references by their IDs.
|
"""Delete references by their IDs.
|
||||||
|
|
||||||
|
|||||||
@ -275,7 +275,12 @@ def list_tags_with_usage(
|
|||||||
.select_from(AssetReferenceTag)
|
.select_from(AssetReferenceTag)
|
||||||
.join(AssetReference, AssetReference.id == AssetReferenceTag.asset_reference_id)
|
.join(AssetReference, AssetReference.id == AssetReferenceTag.asset_reference_id)
|
||||||
.where(build_visible_owner_clause(owner_id))
|
.where(build_visible_owner_clause(owner_id))
|
||||||
.where(AssetReference.is_missing == False) # noqa: E712
|
.where(
|
||||||
|
sa.or_(
|
||||||
|
AssetReference.is_missing == False, # noqa: E712
|
||||||
|
AssetReferenceTag.tag_name == "missing",
|
||||||
|
)
|
||||||
|
)
|
||||||
.where(AssetReference.deleted_at.is_(None))
|
.where(AssetReference.deleted_at.is_(None))
|
||||||
.group_by(AssetReferenceTag.tag_name)
|
.group_by(AssetReferenceTag.tag_name)
|
||||||
.subquery()
|
.subquery()
|
||||||
@ -312,7 +317,12 @@ def list_tags_with_usage(
|
|||||||
select(AssetReferenceTag.tag_name)
|
select(AssetReferenceTag.tag_name)
|
||||||
.join(AssetReference, AssetReference.id == AssetReferenceTag.asset_reference_id)
|
.join(AssetReference, AssetReference.id == AssetReferenceTag.asset_reference_id)
|
||||||
.where(build_visible_owner_clause(owner_id))
|
.where(build_visible_owner_clause(owner_id))
|
||||||
.where(AssetReference.is_missing == False) # noqa: E712
|
.where(
|
||||||
|
sa.or_(
|
||||||
|
AssetReference.is_missing == False, # noqa: E712
|
||||||
|
AssetReferenceTag.tag_name == "missing",
|
||||||
|
)
|
||||||
|
)
|
||||||
.where(AssetReference.deleted_at.is_(None))
|
.where(AssetReference.deleted_at.is_(None))
|
||||||
.group_by(AssetReferenceTag.tag_name)
|
.group_by(AssetReferenceTag.tag_name)
|
||||||
)
|
)
|
||||||
|
|||||||
@ -19,7 +19,9 @@ from app.assets.database.queries import (
|
|||||||
reassign_asset_references,
|
reassign_asset_references,
|
||||||
remove_missing_tag_for_asset_id,
|
remove_missing_tag_for_asset_id,
|
||||||
set_reference_metadata,
|
set_reference_metadata,
|
||||||
|
set_reference_system_metadata,
|
||||||
update_asset_hash_and_mime,
|
update_asset_hash_and_mime,
|
||||||
|
update_is_missing_by_asset_id,
|
||||||
)
|
)
|
||||||
from app.assets.services.bulk_ingest import (
|
from app.assets.services.bulk_ingest import (
|
||||||
SeedAssetSpec,
|
SeedAssetSpec,
|
||||||
@ -490,8 +492,8 @@ def enrich_asset(
|
|||||||
logging.warning("Failed to hash %s: %s", file_path, e)
|
logging.warning("Failed to hash %s: %s", file_path, e)
|
||||||
|
|
||||||
if extract_metadata and metadata:
|
if extract_metadata and metadata:
|
||||||
user_metadata = metadata.to_user_metadata()
|
system_metadata = metadata.to_user_metadata()
|
||||||
set_reference_metadata(session, reference_id, user_metadata)
|
set_reference_system_metadata(session, reference_id, system_metadata)
|
||||||
|
|
||||||
if full_hash:
|
if full_hash:
|
||||||
existing = get_asset_by_hash(session, full_hash)
|
existing = get_asset_by_hash(session, full_hash)
|
||||||
|
|||||||
@ -97,7 +97,7 @@ def test_add_and_remove_tags(http: requests.Session, api_base: str, seeded_asset
|
|||||||
# normalized, deduplicated; 'unit-tests' was already present from the seed
|
# normalized, deduplicated; 'unit-tests' was already present from the seed
|
||||||
assert set(b1["added"]) == {"newtag", "beta"}
|
assert set(b1["added"]) == {"newtag", "beta"}
|
||||||
assert set(b1["already_present"]) == {"unit-tests"}
|
assert set(b1["already_present"]) == {"unit-tests"}
|
||||||
assert "newtag" in b1["tags"] and "beta" in b1["tags"]
|
assert "newtag" in b1["total_tags"] and "beta" in b1["total_tags"]
|
||||||
|
|
||||||
rg = http.get(f"{api_base}/api/assets/{aid}", timeout=120)
|
rg = http.get(f"{api_base}/api/assets/{aid}", timeout=120)
|
||||||
g = rg.json()
|
g = rg.json()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user