MU

Qmonus SDKは、独自の汎用データモデルとしてMU(Mutable Universal object)と呼ばれる型を提供しています。ATOMとは異なり、MUはカスタムアクションを持たず、自律駆動しません。シンプルなデータコンテナです。JSONを中心としたPythonプログラミングでは、煩雑なdict操作が多く、クォーテーションが乱立しコードの可読性が悪化する傾向にあります。このようなdictの要素に対するアクセスをシンプルに記述するためのラッパーと捉えてください。

MUに実装されている特殊メソッド

MUオブジェクトにおける組込み演算子の以下のメソッドはオーバーライドされています。

メソッド 使用方法 説明
__iter__ [key for key in mu] キーイテレーション
__len__ len(mu) キー長
__getitem__ mu["keyA"] スライスアクセスによる値取得
__setitem__ mu["keyB"] = True スライスアクセスによる値設定
__contains__ "keyA" in mu キーの存在確認
__add__ mu = mu1 + mu2 キー値のマージ
__iadd__ mu1+=mu2 キー値のマージ(インプレース)


MUに実装されているプロパティメソッド

MUオブジェクトには以下のプロパティメソッドが実装されています。

メソッド 説明
dictionary dictオブジェクトを返却します。
yaml_format yamlを返却します。
json_format jsonを返却します。
b64 yamlテキストをbase64エンコードして返却します。


MUオブジェクトの基本的な使用方法は次のとおりです。

>>> m = MU(name="Amuro Ray", age=18)↵
... print(m.dictionary)↵
... ↵
{'name': 'Amuro Ray', 'age': 18}↵
↵
>>> print("%s %d" % (m.name, m.age))↵
... ↵
Amuro Ray 18↵
↵
>>> m.role = "pilot"↵
... print(m.dictionary)↵
... ↵
{'name': 'Amuro Ray', 'age': 18, 'role': 'pilot'}↵
↵
>>> for i in m:↵
...     print(m[i])↵
... ↵
Amuro Ray↵
↵
18↵
↵
pilot↵
↵`


Tip

MUは、Scenarioのグローバル変数やATOMフィールドタイプにも利用することができます。ATOMフィールドタイプにMUを指定した場合に、MUのkey/value構造を制限したい場合は、ATOMフィールドのフィールド形式でjsonschemaを定義することで構造に制約を与えることもできます。


MUの高度な使用方法

MUオブジェクトは永続化できます。MUの永続化はATOMとは異なり、データ構造がフレキシブルなため、メモリデータストアに対して行われる点に注意してください。 MUオブジェクトをCRUDするために以下のメソッドが実装されています。

メソッド 説明
save MUオブジェクトを永続化します。
load MUオブジェクトを永続化領域から復元します。
retrieve MUオブジェクトを永続化領域から検索します。
destroy MUオブジェクトを永続化領域から削除します。


  • save
    saveメソッドは、MUオブジェクトをメモリデータストアに保存するメソッドです。引数を指定せずに実行するとユニークキーが返却されます。
# キー自動払い出しの例
>>> m = MU(name="Amuro Ray", age=18)↵
... key = await m.save()↵
... print(key)↵
... ↵
NjBkMjljNmUzMzc0MTFlYmJiYTRhY2RlNDgwMDExMjI=
↵
# キー指定の例
>>> m = MU(name="Amuro Ray", age=18)↵
... key = await m.save("E0001")↵
... print(key)↵
... ↵
E0001
↵
>>>


  • load
    loadクラスメソッドは、メモリデータストアからMUオブジェクトを復元するメソッドです。引数にはキーを指定する必要があります。
>>> o = await MU.load("E0001")↵
... print(o.yaml_format)↵
... ↵
age: 18
name: Amuro Ray
↵
>>>


  • retrieve
    retrieveクラスメソッドは、メモリデータストアを検索して該当するMUオブジェクトのリストを取得するメソッドです。キーワード引数でMUオブジェクトのkey/valueを指定することができます。
>>> r = await MU.retrieve(age=18)↵
... for i in r:↵
...     print(i.name)↵
... ↵
Amuro Ray
↵
>>>


  • destroy
    destroyメソッドは、MUオブジェクトをメモリデータストアから削除するメソッドです。
>>> r = await MU.retrieve(age=18)↵
... for i in r:↵
...     await i.destroy()↵
... ↵
↵
>>> r = await MU.retrieve(age=18)↵
... print(len(r))↵
... ↵
0
↵
>>>


Tip

MUオブジェクトのメモリストアキーはインビジブルな属性で管理されます。参照したい場合は、_MU__key属性を指定してください。

>>> m = MU(name="Amuro Ray", age=18)↵
... await m.save()↵
... print(m._MU__key)↵
... ↵
OGQ4MGJlOTYzMzc3MTFlYmJiYTRhY2RlNDgwMDExMjI=
↵
>>> m = await MU.load("OGQ4MGJlOTYzMzc3MTFlYmJiYTRhY2RlNDgwMDExMjI=")↵
... print(m.yaml_format)↵
... ↵
age: 18
name: Amuro Ray
↵
>>>