proxmoxer-stubs
Type annotations for data obtained by proxmoxer.ProxmoxAPI calls.
Usage
Annotations only
import typing
import proxmoxer
api = proxmoxer.ProxmoxAPI()
typing.reveal_type(api.cluster.replication("some-id").get())
replication.py:6: note: Revealed type is "TypedDict('proxmoxer_types.v9.core.ProxmoxAPI.Cluster.Replication.Id._Get.TypedDict', {'comment'?: builtins.str, 'digest'?: builtins.str, 'disable'?: builtins.bool, 'guest': builtins.int, 'id': builtins.str, 'jobnum': builtins.int, 'rate'?: builtins.float, 'remove_job'?: builtins.str, 'schedule'?: builtins.str, 'source'?: builtins.str, 'target': builtins.str, 'type': builtins.str})"
Success: no issues found in 1 source file
reveal_type(proxmoxer.ProxmoxAPI().cluster.firewall.groups("foo")(42).get().get("log"))
log.py:4: note: Revealed type is "Literal['emerg'] | Literal['alert'] | Literal['crit'] | Literal['err'] | Literal['warning'] | Literal['notice'] | Literal['info'] | Literal['debug'] | Literal['nolog'] | None"
Success: no issues found in 1 source file
For a legacy REST-API:
import typing
if typing.TYPE_CHECKING:
import proxmoxer_types.v8 as proxmoxer
else:
import proxmoxer
api = proxmoxer.ProxmoxAPI()
typing.reveal_type(api.cluster.replication("some-id").get())
legacy.py:10: note: Revealed type is "builtins.dict[builtins.str, Any]"
Success: no issues found in 1 source file
Dependencies
- For type checking:
proxmoxer-stubs,pydantic - At runtime: None
Wrapper mode
Example from proxmoxer:
from proxmoxer import ProxmoxAPI
proxmox = ProxmoxAPI(
"proxmox_host", user="admin@pam", password="secret_word", verify_ssl=False
)
for node in proxmox.nodes.get():
for vm in proxmox.nodes(node["node"]).qemu.get():
print(f"{vm['vmid']}. {vm['name']} => {vm['status']}")
The above works the same in wrapper mode:
from proxmoxer_types.v9 import ProxmoxAPI
proxmox = ProxmoxAPI(
"proxmox_host", user="admin@pam", password="secret_word", verify_ssl=False
)
for node in proxmox.nodes.get():
for vm in proxmox.nodes(node["node"]).qemu.get():
print(f"{vm['vmid']}. {vm['name']} => {vm['status']}")
The returned objects in both above cases are built-in types, possibly nested in
list or dict. Working with those may be inconvenient, as optional
dict keys may not exist at all. For convenience the following is possible:
for node in proxmox.nodes.get.model():
for vm in proxmox.nodes(node.node).qemu.get.model():
print(f"{vm.vmid}. {vm.name} => {vm.status}")
Whenever a method(...) call - method being get, post, put, delete,
set or create - returns a structure that is or contains a
TypedDict-annotated dict, method.model(...) returns a
pydantic.BaseModel instead.
Values of optional fields are possibly None in the model instance.
Additional dependencies
- For type checking:
proxmoxer-stubs,pydantic - At runtime:
proxmoxer-stubs,pydantic
Caveats
proxmoxer.ProxmoxAPI has several ways of expressing the same endpoint due to its magic implementation.
>>> api.cluster.replication("some-id")
ProxmoxResource (/cluster/replication/some-id)
>>>
>>> api("cluster/replication/some-id")
ProxmoxResource (/cluster/replication/some-id)
>>>
>>> api("cluster")("replication")("some-id")
ProxmoxResource (/cluster/replication/some-id)
Only the first form will produce useful typing insights.
Parameters to get, post, put, delete, set, create are currently not individually annotated.
The API documentation is
occasionally wrong or incomplete. In wrapper mode, pydantic will raise a
ValidationError if the documentation is wrong.
Metadata
Release files for proxmoxer-stubs 0.5.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| proxmoxer_stubs-0.5.1.tar.gz | 272.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| proxmoxer_stubs-0.5.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 564.3 kB
Release files / proxmoxer_stubs-0.5.1.tar.gz
| Download URL | proxmoxer_stubs-0.5.1.tar.gz |
|---|---|
| Size | 272.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2f67c7d939d4b07bc2a1a6ad46e86aa44f34e8b5166c4ec1c0279948579dd16d
|
|
BLAKE2b-256 checksum How to use checksums |
3d94f85e7c7016e79a5bc71c3d37da117ea350507e4a3f86959cb17f495a7d80
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.5
|
Release files / proxmoxer_stubs-0.5.1-py3-none-any.whl
| Download URL | proxmoxer_stubs-0.5.1-py3-none-any.whl |
|---|---|
| Size | 292.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3fb65ecab2297d4bacdb0fd3f212ff503e8e8938d29dbd033e3eaf44c6e96266
|
|
BLAKE2b-256 checksum How to use checksums |
040bb73ead095465cb011086489cb692f61bf5cff49a0466bd87ca45ba494c9f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.5
|