PyTCL allows control EDA tools directly from Python that use TCL
Project description
PyTCL
PyTCL allows control EDA tools directly from Python that use TCL.
Features
- It executes Python method with provided positional arguments directly as TCL procedure
For example invocation of Python
<object>.<name>(*args)method is like calling TCL procedure<name> {*}${args} - Any Python value is converted to TCL value like for example Python
listto TCL list - Result from invoked TCL procedure is returned as
pytcl.TCLValuethat can handle any TCL value (that is represented always as string) to Pythonstr,int,bool,float,list,dict, ... - TCL error is returned as Python exception
pytcl.TCLError - High performance and very low (unnoticeable) overhead by using Unix domain sockets for communication between Python and TCL in streamable way (sockets are always open and ready)
- No external dependencies
Install
pip install pytcl-eda
Examples
Creating new Vivado project:
from pathlib import Path
from pytcl import Vivado
def main() -> None:
"""Create new Vivado project."""
project_dir: Path = Path.cwd() / "my-awesome-project"
with Vivado() as vivado:
vivado.create_project(project_dir.name, project_dir)
vivado.close_project()
if __name__ == "__main__":
main()
Architecture
PyTCLwill start new receiver listened on Unix domain socket/tmp/pytcl-XXXX/tx.sockfor any incoming NDJSON messages{"result": "<tcl-result>", "status": <tcl-status>}fromexecute.tclscript filePyTCLwill call command line tool (by defaulttclsh) withexecute.tclscript file and argumentsreceiver.py /tmp/pytcl-XXXX/rx.sock sender.py /tmp/pytcl-XXXX/tx.sock- Started
execute.tclwill create own listener with Unix domain socket/tmp/pytcl-XXXX/rx.sockto receive incoming TCL expressions fromPyTCL PyTCLwill start new client and connect to Unix domain socket/tmp/pytcl-XXXX/rx.sockto send TCL expressions with arguments to be evaluated byexecute.tclscript filePyTCLwill transform any Python method call<object>.<name>(*args)to TCL expression<name> {*}${args}PyTCLwill send TCL expression toexecute.tclusing Unix domain socket/tmp/pytcl-XXXX/rx.sockexecute.tclwill receive TCL expressions from Unix domain socket/tmp/pytcl-XXXX/rx.sock- Received TCL expression is evaluated by TCL
evalwithin TCLcatch - TCL result and status from evaluated TCL expression will be packed into NDJSON message
{"result": "<tcl-result>", "status": <tcl-status>} - Packed NDJSON message with TCL result and status will be send back to
PyTCL PyTCLwill return received NDJSON message aspytcl.TCLValuePyTCLwill raise a Python exceptionpytcl.TCLErrorif received TCL status was non-zero
Development
Create Python virtual environment:
python3 -m venv .venv
Activate created Python virtual environment:
. .venv/bin/activate
Upgrade pip:
pip install --upgrade pip
Install project in editable mode with pytest:
pip install --editable .[test]
Run tests:
pytest
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
pytcl_eda-0.1.2.tar.gz
(13.1 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pytcl_eda-0.1.2.tar.gz.
File metadata
- Download URL: pytcl_eda-0.1.2.tar.gz
- Upload date:
- Size: 13.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
03a1f034d41c6cadd94c255ad3ed2aff88a406ed17844e975cd663e8830a3325
|
|
| MD5 |
d7f57ad719487ffc688bdeb75f03bdd1
|
|
| BLAKE2b-256 |
190b8cd64bbb2de4c112b1d51f1c046dd5d69568233dd4d768666dbe0e92757b
|
File details
Details for the file pytcl_eda-0.1.2-py3-none-any.whl.
File metadata
- Download URL: pytcl_eda-0.1.2-py3-none-any.whl
- Upload date:
- Size: 9.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d67600d7c841dbf1bdb94227f9804f53e0bf3e65b05a40cbe0ac57721cf6cf0
|
|
| MD5 |
bf85f3ef02d5d469d3eb385a420f7b6b
|
|
| BLAKE2b-256 |
442318247fd25a00dcdf1a75656fb393a0c07b7787dfce831c69ac76f3e50393
|