layrz-sdk 3.0.0__tar.gz → 3.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of layrz-sdk might be problematic. Click here for more details.

Files changed (73) hide show
  1. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/PKG-INFO +1 -1
  2. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/lcl/core.py +143 -23
  3. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk.egg-info/PKG-INFO +1 -1
  4. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk.egg-info/SOURCES.txt +2 -1
  5. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/pyproject.toml +1 -1
  6. layrz_sdk-3.0.1/tests/test_lcl.py +910 -0
  7. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/LICENSE +0 -0
  8. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/README.md +0 -0
  9. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/__init__.py +0 -0
  10. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/__init__.py +0 -0
  11. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/broadcasts/__init__.py +0 -0
  12. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/broadcasts/request.py +0 -0
  13. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/broadcasts/response.py +0 -0
  14. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/broadcasts/result.py +0 -0
  15. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/broadcasts/service.py +0 -0
  16. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/broadcasts/status.py +0 -0
  17. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/cases/__init__.py +0 -0
  18. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/cases/case.py +0 -0
  19. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/cases/comment.py +0 -0
  20. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/cases/trigger.py +0 -0
  21. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/__init__.py +0 -0
  22. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/alignment.py +0 -0
  23. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/bar.py +0 -0
  24. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/column.py +0 -0
  25. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/configuration.py +0 -0
  26. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/data_type.py +0 -0
  27. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/exceptions.py +0 -0
  28. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/html.py +0 -0
  29. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/line.py +0 -0
  30. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/map.py +0 -0
  31. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/number.py +0 -0
  32. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/pie.py +0 -0
  33. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/radar.py +0 -0
  34. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/radial_bar.py +0 -0
  35. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/scatter.py +0 -0
  36. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/serie.py +0 -0
  37. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/serie_type.py +0 -0
  38. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/table.py +0 -0
  39. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/charts/timeline.py +0 -0
  40. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/checkpoints/__init__.py +0 -0
  41. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/checkpoints/checkpoint.py +0 -0
  42. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/checkpoints/geofence.py +0 -0
  43. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/checkpoints/waypoint.py +0 -0
  44. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/events/__init__.py +0 -0
  45. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/events/event.py +0 -0
  46. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/formatting/__init__.py +0 -0
  47. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/formatting/text_align.py +0 -0
  48. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/general/__init__.py +0 -0
  49. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/general/asset.py +0 -0
  50. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/general/asset_operation_mode.py +0 -0
  51. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/general/custom_field.py +0 -0
  52. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/general/device.py +0 -0
  53. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/general/sensor.py +0 -0
  54. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/general/user.py +0 -0
  55. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/repcom/__init__.py +0 -0
  56. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/repcom/transaction.py +0 -0
  57. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/reports/__init__.py +0 -0
  58. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/reports/col.py +0 -0
  59. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/reports/format.py +0 -0
  60. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/reports/header.py +0 -0
  61. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/reports/page.py +0 -0
  62. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/reports/report.py +0 -0
  63. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/reports/row.py +0 -0
  64. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/telemetry/__init__.py +0 -0
  65. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/telemetry/message.py +0 -0
  66. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/entities/telemetry/position.py +0 -0
  67. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/helpers/__init__.py +0 -0
  68. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/helpers/color.py +0 -0
  69. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk/lcl/__init__.py +0 -0
  70. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk.egg-info/dependency_links.txt +0 -0
  71. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk.egg-info/requires.txt +0 -0
  72. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/layrz_sdk.egg-info/top_level.txt +0 -0
  73. {layrz_sdk-3.0.0 → layrz_sdk-3.0.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: layrz-sdk
3
- Version: 3.0.0
3
+ Version: 3.0.1
4
4
  Summary: Layrz SDK for Python
5
5
  Author-email: "Golden M, Inc." <software@goldenm.com>
6
6
  Maintainer-email: Kenny Mochizuki <kenny@goldenm.com>, Luis Reyes <lreyes@goldenm.com>, Kasen Li <kli@goldenm.com>
@@ -128,6 +128,9 @@ class LclCore:
128
128
  if len(args) > 2:
129
129
  return INVALID_NUMBER_OF_PARAMS.format(expected=2, received=len(args))
130
130
 
131
+ if args[0] is None:
132
+ return None
133
+
131
134
  if len(args) > 1:
132
135
  return self._payload.get(args[0], args[1])
133
136
  return self._payload.get(args[0], None)
@@ -146,6 +149,9 @@ class LclCore:
146
149
  if len(args) > 2:
147
150
  return INVALID_NUMBER_OF_PARAMS.format(expected=2, received=len(args))
148
151
 
152
+ if args[0] is None:
153
+ return None
154
+
149
155
  if len(args) > 1:
150
156
  return self._previous_sensors.get(args[0], args[1])
151
157
  return self._previous_sensors.get(args[0], None)
@@ -158,6 +164,9 @@ class LclCore:
158
164
  if len(args) > 2:
159
165
  return INVALID_NUMBER_OF_PARAMS.format(expected=2, received=len(args))
160
166
 
167
+ if args[0] is None:
168
+ return None
169
+
161
170
  if len(args) > 1:
162
171
  return self._sensors.get(args[0], args[1])
163
172
  return self._sensors.get(args[0], None)
@@ -183,7 +192,7 @@ class LclCore:
183
192
  return None
184
193
 
185
194
  if not isinstance(args[0], type(args[1])):
186
- return DIFFERENT_TYPES.format(arg1=type(args[0]), arg2=type(args[1]))
195
+ return DIFFERENT_TYPES.format(arg1=type(args[0]).__name__, arg2=type(args[1]).__name__)
187
196
  return args[0] == args[1]
188
197
 
189
198
  def OR_OPERATOR(self, *args: list[Any]) -> bool:
@@ -206,6 +215,7 @@ class LclCore:
206
215
  for val in args:
207
216
  if val is None:
208
217
  return None
218
+
209
219
  if is_first:
210
220
  is_first = False
211
221
  result = val
@@ -220,7 +230,8 @@ class LclCore:
220
230
 
221
231
  for num in args:
222
232
  if num is None:
223
- continue
233
+ return None
234
+
224
235
  try:
225
236
  result += float(num)
226
237
  except Exception: # pylint: disable=broad-except
@@ -235,7 +246,8 @@ class LclCore:
235
246
 
236
247
  for num in args:
237
248
  if num is None:
238
- continue
249
+ return None
250
+
239
251
  try:
240
252
  if is_first:
241
253
  result = float(num)
@@ -254,7 +266,8 @@ class LclCore:
254
266
 
255
267
  for num in args:
256
268
  if num is None:
257
- continue
269
+ return None
270
+
258
271
  try:
259
272
  if is_first:
260
273
  is_first = False
@@ -273,7 +286,8 @@ class LclCore:
273
286
 
274
287
  for num in args:
275
288
  if num is None:
276
- continue
289
+ return None
290
+
277
291
  try:
278
292
  if is_first:
279
293
  is_first = False
@@ -289,8 +303,10 @@ class LclCore:
289
303
  """ TO_BOOL Function """
290
304
  if len(args) > 1:
291
305
  return INVALID_NUMBER_OF_PARAMS.format(expected=1, received=len(args))
306
+
292
307
  if args[0] is None:
293
308
  return None
309
+
294
310
  return bool(args[0])
295
311
 
296
312
  def TO_STR(self, *args: list[Any]) -> str | None:
@@ -300,22 +316,30 @@ class LclCore:
300
316
 
301
317
  if args[0] is None:
302
318
  return None
319
+
303
320
  return str(args[0])
304
321
 
305
322
  def TO_INT(self, *args: list[Any]) -> str | None | int:
306
323
  """ TO_INT Function """
307
324
  if len(args) > 1:
308
325
  return INVALID_NUMBER_OF_PARAMS.format(expected=1, received=len(args))
326
+
309
327
  if args[0] is None:
310
328
  return None
329
+
311
330
  return int(args[0])
312
331
 
313
332
  def CEIL(self, *args: list[Any]) -> str | None | int:
314
333
  """ CEIL Function """
315
334
  if len(args) > 1:
316
335
  return INVALID_NUMBER_OF_PARAMS.format(expected=1, received=len(args))
336
+
317
337
  if args[0] is None:
318
338
  return None
339
+
340
+ if not isinstance(args[0], (int, float)):
341
+ return f'Invalid arguments - must be real number, not {type(args[0]).__name__}'
342
+
319
343
  import math
320
344
  return math.ceil(args[0])
321
345
 
@@ -323,8 +347,13 @@ class LclCore:
323
347
  """ FLOOR Function """
324
348
  if len(args) > 1:
325
349
  return INVALID_NUMBER_OF_PARAMS.format(expected=1, received=len(args))
350
+
326
351
  if args[0] is None:
327
352
  return None
353
+
354
+ if not isinstance(args[0], (int, float)):
355
+ return f'Invalid arguments - must be real number, not {type(args[0]).__name__}'
356
+
328
357
  import math
329
358
  return math.floor(args[0])
330
359
 
@@ -332,16 +361,23 @@ class LclCore:
332
361
  """ ROUND Function """
333
362
  if len(args) > 1:
334
363
  return INVALID_NUMBER_OF_PARAMS.format(expected=1, received=len(args))
364
+
335
365
  if args[0] is None:
336
366
  return None
367
+
368
+ if not isinstance(args[0], (int, float)):
369
+ return f'Invalid arguments - must be real number, not {type(args[0]).__name__}'
370
+
337
371
  return round(args[0])
338
372
 
339
373
  def SQRT(self, *args: list[Any]) -> str | None | float:
340
374
  """ SQRT Function """
341
375
  if len(args) > 1:
342
376
  return INVALID_NUMBER_OF_PARAMS.format(expected=1, received=len(args))
377
+
343
378
  if args[0] is None:
344
379
  return None
380
+
345
381
  import math
346
382
  return math.sqrt(args[0])
347
383
 
@@ -350,6 +386,7 @@ class LclCore:
350
386
  for val in args:
351
387
  if val is None:
352
388
  return None
389
+
353
390
  return ''.join([str(val) for val in args])
354
391
 
355
392
  def RANDOM(self, *args: list[Any]) -> float | str:
@@ -359,6 +396,9 @@ class LclCore:
359
396
  if len(args) < 2:
360
397
  return INVALID_NUMBER_OF_PARAMS.format(expected=2, received=len(args))
361
398
 
399
+ if args[0] is None or args[1] is None:
400
+ return None
401
+
362
402
  import random
363
403
  return random.random() * (float(args[1]) - float(args[0])) + float(args[0])
364
404
 
@@ -367,6 +407,9 @@ class LclCore:
367
407
  if len(args) != 2:
368
408
  return INVALID_NUMBER_OF_PARAMS.format(expected=2, received=len(args))
369
409
 
410
+ if args[0] is None or args[1] is None:
411
+ return None
412
+
370
413
  import random
371
414
  return random.randint(int(args[0]), int(args[1]))
372
415
 
@@ -381,7 +424,7 @@ class LclCore:
381
424
  return None
382
425
 
383
426
  if not isinstance(args[0], type(args[1])):
384
- return DIFFERENT_TYPES.format(arg1=type(args[0]), arg2=type(args[1]))
427
+ return DIFFERENT_TYPES.format(arg1=type(args[0]).__name__, arg2=type(args[1]).__name__)
385
428
  return args[0] >= args[1]
386
429
 
387
430
  def GREATER_THAN(self, *args: list[Any]) -> str | None | bool:
@@ -395,7 +438,7 @@ class LclCore:
395
438
  return None
396
439
 
397
440
  if not isinstance(args[0], type(args[1])):
398
- return DIFFERENT_TYPES.format(arg1=type(args[0]), arg2=type(args[1]))
441
+ return DIFFERENT_TYPES.format(arg1=type(args[0]).__name__, arg2=type(args[1]).__name__)
399
442
  return args[0] > args[1]
400
443
 
401
444
  def LESS_THAN_OR_EQUALS_TO(self, *args: list[Any]) -> str | None | bool:
@@ -409,7 +452,7 @@ class LclCore:
409
452
  return None
410
453
 
411
454
  if not isinstance(args[0], type(args[1])):
412
- return DIFFERENT_TYPES.format(arg1=type(args[0]), arg2=type(args[1]))
455
+ return DIFFERENT_TYPES.format(arg1=type(args[0]).__name__, arg2=type(args[1]).__name__)
413
456
  return args[0] <= args[1]
414
457
 
415
458
  def LESS_THAN(self, *args: list[Any]) -> str | None | bool:
@@ -423,7 +466,7 @@ class LclCore:
423
466
  return None
424
467
 
425
468
  if not isinstance(args[0], type(args[1])):
426
- return DIFFERENT_TYPES.format(arg1=type(args[0]), arg2=type(args[1]))
469
+ return DIFFERENT_TYPES.format(arg1=type(args[0]).__name__, arg2=type(args[1]).__name__)
427
470
  return args[0] < args[1]
428
471
 
429
472
  def DIFFERENT(self, *args: list[Any]) -> str | None | bool:
@@ -437,7 +480,7 @@ class LclCore:
437
480
  return None
438
481
 
439
482
  if not isinstance(args[0], type(args[1])):
440
- return DIFFERENT_TYPES.format(arg1=type(args[0]), arg2=type(args[1]))
483
+ return DIFFERENT_TYPES.format(arg1=type(args[0]).__name__, arg2=type(args[1]).__name__)
441
484
  return args[0] != args[1]
442
485
 
443
486
  def HEX_TO_STR(self, *args: list[Any]) -> str | None:
@@ -447,46 +490,74 @@ class LclCore:
447
490
 
448
491
  if args[0] is None:
449
492
  return None
450
- byte_array = bytes.fromhex(args[0])
451
- return byte_array.decode('ASCII')
493
+
494
+ hexa = args[0]
495
+ if hexa.startswith('0x'):
496
+ hexa = hexa[2:]
497
+
498
+ try:
499
+ byte_array = bytes.fromhex(hexa)
500
+ return byte_array.decode('ASCII')
501
+ except Exception: # pylint: disable=broad-except
502
+ return 'Invalid hex string'
452
503
 
453
504
  def STR_TO_HEX(self, *args: list[Any]) -> str | None:
454
505
  """ STR_TO_HEX Function """
455
506
  if len(args) > 1:
456
507
  return INVALID_NUMBER_OF_PARAMS.format(expected=1, received=len(args))
508
+
457
509
  if args[0] is None:
458
510
  return None
511
+
459
512
  return str(args[0]).encode('ASCII').hex()
460
513
 
461
514
  def HEX_TO_INT(self, *args: list[Any]) -> str | None | int:
462
515
  """ HEX_TO_INT Function """
463
516
  if len(args) > 1:
464
517
  return INVALID_NUMBER_OF_PARAMS.format(expected=1, received=len(args))
518
+
465
519
  if args[0] is None:
466
520
  return None
467
- return int(int(args[0], 16))
521
+
522
+ try:
523
+ return int(int(args[0], 16))
524
+ except Exception: # pylint: disable=broad-except
525
+ return 'Invalid hex string'
468
526
 
469
527
  def INT_TO_HEX(self, *args: list[Any]) -> str | None:
470
528
  """ INT_TO_HEX Function """
471
529
  if len(args) > 1:
472
530
  return INVALID_NUMBER_OF_PARAMS.format(expected=1, received=len(args))
531
+
473
532
  if args[0] is None:
474
533
  return None
475
- return hex(int(args[0]))[2:]
534
+
535
+ try:
536
+ return hex(int(args[0]))[2:]
537
+ except Exception: # pylint: disable=broad-except
538
+ return 'Invalid int value'
476
539
 
477
540
  def TO_FLOAT(self, *args: list[Any]) -> str | None | float:
478
541
  """ TO_FLOAT Function """
479
542
  if len(args) > 1:
480
543
  return INVALID_NUMBER_OF_PARAMS.format(expected=1, received=len(args))
544
+
481
545
  if args[0] is None:
482
546
  return None
483
- return float(args[0])
547
+
548
+ try:
549
+ return float(args[0])
550
+ except Exception: # pylint: disable=broad-except
551
+ return f'Invalid arguments - must be real number, not {type(args[0]).__name__}'
484
552
 
485
553
  def IS_PARAMETER_PRESENT(self, *args: list[Any]) -> str | bool:
486
554
  """ IS_PARAMETER_PRESENT Function """
487
555
  if len(args) > 1:
488
556
  return INVALID_NUMBER_OF_PARAMS.format(expected=1, received=len(args))
489
557
 
558
+ if args[0] is None:
559
+ return None
560
+
490
561
  return args[0] in self._payload
491
562
 
492
563
  def IS_SENSOR_PRESENT(self, *args: list[Any]) -> str | bool:
@@ -494,6 +565,9 @@ class LclCore:
494
565
  if len(args) > 1:
495
566
  return INVALID_NUMBER_OF_PARAMS.format(expected=1, received=len(args))
496
567
 
568
+ if args[0] is None:
569
+ return None
570
+
497
571
  return args[0] in self._sensors
498
572
 
499
573
  def INSIDE_RANGE(self, *args: list[Any]) -> str | None | bool:
@@ -503,8 +577,13 @@ class LclCore:
503
577
 
504
578
  if args[0] is None or args[1] is None or args[2] is None:
505
579
  return None
580
+
506
581
  if not isinstance(args[0], type(args[1])):
507
- return DIFFERENT_TYPES_RANGES.format(arg1=type(args[0]), arg2=type(args[1]), arg3=type(args[2]))
582
+ return DIFFERENT_TYPES_RANGES.format(
583
+ arg1=type(args[0]).__name__,
584
+ arg2=type(args[1]).__name__,
585
+ arg3=type(args[2]).__name__,
586
+ )
508
587
 
509
588
  return args[1] <= args[0] <= args[2]
510
589
 
@@ -515,8 +594,13 @@ class LclCore:
515
594
 
516
595
  if args[0] is None or args[1] is None or args[2] is None:
517
596
  return None
597
+
518
598
  if not isinstance(args[0], type(args[1])):
519
- return DIFFERENT_TYPES_RANGES.format(arg1=type(args[0]), arg2=type(args[1]), arg3=type(args[2]))
599
+ return DIFFERENT_TYPES_RANGES.format(
600
+ arg1=type(args[0]).__name__,
601
+ arg2=type(args[1]).__name__,
602
+ arg3=type(args[2]).__name__,
603
+ )
520
604
 
521
605
  return not args[1] <= args[0] <= args[2]
522
606
 
@@ -524,6 +608,7 @@ class LclCore:
524
608
  """ GET_TIME_DIFFERENCE Function """
525
609
  if len(args) > 0:
526
610
  return INVALID_NUMBER_OF_PARAMS.format(expected=0, received=len(args))
611
+
527
612
  return self._asset_constants.get('timeElapsed', 0)
528
613
 
529
614
  def IF(self, *args: list[Any]) -> Any:
@@ -531,6 +616,9 @@ class LclCore:
531
616
  if len(args) != 3:
532
617
  return INVALID_NUMBER_OF_PARAMS.format(expected=3, received=len(args))
533
618
 
619
+ if args[0] is None or args[1] is None or args[2] is None:
620
+ return None
621
+
534
622
  return args[1] if args[0] else args[2]
535
623
 
536
624
  def NOW(self, *args: list[Any]) -> float: # pylint: disable=unused-argument
@@ -566,6 +654,9 @@ class LclCore:
566
654
  if len(args) != 1:
567
655
  return INVALID_NUMBER_OF_PARAMS.format(expected=1, received=len(args))
568
656
 
657
+ if args[0] is None:
658
+ return None
659
+
569
660
  return not args[0]
570
661
 
571
662
  def CONTAINS(self, *args: list[Any]) -> str | bool:
@@ -573,6 +664,9 @@ class LclCore:
573
664
  if len(args) != 2:
574
665
  return INVALID_NUMBER_OF_PARAMS.format(expected=2, received=len(args))
575
666
 
667
+ if args[0] is None or args[1] is None:
668
+ return None
669
+
576
670
  return str(args[0]) in str(args[1])
577
671
 
578
672
  def STARTS_WITH(self, *args: list[Any]) -> str | bool:
@@ -580,6 +674,9 @@ class LclCore:
580
674
  if len(args) != 2:
581
675
  return INVALID_NUMBER_OF_PARAMS.format(expected=2, received=len(args))
582
676
 
677
+ if args[0] is None or args[1] is None:
678
+ return None
679
+
583
680
  return str(args[1]).startswith(str(args[0]))
584
681
 
585
682
  def ENDS_WITH(self, *args: list[Any]) -> str | bool:
@@ -587,6 +684,9 @@ class LclCore:
587
684
  if len(args) != 2:
588
685
  return INVALID_NUMBER_OF_PARAMS.format(expected=2, received=len(args))
589
686
 
687
+ if args[0] is None or args[1] is None:
688
+ return None
689
+
590
690
  return str(args[1]).endswith(str(args[0]))
591
691
 
592
692
  def PRIMARY_DEVICE(self, *args: list[Any]) -> str:
@@ -610,15 +710,25 @@ class LclCore:
610
710
  received=len(args),
611
711
  )
612
712
 
613
- if args[0] is None or not isinstance(args[0], str):
614
- return DIFFERENT_TYPES.format(arg1='str', arg2=type(args[0]))
713
+ if args[0] is None:
714
+ return None
715
+
716
+ if not isinstance(args[0], str):
717
+ return DIFFERENT_TYPES.format(arg1='str', arg2=type(args[0]).__name__)
718
+
719
+ if args[1] is None:
720
+ return None
615
721
 
616
- if args[1] is None or not isinstance(args[1], int):
617
- return DIFFERENT_TYPES.format(arg1='int', arg2=type(args[1]))
722
+ if not isinstance(args[1], int):
723
+ return DIFFERENT_TYPES.format(arg1='int', arg2=type(args[1]).__name__)
618
724
 
619
725
  if len(args) == 3:
620
- if args[2] is None or not isinstance(args[2], int):
621
- return DIFFERENT_TYPES.format(arg1='str', arg2=type(args[2]))
726
+ if args[2] is None:
727
+ return None
728
+
729
+ if not isinstance(args[2], int):
730
+ return DIFFERENT_TYPES.format(arg1='str', arg2=type(args[2]).__name__)
731
+
622
732
  return args[0][args[1]:args[2]]
623
733
  return args[0][args[1]:]
624
734
 
@@ -626,12 +736,22 @@ class LclCore:
626
736
  """ Convert UNIX timestamp date (args[0]) to format (args[1]) string """
627
737
  if len(args) < 2:
628
738
  return INVALID_NUMBER_OF_PARAMS.format(expected=2, received=len(args))
739
+
740
+ if args[0] is None:
741
+ return None
742
+
743
+ if args[1] is None:
744
+ return None
745
+
629
746
  import zoneinfo
630
747
  from datetime import datetime
631
748
 
632
749
  tz = zoneinfo.ZoneInfo('UTC')
633
750
 
634
751
  if len(args) > 2:
752
+ if args[2] is None:
753
+ return None
754
+
635
755
  try:
636
756
  tz = zoneinfo.ZoneInfo(args[2])
637
757
  except zoneinfo.ZoneInfoNotFoundError:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: layrz-sdk
3
- Version: 3.0.0
3
+ Version: 3.0.1
4
4
  Summary: Layrz SDK for Python
5
5
  Author-email: "Golden M, Inc." <software@goldenm.com>
6
6
  Maintainer-email: Kenny Mochizuki <kenny@goldenm.com>, Luis Reyes <lreyes@goldenm.com>, Kasen Li <kli@goldenm.com>
@@ -67,4 +67,5 @@ layrz_sdk/entities/telemetry/position.py
67
67
  layrz_sdk/helpers/__init__.py
68
68
  layrz_sdk/helpers/color.py
69
69
  layrz_sdk/lcl/__init__.py
70
- layrz_sdk/lcl/core.py
70
+ layrz_sdk/lcl/core.py
71
+ tests/test_lcl.py
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "layrz-sdk"
3
- version = "3.0.0"
3
+ version = "3.0.1"
4
4
  description = "Layrz SDK for Python"
5
5
  authors = [
6
6
  {name = "Golden M, Inc.", email = "software@goldenm.com"}