Skip to main content

A script that starts and stops Tango Device Server(s)

Project description

tango-takeoff

A tool that can find, start and stop Tango Device Servers. It's like Astor for the command line.

In general, the tool is explaining itself. Run it and look at the output.

Installation

tango-takeoff is on PyPI and conda-forge. Install it with your preferred package manager: pip, uv, conda or pixi.

As it's intended to be used as a script, we recommend installing it globally. With uv, do:

uv tool install tango-takeoff

And with pixi:

pixi global install tango-takeoff

Usage

The tool depends on the TANGO_HOST environment variable.

Help

> takeoff --help
usage: takeoff [-h] {find,up,down,restart} ...

Start (up), stop (down) or restart (restart) Tango Device Servers

positional arguments:
  {find,up,start,down,stop,restart}
    find                Finds servers based on terms and shows the 'dry run' version of what will be used in 'up' and 'down'
    up (start)          Bring servers up based on terms
    down (stop)         Bring servers down based on terms
    restart             Restart servers based on terms

options:
  -h, --help      show this help message and exit

Find

> takeoff find --help
usage: takeoff find [-h] [--json] [--default-host DEFAULT_HOST] [-v] servers [servers ...]

positional arguments:
  servers               A name or search term of a server, use * for wildcard in the end of the name. Use the format [host,]<server-name>

  options:
    -h, --help            show this help message and exit
    --json                Output structured as JSON (default: False)
    --default-host DEFAULT_HOST
                          Default host for Tango device servers (default: None)
    -v, --verbose         Set the trace level. Can be used in count way: -vv or --verbose --verbose (default: None)

Up / Start

> takeoff up --help
usage: takeoff up [-h] [--json] [--default-host DEFAULT_HOST] [-v] [-t RUNNING_TIMEOUT] [-s STARTER_TIMEOUT] [-d] servers [servers ...]

positional arguments:
  servers               A name or search term of a server, use * for wildcard in the end of the name. Use the format [host,]<server-name>[,<level>]

options:
  -h, --help            show this help message and exit
  --json                Output structured as JSON (default: False)
  --default-host DEFAULT_HOST
                        Default host for Tango device servers (default: None)
  -v, --verbose         Set the trace level. Can be used in count way: -vv or --verbose --verbose (default: None)
  -t RUNNING_TIMEOUT, --timeout RUNNING_TIMEOUT
                        Time to wait for a server to be running (in seconds) (default: 60)
  -s STARTER_TIMEOUT, --starter-timeout STARTER_TIMEOUT
                        Time to wait for starter if it's not running (in seconds) (default: 10)
  -d, --dry-run         outputs the servers with the details that will take effect by the command (default: False)

Down / Stop

> takeoff down --help
usage: takeoff down [-h] [--json] [--default-host DEFAULT_HOST] [-v] [-f] [-k KILL_TIMEOUT] [-s STARTER_TIMEOUT] [-d] servers [servers ...]

positional arguments:
  servers               A name or search term of a server, use * for wildcard in the end of the name. Use the format [host,]<server-name>

options:
  -h, --help            show this help message and exit
  --json                Output structured as JSON (default: False)
  --default-host DEFAULT_HOST
                        Default host for Tango device servers (default: None)
  -v, --verbose         Set the trace level. Can be used in count way: -vv or --verbose --verbose (default: None)
  -f, --force           Force kill servers (default: False)
  -k KILL_TIMEOUT, --kill-timeout KILL_TIMEOUT
                        Time before force killing (in seconds) (default: 30)
  -s STARTER_TIMEOUT, --starter-timeout STARTER_TIMEOUT
                        Time to wait for starter if it's not running (in seconds) (default: 10)
  -d, --dry-run         outputs the servers with the details that will take effect by the command (default: False)

Restart

> takeoff restart --help
usage: takeoff restart [-h] [--json] [--default-host DEFAULT_HOST] [-v] [-f] [-k KILL_TIMEOUT] [-t RUNNING_TIMEOUT] [-s STARTER_TIMEOUT] [-d] [-w WAIT_AFTER_STOP] servers [servers ...]

positional arguments:
  servers               A name or search term of a server, use * for wildcard in the end of the name. Use the format [host,]<server-name>

options:
  -h, --help            show this help message and exit
  --json                Output structured as JSON (default: False)
  --default-host DEFAULT_HOST
                        Default host for Tango device servers (default: None)
  -v, --verbose         Set the trace level. Can be used in count way: -vv or --verbose --verbose (default: None)
  -f, --force           Force kill servers (default: False)
  -k KILL_TIMEOUT, --kill-timeout KILL_TIMEOUT
                        Time before force killing (in seconds) (default: 30)
  -t RUNNING_TIMEOUT, --timeout RUNNING_TIMEOUT
                        Time to wait for a server to be running (in seconds) (default: 60)
  -s STARTER_TIMEOUT, --starter-timeout STARTER_TIMEOUT
                        Time to wait for starter if it's not running (in seconds) (default: 10)
  -d, --dry-run         outputs the servers with the details that will take effect by the command (default: False)
  -w WAIT_AFTER_STOP, --wait-after-stop WAIT_AFTER_STOP
                        Time to wait between stop / start (in seconds) (default: 1)

Testing

To test locally, you can use pixi.

Required setup:

  1. Start a Tango PyDatabaseds by running pixi run db. You could use your own instance if you prefer. Press CTRL-C to stop it.

  2. export TANGO_HOST to point to your tango database (127.0.0.1:10000 if you used the previous steps).

  3. Start Starter by running pixi run starter. This will automatically create the required Tango devices and install some servers for testing purpose:

    • TangoTest
    • UniversalTest
    • SlowToStart: a dummy server that takes 7 seconds to start
    • SlowToStop: a dummy server that takes 7 seconds to stop
    • FailToStart: a dummy server that can't start (raises an exception in init_device)

Once you have Starter running, you can run the tests using pixi run pytest -v.

You can also manually test different scenarios by running pixi run takeoff and passing any argument you want. Or run pixi shell and then takeoff directly.

For convenience, you have 2 tasks predefined:

  • pixi run up to start all the servers
  • pixi run down to stop all the servers

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tango_takeoff-3.1.0.tar.gz (61.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tango_takeoff-3.1.0-py3-none-any.whl (29.2 kB view details)

Uploaded Python 3

File details

Details for the file tango_takeoff-3.1.0.tar.gz.

File metadata

  • Download URL: tango_takeoff-3.1.0.tar.gz
  • Upload date:
  • Size: 61.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for tango_takeoff-3.1.0.tar.gz
Algorithm Hash digest
SHA256 0a442f2c19ac621fb7c862fdfe4fda22d4dd66108e3254c6d76eaa6099d19686
MD5 4e8a27106ad1f6bbec1d8f3913ddf726
BLAKE2b-256 ae22d08e319b7c748a11f1ed8e4b1628ff02fa97c1f70b3892728fc3906d9da4

See more details on using hashes here.

File details

Details for the file tango_takeoff-3.1.0-py3-none-any.whl.

File metadata

  • Download URL: tango_takeoff-3.1.0-py3-none-any.whl
  • Upload date:
  • Size: 29.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for tango_takeoff-3.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 785951ee4b02c584b7f06a5b7cfbd4574b6d786c6ad00a9f4a404067b3dfb479
MD5 d58074944c40ee80d066bea550a2c964
BLAKE2b-256 604a2b13d977e8f731b96034d9a1fb35a604a1b66a6795435d1dd5676d60ebc1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page