ctrlX Data Layer API for Python  1.6.0
The ctrlX Data Layer API allows access to the ctrlX Data Layer with Python
variant.py
1 """
2  Variant class
3 """
4 import ctypes
5 import typing
6 from enum import Enum
7 
8 import datalayer
9 from datalayer.clib_variant import C_DLR_VARIANT
10 
11 
12 class Result(Enum):
13  """
14  Result(Enum)
15 
16  status of function call
17  """
18  OK = 0
19  FAILED = 0x80000001
20  # application
21  INVALID_ADDRESS = 0x80010001
22  UNSUPPORTED = 0x80010002
23  OUT_OF_MEMORY = 0x80010003
24  LIMIT_MIN = 0x80010004
25  LIMIT_MAX = 0x80010005
26  TYPE_MISMATCH = 0x80010006
27  SIZE_MISMATCH = 0x80010007
28  INVALID_FLOATINGPOINT = 0x80010009
29  INVALID_HANDLE = 0x8001000A
30  INVALID_OPERATION_MODE = 0x8001000B
31  INVALID_CONFIGURATION = 0x8001000C
32  INVALID_VALUE = 0x8001000D
33  SUBMODULE_FAILURE = 0x8001000E
34  TIMEOUT = 0x8001000F
35  ALREADY_EXISTS = 0x80010010
36  CREATION_FAILED = 0x80010011
37  VERSION_MISMATCH = 0x80010012
38  DEPRECATED = 0x80010013
39  PERMISSION_DENIED = 0x80010014
40  NOT_INITIALIZED = 0x80010015
41  # communication
42  COMM_PROTOCOL_ERROR = 0x80020001
43  COMM_INVALID_HEADER = 0x80020002
44  # client
45  CLIENT_NOT_CONNECTED = 0x80030001
46  # provider
47  # broker
48  # realtime related error codes
49  RT_NOT_OPEN = 0x80060001
50  RT_INVALID_OBJECT = 0x80060002
51  RT_WRONG_REVISION = 0x80060003
52  RT_NO_VALID_DATA = 0x80060004
53  RT_MEMORY_LOCKED = 0x80060005
54  RT_INVALID_MEMORY_MAP = 0x80060006
55  RT_INVALID_RETAIN = 0x80060007
56  RT_INVALID_ERROR = 0x80060008
57 
58  # security
59  sec_noSEC_NO_TOKEN_token = 0x80070001
60  SEC_INVALID_SESSION = 0x80070002
61  SEC_INVALID_TOKEN_CONTENT = 0x80070003
62  SEC_UNAUTHORIZED = 0x80070004
63 
64  @classmethod
65  def _missing_(cls, value):
66  """
67  _missing_ function
68  """
69  i = 0xFFFFFFFF & value
70  if i == 0x80000001:
71  return cls(i)
72  if (i >= 0x80010001) and (i <= 0x80010015):
73  return cls(i)
74  if (i >= 0x80020001) and (i <= 0x80020002):
75  return cls(i)
76  if i == 0x80030001:
77  return cls(i)
78  if (i >= 0x80060001) and (i <= 0x80060008):
79  return cls(i)
80  if (i >= 0x80070001) and (i <= 0x80070004):
81  return cls(i)
82  return value
83 
84 
85 class VariantType(Enum):
86  """
87  VariantType(Enum)
88 
89  type of variant
90  """
91  UNKNON = 0
92  BOOL8 = 1
93  INT8 = 2
94  UINT8 = 3
95  INT16 = 4
96  UINT16 = 5
97  INT32 = 6
98  UINT32 = 7
99  INT64 = 8
100  UINT64 = 9
101  FLOAT32 = 10
102  FLOAT64 = 11
103  STRING = 12
104  ARRAY_BOOL8 = 13
105  ARRAY_INT8 = 14
106  ARRAY_UINT8 = 15
107  ARRAY_INT16 = 16
108  ARRAY_UINT16 = 17
109  ARRAY_INT32 = 18
110  ARRAY_UINT32 = 19
111  ARRAY_INT64 = 20
112  ARRAY_UINT64 = 21
113  ARRAY_FLOAT32 = 22
114  ARRAY_FLOAT64 = 23
115  ARRAY_STRING = 24
116  RAW = 25
117  FLATBUFFERS = 26
118 
119 
120 class Variant:
121  """
122  Variant is a container for a many types of data.
123 
124  Hint: see python context manager for instance handling
125  """
126 
127  __slots__ = ['_variant', '__closed']
128 
129  def __init__(self, c_variant: C_DLR_VARIANT = None):
130  """
131  generate Variant
132  """
133  self.__closed = False
134  if c_variant is None:
135  self._variant = datalayer.clib.libcomm_datalayer.DLR_variantCreate()
136  else:
137  self.__closed = True
138  self._variant = c_variant
139 
140  def __enter__(self):
141  """
142  use the python context manager
143  """
144  return self
145 
146  def __exit__(self, exc_type, exc_val, exc_tb):
147  """
148  use the python context manager
149  """
150  self.close()
151 
152  def __del__(self):
153  """
154  __del__
155  """
156  self.close()
157 
158  def close(self):
159  """
160  closes the variant instance
161  """
162  if self.__closed:
163  return
164  self.__closed = True
165  datalayer.clib.libcomm_datalayer.DLR_variantDelete(self._variant)
166 
167  def get_handle(self):
168  """
169  handle value of variant
170  """
171  return self._variant
172 
173  def get_type(self) -> VariantType:
174  """
175  Returns the type of the variant
176  @returns <VariantType>
177  """
178  return VariantType(datalayer.clib.libcomm_datalayer.DLR_variantGetType(self._variant))
179 
180  def get_data(self) -> bytearray:
181  """
182  Returns the pointer to the data of the variant
183  @returns array of bytes
184  """
185  length = datalayer.clib.libcomm_datalayer.DLR_variantGetSize(
186  self._variant)
187  c_data = ctypes.string_at(
188  datalayer.clib.libcomm_datalayer.DLR_variantGetData(self._variant), length)
189  return bytearray(c_data)
190 
191  def get_size(self) -> int:
192  """
193  @returns size of the type in bytes
194  """
195  return datalayer.clib.libcomm_datalayer.DLR_variantGetSize(self._variant)
196 
197  def get_count(self) -> int:
198  """
199  Returns the count of elements in the variant (scalar data types = 1, array = count of elements in array)
200  @returns count of a type
201  """
202  return datalayer.clib.libcomm_datalayer.DLR_variantGetCount(self._variant)
203 
204  def check_convert(self, datatype: VariantType) -> Result:
205  """
206  Checks whether the variant can be converted to another type
207  @returns <Result>, status of function call
208  """
209  return Result(datalayer.clib.libcomm_datalayer.DLR_variantCheckConvert(
210  self._variant, datatype.value))
211 
212  @staticmethod
213  def copy(c_variant: C_DLR_VARIANT):
214  """
215  copies the content of a variant to another variant
216  @returns tuple (Result, Variant)
217  @return <Result>, status of function call,
218  @return <Variant>, copy of variant
219  """
220  dest = Variant()
221  result = Result(datalayer.clib.libcomm_datalayer.DLR_variantCopy(
222  dest._variant, c_variant))
223  return result, dest
224 
225  def clone(self):
226  """
227  clones the content of a variant to another variant
228  @returns tuple (Result, Variant)
229  @return <Result>, status of function call,
230  @return <Variant>, clones of variant
231  """
232  return Variant.copy(self._variant)
233 
234  def get_bool8(self) -> bool:
235  """
236  Returns the value of the variant as a bool (auto convert if possible) otherwise 0
237  @returns [True, False]
238  """
239  return datalayer.clib.libcomm_datalayer.DLR_variantGetBOOL8(self._variant)
240 
241  def get_int8(self) -> int:
242  """
243  Returns the value of the variant as a int8 (auto convert if possible) otherwise 0
244  @returns [-128, 127]
245  """
246  return datalayer.clib.libcomm_datalayer.DLR_variantGetINT8(self._variant)
247 
248  def get_uint8(self) -> int:
249  """
250  Returns the value of the variant as a uint8 (auto convert if possible) otherwise 0
251  @returns [0, 255]
252  """
253  return datalayer.clib.libcomm_datalayer.DLR_variantGetUINT8(self._variant)
254 
255  def get_int16(self) -> int:
256  """
257  Returns the value of the variant as a int16 (auto convert if possible) otherwise 0
258  @returns [-32768, 32767]
259  """
260  return datalayer.clib.libcomm_datalayer.DLR_variantGetINT16(self._variant)
261 
262  def get_uint16(self) -> int:
263  """
264  Returns the value of the variant as a uint16 (auto convert if possible) otherwise 0
265  @returns [0, 65.535]
266  """
267  return datalayer.clib.libcomm_datalayer.DLR_variantGetUINT16(self._variant)
268 
269  def get_int32(self) -> int:
270  """
271  Returns the value of the variant as a int32 (auto convert if possible) otherwise 0
272  @returns [-2.147.483.648, 2.147.483.647]
273  """
274  return datalayer.clib.libcomm_datalayer.DLR_variantGetINT32(self._variant)
275 
276  def get_uint32(self) -> int:
277  """
278  Returns the value of the variant as a Uint32 (auto convert if possible) otherwise 0
279  @returns [0, 4.294.967.295]
280  """
281  return datalayer.clib.libcomm_datalayer.DLR_variantGetUINT32(self._variant)
282 
283  def get_int64(self) -> int:
284  """
285  Returns the value of the variant as a int64 (auto convert if possible) otherwise 0
286  @returns [-9.223.372.036.854.775.808, 9.223.372.036.854.775.807]
287  """
288  return datalayer.clib.libcomm_datalayer.DLR_variantGetINT64(self._variant)
289 
290  def get_uint64(self) -> int:
291  """
292  Returns the value of the variant as a uint64 (auto convert if possible) otherwise 0
293  @returns [0, 18446744073709551615]
294  """
295  return datalayer.clib.libcomm_datalayer.DLR_variantGetUINT64(self._variant)
296 
297  def get_float32(self) -> float:
298  """
299  Returns the value of the variant as a float (auto convert if possible) otherwise 0
300  @returns [1.2E-38, 3.4E+38]
301  """
302  return datalayer.clib.libcomm_datalayer.DLR_variantGetFLOAT32(self._variant)
303 
304  def get_float64(self) -> float:
305  """
306  Returns the value of the variant as a double (auto convert if possible) otherwise 0
307  @returns [2.3E-308, 1.7E+308]
308  """
309  return datalayer.clib.libcomm_datalayer.DLR_variantGetFLOAT64(self._variant)
310 
311  def get_string(self) -> str:
312  """
313  Returns the array of bool8 if the type is a array of bool otherwise null
314  @returns string
315  """
316  if self.check_convert(VariantType.STRING) != Result.OK:
317  return None
318  b = datalayer.clib.libcomm_datalayer.DLR_variantGetSTRING(
319  self._variant)
320  if b is None:
321  return b
322  return b.decode('utf-8')
323 
324  def get_flatbuffers(self) -> bytearray:
325  """
326  Returns the flatbuffers if the type is a flatbuffers otherwise null
327  @returns flatbuffer (bytearray)
328  """
329  if self.check_convert(VariantType.FLATBUFFERS) != Result.OK:
330  return None
331 
332  return self.get_data()
333 
334  def get_array_bool8(self) -> typing.List[bool]:
335  """
336  Returns the array of int8 if the type is a array of int8 otherwise null
337  @returns array of bool8
338  """
339  if self.check_convert(VariantType.ARRAY_BOOL8) != Result.OK:
340  return None
341 
342  c_data = datalayer.clib.libcomm_datalayer.DLR_variantGetArrayOfBOOL8(
343  self._variant)
344  length = datalayer.clib.libcomm_datalayer.DLR_variantGetCount(
345  self._variant)
346  return [c_data[i] for i in range(length)]
347 
348  def get_array_int8(self) -> typing.List[int]:
349  """
350  Returns the array of int8 if the type is a array of int8 otherwise null
351  @returns array of int8
352  """
353  if self.check_convert(VariantType.ARRAY_INT8) != Result.OK:
354  return None
355  c_data = datalayer.clib.libcomm_datalayer.DLR_variantGetArrayOfINT8(
356  self._variant)
357  length = datalayer.clib.libcomm_datalayer.DLR_variantGetCount(
358  self._variant)
359  return [c_data[i] for i in range(length)]
360 
361  def get_array_uint8(self) -> typing.List[int]:
362  """
363  Returns the array of uint8 if the type is a array of uint8 otherwise null
364  @returns array of uint8
365  """
366  if self.check_convert(VariantType.ARRAY_UINT8) != Result.OK:
367  return None
368  c_data = datalayer.clib.libcomm_datalayer.DLR_variantGetArrayOfUINT8(
369  self._variant)
370  length = datalayer.clib.libcomm_datalayer.DLR_variantGetCount(
371  self._variant)
372  return [c_data[i] for i in range(length)]
373 
374  def get_array_int16(self) -> typing.List[int]:
375  """
376  Returns the array of int16 if the type is a array of int16 otherwise null
377  @returns array of int16
378  """
379  if self.check_convert(VariantType.ARRAY_INT16) != Result.OK:
380  return None
381  c_data = datalayer.clib.libcomm_datalayer.DLR_variantGetArrayOfINT16(
382  self._variant)
383  length = datalayer.clib.libcomm_datalayer.DLR_variantGetCount(
384  self._variant)
385  return [c_data[i] for i in range(length)]
386 
387  def get_array_uint16(self) -> typing.List[int]:
388  """
389  Returns the array of uint16 if the type is a array of uint16 otherwise null
390  @returns array of uint16
391  """
392  if self.check_convert(VariantType.ARRAY_UINT16) != Result.OK:
393  return None
394  c_data = datalayer.clib.libcomm_datalayer.DLR_variantGetArrayOfUINT16(
395  self._variant)
396  length = datalayer.clib.libcomm_datalayer.DLR_variantGetCount(
397  self._variant)
398  return [c_data[i] for i in range(length)]
399 
400  def get_array_int32(self) -> typing.List[int]:
401  """
402  Returns the array of int32 if the type is a array of int32 otherwise null
403  @returns array of int32
404  """
405  if self.check_convert(VariantType.ARRAY_INT32) != Result.OK:
406  return None
407  c_data = datalayer.clib.libcomm_datalayer.DLR_variantGetArrayOfINT32(
408  self._variant)
409  length = datalayer.clib.libcomm_datalayer.DLR_variantGetCount(
410  self._variant)
411  return [c_data[i] for i in range(length)]
412 
413  def get_array_uint32(self) -> typing.List[int]:
414  """
415  Returns the array of uint32 if the type is a array of uint32 otherwise null
416  @returns array of uint32
417  """
418  if self.check_convert(VariantType.ARRAY_UINT32) != Result.OK:
419  return None
420  c_data = datalayer.clib.libcomm_datalayer.DLR_variantGetArrayOfUINT32(
421  self._variant)
422  length = datalayer.clib.libcomm_datalayer.DLR_variantGetCount(
423  self._variant)
424  return [c_data[i] for i in range(length)]
425 
426  def get_array_int64(self) -> typing.List[int]:
427  """
428  Returns the array of int64 if the type is a array of int64 otherwise null
429  @returns array of int64
430  """
431  if self.check_convert(VariantType.ARRAY_INT64) != Result.OK:
432  return None
433  c_data = datalayer.clib.libcomm_datalayer.DLR_variantGetArrayOfINT64(
434  self._variant)
435  length = datalayer.clib.libcomm_datalayer.DLR_variantGetCount(
436  self._variant)
437  return [c_data[i] for i in range(length)]
438 
439  def get_array_uint64(self) -> typing.List[int]:
440  """
441  Returns the array of uint64 if the type is a array of uint64 otherwise null
442  @returns array of uint64
443  """
444  if self.check_convert(VariantType.ARRAY_UINT64) != Result.OK:
445  return None
446  c_data = datalayer.clib.libcomm_datalayer.DLR_variantGetArrayOfUINT64(
447  self._variant)
448  length = datalayer.clib.libcomm_datalayer.DLR_variantGetCount(
449  self._variant)
450  return [c_data[i] for i in range(length)]
451 
452  def get_array_float32(self) -> typing.List[float]:
453  """
454  Returns the array of float if the type is a array of float otherwise null
455  @returns array of float32
456  """
457  if self.check_convert(VariantType.ARRAY_FLOAT32) != Result.OK:
458  return None
459  c_data = datalayer.clib.libcomm_datalayer.DLR_variantGetArrayOfFLOAT32(
460  self._variant)
461  length = datalayer.clib.libcomm_datalayer.DLR_variantGetCount(
462  self._variant)
463  return [c_data[i] for i in range(length)]
464 
465  def get_array_float64(self) -> typing.List[float]:
466  """
467  Returns the array of double if the type is a array of double otherwise null
468  @returns array of float64
469  """
470  if self.check_convert(VariantType.ARRAY_FLOAT64) != Result.OK:
471  return None
472  c_data = datalayer.clib.libcomm_datalayer.DLR_variantGetArrayOfFLOAT64(
473  self._variant)
474  length = datalayer.clib.libcomm_datalayer.DLR_variantGetCount(
475  self._variant)
476  return [c_data[i] for i in range(length)]
477 
478  def get_array_string(self) -> typing.List[str]:
479  """
480  Returns the type of the variant
481  @returns array of strings
482  """
483  if self.check_convert(VariantType.ARRAY_STRING) != Result.OK:
484  return None
485  c_data = datalayer.clib.libcomm_datalayer.DLR_variantGetArrayOfSTRING(
486  self._variant)
487  length = datalayer.clib.libcomm_datalayer.DLR_variantGetCount(
488  self._variant)
489  return [c_data[i].decode('utf-8') for i in range(length)]
490 
491  def set_bool8(self, data: bool) -> Result:
492  """
493  Set a bool value
494  @returns <Result>, status of function call
495  """
496  return Result(datalayer.clib.libcomm_datalayer.DLR_variantSetBOOL8(self._variant, data))
497 
498  def set_int8(self, data: int) -> Result:
499  """
500  Set a int8 value
501  @returns <Result>, status of function call
502  """
503  return Result(datalayer.clib.libcomm_datalayer.DLR_variantSetINT8(self._variant, data))
504 
505  def set_uint8(self, data: int) -> Result:
506  """
507  Set a uint8 value
508  @returns <Result>, status of function call
509  """
510  return Result(datalayer.clib.libcomm_datalayer.DLR_variantSetUINT8(self._variant, data))
511 
512  def set_int16(self, data: int) -> Result:
513  """
514  Set a int16 value
515  @returns <Result>, status of function call
516  """
517  return Result(datalayer.clib.libcomm_datalayer.DLR_variantSetINT16(self._variant, data))
518 
519  def set_uint16(self, data: int) -> Result:
520  """
521  Set a uint16 value
522  @returns <Result>, status of function call
523  """
524  return Result(datalayer.clib.libcomm_datalayer.DLR_variantSetUINT16(self._variant, data))
525 
526  def set_int32(self, data: int) -> Result:
527  """
528  Set a int32 value
529  @returns <Result>, status of function call
530  """
531  return Result(datalayer.clib.libcomm_datalayer.DLR_variantSetINT32(self._variant, data))
532 
533  def set_uint32(self, data: int) -> Result:
534  """
535  Set a uint32 value
536  @returns <Result>, status of function call
537  """
538  return Result(datalayer.clib.libcomm_datalayer.DLR_variantSetUINT32(self._variant, data))
539 
540  def set_int64(self, data: int) -> Result:
541  """
542  Set a int64 value
543  @returns <Result>, status of function call
544  """
545  return Result(datalayer.clib.libcomm_datalayer.DLR_variantSetINT64(self._variant, data))
546 
547  def set_uint64(self, data: int) -> Result:
548  """
549  Set a uint64 value
550  @returns <Result>, status of function call
551  """
552  return Result(datalayer.clib.libcomm_datalayer.DLR_variantSetUINT64(self._variant, data))
553 
554  def set_float32(self, data: float) -> Result:
555  """
556  Set a float value
557  @returns <Result>, status of function call
558  """
559  return Result(datalayer.clib.libcomm_datalayer.DLR_variantSetFLOAT32(self._variant, data))
560 
561  def set_float64(self, data: float) -> Result:
562  """
563  Set a double value
564  @returns <Result>, status of function call
565  """
566  return Result(datalayer.clib.libcomm_datalayer.DLR_variantSetFLOAT64(self._variant, data))
567 
568  def set_string(self, data: str) -> Result:
569  """
570  Set a string
571  @returns <Result>, status of function call
572  """
573  b_data = data.encode('utf-8')
574  return Result(datalayer.clib.libcomm_datalayer.DLR_variantSetSTRING(self._variant, b_data))
575 
576  def set_flatbuffers(self, data: bytearray) -> Result:
577  """
578  Set an flatbuffers
579  @returns <Result>, status of function call
580  """
581  buf = (ctypes.c_byte * len(data)).from_buffer(data)
582  c_data = ctypes.cast(buf, ctypes.POINTER(ctypes.c_byte))
583  r = Result(datalayer.clib.libcomm_datalayer.DLR_variantSetFlatbuffers(
584  self._variant, c_data, len(data)))
585  del c_data
586  return r
587 
588  def set_array_bool8(self, data: typing.List[bool]) -> Result:
589  """
590  Set array of bool8
591  @returns <Result>, status of function call
592  """
593  c_data = (ctypes.c_bool * len(data))(*data)
594  r = Result(datalayer.clib.libcomm_datalayer.DLR_variantSetARRAY_OF_BOOL8(
595  self._variant, c_data, len(data)))
596  del c_data
597  return r
598 
599  def set_array_int8(self, data: typing.List[int]) -> Result:
600  """
601  Set array of int8
602  @returns <Result>, status of function call
603  """
604  c_data = (ctypes.c_int8 * len(data))(*data)
605  r = Result(datalayer.clib.libcomm_datalayer.DLR_variantSetARRAY_OF_INT8(
606  self._variant, c_data, len(data)))
607  del c_data
608  return r
609 
610  def set_array_uint8(self, data: typing.List[int]) -> Result:
611  """
612  Set array of uint8
613  @returns <Result>, status of function call
614  """
615  c_data = (ctypes.c_uint8 * len(data))(*data)
616  r = Result(datalayer.clib.libcomm_datalayer.DLR_variantSetARRAY_OF_UINT8(
617  self._variant, c_data, len(data)))
618  del c_data
619  return r
620 
621  def set_array_int16(self, data: typing.List[int]) -> Result:
622  """
623  Set array of int16
624  @returns <Result>, status of function call
625  """
626  c_data = (ctypes.c_int16 * len(data))(*data)
627  r = Result(datalayer.clib.libcomm_datalayer.DLR_variantSetARRAY_OF_INT16(
628  self._variant, c_data, len(data)))
629  del c_data
630  return r
631 
632  def set_array_uint16(self, data: typing.List[int]) -> Result:
633  """
634  Set array of uint16
635  @returns <Result>, status of function call
636  """
637  c_data = (ctypes.c_uint16 * len(data))(*data)
638  r = Result(datalayer.clib.libcomm_datalayer.DLR_variantSetARRAY_OF_UINT16(
639  self._variant, c_data, len(data)))
640  del c_data
641  return r
642 
643  def set_array_int32(self, data: typing.List[int]) -> Result:
644  """
645  Set array of int32
646  @returns <Result>, status of function call
647  """
648  c_data = (ctypes.c_int32 * len(data))(*data)
649  r = Result(datalayer.clib.libcomm_datalayer.DLR_variantSetARRAY_OF_INT32(
650  self._variant, c_data, len(data)))
651  del c_data
652  return r
653 
654  def set_array_uint32(self, data: typing.List[int]) -> Result:
655  """
656  Set array of uint32
657  @returns <Result>, status of function call
658  """
659  c_data = (ctypes.c_uint32 * len(data))(*data)
660  r = Result(datalayer.clib.libcomm_datalayer.DLR_variantSetARRAY_OF_UINT32(
661  self._variant, c_data, len(data)))
662  del c_data
663  return r
664 
665  def set_array_int64(self, data: typing.List[int]) -> Result:
666  """
667  Set array of int64
668  @returns <Result>, status of function call
669  """
670  c_data = (ctypes.c_int64 * len(data))(*data)
671  r = Result(datalayer.clib.libcomm_datalayer.DLR_variantSetARRAY_OF_INT64(
672  self._variant, c_data, len(data)))
673  del c_data
674  return r
675 
676  def set_array_uint64(self, data: typing.List[int]) -> Result:
677  """
678  Set array of uint64
679  @returns <Result>, status of function call
680  """
681  c_data = (ctypes.c_uint64 * len(data))(*data)
682  r = Result(datalayer.clib.libcomm_datalayer.DLR_variantSetARRAY_OF_UINT64(
683  self._variant, c_data, len(data)))
684  del c_data
685  return r
686 
687  def set_array_float32(self, data: typing.List[float]) -> Result:
688  """
689  Set array of float32
690  @returns <Result>, status of function call
691  """
692  c_data = (ctypes.c_float * len(data))(*data)
693  r = Result(datalayer.clib.libcomm_datalayer.DLR_variantSetARRAY_OF_FLOAT32(
694  self._variant, c_data, len(data)))
695  del c_data
696  return r
697 
698  def set_array_float64(self, data: typing.List[float]) -> Result:
699  """
700  Set array of float64
701  @returns <Result>, status of function call
702  """
703  c_data = (ctypes.c_double * len(data))(*data)
704  r = Result(datalayer.clib.libcomm_datalayer.DLR_variantSetARRAY_OF_FLOAT64(
705  self._variant, c_data, len(data)))
706  del c_data
707  return r
708 
709  def set_array_string(self, data: typing.List[str]) -> Result:
710  """
711  Set array of strings
712  @returns <Result>, status of function call
713  """
714  c_data = (ctypes.c_char_p * len(data))(*
715  [d.encode('utf-8') for d in data])
716  r = Result(datalayer.clib.libcomm_datalayer.DLR_variantSetARRAY_OF_STRING(
717  self._variant, c_data, len(data)))
718  del c_data
719  return r
720 
721 
722 class VariantRef(Variant):
723  """
724  Variant Helper interface,
725  Important: store not an instance of VariantRef, uses the clone/copy function
726  """
727 
728  def __init__(self, c_variant: C_DLR_VARIANT = None):
729  """
730  generate Variant
731  """
732  super().__init__(c_variant)
733 
734  def __del__(self):
735  """
736  __del__
737  """
738  pass
739 
740  def __exit__(self, exc_type, exc_val, exc_tb):
741  """
742  __exit__
743  """
744  pass
datalayer.variant.Variant.get_float64
float get_float64(self)
Returns the value of the variant as a double (auto convert if possible) otherwise 0.
Definition: variant.py:314
datalayer.variant.Variant.get_array_int64
typing.List[int] get_array_int64(self)
Returns the array of int64 if the type is a array of int64 otherwise null.
Definition: variant.py:436
datalayer.variant.Variant.__init__
def __init__(self, C_DLR_VARIANT c_variant=None)
generate Variant
Definition: variant.py:138
datalayer.variant.VariantType
Definition: variant.py:96
datalayer.variant.Variant.clone
def clone(self)
clones the content of a variant to another variant
Definition: variant.py:237
datalayer.variant.Variant.set_int64
Result set_int64(self, int data)
Set a int64 value.
Definition: variant.py:550
datalayer.variant.Variant._variant
_variant
Definition: variant.py:141
datalayer.variant.Variant.set_uint16
Result set_uint16(self, int data)
Set a uint16 value.
Definition: variant.py:529
datalayer.variant.Result
Definition: variant.py:19
datalayer.variant.Variant.set_string
Result set_string(self, str data)
Set a string.
Definition: variant.py:578
datalayer.variant.Variant.get_array_string
typing.List[str] get_array_string(self)
Returns the type of the variant.
Definition: variant.py:488
datalayer.variant.Variant.get_int64
int get_int64(self)
Returns the value of the variant as a int64 (auto convert if possible) otherwise 0.
Definition: variant.py:293
datalayer.variant.Variant.get_array_float32
typing.List[float] get_array_float32(self)
Returns the array of float if the type is a array of float otherwise null.
Definition: variant.py:462
datalayer.variant.Variant.set_bool8
Result set_bool8(self, bool data)
Set a bool value.
Definition: variant.py:501
datalayer.variant.Variant.get_int8
int get_int8(self)
Returns the value of the variant as a int8 (auto convert if possible) otherwise 0.
Definition: variant.py:251
datalayer.variant.Variant.set_array_bool8
Result set_array_bool8(self, typing.List[bool] data)
Set array of bool8.
Definition: variant.py:598
datalayer.variant.Variant.close
def close(self)
closes the variant instance
Definition: variant.py:167
datalayer.variant.Variant.get_string
str get_string(self)
Returns the array of bool8 if the type is a array of bool otherwise null.
Definition: variant.py:321
datalayer.variant.Variant
Variant is a container for a many types of data.
Definition: variant.py:131
datalayer.variant.Variant.set_array_float64
Result set_array_float64(self, typing.List[float] data)
Set array of float64.
Definition: variant.py:708
datalayer.variant.Variant.set_array_string
Result set_array_string(self, typing.List[str] data)
Set array of strings.
Definition: variant.py:719
datalayer.variant.Variant.set_array_int64
Result set_array_int64(self, typing.List[int] data)
Set array of int64.
Definition: variant.py:675
datalayer.variant.Variant.set_uint32
Result set_uint32(self, int data)
Set a uint32 value.
Definition: variant.py:543
datalayer.variant.Variant.set_uint8
Result set_uint8(self, int data)
Set a uint8 value.
Definition: variant.py:515
datalayer.variant.Variant.get_array_int8
typing.List[int] get_array_int8(self)
Returns the array of int8 if the type is a array of int8 otherwise null.
Definition: variant.py:358
datalayer.variant.Variant.set_array_uint64
Result set_array_uint64(self, typing.List[int] data)
Set array of uint64.
Definition: variant.py:686
datalayer.variant.Variant.get_array_uint8
typing.List[int] get_array_uint8(self)
Returns the array of uint8 if the type is a array of uint8 otherwise null.
Definition: variant.py:371
datalayer.variant.Variant.get_array_bool8
typing.List[bool] get_array_bool8(self)
Returns the array of int8 if the type is a array of int8 otherwise null.
Definition: variant.py:344
datalayer.variant.Variant.set_int8
Result set_int8(self, int data)
Set a int8 value.
Definition: variant.py:508
datalayer.variant.Variant.get_data
bytearray get_data(self)
Returns the pointer to the data of the variant.
Definition: variant.py:190
datalayer.variant.Variant.get_array_int16
typing.List[int] get_array_int16(self)
Returns the array of int16 if the type is a array of int16 otherwise null.
Definition: variant.py:384
datalayer.variant.VariantRef.__del__
def __del__(self)
del
Definition: variant.py:743
datalayer.variant.Variant.get_int16
int get_int16(self)
Returns the value of the variant as a int16 (auto convert if possible) otherwise 0.
Definition: variant.py:265
datalayer.variant.Variant.set_array_uint16
Result set_array_uint16(self, typing.List[int] data)
Set array of uint16.
Definition: variant.py:642
datalayer.variant.Variant.set_array_int32
Result set_array_int32(self, typing.List[int] data)
Set array of int32.
Definition: variant.py:653
datalayer.variant.Variant.get_uint64
int get_uint64(self)
Returns the value of the variant as a uint64 (auto convert if possible) otherwise 0.
Definition: variant.py:300
datalayer.variant.Variant.set_float32
Result set_float32(self, float data)
Set a float value.
Definition: variant.py:564
datalayer.variant.Variant.get_bool8
bool get_bool8(self)
Returns the value of the variant as a bool (auto convert if possible) otherwise 0.
Definition: variant.py:244
datalayer.variant.Variant.get_uint8
int get_uint8(self)
Returns the value of the variant as a uint8 (auto convert if possible) otherwise 0.
Definition: variant.py:258
datalayer.variant.Variant.set_int32
Result set_int32(self, int data)
Set a int32 value.
Definition: variant.py:536
datalayer.variant.Variant.get_count
int get_count(self)
Returns the count of elements in the variant (scalar data types = 1, array = count of elements in arr...
Definition: variant.py:207
datalayer.variant.Variant.copy
def copy(C_DLR_VARIANT c_variant)
copies the content of a variant to another variant
Definition: variant.py:225
datalayer.variant.VariantRef.__init__
def __init__(self, C_DLR_VARIANT c_variant=None)
generate Variant
Definition: variant.py:737
datalayer.variant.Variant.set_int16
Result set_int16(self, int data)
Set a int16 value.
Definition: variant.py:522
datalayer.variant.Variant.set_array_int16
Result set_array_int16(self, typing.List[int] data)
Set array of int16.
Definition: variant.py:631
datalayer.variant.Variant.__enter__
def __enter__(self)
use the python context manager
Definition: variant.py:149
datalayer.variant.Variant.set_uint64
Result set_uint64(self, int data)
Set a uint64 value.
Definition: variant.py:557
datalayer.variant.Variant.set_array_int8
Result set_array_int8(self, typing.List[int] data)
Set array of int8.
Definition: variant.py:609
datalayer.variant.Variant.get_uint16
int get_uint16(self)
Returns the value of the variant as a uint16 (auto convert if possible) otherwise 0.
Definition: variant.py:272
datalayer.variant.Variant.set_array_uint32
Result set_array_uint32(self, typing.List[int] data)
Set array of uint32.
Definition: variant.py:664
datalayer.variant.Variant.get_array_uint16
typing.List[int] get_array_uint16(self)
Returns the array of uint16 if the type is a array of uint16 otherwise null.
Definition: variant.py:397
datalayer.variant.Variant.get_array_float64
typing.List[float] get_array_float64(self)
Returns the array of double if the type is a array of double otherwise null.
Definition: variant.py:475
datalayer.variant.Variant.set_flatbuffers
Result set_flatbuffers(self, bytearray data)
Set an flatbuffers.
Definition: variant.py:586
datalayer.variant.Variant.get_int32
int get_int32(self)
Returns the value of the variant as a int32 (auto convert if possible) otherwise 0.
Definition: variant.py:279
datalayer.variant.Variant.__del__
def __del__(self)
del
Definition: variant.py:161
datalayer.variant.Variant.get_array_uint64
typing.List[int] get_array_uint64(self)
Returns the array of uint64 if the type is a array of uint64 otherwise null.
Definition: variant.py:449
datalayer.variant.Variant.set_array_uint8
Result set_array_uint8(self, typing.List[int] data)
Set array of uint8.
Definition: variant.py:620
datalayer.variant.Variant.__closed
__closed
Definition: variant.py:139
datalayer.variant.Variant.__exit__
def __exit__(self, exc_type, exc_val, exc_tb)
use the python context manager
Definition: variant.py:155
datalayer.variant.Variant.get_float32
float get_float32(self)
Returns the value of the variant as a float (auto convert if possible) otherwise 0.
Definition: variant.py:307
datalayer.variant.Variant.get_type
VariantType get_type(self)
Returns the type of the variant.
Definition: variant.py:183
datalayer.variant.VariantRef.__exit__
def __exit__(self, exc_type, exc_val, exc_tb)
exit
Definition: variant.py:749
datalayer.variant.Variant.get_flatbuffers
bytearray get_flatbuffers(self)
Returns the flatbuffers if the type is a flatbuffers otherwise null.
Definition: variant.py:334
datalayer.variant.Variant.get_size
int get_size(self)
Definition: variant.py:200
datalayer.variant.Variant.get_array_uint32
typing.List[int] get_array_uint32(self)
Returns the array of uint32 if the type is a array of uint32 otherwise null.
Definition: variant.py:423
datalayer.variant.Variant.get_handle
def get_handle(self)
handle value of variant
Definition: variant.py:176
datalayer.variant.Variant.get_uint32
int get_uint32(self)
Returns the value of the variant as a Uint32 (auto convert if possible) otherwise 0.
Definition: variant.py:286
datalayer.variant.VariantRef
Definition: variant.py:732
datalayer.variant.Variant.set_array_float32
Result set_array_float32(self, typing.List[float] data)
Set array of float32.
Definition: variant.py:697
datalayer.variant.Variant.set_float64
Result set_float64(self, float data)
Set a double value.
Definition: variant.py:571
datalayer.variant.Variant.get_array_int32
typing.List[int] get_array_int32(self)
Returns the array of int32 if the type is a array of int32 otherwise null.
Definition: variant.py:410
datalayer.variant.Variant.check_convert
Result check_convert(self, VariantType datatype)
Checks whether the variant can be converted to another type.
Definition: variant.py:214