Revert "refactor: Handle invalid tag names gracefully"

This reverts commit e1dad21286.
pref/tag
zanllp 2026-01-22 22:43:58 +08:00
parent e1dad21286
commit cd1793b248
5 changed files with 16 additions and 28 deletions

0
1.json
View File

View File

@ -1177,9 +1177,6 @@ def infinite_image_browsing_api(app: FastAPI, **kwargs):
async def add_custom_tag(req: AddCustomTagReq):
conn = DataBase.get_conn()
tag = Tag.get_or_create(conn, name=req.tag_name, type="custom")
if tag is None:
conn.rollback()
return None
conn.commit()
return tag

View File

@ -96,7 +96,6 @@ class AutoTagMatcher:
tag_name = rule.get("tag")
if tag_name:
tag = Tag.get_or_create(self.conn, tag_name, "custom")
if tag is not None:
ImageTag(img_id, tag.id).save_or_ignore(self.conn)
ImageTag(img_id, tag.id).save_or_ignore(self.conn)
except Exception as e:
logger.error(f"Error applying auto tag rule {rule}: {e}")

View File

@ -720,9 +720,9 @@ class Tag:
if len(name) > 12:
return "INVALID_TAG_NAME_TOO_LONG"
else:
# Other languages: max 6 words and 40 characters
# Other languages: max 6 words
words = name.split()
if len(words) > 6 and len(name) > 40:
if len(words) > 6:
return "INVALID_TAG_TOO_MANY_WORDS"
return None
@ -798,8 +798,8 @@ class Tag:
# Validate tag name
error_name = cls.validate_tag_name(name)
if error_name:
# Return None for invalid tag names
return None
# Use get_or_create recursively to ensure error tag has an id
return cls.get_or_create(conn, error_name, "error")
with closing(conn.cursor()) as cur:
cur.execute(

View File

@ -189,8 +189,7 @@ def build_single_img_idx(conn, file_path, is_rebuild, safe_save_img_tag):
size_str,
type="size",
)
if size_tag is not None:
safe_save_img_tag(ImageTag(img.id, size_tag.id))
safe_save_img_tag(ImageTag(img.id, size_tag.id))
# 确定媒体类型Image / Video / Audio / Unknown
if is_image_file(file_path):
media_type_name = "Image"
@ -201,8 +200,7 @@ def build_single_img_idx(conn, file_path, is_rebuild, safe_save_img_tag):
else:
media_type_name = "Unknown"
media_type_tag = Tag.get_or_create(conn, media_type_name, 'Media Type')
if media_type_tag is not None:
safe_save_img_tag(ImageTag(img.id, media_type_tag.id))
safe_save_img_tag(ImageTag(img.id, media_type_tag.id))
keys = [
"Model",
"Sampler",
@ -220,27 +218,21 @@ def build_single_img_idx(conn, file_path, is_rebuild, safe_save_img_tag):
continue
tag = Tag.get_or_create(conn, str(v), k)
if tag is not None:
safe_save_img_tag(ImageTag(img.id, tag.id))
if "Hires upscaler" == k:
tag = Tag.get_or_create(conn, 'Hires All', k)
safe_save_img_tag(ImageTag(img.id, tag.id))
elif "Refiner" == k:
tag = Tag.get_or_create(conn, 'Refiner All', k)
safe_save_img_tag(ImageTag(img.id, tag.id))
if "Hires upscaler" == k:
tag = Tag.get_or_create(conn, 'Hires All', k)
if tag is not None:
safe_save_img_tag(ImageTag(img.id, tag.id))
elif "Refiner" == k:
tag = Tag.get_or_create(conn, 'Refiner All', k)
if tag is not None:
safe_save_img_tag(ImageTag(img.id, tag.id))
for i in lora:
tag = Tag.get_or_create(conn, i["name"], "lora")
if tag is not None:
safe_save_img_tag(ImageTag(img.id, tag.id))
safe_save_img_tag(ImageTag(img.id, tag.id))
for i in lyco:
tag = Tag.get_or_create(conn, i["name"], "lyco")
if tag is not None:
safe_save_img_tag(ImageTag(img.id, tag.id))
safe_save_img_tag(ImageTag(img.id, tag.id))
for k in pos:
tag = Tag.get_or_create(conn, k, "pos")
if tag is not None:
safe_save_img_tag(ImageTag(img.id, tag.id))
safe_save_img_tag(ImageTag(img.id, tag.id))
AutoTagMatcher.get_instance(conn).apply(img.id, parsed_params)