もう1つの $ListBuild() の実装:Pythonライブラリ「iris-dollar-list」
1. iris-dollar-list
DollarListは、Pythonのための$LIST()インタープリタです。
このインタプリタが作成された理由は以下の通りです。
- Pythonで $LIST()を使いたいため。
- Embedded Python で$LIST()がサポートされていないため。
- NatveAPIでは、$LIST()の中に$LIST()のデータを埋め込むことをサポートしていないため。
この機能は、開発途中です。現時点では、$LIST()の中に、$LIST()、int 、string のデータを含めることができます。
作成中タイプ:fload、decimal、double
このモジュールはPypiで利用できます:
pip3 install iris-dollar-list
Embedde PythonとNativeAPIに対応しています。
1.1. 目次
1.2. 使用方法
実行例:
set ^list = $lb("test",$lb(4))
Native APIでの使用例:
import iris
from iris_dollar_list import DollarList
conn = iris.connect("localhost", 57161,"IRISAPP", "SuperUser", "SYS")
iris_obj = iris.createIRIS(conn)
gl = iris_obj.get("^list")
my_list = DollarList.from_bytes(gl.encode('ascii'))
print(my_list.to_list())
# ['test', [4]]
Embedded Pythonでの使用例:
import iris
from iris_dollar_list import DollarList
gl = iris.gref("^list")
my_list = DollarList.from_bytes(gl[None].encode('ascii'))
print(my_list.to_list())
# ['test', [4]]
1.3. 関数
1.3.1. append
リストに要素を追加する。
含めることのできる要素は以下の通りです:
- string
- int
- DollarList
- DollarItem
my_list = DollarList()
my_list.append("one")
my_list.append(1)
my_list.append(DollarList.from_list(["list",2]))
my_list.append(DollarItem(dollar_type=1, value="item",
raw_value=b"item",
buffer=b'\x06\x01item'))
print(DollarList.from_bytes(my_list.to_bytes()))
# $lb("one",1,$lb("list",2),"item")
1.3.2. from_bytes
byteからDollarListを作成する:
my_list = DollarList.from_bytes(b'\x05\x01one')
print(my_list)
# $lb("one")
1.3.3. from_list
PythonリストからDollarListを作成する:
print(DollarList.from_list(["list",2]))
# $lb("list",2)
1.3.4. to_bytes
DollarListからbyteへ変換する:
my_list = DollarList.from_list(["list",2])
print(my_list.to_bytes())
# b'\x06\x01list\x03\x04\x02'
1.3.5. to_list
DollarListからPythonリストに変換する:
my_list = DollarList.from_bytes(b'\x05\x01one')
print(my_list.to_list())
# ['one']
2. $list()
2.1. $list()とは ?
$list()はバイナリフォーマットでデータを格納します。IRISのエンジンで使用されています。読み書きしやすい形式でパースも簡単です。
$list()の便利なところは、保存に制限がないことです。IRISのスーパーサーバーポート(デフォルトでは1972)を使用した通信にも使用されています。
2.2. 動かし方
$list()は値のリストを格納するバイナリフォーマットです。各値はブロックに格納されます。各ブロックはヘッダとボディで構成されています。ヘッダはサイズと型で構成されます。ボディは値で構成されます。
2.2.1. ヘッダ
ヘッダはサイズとタイプで構成されます。
2.2.1.1. サイズ
サイズはブロック数を示します。サイズはNバイトで格納されます。 Nはヘッダの最初のバイトが0であるバイト数で決まります。 サイズはリトルエンディアンで格納されます。
2.2.1.2. タイプ
タイプは、値のタイプを表すバイトです。 タイプはサイズの直後に格納されています。
リストのタイプは以下の通りです:
- ascii: 0x01
- unicode: 0x02
- int: 0x04
- negative int: 0x05
- float: 0x06
- negative float: 0x07
- double: 0x08
- compact double: 0x09
2.2.2. ボディ
ボディは値で構成されます。
ボディを解析するには、値のタイプを知る必要があります。
2.2.2.1. Ascii
値を asciiとしてでコードします。
デコードに失敗した場合は、値をサブリストとみなします。
サブリストのデコードに失敗したら、値をバイナリとみなします。
2.2.2.2. Unicode
値を unicode としてデコードします。
2.2.2.3. Int
リトルエンディアンで符号なしの整数として値をパースします。
2.2.2.4. Negative Int
値をリトルエンディアンで符号付き整数としてパースします。
Comments
あったらいいなと思ってました!