Skip to content

Commit df5fa06

Browse files
committed
use enum with named fields instead of ad-hoc numbers
1 parent b8d72a6 commit df5fa06

File tree

7 files changed

+60
-45
lines changed

7 files changed

+60
-45
lines changed

tagstudio/src/core/enums.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from enum import Enum
2+
3+
4+
class FieldID(int, Enum):
5+
TITLE = 0
6+
AUTHOR = 1
7+
ARTIST = 2
8+
DESCRIPTION = 4
9+
NOTES = 5
10+
TAGS = 6
11+
CONTENT_TAGS = 7
12+
META_TAGS = 8
13+
DATE_PUBLISHED = 14
14+
SOURCE = 21

tagstudio/src/core/library.py

Lines changed: 26 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from enum import Enum
1717
import ujson
1818

19+
from src.core.enums import FieldID
1920
from src.core.json_typing import JsonCollation, JsonEntry, JsonLibary, JsonTag
2021
from src.core import ts_core
2122
from src.core.utils.str import strip_punctuation
@@ -1960,48 +1961,44 @@ def add_generic_data_to_entry(self, data, entry_id: int):
19601961
if data:
19611962
# Add a Title Field if the data doesn't already exist.
19621963
if data.get("title"):
1963-
field_id = 0 # Title Field ID
1964-
if not self.does_field_content_exist(entry_id, field_id, data["title"]):
1965-
self.add_field_to_entry(entry_id, field_id)
1964+
if not self.does_field_content_exist(
1965+
entry_id, FieldID.TITLE, data["title"]
1966+
):
1967+
self.add_field_to_entry(entry_id, FieldID.TITLE)
19661968
self.update_entry_field(entry_id, -1, data["title"], "replace")
19671969

19681970
# Add an Author Field if the data doesn't already exist.
19691971
if data.get("author"):
1970-
field_id = 1 # Author Field ID
19711972
if not self.does_field_content_exist(
1972-
entry_id, field_id, data["author"]
1973+
entry_id, FieldID.AUTHOR, data["author"]
19731974
):
1974-
self.add_field_to_entry(entry_id, field_id)
1975+
self.add_field_to_entry(entry_id, FieldID.AUTHOR)
19751976
self.update_entry_field(entry_id, -1, data["author"], "replace")
19761977

19771978
# Add an Artist Field if the data doesn't already exist.
19781979
if data.get("artist"):
1979-
field_id = 2 # Artist Field ID
19801980
if not self.does_field_content_exist(
1981-
entry_id, field_id, data["artist"]
1981+
entry_id, FieldID.ARTIST, data["artist"]
19821982
):
1983-
self.add_field_to_entry(entry_id, field_id)
1983+
self.add_field_to_entry(entry_id, FieldID.ARTIST)
19841984
self.update_entry_field(entry_id, -1, data["artist"], "replace")
19851985

19861986
# Add a Date Published Field if the data doesn't already exist.
19871987
if data.get("date_published"):
1988-
field_id = 14 # Date Published Field ID
19891988
date = str(
19901989
datetime.datetime.strptime(
19911990
data["date_published"], "%Y-%m-%d %H:%M:%S"
19921991
)
19931992
)
1994-
if not self.does_field_content_exist(entry_id, field_id, date):
1995-
self.add_field_to_entry(entry_id, field_id)
1993+
if not self.does_field_content_exist(
1994+
entry_id, FieldID.DATE_PUBLISHED, date
1995+
):
1996+
self.add_field_to_entry(entry_id, FieldID.DATE_PUBLISHED)
19961997
# entry = self.entries[entry_id]
19971998
self.update_entry_field(entry_id, -1, date, "replace")
19981999

19992000
# Process String Tags if the data doesn't already exist.
20002001
if data.get("tags"):
2001-
tags_field_id = 6 # Tags Field ID
2002-
content_tags_field_id = 7 # Content Tags Field ID
2003-
meta_tags_field_id = 8 # Meta Tags Field ID
2004-
notes_field_id = 5 # Notes Field ID
20052002
tags: list[str] = data["tags"]
20062003
# extra: list[str] = []
20072004
# for tag in tags:
@@ -2050,7 +2047,7 @@ def add_generic_data_to_entry(self, data, entry_id: int):
20502047
# tag_field_indices = self.get_field_index_in_entry(
20512048
# entry_index, tags_field_id)
20522049
content_tags_field_indices = self.get_field_index_in_entry(
2053-
self.get_entry(entry_id), content_tags_field_id
2050+
self.get_entry(entry_id), FieldID.CONTENT_TAGS
20542051
)
20552052
# meta_tags_field_indices = self.get_field_index_in_entry(
20562053
# entry_index, meta_tags_field_id)
@@ -2067,45 +2064,40 @@ def add_generic_data_to_entry(self, data, entry_id: int):
20672064
entry_id, priority_field_index, [matching[0]], "append"
20682065
)
20692066
else:
2070-
self.add_field_to_entry(entry_id, content_tags_field_id)
2067+
self.add_field_to_entry(entry_id, FieldID.CONTENT_TAGS)
20712068
self.update_entry_field(
20722069
entry_id, -1, [matching[0]], "append"
20732070
)
20742071

20752072
# Add all original string tags as a note.
20762073
str_tags = f"Original Tags: {tags}"
2077-
if not self.does_field_content_exist(
2078-
entry_id, notes_field_id, str_tags
2079-
):
2080-
self.add_field_to_entry(entry_id, notes_field_id)
2074+
if not self.does_field_content_exist(entry_id, FieldID.NOTES, str_tags):
2075+
self.add_field_to_entry(entry_id, FieldID.NOTES)
20812076
self.update_entry_field(entry_id, -1, str_tags, "replace")
20822077

20832078
# Add a Description Field if the data doesn't already exist.
2084-
if "description" in data.keys() and data["description"]:
2085-
field_id = 4 # Description Field ID
2079+
if data.get("description"):
20862080
if not self.does_field_content_exist(
2087-
entry_id, field_id, data["description"]
2081+
entry_id, FieldID.DESCRIPTION, data["description"]
20882082
):
2089-
self.add_field_to_entry(entry_id, field_id)
2083+
self.add_field_to_entry(entry_id, FieldID.DESCRIPTION)
20902084
self.update_entry_field(
20912085
entry_id, -1, data["description"], "replace"
20922086
)
2093-
if "content" in data.keys() and data["content"]:
2094-
field_id = 4 # Description Field ID
2087+
if data.get("content"):
20952088
if not self.does_field_content_exist(
2096-
entry_id, field_id, data["content"]
2089+
entry_id, FieldID.DESCRIPTION, data["content"]
20972090
):
2098-
self.add_field_to_entry(entry_id, field_id)
2091+
self.add_field_to_entry(entry_id, FieldID.DESCRIPTION)
20992092
self.update_entry_field(entry_id, -1, data["content"], "replace")
2100-
if "source" in data.keys() and data["source"]:
2101-
field_id = 21 # Source Field ID
2093+
if data.get("source"):
21022094
for source in data["source"].split(" "):
21032095
if source and source != " ":
21042096
source = strip_web_protocol(string=source)
21052097
if not self.does_field_content_exist(
2106-
entry_id, field_id, source
2098+
entry_id, FieldID.SOURCE, source
21072099
):
2108-
self.add_field_to_entry(entry_id, field_id)
2100+
self.add_field_to_entry(entry_id, FieldID.SOURCE)
21092101
self.update_entry_field(entry_id, -1, source, "replace")
21102102

21112103
def add_field_to_entry(self, entry_id: int, field_id: int) -> None:

tagstudio/src/core/ts_core.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import json
88
import os
9+
from enum import Enum
910

1011
from src.core.library import Entry, Library
1112

@@ -18,6 +19,7 @@
1819
COLLAGE_FOLDER_NAME: str = "collages"
1920
LIBRARY_FILENAME: str = "ts_library.json"
2021

22+
2123
# TODO: Turn this whitelist into a user-configurable blacklist.
2224
IMAGE_TYPES: list[str] = [
2325
"png",

tagstudio/src/qt/modals/folders_to_tags.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
QFrame,
1919
)
2020

21+
from src.core.enums import FieldID
2122
from src.core.library import Library, Tag
2223
from src.core.palette import ColorType, get_tag_color
2324
from src.qt.flowlayout import FlowLayout
@@ -73,7 +74,7 @@ def add_folders_to_tree(list: list[str]) -> Tag:
7374
tag = add_folders_to_tree(folders)
7475
if tag:
7576
if not entry.has_tag(library, tag.id):
76-
entry.add_tag(library, tag.id, 6)
77+
entry.add_tag(library, tag.id, FieldID.TAGS)
7778

7879
logging.info("Done")
7980

tagstudio/src/qt/ts_qt.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
FoldersToTagsModal,
9292
)
9393
import src.qt.resources_rc
94+
from src.qt.widgets.item_thumb import TAG_ARCHIVED, TAG_FAVORITE
9495

9596
# SIGQUIT is not defined on Windows
9697
if sys.platform == "win32":
@@ -1152,8 +1153,8 @@ def update_thumbs(self):
11521153
)
11531154

11541155
item_thumb.set_item_id(entry.id)
1155-
item_thumb.assign_archived(entry.has_tag(self.lib, 0))
1156-
item_thumb.assign_favorite(entry.has_tag(self.lib, 1))
1156+
item_thumb.assign_archived(entry.has_tag(self.lib, TAG_ARCHIVED))
1157+
item_thumb.assign_favorite(entry.has_tag(self.lib, TAG_FAVORITE))
11571158
# ctrl_down = True if QGuiApplication.keyboardModifiers() else False
11581159
# TODO: Change how this works. The click function
11591160
# for collations a few lines down should NOT be allowed during modifier keys.

tagstudio/src/qt/widgets/item_thumb.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
QCheckBox,
2424
)
2525

26+
from src.core.enums import FieldID
2627
from src.core.library import ItemType, Library, Entry
2728
from src.core.ts_core import AUDIO_TYPES, VIDEO_TYPES, IMAGE_TYPES
2829
from src.qt.flowlayout import FlowWidget
@@ -36,7 +37,6 @@
3637
WARNING = f"[WARNING]"
3738
INFO = f"[INFO]"
3839

39-
DEFAULT_META_TAG_FIELD = 8
4040
TAG_FAVORITE = 1
4141
TAG_ARCHIVED = 0
4242

@@ -401,8 +401,12 @@ def update_badges(self):
401401
if self.mode == ItemType.ENTRY:
402402
# logging.info(f'[UPDATE BADGES] ENTRY: {self.lib.get_entry(self.item_id)}')
403403
# logging.info(f'[UPDATE BADGES] ARCH: {self.lib.get_entry(self.item_id).has_tag(self.lib, 0)}, FAV: {self.lib.get_entry(self.item_id).has_tag(self.lib, 1)}')
404-
self.assign_archived(self.lib.get_entry(self.item_id).has_tag(self.lib, 0))
405-
self.assign_favorite(self.lib.get_entry(self.item_id).has_tag(self.lib, 1))
404+
self.assign_archived(
405+
self.lib.get_entry(self.item_id).has_tag(self.lib, TAG_ARCHIVED)
406+
)
407+
self.assign_favorite(
408+
self.lib.get_entry(self.item_id).has_tag(self.lib, TAG_FAVORITE)
409+
)
406410

407411
def set_item_id(self, id: int):
408412
"""
@@ -473,7 +477,7 @@ def toggle_tag(entry: Entry):
473477
entry.add_tag(
474478
self.panel.driver.lib,
475479
tag_id,
476-
field_id=DEFAULT_META_TAG_FIELD,
480+
field_id=FieldID.META_TAGS,
477481
field_index=-1,
478482
)
479483
else:

tagstudio/src/qt/widgets/tag_box.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from src.qt.flowlayout import FlowLayout
1515
from src.qt.widgets import FieldWidget, TagWidget, PanelModal
1616
from src.qt.modals import BuildTagPanel, TagSearchPanel
17+
from src.qt.widgets.item_thumb import TAG_ARCHIVED, TAG_FAVORITE
1718

1819
# Only import for type checking/autocompletion, will not be imported at runtime.
1920
if typing.TYPE_CHECKING:
@@ -138,7 +139,7 @@ def edit_tag(self, tag_id: int):
138139
# panel.tag_updated.connect(lambda tag: self.lib.update_tag(tag))
139140
self.edit_modal.show()
140141

141-
def add_tag_callback(self, tag_id):
142+
def add_tag_callback(self, tag_id: int):
142143
# self.base_layout.addWidget(TagWidget(self.lib, self.lib.get_tag(tag), True))
143144
# self.tags.append(tag)
144145
logging.info(
@@ -151,7 +152,7 @@ def add_tag_callback(self, tag_id):
151152
self.driver.lib, tag_id, field_id=id, field_index=-1
152153
)
153154
self.updated.emit()
154-
if tag_id == 0 or tag_id == 1:
155+
if tag_id in (TAG_FAVORITE, TAG_ARCHIVED):
155156
self.driver.update_badges()
156157

157158
# if type((x[0]) == ThumbButton):
@@ -166,7 +167,7 @@ def add_tag_callback(self, tag_id):
166167
def edit_tag_callback(self, tag: Tag):
167168
self.lib.update_tag(tag)
168169

169-
def remove_tag(self, tag_id):
170+
def remove_tag(self, tag_id: int):
170171
logging.info(f"[TAG BOX WIDGET] SELECTED T:{self.driver.selected}")
171172
id = list(self.field.keys())[0]
172173
for x in self.driver.selected:
@@ -177,7 +178,7 @@ def remove_tag(self, tag_id):
177178
self.driver.lib, tag_id, field_index=index[0]
178179
)
179180
self.updated.emit()
180-
if tag_id == 0 or tag_id == 1:
181+
if tag_id in (TAG_FAVORITE, TAG_ARCHIVED):
181182
self.driver.update_badges()
182183

183184
# def show_add_button(self, value:bool):

0 commit comments

Comments
 (0)