Clean up footnote key generation

This commit is contained in:
Veronica Berglyd Olsen
2024-04-18 18:23:25 +02:00
parent a2d8aefb21
commit 48e653a546
+9 -8
View File
@@ -29,10 +29,10 @@ from __future__ import annotations
import json import json
import logging import logging
import random
from collections.abc import ItemsView, Iterable from collections.abc import ItemsView, Iterable
from pathlib import Path from pathlib import Path
from random import randint
from time import time from time import time
from typing import TYPE_CHECKING, Literal from typing import TYPE_CHECKING, Literal
@@ -53,8 +53,9 @@ logger = logging.getLogger(__name__)
T_NoteTypes = Literal["footnotes", "comments"] T_NoteTypes = Literal["footnotes", "comments"]
TT_NONE = "T0000" TT_NONE = "T0000" # Default title key
KEY_SOURCE = "0123456789bcdfghjklmnopqrstvwxyz" MAX_RETRY = 1000 # Key generator recursion limit
KEY_SOURCE = "0123456789bcdfghjklmnpqrstvwxz"
NOTE_TYPES: list[T_NoteTypes] = ["footnotes", "comments"] NOTE_TYPES: list[T_NoteTypes] = ["footnotes", "comments"]
@@ -974,12 +975,12 @@ class ItemIndex:
def genNewNoteKey(self, tHandle: str, style: T_NoteTypes) -> str: def genNewNoteKey(self, tHandle: str, style: T_NoteTypes) -> str:
"""Set notes key for a given item.""" """Set notes key for a given item."""
keys = set()
for item in self._items.values():
keys.update(item.noteKeys(style))
if style in NOTE_TYPES and (item := self._items.get(tHandle)): if style in NOTE_TYPES and (item := self._items.get(tHandle)):
for _ in range(1000): keys = set()
key = style[:1] + "".join([KEY_SOURCE[randint(0, 31)] for _ in range(4)]) for entry in self._items.values():
keys.update(entry.noteKeys(style))
for _ in range(MAX_RETRY):
key = style[:1] + "".join(random.choices(KEY_SOURCE, k=4))
if key not in keys: if key not in keys:
item.addNoteKey(style, key) item.addNoteKey(style, key)
return key return key