testudos.internal.object_proxy
testudos.internal.object_proxy
QtObjectProxy: dynamic proxy for a remote Qt object.
Maps Python attribute access to native engine calls:
- Property read (e.g. btn.text) -> get_property
- Property write (e.g. btn.text = “Hello”) -> set_property
- Method call (e.g. btn.click()) -> return a callable that performs invoke
Object identifier for RPC: use descriptor[“address”] when present (stable for getChildren), otherwise descriptor[“objectName”] or legacy “name” for findObjectByName. encapsulated in _object_id(). Descriptor “properties” is metadata only (to decide property vs method); we always query the backend for property reads.
Additional descriptor metadata exposed directly:
- descriptor[“qmlName”] -> qmlName
- descriptor[“logicalName”] -> logicalName
QtObjectProxy Objects
class QtObjectProxy()Proxy for a Qt object on the backend.
Dynamic proxy: attribute reads/writes and method calls are translated to get_property, set_property, and invoke. Internal state uses names starting with _; all other names are treated as Qt property or method.
__init__
def __init__(session: Any, object_descriptor: dict) -> NoneCreate a proxy for the given object descriptor.
Arguments:
session- Session (with .engine) used for engine calls.object_descriptor- The “object” dict from findObject result (name, address, properties array, etc.). Properties are used only as metadata to distinguish property vs method.
qmlName
@propertydef qmlName() -> strReturn normalized QML type name from descriptor metadata.
logicalName
@propertydef logicalName() -> strReturn user-facing logical type name from descriptor metadata.
__getattr__
def __getattr__(name: str) -> AnyProperty read or method: get_property for properties, callable for methods.
If name is in the descriptor’s property list, perform get_property and return the value (no cache). If name is not a property, return a callable that performs invoke when called.
__setattr__
def __setattr__(name: str, value: Any) -> NoneProperty write: set_property; no local cache or storage.
If name starts with _, use normal attribute assignment. Otherwise perform set_property.
__repr__
def __repr__() -> strReturn a readable representation including name and address.