Package: iris-dollar-list
1. iris-dollar-listInterpretor of $list for python named DollarList.This interpretor was made because :I wanted to use $list in python.Embedded Python do not support $list.The native API version do not support embedded $list in $list.This is a work in progress. For now, it only support embedded $list in $list, int and string.WIP float,decimal,doubleThis module is available on Pypi :pip3installiris-dollar-listIt is compatible with embedded python and native api.1.1. Table of Contents1. iris-dollar-list1.1. Table of Contents1.2. Usage1.3. functions1.3.1. append1.3.2. from_bytes1.3.3. from_list1.3.4. from_string1.3.5. to_bytes1.3.6. to_list2. $list2.1. What is $list ?2.2. How it works ?2.2.1. Header2.2.1.1. Size2.2.1.2. Type2.2.2. Body2.2.2.1. Ascii2.2.2.2. Unicode2.2.2.3. Int2.2.2.4. Negative Int2.2.2.5. Float2.2.2.6. Negative Float2.2.2.7. Double2.2.2.8. Compact Double2.3. Development1.2. Usageexample :set ^list = $lb("test",$lb(4))example of use with native api :importirisfromiris_dollar_listimportDollarListconn=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]]example of use with embedded python :importirisfromiris_dollar_listimportDollarListgl=iris.gref("^list")my_list=DollarList.from_bytes(gl[None].encode('ascii'))print(my_list.to_list())# ['test', [4]]1.3. functions1.3.1. appendAppend an element to the list.This element can be :a stringan inta DollarLista DollarItemmy_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))# $lb("one",1,$lb("list",2),"item")1.3.2. from_bytesCreate a DollarList from bytes.my_list=DollarList.from_bytes(b'\x05\x01one')print(my_list)# $lb("one")1.3.3. from_listCreate a DollarList from a list.print(DollarList.from_list(["list",2]))# $lb("list",2)1.3.4. from_stringCreate a DollarList from a string.str_list=DollarList.from_string('$lb("test",$lb(4))')print(str_list)# $lb("test",$lb(4))print(str_list.to_list())# ['test', [4]]1.3.5. to_bytesConvert the DollarList to bytes.my_list=DollarList.from_list(["list",2])print(my_list.to_bytes())# b'\x06\x01list\x03\x04\x02'1.3.6. to_listConvert the DollarList to a list.my_list=DollarList.from_bytes(b'\x05\x01one')print(my_list.to_list())# ['one']2. $list2.1. What is $list ?$list is binary format for storing data. It is used in Iris Engine. It is a format that is easy to read and write. It is also easy to parse.The neat thing about $list is that it is not limited for storage. It also used for communication on the SuperServer port of IRIS.2.2. How it works ?$list is a binary format that store list of values. Each value is stored in a block. Each block is composed of a header and a body. The header is composed of a size and a type. The body is composed of the value.2.2.1. HeaderThe header is composed of a size and a type.
The header can have a size of 2, 4 or 8 bytes.Three types of header are possible :2 bytes header1 byte for the size1 byte for the type4 bytes header1 bytes of \x002 bytes for the size1 byte for the type8 bytes header3 bytes of \x004 bytes for the size1 byte for the type2.2.1.1. SizeThere is 3 types of size :1 byte, if the first byte is not \x002 bytes, if the first byte is \x00 and the int value of the second two bytes is not 04 bytes, else (the first 3 bytes are \x00)2.2.1.2. TypeThe type is a byte that represent the type of the value.
The type is stored just after the size.List of types:ascii: 0x01unicode: 0x02int: 0x04negative int: 0x05float: 0x06negative float: 0x07double: 0x08compact double: 0x092.2.2. BodyThe body is composed of the value.To parse the body, you need to know the type of the value.2.2.2.1. AsciiDecode the value as ascii.If decoding fails, consider the value as a sub-list.If decoding the sub-list fails, consider the value as a binary.2.2.2.2. UnicodeDecode the value as unicode.2.2.2.3. IntParse the value as an integer in little endian and unsigned.2.2.2.4. Negative IntParse the value as an integer in little endian and signed.2.2.2.5. Float????2.2.2.6. Negative Float????2.2.2.7. Double????2.2.2.8. Compact Double????2.3. Development