Skip to content

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) -> None

Create 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

@property
def qmlName() -> str

Return normalized QML type name from descriptor metadata.

logicalName

@property
def logicalName() -> str

Return user-facing logical type name from descriptor metadata.

__getattr__

def __getattr__(name: str) -> Any

Property 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) -> None

Property write: set_property; no local cache or storage.

If name starts with _, use normal attribute assignment. Otherwise perform set_property.

__repr__

def __repr__() -> str

Return a readable representation including name and address.