nodeslicer/infra/prusaslicer_profiles/prusaslicer_fields.py

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