A Python module for calling functions by string with argument support
Project description
Callixir
A small and convenient tool for implementing command execution in any application. Suitable for a console application or a social media bot.
Its principle of operation is simple: the user sends a string containing the command name and its arguments, if required. The next step is to execute the corresponding method based on this string.
Developed and tested on Python version 3.12. Support for other, later versions has not been addressed yet.
Example
from callixir import SimpleShell
shell = SimpleShell()
@shell.reg("echo")
def cmdEcho(arg: str):
return f"Echo {arg}"
@shell.reg("sum")
def сmdSum(a: int, b: int):
return a + b
@shell.reg("log")
def cmdLog(*args: str):
return ", ".join(args)
result = shell.execute("echo Hello_World!")
print(result.result) # Echo Hello_World!
result = shell.execute("sum 1 2")
print(result.result) # 3
result = shell.execute("log 1 2 Hi 10 J 100 \"many words in one\" 999 71")
print(result.result) # 1, 2, Hi, 10, J, 100, many words in one, 999, 71
Installing
Install Callixir via pip:
pip install callixir
Features
- Convenient handling of arguments, they correspond to the signature of the arguments in the method;
- Support for asynchronous commands;
- Support for named arguments.
Async example
from callixir import AsyncSimpleShell
import asyncio
shell = AsyncSimpleShell()
@shell.reg("echo")
async def cmdEcho(arg: str):
return f"Echo {arg}"
@shell.reg("sum")
async def сmdSum(a: int, b: int):
return a + b
@shell.reg("log")
async def cmdLog(*args: str):
return ", ".join(args)
async def main():
result = await shell.execute("echo Hello_World!")
print(result.result) # Echo Hello_World!
result = await shell.execute("sum 1 4")
print(result.result) # 5
result = await shell.execute("log nova prospekt \"Async cmd\"")
print(result.result) # nova, prospekt, Async cmd
asyncio.run(main())
Named arguments
The handler can work with function's named arguments (**kwargs). Furthermore, the same arguments undergo data type conversion for example, if the annotation is int, then all kwargs arguments will be converted to int.
A named argument can be specified in the string in two ways: --argument_name=value, --argument_name value. Values can also be enclosed in double quotes: --argument_name "multiple values".
Example
from callixir import SimpleShell
shell = SimpleShell()
@shell.reg("info")
def cmdInfo(**kwargs: str):
data = []
for key, value in kwargs.items():
data.append(f"key = {key}\tvalue = {value}")
return "\n".join(data)
@shell.reg("calc")
def cmdCalc(a: float, b: float, **kwargs: str):
action = kwargs.get("action", "+")
if action == "+": return a+b
elif action == "-": return a-b
elif action == "*": return a * b
elif action == "/": return a / b
else: return "Incorrect type of action"
def main():
result = shell.execute("info --arg1=value1 --arg2 value2 --apple red --datetime=\"03.11.2025 15:31\"")
print(result.result)
'''
key = arg1 value = value1
key = arg2 value = value2
key = apple value = red
key = datetime value = 03.11.2025 15:31
'''
result = shell.execute("calc 1 2")
print(result.result) # 3.0
result = shell.execute("calc 1 2 --action +")
print(result.result) # 3.0
result = shell.execute("calc 1 2 --action *")
print(result.result) # 2.0
result = shell.execute("calc 1 2 --action pow")
print(result.result) # Incorrect type of action
main()
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
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 callixir-0.1.0.tar.gz.
File metadata
- Download URL: callixir-0.1.0.tar.gz
- Upload date:
- Size: 6.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.10.11 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff4955ba811557be5c9e350e44b412a8b39d905373310fcf020110894ca2fafc
|
|
| MD5 |
c6ff8f620b2b95ed60d0d876577baa97
|
|
| BLAKE2b-256 |
92cb9208968f5aa75009ca925fd8a1a7e92d0fb615889c2ad1574a41ea387af9
|
File details
Details for the file callixir-0.1.0-py3-none-any.whl.
File metadata
- Download URL: callixir-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.10.11 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd109f6f207bdcf233e3e86b7beae3e205a7c1206d1a4ff9201890aed9c6818e
|
|
| MD5 |
fc20cd808e30fbee80d2f359197c75aa
|
|
| BLAKE2b-256 |
f08508d510954ae3bd536f6f4131f798a7cb42f4b3ce92a24e9269d9d41488ef
|