Skip to main content

DynaCLI

DynaCLI (Dynamic CLI) is a cloud-friendly Python library for converting pure Python functions into Linux Shell commands on the fly.

It's ideal for automating routine development and administrative tasks in a modern cloud software environment because it supports converting a virtually unlimited set of functions into Shell commands with minimal run-time and maintenance overhead.

Unlike other existing solutions such as Click and Typer, there is no need for any function decorators. Further, unlike with all existing solutions, including those built on top of standard argparse, DynaCLI does not build all command parsers upfront, but rather builds dynamically a single command parser based on the command line inputs. When combined with the Python Cloud Importer solution, DynaCLI becomes truly open with regard to a practically unlimited set of commands, all coming directly from cloud storage. This, in turn, eliminates any need for periodic updates on client workstations.

At its core, DynaCLI is a Python package structure interpreter which makes any public function executable from the command line.

DynaCLI was developed by BST LABS as an open source generic infrastructure foundation for the cloud version of Python run-time within the scope of the Cloud AI Operating System (CAIOS) project.

For details about the DynaCLI rationale and design considerations, refer to DynaCLI Github Pages.

Installation

Use the package manager pip to install DynaCLI from the PyPi site:

pip3 install dynacli

Usage

Define command line interpreter entry point

You can use dynacli init <CLI name> path=<actual path> command for bootstrapping the entry point file:

$ cd tutorials/greetings

$ dynacli init say path=.
Successfully created CLI entrypoint say at /home/ssm-user/OSS/py-dynacli/tutorials/greetings

The created say file has some comments to change accordingly:

#!/usr/bin/env python3

"""
DynaCLI bootstrap script # Change me
"""


import os
import sys
from typing import Final

from dynacli import main

cwd = os.path.dirname(os.path.realpath(__file__))

__version__: Final[str] = "0.0.0" # Change me to define your own version


search_path = [cwd] # Change me if you have different path; you can add multiple search pathes
sys.path.extend(search_path)
# root_packages = ['cli.dev', 'cli.admin'] # Change me if you have predefined root package name
# main(search_path, root_packages) # Uncomment if you have root_packages defined

main(search_path)

Let's change it:

#!/usr/bin/env python3
"""
Greetings CLI
"""

import sys
import os
from typing import Final

from dynacli import main

cwd = os.path.dirname(os.path.realpath(__file__))

__version__: Final[str] = "1.0"

search_path = [cwd]
sys.path.extend(search_path)

main(search_path)

That is it, now we have ready to go CLI.

Define commands

Every public function in your search path will be treated as a command. For example,

def hello(*names: str) -> None:
    """
    Print Hello <first-name> <last-name> message
    
    Args:
        names (str): variable list of names to be included in greeting
        
    Return: None
    """
    print(f"Hello, {' '.join(names)}")

Start using CLI

Let's get the help message:

$ ./say -h
usage: say [-h] [-v] {hello} ...

Greetings CLI

positional arguments:
  {hello}
    hello        Print Hello <first-name> <last-name> message

optional arguments:
  -h, --help     show this help message and exit
  -v, --version  show program's version number and exit

We can get the version as easy as:

$ ./say --version
say - v1.0

Now the help about actual command:

$ ./say hello -h
usage: say hello [-h] [names ...]

positional arguments:
  names       variable list of names to be included in greeting

optional arguments:
  -h, --help  show this help message and exit

Finally we can run the actual command(the hello function in fact) as:

$ ./say hello Shako Rzayev Asher Sterkin
Hello, Shako Rzayev Asher Sterkin

Go to tutorials/greetings folder and try it yourself.

Read the full documentation

DynaCLI Github Pages

License

MIT License, Copyright (c) 2021-2022 BST LABS. See LICENSE file.

Metadata

Release files for dynacli 1.0.8

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

Source distribution (sdist)

Source distribution for dynacli 1.0.8
File Size Uploaded
dynacli-1.0.8.tar.gz 660.9 kB Details

Built distribution (wheel)

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

Total release size: 673.6 kB

Release files / dynacli-1.0.8.tar.gz

Download URL dynacli-1.0.8.tar.gz
Size 660.9 kB
Tags Source
SHA-256 checksum
How to use checksums
5d05bd8b9df3fc01badbc6980b20bf753b41e232d898c1f846f0bc1f2c6d08a1
BLAKE2b-256 checksum
How to use checksums
d5206773c5387e58402172f2ac28b4c51f273d49732c418536b6523608764a78
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-requests/2.27.1

Release files / dynacli-1.0.8-py3-none-any.whl

Download URL dynacli-1.0.8-py3-none-any.whl
Size 12.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8f95bdbb0e1ade21d3797338a00906821652d1654c232c87e445ae50f5f66a1a
BLAKE2b-256 checksum
How to use checksums
b17408fafba2d5eddb933537424521e5438f26f3cddefa62d4f146aed135ac21
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-requests/2.27.1

Release history Release notifications | RSS feed

This release

1.0.8 This release

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

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