ctrlX Data Layer API for Python  3.3.0
The ctrlX Data Layer API allows access to the ctrlX Data Layer with Python
bulk.py
1 """
2 class Bulk
3 Function calls are combined into a single call
4 """
5 import ctypes
6 import datetime
7 import typing
8 
9 import ctrlxdatalayer
10 from ctrlxdatalayer.bulk_util import _AsyncCreator, _BulkCreator, _Request
11 from ctrlxdatalayer.clib import userData_c_void_p
12 from ctrlxdatalayer.clib_bulk import (C_DLR_BULK, C_DLR_CLIENT_BULK_RESPONSE,
13  C_VecBulkResponse)
14 from ctrlxdatalayer.clib_client import C_DLR_CLIENT
15 from ctrlxdatalayer.clib_variant import C_DLR_VARIANT
16 from ctrlxdatalayer.client import Client, _CallbackPtr
17 from ctrlxdatalayer.variant import Result, Variant
18 
19 
20 class Response:
21  """
22  class Bulk Response
23  """
24  __slots__ = ['__address', '__result', '__data', '__timestamp']
25 
26  def __init__(self, addr: str, data: C_DLR_VARIANT, time: ctypes.c_uint64, result: Result):
27  """init Response Bulk
28 
29  Args:
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
34  """
35  self.__address__address = addr
36  self.__result__result = result
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)
40 
41  def __enter__(self):
42  """
43  use the python context manager
44  """
45  return self
46 
47  def __exit__(self, exc_type, exc_val, exc_tb):
48  """
49  use the python context manager
50  """
51  self.closeclose()
52 
53  def close(self):
54  """
55  close
56  """
57  self.__data__data.close()
58 
59  def get_address(self) -> str:
60  """
61  get_address
62 
63  Returns:
64  str: Address for the response
65  """
66  return self.__address__address
67 
68  def get_result(self) -> Result:
69  """get_result
70 
71  Returns:
72  Result: Result of the response
73  """
74  return self.__result__result
75 
76  def get_data(self) -> Variant:
77  """
78  get_data
79 
80  Returns:
81  Variant: Output data of the response
82  """
83  return self.__data__data
84 
85  def get_datetime(self) -> datetime.datetime:
86  """
87  get_datetime
88 
89  datetime object as timestamp (FILETIME) 64 bit 100ns since 1.1.1601 (UTC)
90 
91  Returns:
92  datetime.datetime: Timestamp of the response
93  """
94  return self.__timestamp__timestamp
95 
96 
97 ResponseCallback = typing.Callable[[
98  typing.List[Response], userData_c_void_p], None]
99 """ResponseCallback
100 
101  Returns:
102 
103 """
104 
105 
106 def _bulkGetCount(bulk: C_DLR_BULK) -> int:
107  """_bulkGetCount
108 
109  Args:
110  bulk (C_DLR_BULK): Reference to the bulk
111 
112  Returns:
113  int: sizeof bulk
114  """
115  return ctrlxdatalayer.clib.libcomm_datalayer.DLR_bulkGetCount(bulk)
116 
117 
118 def _bulkGetResponseAddress(bulk: C_DLR_BULK, i: int) -> bytes:
119  """_bulkGetResponseAddress
120 
121  Args:
122  bulk(C_DLR_BULK): Reference to the bulk
123  i(int): index[0..]
124 
125  Returns:
126  bytes: address of response
127  """
128  return ctrlxdatalayer.clib.libcomm_datalayer.DLR_bulkGetResponseAddress(bulk, ctypes.c_size_t(i))
129 
130 
131 def _bulkGetResponseData(bulk: C_DLR_BULK, i: int) -> C_DLR_VARIANT:
132  """_bulkGetResponseData
133 
134  Args:
135  bulk (C_DLR_BULK): Reference to the bulk
136  i (int): index [0..]
137  Returns:
138  C_DLR_VARIANT: data of response
139  """
140  return ctrlxdatalayer.clib.libcomm_datalayer.DLR_bulkGetResponseData(
141  bulk, ctypes.c_size_t(i))
142 
143 
144 def _bulkGetResponseTimestamp(bulk: C_DLR_BULK, i: int) -> ctypes.c_uint64:
145  """_bulkGetResponseTimestamp
146 
147  Args:
148  bulk (C_DLR_BULK): Reference to the bulk
149  i (int): index [0..]
150 
151  Returns:
152  c_uint64: timestamp of response
153  """
154  return ctrlxdatalayer.clib.libcomm_datalayer.DLR_bulkGetResponseTimestamp(
155  bulk, ctypes.c_size_t(i))
156 
157 
158 def _bulkGetResponseResult(bulk: C_DLR_BULK, i: int) -> Result:
159  """_bulkGetResponseResult
160 
161  Args:
162  bulk (C_DLR_BULK): Reference to the bulk
163  i (int): index [0..]
164 
165  Returns:
166  Result: status of response
167  """
168  return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_bulkGetResponseResult(
169  bulk, ctypes.c_size_t(i)))
170 
171 
172 class _ResponseMgr:
173  """
174  class _ResponseMgr
175  """
176  __slots__ = ['_response']
177 
178  def __init__(self):
179  """
180  __init__
181 
182  Args:
183  bulk (clib_client.C_DLR_BULK): Bulk value
184  """
185  self._response: typing.List[Response] = []
186 
187  def __enter__(self):
188  """
189  use the python context manager
190  """
191  return self
192 
193  def __exit__(self, exc_type, exc_val, exc_tb):
194  """
195  use the python context manager
196  """
197  self.closeclose()
198 
199  def close(self):
200  """
201  close
202  """
203  for r in self._response_response:
204  r.close()
205  self._response_response = []
206 
207  def get_response(self) -> typing.List[Response]:
208  """
209  get_response
210 
211  Returns:
212  typing.List[Response]: List of response
213  """
214  return self._response_response
215 
216 
218  """
219  class _ResponseBulkMgr
220  """
221 
222  def __init__(self, bulk: C_DLR_BULK):
223  """
224  __init__
225 
226  Args:
227  bulk (clib_client.C_DLR_BULK): Bulk value
228  """
229  super().__init__()
230 
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)
238  self._response_response.append(obj)
239 
240  def __enter__(self):
241  """
242  use the python context manager
243  """
244  return self
245 
246  def __exit__(self, exc_type, exc_val, exc_tb):
247  """
248  use the python context manager
249  """
250  self.closeclose()
251 
252 
254  """
255  class _ResponseAsynMgr
256  """
257 
258  __slots__ = ['_response', '__async_creator']
259 
260  def __init__(self, ac: _AsyncCreator):
261  """__init__
262 
263  Args:
264  ac (_AsyncCreator): help class
265  """
266  super().__init__()
267  self._response_response = []
268  self.__async_creator = ac
269 
270  def __enter__(self):
271  """
272  use the python context manager
273  """
274  return self
275 
276  def __exit__(self, exc_type, exc_val, exc_tb):
277  """
278  use the python context manager
279  """
280  self.closecloseclose()
281 
282  def set_responses(self, responses: typing.List[Response]):
283  """set_responses
284  """
285  self._response_response_response = responses
286 
287  def close(self):
288  """close
289  """
290  self.__async_creator__async_creator.close()
291  self._response_response_response = []
292 
293 
294 def _clientBulkReadSync(client: C_DLR_CLIENT, bulk: C_DLR_BULK, token: bytes) -> Result:
295  """_clientBulkReadSync
296 
297  Args:
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
301 
302  Returns:
303  Result: status of function call
304  """
305  return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientBulkReadSync(client, bulk, token))
306 
307 
308 def _clientBulkWriteSync(client: C_DLR_CLIENT, bulk: C_DLR_BULK, token: bytes) -> Result:
309  """_clientBulkWriteSync
310 
311  Args:
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
315 
316  Returns:
317  Result: status of function call
318  """
319  return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientBulkWriteSync(client, bulk, token))
320 
321 
322 def _clientBulkBrowseSync(client: C_DLR_CLIENT, bulk: C_DLR_BULK, token: bytes) -> Result:
323  """_clientBulkBrowseSync
324 
325  Args:
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
329 
330  Returns:
331  Result: status of function call
332  """
333  return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientBulkBrowseSync(client, bulk, token))
334 
335 
336 def _clientBulkMetadataSync(client: C_DLR_CLIENT, bulk: C_DLR_BULK, token: bytes) -> Result:
337  """_clientBulkMetadataSync
338 
339  Args:
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
343 
344  Returns:
345  Result: status of function call
346  """
347  return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientBulkMetadataSync(client, bulk, token))
348 
349 
350 def _clientBulkCreateSync(client: C_DLR_CLIENT, bulk: C_DLR_BULK, token: bytes) -> Result:
351  """_clientBulkCreateSync
352 
353  Args:
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
357 
358  Returns:
359  Result: status of function call
360  """
361  return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientBulkCreateSync(client, bulk, token))
362 
363 
364 def _clientBulkDeleteSync(client: C_DLR_CLIENT, bulk: C_DLR_BULK, token: bytes) -> Result:
365  """_clientBulkDeleteSync
366 
367  Args:
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
371 
372  Returns:
373  Result: status of function call
374  """
375  return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientBulkDeleteSync(client, bulk, token))
376 
377 
378 def _clientReadBulkASync(client: C_DLR_CLIENT, request, token: bytes, cb: C_DLR_CLIENT_BULK_RESPONSE, userdata: userData_c_void_p) -> Result:
379  """_clientReadBulkASync
380 
381  Args:
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
388 
389  Returns:
390  Result: status of function call
391  """
392  return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientReadBulkASync(client, request, token, cb, userdata))
393 
394 
395 def _clientBrowseBulkASync(client: C_DLR_CLIENT, request, token: bytes, cb: C_DLR_CLIENT_BULK_RESPONSE, userdata: userData_c_void_p) -> Result:
396  """_clientBrowseBulkASync
397 
398  Args:
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
405 
406  Returns:
407  Result: status of function call
408  """
409  return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientBrowseBulkASync(client, request, token, cb, userdata))
410 
411 
412 def _clientMetadataBulkASync(client: C_DLR_CLIENT, request, token: bytes, cb: C_DLR_CLIENT_BULK_RESPONSE, userdata: userData_c_void_p) -> Result:
413  """_clientMetadataBulkASync
414 
415  Args:
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
422 
423  Returns:
424  Result: status of function call
425  """
426  return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientMetadataBulkASync(client, request, token, cb, userdata))
427 
428 
429 def _clientWriteBulkASync(client: C_DLR_CLIENT, request, token: bytes, cb: C_DLR_CLIENT_BULK_RESPONSE, userdata: userData_c_void_p) -> Result:
430  """_clientWriteBulkASync
431 
432  Args:
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
439 
440  Returns:
441  Result: status of function call
442  """
443  return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientWriteBulkASync(client, request, token, cb, userdata))
444 
445 
446 def _clientCreateBulkASync(client: C_DLR_CLIENT, request, token: bytes, cb: C_DLR_CLIENT_BULK_RESPONSE, userdata: userData_c_void_p) -> Result:
447  """_clientCreateBulkASync
448 
449  Args:
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
456 
457  Returns:
458  Result: status of function call
459  """
460  return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientCreateBulkASync(client, request, token, cb, userdata))
461 
462 
463 def _clientDeleteBulkASync(client: C_DLR_CLIENT, request, token: bytes, cb: C_DLR_CLIENT_BULK_RESPONSE, userdata: userData_c_void_p) -> Result:
464  """_clientDeleteBulkASync
465 
466  Args:
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
473 
474  Returns:
475  Result: status of function call
476  """
477  return Result(ctrlxdatalayer.clib.libcomm_datalayer.DLR_clientDeleteBulkASync(client, request, token, cb, userdata))
478 
479 
480 class BulkReadRequest:
481  """Struct for BulkReadRequest
482  Address for the request
483  Read argument of the request
484  """
485 
486  def __init__(self, address: str, data: Variant = None):
487  """Struct for BulkReadRequest
488 
489  Args:
490  address (str): Address for the request
491  data (Variant, optional): Argument of the request. Defaults to None.
492  """
493  self.address = address
494  self.data = data
495 
496 
497 class BulkWriteRequest:
498  """Struct for BulkWriteRequest
499  Address for the request
500  Write data of the request
501  """
502 
503  def __init__(self, address: str, data: Variant):
504  """BulkWriteRequest
505 
506  Args:
507  address (str): Address for the request
508  data (Variant): Write data of the request
509  """
510  self.address = address
511  self.data = data
512 
513 
514 class BulkCreateRequest:
515  """Struct for BulkCreateRequest
516  Address for the request
517  Write data of the request
518  """
519 
520  def __init__(self, address: str, data: Variant = None):
521  """BulkCreateRequest
522 
523  Args:
524  address (str): Address for the request
525  data (Variant): Write data of the request
526  """
527  self.addressaddress = address
528  self.datadata = data
529 
530 
531 class Bulk:
532  """
533  class Bulk
534  """
535  __slots__ = ['_client', '_requests', '__resp_mgr', '__ptr_resp', '__on_cb']
536 
537  def __init__(self, c: Client):
538  """__init__
539 
540  Args:
541  c (Client): Client
542  """
543  self._client = c
544  self._requests: typing.List[_Request] = []
545  self.__resp_mgr = None
546  self.__ptr_resp: _CallbackPtr
547  self.__on_cb = False
548 
549  def __enter__(self):
550  """
551  use the python context manager
552  """
553  return self
554 
555  def __exit__(self, exc_type, exc_val, exc_tb):
556  """
557  use the python context manager
558  """
559  self.close()
560 
561  def close(self):
562  """
563  close
564  """
565  self._client = None
566  self._requests = []
567  self.__close_mgr()
568 
569  def __create_response_callback(self, cb: ResponseCallback):
570  """
571  callback management
572  """
573  self.__on_cb = False
574  cb_ptr = _CallbackPtr()
575  self.__ptr_resp__ptr_resp = cb_ptr
576 
577  def _cb(bulk_resp: ctypes.POINTER(C_VecBulkResponse), userdata: ctypes.c_void_p):
578  """
579  datalayer calls this function
580  """
581  if bulk_resp is None:
582  cb(None, userdata)
583  self.__on_cb__on_cb = True
584  return
585  ptr = bulk_resp[0]
586  resps = []
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
592  resp = Response(addr.decode('utf-8'),
593  data, time, Result(result))
594  resps.append(resp)
595  self.__resp_mgr__resp_mgr.set_responses(resps)
596  cb(resps, userdata)
597  self.__on_cb__on_cb = True
598 
599  cb_ptr.set_ptr(C_DLR_CLIENT_BULK_RESPONSE(_cb))
600  return cb_ptr.get_ptr()
601 
602  def _test_callback(self, cb: ResponseCallback):
603  """
604  internal use
605  """
606  return self.__create_response_callback__create_response_callback(cb)
607 
608  def _add(self, address: str, data: Variant = None):
609  """
610  add bulk request
611  """
612  req = _Request(address, data)
613  self._requests_requests.append(req)
614 
615  def read(self, request: typing.List[BulkReadRequest], cb: ResponseCallback = None, userdata: userData_c_void_p = None) -> Result:
616  """
617  read
618 
619  Bulk read request to read multiple nodes with a single request.
620  With cb is None, read is called synchronously
621 
622  Args:
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
626 
627  Returns:
628  Result: status of function call
629  """
630  self._requests_requests = []
631  for r in request:
632  self._add_add(r.address, r.data)
633  self.__close_mgr__close_mgr()
634  if cb is not None:
635  return self._read_async_read_async(cb, userdata)
636  return self._read_sync_read_sync()
637 
638  def _read_async(self, cb: ResponseCallback, userdata: userData_c_void_p) -> Result:
639  """_read_async
640 
641  Returns:
642  Result: status of function call
643  """
644  bulk = _AsyncCreator(self._requests_requests)
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(
649  self.__create_response_callback__create_response_callback(cb)),
650  userdata)
651  self.__resp_mgr__resp_mgr = _ResponseAsynMgr(bulk)
652  return result
653 
654  def _read_sync(self) -> Result:
655  """_read_sync
656 
657  Returns:
658  Result: status of function call
659  """
660  with _BulkCreator(self._requests_requests) as bulk:
661  result = _clientBulkReadSync(
662  self._client_client.get_handle(), bulk.get_handle(), self._client_client.get_token())
663  if result != Result.OK:
664  return result
665  self.__resp_mgr__resp_mgr = _ResponseBulkMgr(bulk.get_handle())
666  return result
667 
668  def write(self, request: typing.List[BulkWriteRequest], cb: ResponseCallback = None, userdata: userData_c_void_p = None) -> Result:
669  """
670  write
671 
672  Bulk write request to write multiple nodes with a single request
673  With cb is None, write is called synchronously
674 
675  Args:
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
679 
680  Returns:
681  Result: status of function call
682  """
683  self._requests_requests = []
684  for r in request:
685  self._add_add(r.address, r.data)
686  self.__close_mgr__close_mgr()
687  if cb is not None:
688  return self._write_async_write_async(cb, userdata)
689  return self._write_sync_write_sync()
690 
691  def _write_sync(self) -> Result:
692  """_write_sync
693 
694  Returns:
695  Result: status of function call
696  """
697  with _BulkCreator(self._requests_requests) as bulk:
698  result = _clientBulkWriteSync(
699  self._client_client.get_handle(), bulk.get_handle(), self._client_client.get_token())
700  if result != Result.OK:
701  return result
702  self.__resp_mgr__resp_mgr = _ResponseBulkMgr(bulk.get_handle())
703  return result
704 
705  def _write_async(self, cb: ResponseCallback, userdata: userData_c_void_p) -> Result:
706  """_write_async
707 
708  Returns:
709  Result: status of function call
710  """
711  bulk = _AsyncCreator(self._requests_requests)
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(
716  self.__create_response_callback__create_response_callback(cb)),
717  userdata)
718  self.__resp_mgr__resp_mgr = _ResponseAsynMgr(bulk)
719  return result
720 
721  def browse(self, request: typing.List[str], cb: ResponseCallback = None, userdata: userData_c_void_p = None) -> Result:
722  """
723  browse
724 
725  Bulk browse request to browse multiple nodes with a single request
726  With cb is None, browse is called synchronously
727 
728  Args:
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
732 
733  Returns:
734  Result: status of function call
735  """
736  self._requests_requests = []
737  for r in request:
738  self._add_add(r, None)
739  self.__close_mgr__close_mgr()
740  if cb is not None:
741  return self._browse_async_browse_async(cb, userdata)
742 
743  return self._browse_sync_browse_sync()
744 
745  def _browse_async(self, cb: ResponseCallback, userdata: userData_c_void_p) -> Result:
746  """_browse_async
747 
748  Returns:
749  Result: status of function call
750  """
751  bulk = _AsyncCreator(self._requests_requests)
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(
756  self.__create_response_callback__create_response_callback(cb)),
757  userdata)
758  self.__resp_mgr__resp_mgr = _ResponseAsynMgr(bulk)
759  return result
760 
761  def _browse_sync(self) -> Result:
762  """_browse_sync
763 
764  Returns:
765  Result: status of function call
766  """
767  with _BulkCreator(self._requests_requests) as bulk:
768  result = _clientBulkBrowseSync(
769  self._client_client.get_handle(), bulk.get_handle(), self._client_client.get_token())
770  if result != Result.OK:
771  return result
772  self.__resp_mgr__resp_mgr = _ResponseBulkMgr(bulk.get_handle())
773  return result
774 
775  def metadata(self, request: typing.List[str], cb: ResponseCallback = None, userdata: userData_c_void_p = None) -> Result:
776  """
777  metadata
778 
779  Bulk metadata request to metadata multiple nodes with a single request
780  With cb is None, metadata is called synchronously
781 
782  Args:
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
786 
787  Returns:
788  Result: status of function call
789  """
790  self._requests_requests = []
791  for r in request:
792  self._add_add(r, None)
793  self.__close_mgr__close_mgr()
794  if cb is not None:
795  return self._metadata_async_metadata_async(cb, userdata)
796 
797  return self._metadata_sync_metadata_sync()
798 
799  def _metadata_async(self, cb: ResponseCallback, userdata: userData_c_void_p) -> Result:
800  """_metadata_async
801 
802  Returns:
803  Result: status of function call
804  """
805  bulk = _AsyncCreator(self._requests_requests)
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(
810  self.__create_response_callback__create_response_callback(cb)),
811  userdata)
812  self.__resp_mgr__resp_mgr = _ResponseAsynMgr(bulk)
813  return result
814 
815  def _metadata_sync(self) -> Result:
816  """_metadata_sync
817 
818  Returns:
819  Result: status of function call
820  """
821  with _BulkCreator(self._requests_requests) as bulk:
822  result = _clientBulkMetadataSync(
823  self._client_client.get_handle(), bulk.get_handle(), self._client_client.get_token())
824  if result != Result.OK:
825  return result
826  self.__resp_mgr__resp_mgr = _ResponseBulkMgr(bulk.get_handle())
827  return result
828 
829  def create(self, request: typing.List[BulkCreateRequest], cb: ResponseCallback = None, userdata: userData_c_void_p = None) -> Result:
830  """
831  create
832 
833  Bulk create request to create multiple nodes with a single request
834  With cb is None, create is called synchronously
835 
836  Args:
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
840 
841  Returns:
842  Result: status of function call
843  """
844  self._requests_requests = []
845  for r in request:
846  self._add_add(r.address, r.data)
847  self.__close_mgr__close_mgr()
848  if cb is not None:
849  return self._create_async_create_async(cb, userdata)
850  return self._create_sync_create_sync()
851 
852  def _create_sync(self) -> Result:
853  """_create_sync
854 
855  Returns:
856  Result: status of function call
857  """
858  with _BulkCreator(self._requests_requests) as bulk:
859  result = _clientBulkCreateSync(
860  self._client_client.get_handle(), bulk.get_handle(), self._client_client.get_token())
861  if result != Result.OK:
862  return result
863  self.__resp_mgr__resp_mgr = _ResponseBulkMgr(bulk.get_handle())
864  return result
865 
866  def _create_async(self, cb: ResponseCallback, userdata: userData_c_void_p) -> Result:
867  """_create_async
868 
869  Returns:
870  Result: status of function call
871  """
872  bulk = _AsyncCreator(self._requests_requests)
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(
877  self.__create_response_callback__create_response_callback(cb)),
878  userdata)
879  self.__resp_mgr__resp_mgr = _ResponseAsynMgr(bulk)
880  return result
881 
882  def delete(self, request: typing.List[str], cb: ResponseCallback = None, userdata: userData_c_void_p = None) -> Result:
883  """
884  delete
885 
886  Bulk delete request to delete multiple nodes with a single request
887  With cb is None, delete is called synchronously
888 
889  Args:
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
893 
894  Returns:
895  Result: status of function call
896  """
897  self._requests_requests = []
898  for r in request:
899  self._add_add(r, None)
900  self.__close_mgr__close_mgr()
901  if cb is not None:
902  return self._delete_async_delete_async(cb, userdata)
903  return self._delete_sync_delete_sync()
904 
905  def _delete_sync(self) -> Result:
906  """_delete_sync
907 
908  Returns:
909  Result: status of function call
910  """
911  with _BulkCreator(self._requests_requests) as bulk:
912  result = _clientBulkDeleteSync(
913  self._client_client.get_handle(), bulk.get_handle(), self._client_client.get_token())
914  if result != Result.OK:
915  return result
916  self.__resp_mgr__resp_mgr = _ResponseBulkMgr(bulk.get_handle())
917  return result
918 
919  def _delete_async(self, cb: ResponseCallback, userdata: userData_c_void_p) -> Result:
920  """_delete_async
921 
922  Returns:
923  Result: status of function call
924  """
925  bulk = _AsyncCreator(self._requests_requests)
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(
930  self.__create_response_callback__create_response_callback(cb)),
931  userdata)
932  self.__resp_mgr__resp_mgr = _ResponseAsynMgr(bulk)
933  return result
934 
935  def get_response(self) -> typing.List[Response]:
936  """
937  get_response
938 
939  Returns:
940  typing.List[Response]: List of response
941  """
942  if self.__resp_mgr__resp_mgr is None:
943  return []
944  return self.__resp_mgr__resp_mgr.get_response()
945 
946  def __close_mgr(self):
947  """__close_mgr
948  """
949  if self.__resp_mgr__resp_mgr is not None:
950  self.__resp_mgr__resp_mgr.close()
951  self.__resp_mgr__resp_mgr = None
Struct for BulkCreateRequest Address for the request Write data of the request.
Definition: bulk.py:558
Struct for BulkReadRequest Address for the request Read argument of the request.
Definition: bulk.py:524
def __init__(self, str address, Variant data=None)
Struct for BulkReadRequest.
Definition: bulk.py:532
Struct for BulkWriteRequest Address for the request Write data of the request.
Definition: bulk.py:541
Result _create_sync(self)
Definition: bulk.py:923
Result _read_async(self, ResponseCallback cb, userData_c_void_p userdata)
Definition: bulk.py:693
def _add(self, str address, Variant data=None)
Definition: bulk.py:659
Result write(self, typing.List[BulkWriteRequest] request, ResponseCallback cb=None, userData_c_void_p userdata=None)
write
Definition: bulk.py:734
Result read(self, typing.List[BulkReadRequest] request, ResponseCallback cb=None, userData_c_void_p userdata=None)
read
Definition: bulk.py:677
Result _write_async(self, ResponseCallback cb, userData_c_void_p userdata)
Definition: bulk.py:766
Result _delete_async(self, ResponseCallback cb, userData_c_void_p userdata)
Definition: bulk.py:996
Result _browse_sync(self)
Definition: bulk.py:826
def __create_response_callback(self, ResponseCallback cb)
Definition: bulk.py:614
Result _metadata_async(self, ResponseCallback cb, userData_c_void_p userdata)
Definition: bulk.py:866
Result _delete_sync(self)
Definition: bulk.py:980
typing.List[Response] get_response(self)
get_response
Definition: bulk.py:1013
Result browse(self, typing.List[str] request, ResponseCallback cb=None, userData_c_void_p userdata=None)
browse
Definition: bulk.py:791
Result create(self, typing.List[BulkCreateRequest] request, ResponseCallback cb=None, userData_c_void_p userdata=None)
create
Definition: bulk.py:907
Result _create_async(self, ResponseCallback cb, userData_c_void_p userdata)
Definition: bulk.py:939
Result metadata(self, typing.List[str] request, ResponseCallback cb=None, userData_c_void_p userdata=None)
metadata
Definition: bulk.py:849
Result _read_sync(self)
Definition: bulk.py:711
def close(self)
close
Definition: bulk.py:604
Result delete(self, typing.List[str] request, ResponseCallback cb=None, userData_c_void_p userdata=None)
delete
Definition: bulk.py:964
Result _write_sync(self)
Definition: bulk.py:750
def __close_mgr(self)
Definition: bulk.py:1022
Result _metadata_sync(self)
Definition: bulk.py:884
Result _browse_async(self, ResponseCallback cb, userData_c_void_p userdata)
Definition: bulk.py:808
class Bulk Response
Definition: bulk.py:23
def __exit__(self, exc_type, exc_val, exc_tb)
use the python context manager
Definition: bulk.py:50
def __enter__(self)
use the python context manager
Definition: bulk.py:44
def __init__(self, str addr, C_DLR_VARIANT data, ctypes.c_uint64 time, Result result)
init Response Bulk
Definition: bulk.py:34
str get_address(self)
get_address
Definition: bulk.py:65
datetime.datetime get_datetime(self)
get_datetime
Definition: bulk.py:93
def close(self)
close
Definition: bulk.py:56
Result get_result(self)
get_result
Definition: bulk.py:73
Variant get_data(self)
get_data
Definition: bulk.py:82
class _ResponseAsynMgr
Definition: bulk.py:272
def __exit__(self, exc_type, exc_val, exc_tb)
use the python context manager
Definition: bulk.py:295
def __init__(self, _AsyncCreator ac)
init
Definition: bulk.py:281
def set_responses(self, typing.List[Response] responses)
set_responses
Definition: bulk.py:300
class _ResponseBulkMgr
Definition: bulk.py:234
def __exit__(self, exc_type, exc_val, exc_tb)
use the python context manager
Definition: bulk.py:263
def __enter__(self)
use the python context manager
Definition: bulk.py:257
def __init__(self, C_DLR_BULK bulk)
init
Definition: bulk.py:242
class _ResponseMgr
Definition: bulk.py:187
def __exit__(self, exc_type, exc_val, exc_tb)
use the python context manager
Definition: bulk.py:208
def __enter__(self)
use the python context manager
Definition: bulk.py:202
typing.List[Response] get_response(self)
get_response
Definition: bulk.py:225