# -*- coding: utf-8 -*-"""Fire-based command-line entry point exposed as the ``afwf-genpass`` script.Two flavours per generator:- ``gen*`` — Alfred Script Filter entry, emits JSON via afwf and routes errors to a rotating log file at :attr:`paths.path_enum.path_error_log`.- ``gen*-one`` — plain stdout, prints exactly one value. Independent of Alfred; handy in shell pipelines (e.g. ``export TOKEN=$(afwf-genpass genid-one)``)."""importfireimportafwf.apiasafwffrom.constantsimport(default_lengthas_genpass_default_length,id_default_lengthas_genid_default_length,)from.genpassimportmainasgenpass_main,random_passwordfrom.genidimportmainasgenid_main,gen_idfrom.genuuid4importmainasgenuuid4_main,gen_uuid4from.pathsimportpath_enum_log_error=afwf.log_error(log_file=path_enum.path_error_log,tb_limit=10,)def_error_sf(exc:Exception)->afwf.ScriptFilter:"""Build an error ScriptFilter; pressing Enter opens the log file."""item=afwf.Item(title=f"{type(exc).__name__}: {exc}",subtitle=f"Press Enter to open the error log: {path_enum.path_error_log}",icon=afwf.Icon.from_image_file(path=afwf.IconFileEnum.error),valid=True,)item.open_file(str(path_enum.path_error_log))returnafwf.ScriptFilter(items=[item])
[docs]classCommand:"""Fire subcommand container. ``gen*`` → Alfred JSON; ``gen*-one`` → stdout."""
[docs]defgenpass(self,query:str)->None:"""Script Filter: random passwords. Empty ``query`` falls back to length 12."""ifnotquery:query="12"@_log_errordef_run():genpass_main(query=str(query)).send_feedback()try:_run()exceptExceptionase:_error_sf(e).send_feedback()
[docs]defgenid(self,query:str)->None:"""Script Filter: random short IDs. Empty ``query`` falls back to length 16."""ifnotquery:query="16"@_log_errordef_run():genid_main(query=str(query)).send_feedback()try:_run()exceptExceptionase:_error_sf(e).send_feedback()
[docs]defgenuuid4(self)->None:"""Script Filter: random UUID4s. Configure Alfred with ``argumenttype=2``."""@_log_errordef_run():genuuid4_main().send_feedback()try:_run()exceptExceptionase:_error_sf(e).send_feedback()
# --------------------------------------------------------------------------# "_one" variants — print exactly one value to stdout. Plain text, no afwf.# --------------------------------------------------------------------------
[docs]defgenpass_one(self,length:int=_genpass_default_length)->None:"""Print one random password of ``length`` chars."""print(random_password(int(length)))
[docs]defgenid_one(self,length:int=_genid_default_length)->None:"""Print one random short ID of ``length`` chars."""print(gen_id(int(length)))
[docs]defgenuuid4_one(self)->None:"""Print one random UUID4."""print(gen_uuid4())
[docs]defrun():"""Console-script entry point declared in ``pyproject.toml``."""fire.Fire(Command)