3 Function calls are combined into a single call
12 from ctrlxdatalayer.clib_bulk
import (C_DLR_BULK, C_DLR_CLIENT_BULK_RESPONSE,
14 from ctrlxdatalayer.clib_client
import C_DLR_CLIENT
15 from ctrlxdatalayer.clib_variant
import C_DLR_VARIANT
24 __slots__ = [
'__address',
'__result',
'__data',
'__timestamp']
26 def __init__(self, addr: str, data: C_DLR_VARIANT, time: ctypes.c_uint64, result: Result):
30 addr (str): Address for the response
31 data (C_DLR_VARIANT): Output data of the response
32 time (ctypes.c_uint64): Timestamp of the response
33 result (Result): Result of the response
37 _, self.
__data__data = Variant.copy(data)
38 t = time
if isinstance(time, int)
else time.value
39 self.
__timestamp__timestamp = Variant.from_filetime(t)
43 use the python context manager
47 def __exit__(self, exc_type, exc_val, exc_tb):
49 use the python context manager
64 str: Address for the response
72 Result: Result of the response
81 Variant: Output data of the response
89 datetime object as timestamp (FILETIME) 64 bit 100ns since 1.1.1601 (UTC)
92 datetime.datetime: Timestamp of the response
97 ResponseCallback = typing.Callable[[
98 typing.List[Response], userData_c_void_p],
None]
106 def _bulkGetCount(bulk: C_DLR_BULK) -> int:
110 bulk (C_DLR_BULK): Reference to the bulk
115 return ctrlxdatalayer.clib.libcomm_datalayer.DLR_bulkGetCount(bulk)
118 def _bulkGetResponseAddress(bulk: C_DLR_BULK, i: int) -> bytes:
119 """_bulkGetResponseAddress
122 bulk(C_DLR_BULK): Reference to the bulk
126 bytes: address of response
128 return ctrlxdatalayer.clib.libcomm_datalayer.DLR_bulkGetResponseAddress(bulk, ctypes.c_size_t(i))
131 def _bulkGetResponseData(bulk: C_DLR_BULK, i: int) -> C_DLR_VARIANT:
132 """_bulkGetResponseData
135 bulk (C_DLR_BULK): Reference to the bulk
138 C_DLR_VARIANT: data of response
140 return ctrlxdatalayer.clib.libcomm_datalayer.DLR_bulkGetResponseData(
141 bulk, ctypes.c_size_t(i))
144 def _bulkGetResponseTimestamp(bulk: C_DLR_BULK, i: int) -> ctypes.c_uint64:
145 """_bulkGetResponseTimestamp
148 bulk (C_DLR_BULK): Reference to the bulk
152 c_uint64: timestamp of response
154 return ctrlxdatalayer.clib.libcomm_datalayer.DLR_bulkGetResponseTimestamp(
155 bulk, ctypes.c_size_t(i))
158 def _bulkGetResponseResult(bulk: C_DLR_BULK, i: int) -> Result:
159 """_bulkGetResponseResult
162 bulk (C_DLR_BULK): Reference to the bulk
166 Result: status of response
168 return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_bulkGetResponseResult(
169 bulk, ctypes.c_size_t(i)))
176 __slots__ = [
'_response']
183 bulk (clib_client.C_DLR_BULK): Bulk value
185 self._response: typing.List[Response] = []
189 use the python context manager
193 def __exit__(self, exc_type, exc_val, exc_tb):
195 use the python context manager
212 typing.List[Response]: List of response
219 class _ResponseBulkMgr
222 def __init__(self, bulk: C_DLR_BULK):
227 bulk (clib_client.C_DLR_BULK): Bulk value
231 size = _bulkGetCount(bulk)
232 for i
in range(size):
233 addr = _bulkGetResponseAddress(bulk, i)
234 data = _bulkGetResponseData(bulk, i)
235 time = _bulkGetResponseTimestamp(bulk, i)
236 result = _bulkGetResponseResult(bulk, i)
237 obj =
Response(addr.decode(
'utf-8'), data, time, result)
242 use the python context manager
246 def __exit__(self, exc_type, exc_val, exc_tb):
248 use the python context manager
255 class _ResponseAsynMgr
258 __slots__ = [
'_response',
'__async_creator']
260 def __init__(self, ac: _AsyncCreator):
264 ac (_AsyncCreator): help class
268 self.__async_creator = ac
272 use the python context manager
276 def __exit__(self, exc_type, exc_val, exc_tb):
278 use the python context manager
294 def _clientBulkReadSync(client: C_DLR_CLIENT, bulk: C_DLR_BULK, token: bytes) -> Result:
295 """_clientBulkReadSync
298 client (C_DLR_CLIENT): Reference to the client
299 bulk (C_DLR_BULK): Reference to the bulk
300 token (bytes): Security access token for authentication as JWT payload
303 Result: status of function call
305 return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientBulkReadSync(client, bulk, token))
308 def _clientBulkWriteSync(client: C_DLR_CLIENT, bulk: C_DLR_BULK, token: bytes) -> Result:
309 """_clientBulkWriteSync
312 client (C_DLR_CLIENT): Reference to the client
313 bulk (C_DLR_BULK): Reference to the bulk
314 token (bytes): Security access token for authentication as JWT payload
317 Result: status of function call
319 return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientBulkWriteSync(client, bulk, token))
322 def _clientBulkBrowseSync(client: C_DLR_CLIENT, bulk: C_DLR_BULK, token: bytes) -> Result:
323 """_clientBulkBrowseSync
326 client (C_DLR_CLIENT): Reference to the client
327 bulk (C_DLR_BULK): Reference to the bulk
328 token (bytes): Security access token for authentication as JWT payload
331 Result: status of function call
333 return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientBulkBrowseSync(client, bulk, token))
336 def _clientBulkMetadataSync(client: C_DLR_CLIENT, bulk: C_DLR_BULK, token: bytes) -> Result:
337 """_clientBulkMetadataSync
340 client (C_DLR_CLIENT): Reference to the client
341 bulk (C_DLR_BULK): Reference to the bulk
342 token (bytes): Security access token for authentication as JWT payload
345 Result: status of function call
347 return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientBulkMetadataSync(client, bulk, token))
350 def _clientBulkCreateSync(client: C_DLR_CLIENT, bulk: C_DLR_BULK, token: bytes) -> Result:
351 """_clientBulkCreateSync
354 client (C_DLR_CLIENT): Reference to the client
355 bulk (C_DLR_BULK): Reference to the bulk
356 token (bytes): Security access token for authentication as JWT payload
359 Result: status of function call
361 return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientBulkCreateSync(client, bulk, token))
364 def _clientBulkDeleteSync(client: C_DLR_CLIENT, bulk: C_DLR_BULK, token: bytes) -> Result:
365 """_clientBulkDeleteSync
368 client (C_DLR_CLIENT): Reference to the client
369 bulk (C_DLR_BULK): Reference to the bulk
370 token (bytes): Security access token for authentication as JWT payload
373 Result: status of function call
375 return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientBulkDeleteSync(client, bulk, token))
378 def _clientReadBulkASync(client: C_DLR_CLIENT, request, token: bytes, cb: C_DLR_CLIENT_BULK_RESPONSE, userdata: userData_c_void_p) -> Result:
379 """_clientReadBulkASync
382 client (C_DLR_CLIENT): Reference to the client
383 request (ctypes.POINTER(C_VecBulkRequest)): Requests
384 token (bytes): Security access token for authentication as JWT payload
385 cb (C_DLR_CLIENT_BULK_RESPONSE): Callback to call when function is finished
386 userdata (userData_c_void_p): User data - will be returned in callback as userdata.
387 You can use this userdata to identify your request
390 Result: status of function call
392 return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientReadBulkASync(client, request, token, cb, userdata))
395 def _clientBrowseBulkASync(client: C_DLR_CLIENT, request, token: bytes, cb: C_DLR_CLIENT_BULK_RESPONSE, userdata: userData_c_void_p) -> Result:
396 """_clientBrowseBulkASync
399 client (C_DLR_CLIENT): Reference to the client
400 request (ctypes.POINTER(C_VecBulkRequest)): Requests
401 token (bytes): Security access token for authentication as JWT payload
402 cb (C_DLR_CLIENT_BULK_RESPONSE): Callback to call when function is finished
403 userdata (userData_c_void_p): User data - will be returned in callback as userdata.
404 You can use this userdata to identify your request
407 Result: status of function call
409 return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientBrowseBulkASync(client, request, token, cb, userdata))
412 def _clientMetadataBulkASync(client: C_DLR_CLIENT, request, token: bytes, cb: C_DLR_CLIENT_BULK_RESPONSE, userdata: userData_c_void_p) -> Result:
413 """_clientMetadataBulkASync
416 client (C_DLR_CLIENT): Reference to the client
417 request (ctypes.POINTER(C_VecBulkRequest)): Requests
418 token (bytes): Security access token for authentication as JWT payload
419 cb (C_DLR_CLIENT_BULK_RESPONSE): Callback to call when function is finished
420 userdata (userData_c_void_p): User data - will be returned in callback as userdata.
421 You can use this userdata to identify your request
424 Result: status of function call
426 return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientMetadataBulkASync(client, request, token, cb, userdata))
429 def _clientWriteBulkASync(client: C_DLR_CLIENT, request, token: bytes, cb: C_DLR_CLIENT_BULK_RESPONSE, userdata: userData_c_void_p) -> Result:
430 """_clientWriteBulkASync
433 client (C_DLR_CLIENT): Reference to the client
434 request (ctypes.POINTER(C_VecBulkRequest)): Requests
435 token (bytes): Security access token for authentication as JWT payload
436 cb (C_DLR_CLIENT_BULK_RESPONSE): Callback to call when function is finished
437 userdata (userData_c_void_p): User data - will be returned in callback as userdata.
438 You can use this userdata to identify your request
441 Result: status of function call
443 return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientWriteBulkASync(client, request, token, cb, userdata))
446 def _clientCreateBulkASync(client: C_DLR_CLIENT, request, token: bytes, cb: C_DLR_CLIENT_BULK_RESPONSE, userdata: userData_c_void_p) -> Result:
447 """_clientCreateBulkASync
450 client (C_DLR_CLIENT): Reference to the client
451 request (ctypes.POINTER(C_VecBulkRequest)): Requests
452 token (bytes): Security access token for authentication as JWT payload
453 cb (C_DLR_CLIENT_BULK_RESPONSE): Callback to call when function is finished
454 userdata (userData_c_void_p): User data - will be returned in callback as userdata.
455 You can use this userdata to identify your request
458 Result: status of function call
460 return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientCreateBulkASync(client, request, token, cb, userdata))
463 def _clientDeleteBulkASync(client: C_DLR_CLIENT, request, token: bytes, cb: C_DLR_CLIENT_BULK_RESPONSE, userdata: userData_c_void_p) -> Result:
464 """_clientDeleteBulkASync
467 client (C_DLR_CLIENT): Reference to the client
468 request (ctypes.POINTER(C_VecBulkRequest)): Requests
469 token (bytes): Security access token for authentication as JWT payload
470 cb (C_DLR_CLIENT_BULK_RESPONSE): Callback to call when function is finished
471 userdata (userData_c_void_p): User data - will be returned in callback as userdata.
472 You can use this userdata to identify your request
475 Result: status of function call
477 return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientDeleteBulkASync(client, request, token, cb, userdata))
481 """Struct for BulkReadRequest
482 Address for the request
483 Read argument of the request
486 def __init__(self, address: str, data: Variant =
None):
487 """Struct for BulkReadRequest
490 address (str): Address for the request
491 data (Variant, optional): Argument of the request. Defaults to None.
493 self.address = address
498 """Struct for BulkWriteRequest
499 Address for the request
500 Write data of the request
503 def __init__(self, address: str, data: Variant):
507 address (str): Address for the request
508 data (Variant): Write data of the request
510 self.address = address
515 """Struct for BulkCreateRequest
516 Address for the request
517 Write data of the request
520 def __init__(self, address: str, data: Variant =
None):
524 address (str): Address for the request
525 data (Variant): Write data of the request
535 __slots__ = [
'_client',
'_requests',
'__resp_mgr',
'__ptr_resp',
'__on_cb']
544 self._requests: typing.List[_Request] = []
545 self.__resp_mgr =
None
546 self.__ptr_resp: _CallbackPtr
551 use the python context manager
555 def __exit__(self, exc_type, exc_val, exc_tb):
557 use the python context manager
569 def __create_response_callback(self, cb: ResponseCallback):
577 def _cb(bulk_resp: ctypes.POINTER(C_VecBulkResponse), userdata: ctypes.c_void_p):
579 datalayer calls this function
581 if bulk_resp
is None:
587 for i
in range(ptr.count):
588 addr = ptr.response[i].address
589 data = ptr.response[i].data
590 time = ptr.response[i].timestamp
591 result = ptr.response[i].result
593 data, time,
Result(result))
595 self.
__resp_mgr__resp_mgr.set_responses(resps)
599 cb_ptr.set_ptr(C_DLR_CLIENT_BULK_RESPONSE(_cb))
600 return cb_ptr.get_ptr()
602 def _test_callback(self, cb: ResponseCallback):
608 def _add(self, address: str, data: Variant =
None):
615 def read(self, request: typing.List[BulkReadRequest], cb: ResponseCallback =
None, userdata: userData_c_void_p =
None) -> Result:
619 Bulk read request to read multiple nodes with a single request.
620 With cb is None, read is called synchronously
623 request (typing.List[BulkReadRequest]): list of requests
624 cb (ResponseCallback, optional): Callback to call when function is finished. Defaults to None.
625 userdata (optional): User data - will be returned in callback as userdata. You can use this userdata to identify your request
628 Result: status of function call
632 self.
_add_add(r.address, r.data)
638 def _read_async(self, cb: ResponseCallback, userdata: userData_c_void_p) -> Result:
642 Result: status of function call
645 result = _clientReadBulkASync(self.
_client_client.get_handle(),
646 bulk.get_bulk_request(),
647 self.
_client_client.get_token(),
648 C_DLR_CLIENT_BULK_RESPONSE(
654 def _read_sync(self) -> Result:
658 Result: status of function call
661 result = _clientBulkReadSync(
662 self.
_client_client.get_handle(), bulk.get_handle(), self.
_client_client.get_token())
663 if result != Result.OK:
668 def write(self, request: typing.List[BulkWriteRequest], cb: ResponseCallback =
None, userdata: userData_c_void_p =
None) -> Result:
672 Bulk write request to write multiple nodes with a single request
673 With cb is None, write is called synchronously
676 request (typing.List[BulkWriteRequest]): list of requests
677 cb (ResponseCallback, optional): callback Callback to call when function is finished. Defaults to None.
678 userdata (optional): User data - will be returned in callback as userdata. You can use this userdata to identify your request
681 Result: status of function call
685 self.
_add_add(r.address, r.data)
691 def _write_sync(self) -> Result:
695 Result: status of function call
698 result = _clientBulkWriteSync(
699 self.
_client_client.get_handle(), bulk.get_handle(), self.
_client_client.get_token())
700 if result != Result.OK:
705 def _write_async(self, cb: ResponseCallback, userdata: userData_c_void_p) -> Result:
709 Result: status of function call
712 result = _clientWriteBulkASync(self.
_client_client.get_handle(),
713 bulk.get_bulk_request(),
714 self.
_client_client.get_token(),
715 C_DLR_CLIENT_BULK_RESPONSE(
721 def browse(self, request: typing.List[str], cb: ResponseCallback =
None, userdata: userData_c_void_p =
None) -> Result:
725 Bulk browse request to browse multiple nodes with a single request
726 With cb is None, browse is called synchronously
729 request (typing.List[str]): list of requests
730 cb (ResponseCallback, optional): callback Callback to call when function is finished. Defaults to None.
731 userdata (optional): User data - will be returned in callback as userdata. You can use this userdata to identify your request
734 Result: status of function call
738 self.
_add_add(r,
None)
745 def _browse_async(self, cb: ResponseCallback, userdata: userData_c_void_p) -> Result:
749 Result: status of function call
752 result = _clientBrowseBulkASync(self.
_client_client.get_handle(),
753 bulk.get_bulk_request(),
754 self.
_client_client.get_token(),
755 C_DLR_CLIENT_BULK_RESPONSE(
761 def _browse_sync(self) -> Result:
765 Result: status of function call
768 result = _clientBulkBrowseSync(
769 self.
_client_client.get_handle(), bulk.get_handle(), self.
_client_client.get_token())
770 if result != Result.OK:
775 def metadata(self, request: typing.List[str], cb: ResponseCallback =
None, userdata: userData_c_void_p =
None) -> Result:
779 Bulk metadata request to metadata multiple nodes with a single request
780 With cb is None, metadata is called synchronously
783 request (typing.List[str]): list of requests
784 cb (ResponseCallback, optional): callback Callback to call when function is finished. Defaults to None.
785 userdata (optional): User data - will be returned in callback as userdata. You can use this userdata to identify your request
788 Result: status of function call
792 self.
_add_add(r,
None)
799 def _metadata_async(self, cb: ResponseCallback, userdata: userData_c_void_p) -> Result:
803 Result: status of function call
806 result = _clientMetadataBulkASync(self.
_client_client.get_handle(),
807 bulk.get_bulk_request(),
808 self.
_client_client.get_token(),
809 C_DLR_CLIENT_BULK_RESPONSE(
815 def _metadata_sync(self) -> Result:
819 Result: status of function call
822 result = _clientBulkMetadataSync(
823 self.
_client_client.get_handle(), bulk.get_handle(), self.
_client_client.get_token())
824 if result != Result.OK:
829 def create(self, request: typing.List[BulkCreateRequest], cb: ResponseCallback =
None, userdata: userData_c_void_p =
None) -> Result:
833 Bulk create request to create multiple nodes with a single request
834 With cb is None, create is called synchronously
837 request (typing.List[BulkCreateRequest]): list of requests
838 cb (ResponseCallback, optional): callback Callback to call when function is finished. Defaults to None.
839 userdata (optional): User data - will be returned in callback as userdata. You can use this userdata to identify your request
842 Result: status of function call
846 self.
_add_add(r.address, r.data)
852 def _create_sync(self) -> Result:
856 Result: status of function call
859 result = _clientBulkCreateSync(
860 self.
_client_client.get_handle(), bulk.get_handle(), self.
_client_client.get_token())
861 if result != Result.OK:
866 def _create_async(self, cb: ResponseCallback, userdata: userData_c_void_p) -> Result:
870 Result: status of function call
873 result = _clientCreateBulkASync(self.
_client_client.get_handle(),
874 bulk.get_bulk_request(),
875 self.
_client_client.get_token(),
876 C_DLR_CLIENT_BULK_RESPONSE(
882 def delete(self, request: typing.List[str], cb: ResponseCallback =
None, userdata: userData_c_void_p =
None) -> Result:
886 Bulk delete request to delete multiple nodes with a single request
887 With cb is None, delete is called synchronously
890 request (typing.List[str]): list of requests
891 cb (ResponseCallback, optional): callback Callback to call when function is finished. Defaults to None.
892 userdata (optional): User data - will be returned in callback as userdata. You can use this userdata to identify your request
895 Result: status of function call
899 self.
_add_add(r,
None)
905 def _delete_sync(self) -> Result:
909 Result: status of function call
912 result = _clientBulkDeleteSync(
913 self.
_client_client.get_handle(), bulk.get_handle(), self.
_client_client.get_token())
914 if result != Result.OK:
919 def _delete_async(self, cb: ResponseCallback, userdata: userData_c_void_p) -> Result:
923 Result: status of function call
926 result = _clientDeleteBulkASync(self.
_client_client.get_handle(),
927 bulk.get_bulk_request(),
928 self.
_client_client.get_token(),
929 C_DLR_CLIENT_BULK_RESPONSE(
940 typing.List[Response]: List of response
946 def __close_mgr(self):
Struct for BulkCreateRequest Address for the request Write data of the request.
Struct for BulkReadRequest Address for the request Read argument of the request.
def __init__(self, str address, Variant data=None)
Struct for BulkReadRequest.
Struct for BulkWriteRequest Address for the request Write data of the request.
Result _create_sync(self)
Result _read_async(self, ResponseCallback cb, userData_c_void_p userdata)
def _add(self, str address, Variant data=None)
Result write(self, typing.List[BulkWriteRequest] request, ResponseCallback cb=None, userData_c_void_p userdata=None)
write
Result read(self, typing.List[BulkReadRequest] request, ResponseCallback cb=None, userData_c_void_p userdata=None)
read
Result _write_async(self, ResponseCallback cb, userData_c_void_p userdata)
Result _delete_async(self, ResponseCallback cb, userData_c_void_p userdata)
Result _browse_sync(self)
def __create_response_callback(self, ResponseCallback cb)
Result _metadata_async(self, ResponseCallback cb, userData_c_void_p userdata)
Result _delete_sync(self)
typing.List[Response] get_response(self)
get_response
Result browse(self, typing.List[str] request, ResponseCallback cb=None, userData_c_void_p userdata=None)
browse
Result create(self, typing.List[BulkCreateRequest] request, ResponseCallback cb=None, userData_c_void_p userdata=None)
create
Result _create_async(self, ResponseCallback cb, userData_c_void_p userdata)
Result metadata(self, typing.List[str] request, ResponseCallback cb=None, userData_c_void_p userdata=None)
metadata
Result delete(self, typing.List[str] request, ResponseCallback cb=None, userData_c_void_p userdata=None)
delete
Result _metadata_sync(self)
Result _browse_async(self, ResponseCallback cb, userData_c_void_p userdata)
def __exit__(self, exc_type, exc_val, exc_tb)
use the python context manager
def __enter__(self)
use the python context manager
def __init__(self, str addr, C_DLR_VARIANT data, ctypes.c_uint64 time, Result result)
init Response Bulk
str get_address(self)
get_address
datetime.datetime get_datetime(self)
get_datetime
Result get_result(self)
get_result
Variant get_data(self)
get_data
def __exit__(self, exc_type, exc_val, exc_tb)
use the python context manager
def __init__(self, _AsyncCreator ac)
init
def set_responses(self, typing.List[Response] responses)
set_responses
def __exit__(self, exc_type, exc_val, exc_tb)
use the python context manager
def __enter__(self)
use the python context manager
def __init__(self, C_DLR_BULK bulk)
init
def __exit__(self, exc_type, exc_val, exc_tb)
use the python context manager
def __enter__(self)
use the python context manager
typing.List[Response] get_response(self)
get_response