Cmd2 extension for async programs
Project description
Async extension to a famous Cmd2 library.
Cmd2 permanently occupies the main thread which is a problem if you plan to receive callbacks on the main thread (e.g., by Bluetooth stack Bleak)
Pip installation
BoolTest is available via pip:
pip3 install ph4-acmd2
Local installation
From the local dir:
pip3 install --upgrade --find-links=. .
Usage
import asyncio
import ph4acmd2
class CmdLineApp(ph4acmd2.Cmd):
async def main(self):
await self.acmdloop()
print("Cmdloop finished now")
if __name__ == '__main__':
app = CmdLineApp()
loop = asyncio.get_event_loop()
loop.set_debug(True)
loop.run_until_complete(app.main())
Limitations
We use asyncio.lool.add_reader to read from the stdin and process the commands thus it is not currently possible to ue readline features such as auto-complete or ctrl-r, UP-arrow for previous commands, etc…
Readline occupies main thread in a blocking way, so it is not compatible with runloop model running on the main thread and executing coroutines.
In order to use readline it needs to add async support. A potential workaround could be to access terminal in async way e.g., submit short coroutine monitoring the terminal state to simulate readline library. However, it is not tested.
Development
Install pre-commit hooks defined by .pre-commit-config.yaml
pip3 install -U pre-commit pytest mypy
mypy --install-types
pre-commit install
Auto fix
pre-commit run --all-files
Plugin version update
pre-commit autoupdate
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
File details
Details for the file ph4_acmd2-1.0.0.tar.gz
.
File metadata
- Download URL: ph4_acmd2-1.0.0.tar.gz
- Upload date:
- Size: 6.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 313b8d63e0887dbce678e6b3271f890ca3c5c8f7bd3b0341bc07ace42b1bcca5 |
|
MD5 | cae000d591f94bb94ef6a0b10f5fd979 |
|
BLAKE2b-256 | 5210dbfc94609aec99794914808c3b3e46fbb76fb31eaef21dd2e2d3e6555b6d |