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
↵
>>>