Skip to content

Commit 8567e68

Browse files
committed
use enum with named fields instead of ad-hoc numbers
1 parent 6e56f13 commit 8567e68

File tree

7 files changed

+57
-45
lines changed

7 files changed

+57
-45
lines changed

tagstudio/src/core/enums.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,16 @@ class Theme(str, enum.Enum):
1414
COLOR_BG = "#65000000"
1515
COLOR_HOVER = "#65AAAAAA"
1616
COLOR_PRESSED = "#65EEEEEE"
17+
18+
19+
class FieldID(int, enum.Enum):
20+
TITLE = 0
21+
AUTHOR = 1
22+
ARTIST = 2
23+
DESCRIPTION = 4
24+
NOTES = 5
25+
TAGS = 6
26+
CONTENT_TAGS = 7
27+
META_TAGS = 8
28+
DATE_PUBLISHED = 14
29+
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: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1195,8 +1195,8 @@ def update_thumbs(self):
11951195
)
11961196

11971197
item_thumb.set_item_id(entry.id)
1198-
item_thumb.assign_archived(entry.has_tag(self.lib, 0))
1199-
item_thumb.assign_favorite(entry.has_tag(self.lib, 1))
1198+
item_thumb.assign_archived(entry.has_tag(self.lib, TAG_ARCHIVED))
1199+
item_thumb.assign_favorite(entry.has_tag(self.lib, TAG_FAVORITE))
12001200
# ctrl_down = True if QGuiApplication.keyboardModifiers() else False
12011201
# TODO: Change how this works. The click function
12021202
# 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
@@ -37,7 +38,6 @@
3738
WARNING = f"[WARNING]"
3839
INFO = f"[INFO]"
3940

40-
DEFAULT_META_TAG_FIELD = 8
4141
TAG_FAVORITE = 1
4242
TAG_ARCHIVED = 0
4343

@@ -402,8 +402,12 @@ def update_badges(self):
402402
if self.mode == ItemType.ENTRY:
403403
# logging.info(f'[UPDATE BADGES] ENTRY: {self.lib.get_entry(self.item_id)}')
404404
# 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)}')
405-
self.assign_archived(self.lib.get_entry(self.item_id).has_tag(self.lib, 0))
406-
self.assign_favorite(self.lib.get_entry(self.item_id).has_tag(self.lib, 1))
405+
self.assign_archived(
406+
self.lib.get_entry(self.item_id).has_tag(self.lib, TAG_ARCHIVED)
407+
)
408+
self.assign_favorite(
409+
self.lib.get_entry(self.item_id).has_tag(self.lib, TAG_FAVORITE)
410+
)
407411

408412
def set_item_id(self, id: int):
409413
"""
@@ -474,7 +478,7 @@ def toggle_tag(entry: Entry):
474478
entry.add_tag(
475479
self.panel.driver.lib,
476480
tag_id,
477-
field_id=DEFAULT_META_TAG_FIELD,
481+
field_id=FieldID.META_TAGS,
478482
field_index=-1,
479483
)
480484
else:

tagstudio/src/qt/widgets/tag_box.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ def edit_tag(self, tag_id: int):
142142
# panel.tag_updated.connect(lambda tag: self.lib.update_tag(tag))
143143
self.edit_modal.show()
144144

145-
def add_tag_callback(self, tag_id):
145+
def add_tag_callback(self, tag_id: int):
146146
# self.base_layout.addWidget(TagWidget(self.lib, self.lib.get_tag(tag), True))
147147
# self.tags.append(tag)
148148
logging.info(
@@ -155,7 +155,7 @@ def add_tag_callback(self, tag_id):
155155
self.driver.lib, tag_id, field_id=id, field_index=-1
156156
)
157157
self.updated.emit()
158-
if tag_id == 0 or tag_id == 1:
158+
if tag_id in (TAG_FAVORITE, TAG_ARCHIVED):
159159
self.driver.update_badges()
160160

161161
# if type((x[0]) == ThumbButton):
@@ -170,7 +170,7 @@ def add_tag_callback(self, tag_id):
170170
def edit_tag_callback(self, tag: Tag):
171171
self.lib.update_tag(tag)
172172

173-
def remove_tag(self, tag_id):
173+
def remove_tag(self, tag_id: int):
174174
logging.info(f"[TAG BOX WIDGET] SELECTED T:{self.driver.selected}")
175175
id = list(self.field.keys())[0]
176176
for x in self.driver.selected:
@@ -181,7 +181,7 @@ def remove_tag(self, tag_id):
181181
self.driver.lib, tag_id, field_index=index[0]
182182
)
183183
self.updated.emit()
184-
if tag_id == 0 or tag_id == 1:
184+
if tag_id in (TAG_FAVORITE, TAG_ARCHIVED):
185185
self.driver.update_badges()
186186

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

0 commit comments

Comments
 (0)