Custom CLIs

Overview

By default, packages created with the Singer SDK will have a single command, e.g. tap-my-source, which will run the application in a Singer-compatible way. However, you may want to add additional commands to your package. For example, you may want to add a command to initialize the database or platform with certain attributes required by the application to run properly.

Adding a custom command

To add a custom command, you will need to add a new method to your plugin class that returns an instance of click.Command (or a subclass of it) and decorate it with the singer_sdk.cli.plugin_cli decorator. Then you will need to add the command to the [tool.poetry.scripts] section of your pyproject.toml file.

# tap_shortcut/tap.py

class ShortcutTap(Tap):
    """Shortcut tap class."""

    @plugin_cli
    def update_schema(cls) -> click.Command:
        """Update the OpenAPI schema for this tap."""
        @click.command()
        def update():
            response = requests.get(
                "https://developer.shortcut.com/api/rest/v3/shortcut.swagger.json",
                timeout=5,
            )
            with Path("tap_shortcut/openapi.json").open("w") as f:
                f.write(response.text)

        return update
# pyproject.toml

[tool.poetry.scripts]
tap-shortcut = "tap_shortcut.tap:ShortcutTap.cli"
tap-shortcut-update-schema = "tap_shortcut.tap:ShortcutTap.update_schema"