<p align="center">
<a title="edaa-org.github.io/pyEDAA.CLITool" href="https://edaa-org.github.io/pyEDAA.CLITool"><img height="80px" src="doc/_static/logo.svg"/></a>
</p>
[![Sourcecode on GitHub](https://img.shields.io/badge/pyEDAA-CLITool-ffca28.svg?longCache=true&style=flat-square&logo=github&longCache=true&logo=GitHub&labelColor=ff8f00)](https://GitHub.com/edaa-org/pyEDAA.CLITool)
[![Sourcecode License](https://img.shields.io/pypi/l/pyEDAA.CLITool?longCache=true&style=flat-square&logo=Apache&label=code)](LICENSE.md)
[![Documentation](https://img.shields.io/website?longCache=true&style=flat-square&label=edaa-org.github.io%2FpyEDAA.CLITool&logo=GitHub&logoColor=fff&up_color=blueviolet&up_message=Read%20now%20%E2%9E%9A&url=https%3A%2F%2Fedaa-org.github.io%2FpyEDAA.CLITool%2Findex.html)](https://edaa-org.github.io/pyEDAA.CLITool/)
[![Documentation License](https://img.shields.io/badge/doc-CC--BY%204.0-green?longCache=true&style=flat-square&logo=CreativeCommons&logoColor=fff)](LICENSE.md)
[![Gitter](https://img.shields.io/badge/chat-on%20gitter-4db797.svg?longCache=true&style=flat-square&logo=gitter&logoColor=e8ecef)](https://gitter.im/hdl/community)
[![PyPI](https://img.shields.io/pypi/v/pyEDAA.CLITool?longCache=true&style=flat-square&logo=PyPI&logoColor=FBE072)](https://pypi.org/project/pyEDAA.CLITool/)
![PyPI - Status](https://img.shields.io/pypi/status/pyEDAA.CLITool?longCache=true&style=flat-square&logo=PyPI&logoColor=FBE072)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pyEDAA.CLITool?longCache=true&style=flat-square&logo=PyPI&logoColor=FBE072)
[![GitHub Workflow - Build and Test Status](https://img.shields.io/github/workflow/status/edaa-org/pyEDAA.CLITool/Pipeline/main?longCache=true&style=flat-square&label=Build%20and%20test&logo=GitHub%20Actions&logoColor=FFFFFF)](https://GitHub.com/edaa-org/pyEDAA.CLITool/actions/workflows/Pipeline.yml)
[![Libraries.io status for latest release](https://img.shields.io/librariesio/release/pypi/pyEDAA.CLITool?longCache=true&style=flat-square&logo=Libraries.io&logoColor=fff)](https://libraries.io/github/edaa-org/pyEDAA.CLITool)
[![Codacy - Quality](https://img.shields.io/codacy/grade/7cc5334a04924f77ae75bbffbf48ff98?longCache=true&style=flat-square&logo=Codacy)](https://www.codacy.com/gh/edaa-org/pyEDAA.CLITool)
[![Codacy - Coverage](https://img.shields.io/codacy/coverage/7cc5334a04924f77ae75bbffbf48ff98?longCache=true&style=flat-square&logo=Codacy)](https://www.codacy.com/gh/edaa-org/pyEDAA.CLITool)
[![Codecov - Branch Coverage](https://img.shields.io/codecov/c/github/edaa-org/pyEDAA.CLITool?longCache=true&style=flat-square&logo=Codecov)](https://codecov.io/gh/edaa-org/pyEDAA.CLITool)
<!--
[![Dependent repos (via libraries.io)](https://img.shields.io/librariesio/dependent-repos/pypi/pyEDAA.CLITool?longCache=true&style=flat-square&logo=GitHub)](https://github.com/edaa-org/pyEDAA.CLITool/network/dependents)
[![Requires.io](https://img.shields.io/requires/github/edaa-org/pyEDAA.CLITool?longCache=true&style=flat-square)](https://requires.io/github/edaa-org/pyEDAA.CLITool/requirements/?branch=main)
[![Libraries.io SourceRank](https://img.shields.io/librariesio/sourcerank/pypi/pyEDAA.CLITool)](https://libraries.io/github/edaa-org/pyEDAA.CLITool/sourcerank)
-->
Provide unified interfaces to execute EDA tools via CLI from Python, agnostic to any specific configuration format/object.
# Main Goals
* Provide a pythonic solution to construct command line calls for EDA tools based on [pyTooling.CLIAbstraction](https://github.com/pyTooling/pyTooling.CLIAbstraction)
* Launch CLI tools and connect to STDIn, STDOUT, STDERR for realtime output post-processing.
# Features
* Support multiple native platforms: Linux, macOS, Windows.
* Support nested platforms like MSYS2 with MinGW32, MinGW64, URCT64, Clang64, ...
* Find CLI programs either in `PATH` or specify an exact installation location.
* Generate CLI options in correct order.
* Generate correctly escaped CLI options.
# Supported Tools
* Aldec
* 🚧 Active-HDL
* 🚧 Riviera-PRO
* Altera
* 🚧 Quartus
* 🚫 ModelSim Altera (Student) Edition
* Cadence
* 🙋 need a list of tools
* IntelFPGA
* 🚧 Quartus
* 🚫 ModelSim Altera (Student) Edition
* Lattice
* 🚧 Diamond
* 🚫 Active-HDL Lattice Edition
* 🚫 ModelSim Lattice Edition
* MentorGraphics
* ✅ ModelSim DE/SE/PE
* 🚫 QuestaSim
* SiemensEDA
* 🚫 ModelSim DE/SE/PE
* 🚫 QuestaSim
* Synopsys
* 🙋 need a list of tools
* Xilinx
* 🚧 ISE
* 🚧 Vivado
* 🚫 Vivado-SDK
* 🚫 Vitis
* System Tools
* ✅ Git
* Open Source
* ✅ GHDL
* ✅ GTKWave
* Yosys
* 🙋 need a list of tools
**Legend:**
✅ → implemented and tested
🚧 → under test
🚫 → planned but not yet implemented ⇒ accepting PRs
🙋 → need help
# Examples
```python
from pyEDAA.CLITool.GHDL import GHDL
tool = GHDL()
tool[tool.CommandAnalyze] = True
tool[tool.FlagVHDLStandard] = "08"
tool[tool.FlagSynopsys] = True
tool[tool.FlagRelaxed] = True
tool[tool.FlagExplicit] = True
tool[tool.FlagMultiByteComments] = True
tool[tool.FlagLibrary] = "lib_Test"
print(f"Calling GHDL: {tool}")
# Calling GHDL: "ghdl" "analyze" "--std=08" "-fsynopsys" "-frelaxed" "-fexplicit" "--work=lib_Test" "--mb-comments"
```
# Consumers
This layer is used by:
* 🚧 [pyEDAA.Workflow](https://github.com/edaa-org/pyEDAA.Workflow)
* 🚧 [pyEDAA.Launcher](https://github.com/edaa-org/pyEDAA.Launcher)
* 🚧 [Open Source Verification Bundle (OSVB)](https://umarcor.github.io/osvb)
# References
* [docs.siliconcompiler.com: Tools directory](https://docs.siliconcompiler.com/en/latest/reference_manual/tools.html)
* GHDL:
* [Paebbels/pyIPCMI: pyIPCMI/Simulator/GHDLSimulator.py](https://github.com/Paebbels/pyIPCMI/blob/0f91e26f989ca025c9380ff808d1e532614b9593/pyIPCMI/Simulator/GHDLSimulator.py#L49)
* [VUnit/vunit: vunit/sim_if/ghdl.py](https://github.com/VUnit/vunit/blob/f344c8b5642d7aa13db2e16f6fc7151585ca96d0/vunit/sim_if/ghdl.py#L29)
* [olofk/edalize: edalize/ghdl.py](https://github.com/olofk/edalize/blob/322773113716fa29fddd800c2e0992bb5dd2ed79/edalize/ghdl.py#L13)
* [im-tomu/fomu-workshop: hdl/mixed/blink/Makefile](https://github.com/im-tomu/fomu-workshop/blob/6e6318d820271750a99c8e419ee1b9abd9aa6b81/hdl/mixed/blink/Makefile#L45-L51)
* [PyFPGA/pyfpga: fpga/tool/openflow.py](https://github.com/PyFPGA/pyfpga/blob/507631b780a4ab658304bfcdcec133a0e9b8a769/fpga/tool/openflow.py#L28)
* [XedaHQ/xeda: xeda/flows/ghdl/__init__.py](https://github.com/XedaHQ/xeda/blob/e5bea8663a9001d0e98f6b7a91575e13fba06493/xeda/flows/ghdl/__init__.py#L8)
* [cocotb/cocotb: cocotb/runner.py](https://github.com/cocotb/cocotb/blob/fa7a826cc855d783b7fbc81444d4e6b9edc487b9/cocotb/runner.py#L444) ([cocotb/cocotb#2634](https://github.com/cocotb/cocotb/pull/2634))
* [stnolting/neorv32: tasks/examples.py](https://github.com/stnolting/neorv32/blob/6dd30e78101cd08310fe02b8818050745dd3a6ad/tasks/examples.py#L13) ([stnolting/neorv32#110](https://github.com/stnolting/neorv32/pull/110))
* [ghdl/ghdl: scripts/vendors/shared.sh](https://github.com/ghdl/ghdl/blob/7e41be2dabf79b21f3d0be210e3d01d541a7e82c/scripts/vendors/shared.sh#L132)
* [ghdl/ghdl: scripts/vendors/shared.psm1](https://github.com/ghdl/ghdl/blob/7e41be2dabf79b21f3d0be210e3d01d541a7e82c/scripts/vendors/shared.psm1#L261)
* [OSVVM/OSVVM-Scripts: VendorScripts_GHDL.tcl](https://github.com/OSVVM/OSVVM-Scripts/blob/3f52f725603166b4bfd6c862629f1dad363fd2f7/VendorScripts_GHDL.tcl#L143)
# Contributors
* [Patrick Lehmann](https://github.com/Paebbels) (Maintainer)
* [Unai Martinez-Corral](https://github.com/umarcor)
* [and more...](https://github.com/edaa-org/pyEDAA.CLITool/graphs/contributors)
# License
This Python package (source code) is licensed under [Apache License 2.0](LICENSE.md).
The accompanying documentation is licensed under [Creative Commons - Attribution 4.0 (CC-BY 4.0)](doc/Doc-License.rst).
---
SPDX-License-Identifier: Apache-2.0
Raw data
{
"_id": null,
"home_page": "https://GitHub.com/edaa-org/pyEDAA.CLITool",
"name": "pyEDAA.CLITool",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "cli, abstraction layer, eda",
"author": "Patrick Lehmann",
"author_email": "Paebbels@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/a7/16/89359c6146816e3703fa61e2b99fb92d314c1ee4f14918a226ea8832874a/pyedaa_clitool-0.3.0.tar.gz",
"platform": null,
"description": "<p align=\"center\">\n <a title=\"edaa-org.github.io/pyEDAA.CLITool\" href=\"https://edaa-org.github.io/pyEDAA.CLITool\"><img height=\"80px\" src=\"doc/_static/logo.svg\"/></a>\n</p>\n\n[![Sourcecode on GitHub](https://img.shields.io/badge/pyEDAA-CLITool-ffca28.svg?longCache=true&style=flat-square&logo=github&longCache=true&logo=GitHub&labelColor=ff8f00)](https://GitHub.com/edaa-org/pyEDAA.CLITool)\n[![Sourcecode License](https://img.shields.io/pypi/l/pyEDAA.CLITool?longCache=true&style=flat-square&logo=Apache&label=code)](LICENSE.md)\n[![Documentation](https://img.shields.io/website?longCache=true&style=flat-square&label=edaa-org.github.io%2FpyEDAA.CLITool&logo=GitHub&logoColor=fff&up_color=blueviolet&up_message=Read%20now%20%E2%9E%9A&url=https%3A%2F%2Fedaa-org.github.io%2FpyEDAA.CLITool%2Findex.html)](https://edaa-org.github.io/pyEDAA.CLITool/)\n[![Documentation License](https://img.shields.io/badge/doc-CC--BY%204.0-green?longCache=true&style=flat-square&logo=CreativeCommons&logoColor=fff)](LICENSE.md)\n[![Gitter](https://img.shields.io/badge/chat-on%20gitter-4db797.svg?longCache=true&style=flat-square&logo=gitter&logoColor=e8ecef)](https://gitter.im/hdl/community) \n[![PyPI](https://img.shields.io/pypi/v/pyEDAA.CLITool?longCache=true&style=flat-square&logo=PyPI&logoColor=FBE072)](https://pypi.org/project/pyEDAA.CLITool/)\n![PyPI - Status](https://img.shields.io/pypi/status/pyEDAA.CLITool?longCache=true&style=flat-square&logo=PyPI&logoColor=FBE072)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pyEDAA.CLITool?longCache=true&style=flat-square&logo=PyPI&logoColor=FBE072) \n[![GitHub Workflow - Build and Test Status](https://img.shields.io/github/workflow/status/edaa-org/pyEDAA.CLITool/Pipeline/main?longCache=true&style=flat-square&label=Build%20and%20test&logo=GitHub%20Actions&logoColor=FFFFFF)](https://GitHub.com/edaa-org/pyEDAA.CLITool/actions/workflows/Pipeline.yml)\n[![Libraries.io status for latest release](https://img.shields.io/librariesio/release/pypi/pyEDAA.CLITool?longCache=true&style=flat-square&logo=Libraries.io&logoColor=fff)](https://libraries.io/github/edaa-org/pyEDAA.CLITool)\n[![Codacy - Quality](https://img.shields.io/codacy/grade/7cc5334a04924f77ae75bbffbf48ff98?longCache=true&style=flat-square&logo=Codacy)](https://www.codacy.com/gh/edaa-org/pyEDAA.CLITool)\n[![Codacy - Coverage](https://img.shields.io/codacy/coverage/7cc5334a04924f77ae75bbffbf48ff98?longCache=true&style=flat-square&logo=Codacy)](https://www.codacy.com/gh/edaa-org/pyEDAA.CLITool)\n[![Codecov - Branch Coverage](https://img.shields.io/codecov/c/github/edaa-org/pyEDAA.CLITool?longCache=true&style=flat-square&logo=Codecov)](https://codecov.io/gh/edaa-org/pyEDAA.CLITool)\n\n<!--\n[![Dependent repos (via libraries.io)](https://img.shields.io/librariesio/dependent-repos/pypi/pyEDAA.CLITool?longCache=true&style=flat-square&logo=GitHub)](https://github.com/edaa-org/pyEDAA.CLITool/network/dependents)\n[![Requires.io](https://img.shields.io/requires/github/edaa-org/pyEDAA.CLITool?longCache=true&style=flat-square)](https://requires.io/github/edaa-org/pyEDAA.CLITool/requirements/?branch=main)\n[![Libraries.io SourceRank](https://img.shields.io/librariesio/sourcerank/pypi/pyEDAA.CLITool)](https://libraries.io/github/edaa-org/pyEDAA.CLITool/sourcerank) \n-->\n\n\nProvide unified interfaces to execute EDA tools via CLI from Python, agnostic to any specific configuration format/object.\n\n\n# Main Goals\n\n* Provide a pythonic solution to construct command line calls for EDA tools based on [pyTooling.CLIAbstraction](https://github.com/pyTooling/pyTooling.CLIAbstraction)\n* Launch CLI tools and connect to STDIn, STDOUT, STDERR for realtime output post-processing.\n\n\n# Features\n\n* Support multiple native platforms: Linux, macOS, Windows.\n* Support nested platforms like MSYS2 with MinGW32, MinGW64, URCT64, Clang64, ...\n* Find CLI programs either in `PATH` or specify an exact installation location.\n* Generate CLI options in correct order.\n* Generate correctly escaped CLI options.\n\n\n# Supported Tools\n\n* Aldec\n * \ud83d\udea7 Active-HDL\n * \ud83d\udea7 Riviera-PRO\n* Altera\n * \ud83d\udea7 Quartus\n * \ud83d\udeab ModelSim Altera (Student) Edition\n* Cadence\n * \ud83d\ude4b need a list of tools\n* IntelFPGA\n * \ud83d\udea7 Quartus\n * \ud83d\udeab ModelSim Altera (Student) Edition\n* Lattice\n * \ud83d\udea7 Diamond\n * \ud83d\udeab Active-HDL Lattice Edition\n * \ud83d\udeab ModelSim Lattice Edition\n* MentorGraphics\n * \u2705 ModelSim DE/SE/PE\n * \ud83d\udeab QuestaSim\n* SiemensEDA\n * \ud83d\udeab ModelSim DE/SE/PE\n * \ud83d\udeab QuestaSim\n* Synopsys\n * \ud83d\ude4b need a list of tools\n* Xilinx\n * \ud83d\udea7 ISE\n * \ud83d\udea7 Vivado\n * \ud83d\udeab Vivado-SDK\n * \ud83d\udeab Vitis\n* System Tools\n * \u2705 Git\n* Open Source\n * \u2705 GHDL\n * \u2705 GTKWave\n* Yosys\n * \ud83d\ude4b need a list of tools\n\n**Legend:** \n\u2705 → implemented and tested \n\ud83d\udea7 → under test \n\ud83d\udeab → planned but not yet implemented ⇒ accepting PRs \n\ud83d\ude4b → need help\n\n# Examples\n\n```python\nfrom pyEDAA.CLITool.GHDL import GHDL\n\ntool = GHDL()\ntool[tool.CommandAnalyze] = True\ntool[tool.FlagVHDLStandard] = \"08\"\ntool[tool.FlagSynopsys] = True\ntool[tool.FlagRelaxed] = True\ntool[tool.FlagExplicit] = True\ntool[tool.FlagMultiByteComments] = True\ntool[tool.FlagLibrary] = \"lib_Test\"\n\nprint(f\"Calling GHDL: {tool}\")\n# Calling GHDL: \"ghdl\" \"analyze\" \"--std=08\" \"-fsynopsys\" \"-frelaxed\" \"-fexplicit\" \"--work=lib_Test\" \"--mb-comments\"\n```\n\n# Consumers\n\nThis layer is used by:\n\n* \ud83d\udea7 [pyEDAA.Workflow](https://github.com/edaa-org/pyEDAA.Workflow)\n* \ud83d\udea7 [pyEDAA.Launcher](https://github.com/edaa-org/pyEDAA.Launcher)\n* \ud83d\udea7 [Open Source Verification Bundle (OSVB)](https://umarcor.github.io/osvb)\n\n\n# References\n\n* [docs.siliconcompiler.com: Tools directory](https://docs.siliconcompiler.com/en/latest/reference_manual/tools.html)\n* GHDL:\n * [Paebbels/pyIPCMI: pyIPCMI/Simulator/GHDLSimulator.py](https://github.com/Paebbels/pyIPCMI/blob/0f91e26f989ca025c9380ff808d1e532614b9593/pyIPCMI/Simulator/GHDLSimulator.py#L49)\n * [VUnit/vunit: vunit/sim_if/ghdl.py](https://github.com/VUnit/vunit/blob/f344c8b5642d7aa13db2e16f6fc7151585ca96d0/vunit/sim_if/ghdl.py#L29)\n * [olofk/edalize: edalize/ghdl.py](https://github.com/olofk/edalize/blob/322773113716fa29fddd800c2e0992bb5dd2ed79/edalize/ghdl.py#L13)\n * [im-tomu/fomu-workshop: hdl/mixed/blink/Makefile](https://github.com/im-tomu/fomu-workshop/blob/6e6318d820271750a99c8e419ee1b9abd9aa6b81/hdl/mixed/blink/Makefile#L45-L51)\n * [PyFPGA/pyfpga: fpga/tool/openflow.py](https://github.com/PyFPGA/pyfpga/blob/507631b780a4ab658304bfcdcec133a0e9b8a769/fpga/tool/openflow.py#L28)\n * [XedaHQ/xeda: xeda/flows/ghdl/__init__.py](https://github.com/XedaHQ/xeda/blob/e5bea8663a9001d0e98f6b7a91575e13fba06493/xeda/flows/ghdl/__init__.py#L8)\n * [cocotb/cocotb: cocotb/runner.py](https://github.com/cocotb/cocotb/blob/fa7a826cc855d783b7fbc81444d4e6b9edc487b9/cocotb/runner.py#L444) ([cocotb/cocotb#2634](https://github.com/cocotb/cocotb/pull/2634))\n * [stnolting/neorv32: tasks/examples.py](https://github.com/stnolting/neorv32/blob/6dd30e78101cd08310fe02b8818050745dd3a6ad/tasks/examples.py#L13) ([stnolting/neorv32#110](https://github.com/stnolting/neorv32/pull/110))\n * [ghdl/ghdl: scripts/vendors/shared.sh](https://github.com/ghdl/ghdl/blob/7e41be2dabf79b21f3d0be210e3d01d541a7e82c/scripts/vendors/shared.sh#L132)\n * [ghdl/ghdl: scripts/vendors/shared.psm1](https://github.com/ghdl/ghdl/blob/7e41be2dabf79b21f3d0be210e3d01d541a7e82c/scripts/vendors/shared.psm1#L261)\n * [OSVVM/OSVVM-Scripts: VendorScripts_GHDL.tcl](https://github.com/OSVVM/OSVVM-Scripts/blob/3f52f725603166b4bfd6c862629f1dad363fd2f7/VendorScripts_GHDL.tcl#L143)\n\n# Contributors\n\n* [Patrick Lehmann](https://github.com/Paebbels) (Maintainer)\n* [Unai Martinez-Corral](https://github.com/umarcor)\n* [and more...](https://github.com/edaa-org/pyEDAA.CLITool/graphs/contributors)\n\n\n# License\n\nThis Python package (source code) is licensed under [Apache License 2.0](LICENSE.md). \nThe accompanying documentation is licensed under [Creative Commons - Attribution 4.0 (CC-BY 4.0)](doc/Doc-License.rst).\n\n---\nSPDX-License-Identifier: Apache-2.0\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "An abstraction layer of EDA CLI tools.",
"version": "0.3.0",
"project_urls": {
"Documentation": "https://edaa-org.GitHub.io/pyEDAA.CLITool",
"Homepage": "https://GitHub.com/edaa-org/pyEDAA.CLITool",
"Issue Tracker": "https://GitHub.com/edaa-org/pyEDAA.CLITool/issues",
"Source Code": "https://GitHub.com/edaa-org/pyEDAA.CLITool"
},
"split_keywords": [
"cli",
" abstraction layer",
" eda"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "d14d1bfd87d7e62fedc2c2bbadf82ecaaa6a4fe47a4b727bcab139c4e8ebfd26",
"md5": "23aa66696663600218ad57548a213435",
"sha256": "1a819abea1004f545e8cf5fc7743228a85d94f2fe33efb4705a99cb5cbf7af36"
},
"downloads": -1,
"filename": "pyEDAA.CLITool-0.3.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "23aa66696663600218ad57548a213435",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 33260,
"upload_time": "2024-12-17T21:52:42",
"upload_time_iso_8601": "2024-12-17T21:52:42.260576Z",
"url": "https://files.pythonhosted.org/packages/d1/4d/1bfd87d7e62fedc2c2bbadf82ecaaa6a4fe47a4b727bcab139c4e8ebfd26/pyEDAA.CLITool-0.3.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a71689359c6146816e3703fa61e2b99fb92d314c1ee4f14918a226ea8832874a",
"md5": "8aa64588db067a2e21b8761dabab6376",
"sha256": "e9233fb844363a5c554c2872f9b9c6ccc44715b721c67d225bb92a6483658627"
},
"downloads": -1,
"filename": "pyedaa_clitool-0.3.0.tar.gz",
"has_sig": false,
"md5_digest": "8aa64588db067a2e21b8761dabab6376",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 23133,
"upload_time": "2024-12-17T21:52:37",
"upload_time_iso_8601": "2024-12-17T21:52:37.592924Z",
"url": "https://files.pythonhosted.org/packages/a7/16/89359c6146816e3703fa61e2b99fb92d314c1ee4f14918a226ea8832874a/pyedaa_clitool-0.3.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-17 21:52:37",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "pyedaa.clitool"
}