29 lines
No EOL
1 KiB
Python
29 lines
No EOL
1 KiB
Python
from __future__ import annotations
|
|
from typing import TYPE_CHECKING
|
|
if TYPE_CHECKING:
|
|
from typing import Any
|
|
|
|
import os
|
|
from functools import lru_cache
|
|
|
|
from ..json_handling import dict_from_json
|
|
from ..csv_handling import parse_csv_to_dict
|
|
|
|
search_db_path: str = os.path.join('prusaslicer_fields.json')
|
|
search_db: dict[str, dict[str, Any]] = dict_from_json(search_db_path)
|
|
|
|
search_db_mod_path: str = os.path.join('prusaslicer_modifier_fields.csv')
|
|
search_db_mod: dict[str, list[str]] = parse_csv_to_dict(search_db_mod_path)
|
|
|
|
@lru_cache(maxsize=128)
|
|
def search_in_db(term) -> dict[str, dict[str, Any]]:
|
|
words: Any = term.lower().split()
|
|
return {k: v for k, v in search_db.items() if all([word in k+" "+v.get('label','') for word in words])}
|
|
|
|
@lru_cache(maxsize=128)
|
|
def search_in_mod_db(term) -> dict[str, dict[str, Any]]:
|
|
words = term.lower().split()
|
|
filtered_search_db = {k: v for k, v in search_db.items() if k in search_db_mod}
|
|
return {k: v for k, v in filtered_search_db.items() if all([word in k+" "+v.get('label','') for word in words])}
|
|
|
|
pass |