仕様
目的と非目的
共通 DeviceProxy は、異なる通信フレームワークで実装された複数のデバイスクラスを、単一のクライアントプログラムで生成するためのファクトリです。通信の抽象化、デバイス探索、データベース、接続管理、動的メソッド生成は担当しません。既存のデバイス固有クライアントを置き換えません。
登録・生成
register_device_proxy(device_class: str, creator: Callable) はプロセス内の単一レジストリに登録します。空名、前後に空白がある名前、同名登録は拒否します。クラス名の一意性はプロセス内レジストリで検証します。異なるプロセスやインストール済みパッケージ全体を走査して重複を調べるものではありません。
DeviceProxy(device_class, *args, **kwargs) は、対応する creator(*args, **kwargs) の結果を返します。async_mode も config もコアでは解釈しません。未登録名は KeyError。get_device_proxy_entry は登録内容を返し、list_device_proxies はソート済みの名前を返します。unregister_device_proxy は該当名を削除し、未登録の場合は KeyError。
create_device_proxy(device_class) はデバイスクラス名を固定した callable を返します。クライアントクラスの型を静的に保証する仕組みではありません。
同期・非同期補助ファクトリ
make_async_sync_factory(async_client_cls=..., sync_client_cls=..., default_async_mode=True) は任意の補助関数です。生成された callable が async_mode=True/False/None を解釈します。未指定 (None) は登録時の既定値を使用します。指定されたモードのクライアントがない場合は ValueError です。別モードへ黙ってフォールバックしません。Tango にこの補助ファクトリの使用を強制しません。
依存関係・互換性
Python >=3.7。実行時の外部依存なし。HTTP/gRPC/Tango のクライアントは、それぞれのデバイスパッケージで生成・管理します。既存フレームワークのレジストリは自動的に共有されません。