Source code for afwf_example.handlers.set_settings

# -*- coding: utf-8 -*-

"""
[CN]

该 Script Filter 的功能是让用户对用作 settings 的 sqlite 写入. 可以和 ``view_settings.py``
模块配合使用查看效果.
"""

import typing as T
import sys

import attrs
import afwf.api as afwf

from ..settings import settings, SettingsKeyEnum


[docs]@attrs.define class SetSettingValueHandler(afwf.Handler):
[docs] def main(self, key: str, value: str) -> afwf.ScriptFilter: sf = afwf.ScriptFilter() settings[key] = value return sf
[docs] def parse_query(self, query: str): key, value = query.split(" ", 1) return dict( key=key, value=value, )
[docs] def encode_query(self, key: str, value: str) -> str: return f"{key} {value}"
set_setting_value_handler = SetSettingValueHandler(id="set_setting_value")
[docs]@attrs.define class Handler(afwf.Handler):
[docs] def main( self, key: T.Optional[str] = None, value: T.Optional[str] = None, ) -> afwf.ScriptFilter: sf = afwf.ScriptFilter() if key is None: for settings_key in SettingsKeyEnum: item = afwf.FuzzyItem( title=settings_key.value, subtitle=f"set {settings_key.value} to ...", autocomplete=settings_key.value + " ", ).set_fuzzy_match_name(settings_key.value) sf.items.append(item) elif value is None: items = list() for settings_key in SettingsKeyEnum: item = afwf.FuzzyItem( title=settings_key.value, subtitle=f"set {settings_key.value} to ...", autocomplete=settings_key.value + " ", ).set_fuzzy_match_name(settings_key.value) items.append(item) matcher = afwf.FuzzyItemMatcher.from_items(items) sf.items.extend(matcher.match(key, threshold=0)) else: if key in SettingsKeyEnum.__members__: item = afwf.Item( title=f"Set settings.{key} = {value!r}", ) item.send_notification( title=f"Set settings.{key} = {value!r}", ) cmd = set_setting_value_handler.encode_run_script_command( bin_python=sys.executable, key=key, value=value, ) item.run_script(cmd) sf.items.append(item) else: item = afwf.Item( title=f"{key!r} is not a valid settings key", ) item.set_icon(afwf.IconFileEnum.error) sf.items.append(item) return sf
[docs] def parse_query(self, query: str): q = afwf.Query.from_str(query) if q.n_trimmed_parts == 0: return dict(key=None, value=None) elif q.n_trimmed_parts == 1: return dict(key=q.trimmed_parts[0], value=None) elif q.n_trimmed_parts == 2: return dict(key=q.trimmed_parts[0], value=q.trimmed_parts[1]) else: raise NotImplementedError
handler = Handler(id="set_settings")