rattail.commands.typer
¶
Typer-based command utilities
- class rattail.commands.typer.OrderCommands(*, name: str | None = None, commands: Dict[str, Command] | Sequence[Command] | None = None, rich_markup_mode: Literal['markdown', 'rich', None] = 'rich', rich_help_panel: str | None = None, **attrs: Any)[source]¶
Custom base class for top-level Typer command.
This exists only to ensure the commands listing is sorted when displayed with
--help
param, since Typer “by design” will not sort them.See also this Typer doc.
- rattail.commands.typer.file_exporter_command(fn)[source]¶
Decorator for file export commands. Adds common params based on
file_exporter_command_template()
.
- rattail.commands.typer.file_exporter_command_template(output_dir: ~pathlib.Annotated[~pathlib.Path, <typer.models.OptionInfo object at 0x7f7e8672bdd0>] = Ellipsis)[source]¶
Stub function to provide signature for exporter commands which produce data file(s) as output. Used with
file_exporter_command()
.
- rattail.commands.typer.file_importer_command(fn)[source]¶
Decorator for file import commands. Adds common params based on
file_importer_command_template()
.
- rattail.commands.typer.file_importer_command_template(input_dir: ~pathlib.Annotated[~pathlib.Path, <typer.models.OptionInfo object at 0x7f7e8672bf50>] = Ellipsis)[source]¶
Stub function to provide signature for importer commands which require data file(s) as input. Used with
file_importer_command()
.
- rattail.commands.typer.importer_command(fn)[source]¶
Decorator for import/export commands. Adds common params based on
importer_command_template()
.
- rattail.commands.typer.importer_command_template(models: ~typing.Annotated[~typing.List[str] | None, <typer.models.ArgumentInfo object at 0x7f7e8672a390>] = None, list_all_models: ~typing.Annotated[bool, <typer.models.OptionInfo object at 0x7f7e87582910>] = False, list_default_models: ~typing.Annotated[bool, <typer.models.OptionInfo object at 0x7f7e8672a450>] = False, make_batches: ~typing.Annotated[bool, <typer.models.OptionInfo object at 0x7f7e8672a510>] = False, key: ~typing.Annotated[str, <typer.models.OptionInfo object at 0x7f7e8672a610>] = None, fields: ~typing.Annotated[str, <typer.models.OptionInfo object at 0x7f7e8672a710>] = None, exclude_fields: ~typing.Annotated[str, <typer.models.OptionInfo object at 0x7f7e8672a810>] = None, fuzzy_fields: ~typing.Annotated[str, <typer.models.OptionInfo object at 0x7f7e8672a910>] = None, fuzz_factor: ~typing.Annotated[int, <typer.models.OptionInfo object at 0x7f7e8672aa10>] = 1, create: ~typing.Annotated[bool, <typer.models.OptionInfo object at 0x7f7e8672ab10>] = True, max_create: ~typing.Annotated[int, <typer.models.OptionInfo object at 0x7f7e8672ac10>] = None, update: ~typing.Annotated[bool, <typer.models.OptionInfo object at 0x7f7e8672ad10>] = True, max_update: ~typing.Annotated[int, <typer.models.OptionInfo object at 0x7f7e8672ae10>] = None, delete: ~typing.Annotated[bool, <typer.models.OptionInfo object at 0x7f7e8672af10>] = False, max_delete: ~typing.Annotated[int, <typer.models.OptionInfo object at 0x7f7e8672b010>] = None, max_total: ~typing.Annotated[int, <typer.models.OptionInfo object at 0x7f7e8672b110>] = None, start_date: ~datetime.Annotated[~datetime.datetime, <typer.models.OptionInfo object at 0x7f7e8672b210>] = None, end_date: ~datetime.Annotated[~datetime.datetime, <typer.models.OptionInfo object at 0x7f7e8672b310>] = None, year: ~typing.Annotated[int, <typer.models.OptionInfo object at 0x7f7e8672b490>] = None, batch_size: ~typing.Annotated[int, <typer.models.OptionInfo object at 0x7f7e8672b650>] = 200, collect_changes: ~typing.Annotated[bool, <typer.models.OptionInfo object at 0x7f7e8672b7d0>] = True, warnings: ~typing.Annotated[bool, <typer.models.OptionInfo object at 0x7f7e8672b950>] = False, max_diffs: ~typing.Annotated[int, <typer.models.OptionInfo object at 0x7f7e8672bad0>] = None, dry_run: ~typing.Annotated[bool, <typer.models.OptionInfo object at 0x7f7e8672bc50>] = False)[source]¶
Stub function which provides a common param signature; used with
importer_command()
.
- rattail.commands.typer.make_cli_config(ctx)[source]¶
Make a config object according to the command-line context (params).
- Parameters:
ctx¶ –
typer.Context
instance- Returns:
RattailConfig
instance
- rattail.commands.typer.make_typer(**kwargs)[source]¶
Create a Typer command instance, per Rattail conventions.
This function is used to create the top-level
rattail
command,rattail_typer
. You can use it to create additional top-level commands for your app, as needed.- Returns:
typer.Typer
instance
- rattail.commands.typer.typer_callback(ctx: ~typer.models.Context, config_paths: ~typing.Annotated[~typing.List[~pathlib.Path] | None, <typer.models.OptionInfo object at 0x7f7e86728f50>] = None, plus_config_paths: ~typing.Annotated[~typing.List[~pathlib.Path] | None, <typer.models.OptionInfo object at 0x7f7e8713b110>] = None, progress: ~typing.Annotated[bool, <typer.models.OptionInfo object at 0x7f7e86729990>] = False, no_init: ~typing.Annotated[bool, <typer.models.OptionInfo object at 0x7f7e86729a50>] = False, no_extend_config: ~typing.Annotated[bool, <typer.models.OptionInfo object at 0x7f7e86729b50>] = False, verbose: ~typing.Annotated[bool, <typer.models.OptionInfo object at 0x7f7e86729c50>] = False, progress_socket: ~typing.Annotated[str, <typer.models.OptionInfo object at 0x7f7e86729d50>] = None, runas_username: ~typing.Annotated[str, <typer.models.OptionInfo object at 0x7f7e86729e50>] = None, versioning: ~typing.Annotated[bool, <typer.models.OptionInfo object at 0x7f7e86729f50>] = False, no_versioning: ~typing.Annotated[bool, <typer.models.OptionInfo object at 0x7f7e8672a050>] = False)[source]¶
Generic callback for use with top-level commands.
- rattail.commands.typer.typer_eager_imports(group: [<class 'typer.main.Typer'>, <class 'str'>])[source]¶
Eagerly import all modules which are registered as having subcommands belonging to the given group.
This is used to locate subcommands which may be defined by multiple different packages. It is mostly needed for the main
rattail
command, since e.g. various POS integration packages may define additional subcommands for it.Most custom apps will define their own top-level command and some subcommands, but will have no need to “discover” additional subcommands defined elsewhere. Hence you normally would not need to call this function.
However if you wish to define a
rattail
subcommand(s), you would need to register the entry point for your module(s) containing the subcommand(s) like so (inpyproject.toml
):[project.entry-points."rattail.typer_imports"] poser = "poser.commands"
Note that
rattail.typer_imports
indicates you are registering a module which definesrattail
subcommands. Theposer
name is arbitrary but should match your package name.- Parameters:
group¶ – Typer group command, or the name of one.
- rattail.commands.typer.typer_get_runas_user(ctx, session=None)[source]¶
Convenience function to get the “runas” User object for the current command.
Uses
rattail.app.AppHandler.get_runas_user()
under the hood, but the--runas
command line param provides the default username.