Skip to main content

XAPPT - extensible application toolkit

Python Unittest

XAPPT (pronounced like "zapped") is a toolkit that makes it easy to create custom command line tools and invoke them from a uniform interface.

XAPPT requires Python 3.7 or higher.

To get started just create a subclass of xappt.models.plugin.Plugin, and make sure it's loadable by invoking your package, or a plugins submodule of your package.

The name of your module should have the prefix "xappt". This allows automatic plugin discovery by scanning sys.path, and scanning paths defined on the environment variable XAPPT_PLUGIN_PATH.

Getting started

If xappt is installed to the system Python interpreter, it should be available on the command line just by running the xappt command.

If everything is installed properly you should get output that looks like this:

$ xappt
usage: xappt [-h] [--version] {} ...

positional arguments:
  {}  Sub command help

optional arguments:
  -h, --help   show this help message and exit
  --version    Display the version number

Let's walk through creating a custom plugin. I'll be doing this on Linux, but the process is pretty similar on other systems.

First, make sure that xappt is installed:

$ pip3 install xappt

Next, let's make sure that xappt is available on the command line:

$ xappt --version
xappt 0.0.3-4735e57

Now lets make a new plugin:

$ cd ~
$ mkdir -p temp/xappt_plugin
$ cd temp/xappt_plugin
$ touch __init__.py

We're created a folder named "temp", and inside that a folder named "xappt_plugin".

The reason for the two folders is so that we can add "temp" to XAPPT_PLUGIN_PATH, so that the "xappt_plugin" folder can be found inside it. We'll get to that momentarily.

Then we create a new file in "xappt_plugin" named __init__.py.

Now in __init__.py add the following code:

import xappt


@xappt.register_plugin
class MyPlugin(xappt.BaseTool):
    arg1 = xappt.ParamString(required=True)
    arg2 = xappt.ParamString(required=True)
    arg3 = xappt.ParamString(required=True)

    @classmethod
    def help(cls) -> str:
        return str("A simple command that will just echo the passed in arguments")

    def execute(self, interface: xappt.BaseInterface, **kwargs) -> int:
        print(self.arg1.value)
        print(self.arg2.value)
        print(self.arg3.value)
        return 0

Finally, we have to add that "temp" folder to an environment variable to make our plugin discoverable, and then invoke xappt.

On Linux this would look something like this:

$ export XAPPT_PLUGIN_PATH=~/temp
$ xappt

On Windows it would look like this:

set XAPPT_PLUGIN_PATH=C:\path\to\temp
xappt

The output should now look like this:

usage: xappt [-h] [--version] {myplugin} ...

positional arguments:
  {myplugin}            Sub command help
    myplugin            A simple command that will just echo the passed in arguments

optional arguments:
  -h, --help            show this help message and exit
  --version             Display the version number

And when running xappt myplugin:

$ xappt myplugin
usage: main.py example [-h] --arg1 ARG1 --arg2 ARG2 --arg3 ARG3
xappt myplugin: error: the following arguments are required: --arg1, --arg2, --arg3

So let's pass in some arguments:

$ xappt myplugin --arg1 123 --arg2 abc --arg3 xyz
123
abc
xyz

For more complicated plugins you can have a structure like this:

/xappt_plugin
    /plugins
        __init__.py
        myplugin.py
    __init__.py

In this case myplugin.py would contain the MyPlugin class. And xappt_plugin/plugins/__init__.py might look like this:

from .myplugin import MyPlugin

And that's it. Now feel free to make execute do something actually useful.

Examples

Xappt ships with a few example plugins that you can dissect. To load these plugins set an environment variable named XAPPT_LOAD_EXAMPLE_TOOLS to "1" before loading Xappt.

$ export XAPPT_LOAD_EXAMPLE_TOOLS=1

These examples can be found in xappt.plugins.tools.examples.

Metadata

Release files for xappt 0.9.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for xappt 0.9.3
File Size Uploaded
xappt-0.9.3.tar.gz 26.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for xappt 0.9.3
File Interpreter ABI Platform
xappt-0.9.3-py3-none-any.whl Python 3 none any Details

Total release size: 63.8 kB

Release files / xappt-0.9.3.tar.gz

Download URL xappt-0.9.3.tar.gz
Size 26.5 kB
Tags Source
SHA-256 checksum
How to use checksums
755f3ca6e0f4c764130d27ab924e55270523735a4a875ebbc0a23d09ba07f8c6
BLAKE2b-256 checksum
How to use checksums
935bcc01309a18b4aaf9ab3a80fc64a884ef8cde69da8e638d4e9d5aba186138
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.6

Release files / xappt-0.9.3-py3-none-any.whl

Download URL xappt-0.9.3-py3-none-any.whl
Size 37.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
005abf060d5783f3b8b5f33bbeb160737ec1c3b3fce96d88fc5919331110e201
BLAKE2b-256 checksum
How to use checksums
78bf72473fd48a9c93a4465e23995f8c51049b6fb782f483583284f38c6e6fdf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.6

Release history Release notifications | RSS feed

This release

0.9.3 This release

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.6.0

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.0

2 release files

0.3.7

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.1

2 release files

0.2.11

2 release files

0.2.9

2 release files

0.2.7

2 release files

0.2.4

2 release files

0.2.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page