From dbab810deec151de7eea7a81c8fd6a8283c27533 Mon Sep 17 00:00:00 2001 From: Cedrik Neumann <7921017+m1racoli@users.noreply.github.com> Date: Sat, 1 May 2021 13:06:30 +0200 Subject: [PATCH] feat(scripts): provide `diagrams` CLI This change addresses https://github.com/mingrammer/diagrams/issues/369 while providing a simple CLI entry point which can be used outside the virtual environment of the installed package. This works well with for example with [pipx](https://pipxproject.github.io/pipx/). --- diagrams/cli.py | 31 +++++++++++++++++++++++++++++++ docs/getting-started/installation.md | 18 ++++++++++++++++++ pyproject.toml | 3 +++ 3 files changed, 52 insertions(+) create mode 100644 diagrams/cli.py diff --git a/diagrams/cli.py b/diagrams/cli.py new file mode 100644 index 0000000..22a7368 --- /dev/null +++ b/diagrams/cli.py @@ -0,0 +1,31 @@ +import argparse +import sys + + +def run() -> int: + parser = argparse.ArgumentParser( + description="Run diagrams code files in a diagrams environment.", + ) + parser.add_argument( + "paths", + metavar="path", + type=str, + nargs="+", + help="a Python file containing diagrams code", + ) + args = parser.parse_args() + + for path in args.paths: + print(path) + with open(path) as f: + exec(f.read()) + + return 0 + + +def main(): + sys.exit(run()) + + +if __name__ == "__main__": + main() diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md index 90f6be8..310738e 100644 --- a/docs/getting-started/installation.md +++ b/docs/getting-started/installation.md @@ -18,6 +18,9 @@ $ pipenv install diagrams # using poetry $ poetry add diagrams + +# using pipx +$ pipx install diagrams ``` ## Quick Start @@ -43,6 +46,21 @@ $ python diagram.py It will be saved as `web_service.png` on your working directory. +### CLI + +If the `diagrams` CLI has been installed system wide (i.e. with [pipx](https://pipxproject.github.io/pipx/)), +then the preceding command is equivalent to this. + +```shell +$ diagrams diagram.py +``` + +Furthermore you can execute multiple files at once + +```shell +$ diagrams diagram1.py diagram2.py +``` + ## Next See more [Examples](/docs/getting-started/examples) or see [Guides](/docs/guides/diagram) page for more details. diff --git a/pyproject.toml b/pyproject.toml index 2c93a39..6ce00a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,6 +9,9 @@ homepage = "https://diagrams.mingrammer.com" repository = "https://github.com/mingrammer/diagrams" include = ["resources/**/*"] +[tool.poetry.scripts] +diagrams="diagrams.cli:main" + [tool.poetry.dependencies] python = "^3.6" graphviz = ">=0.13.2,<0.17.0"