PyAutomationIO 1.1.1__tar.gz → 1.1.2__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.
Files changed (147) hide show
  1. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/PKG-INFO +1 -1
  2. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/PyAutomationIO.egg-info/PKG-INFO +1 -1
  3. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/logger/datalogger.py +28 -20
  4. pyautomationio-1.1.2/version.py +2 -0
  5. pyautomationio-1.1.1/version.py +0 -2
  6. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/LICENSE +0 -0
  7. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/MANIFEST.in +0 -0
  8. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/PyAutomationIO.egg-info/SOURCES.txt +0 -0
  9. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/PyAutomationIO.egg-info/dependency_links.txt +0 -0
  10. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/PyAutomationIO.egg-info/requires.txt +0 -0
  11. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/PyAutomationIO.egg-info/top_level.txt +0 -0
  12. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/README.md +0 -0
  13. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/__init__.py +0 -0
  14. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/alarms/__init__.py +0 -0
  15. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/alarms/states.py +0 -0
  16. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/alarms/trigger.py +0 -0
  17. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/buffer.py +0 -0
  18. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/core.py +0 -0
  19. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/dbmodels/__init__.py +0 -0
  20. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/dbmodels/alarms.py +0 -0
  21. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/dbmodels/core.py +0 -0
  22. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/dbmodels/events.py +0 -0
  23. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/dbmodels/logs.py +0 -0
  24. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/dbmodels/machines.py +0 -0
  25. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/dbmodels/opcua.py +0 -0
  26. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/dbmodels/opcua_server.py +0 -0
  27. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/dbmodels/tags.py +0 -0
  28. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/dbmodels/users.py +0 -0
  29. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/extensions/__init__.py +0 -0
  30. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/extensions/api.py +0 -0
  31. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/extensions/cors.py +0 -0
  32. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/filter/__init__.py +0 -0
  33. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/iad/__init__.py +0 -0
  34. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/iad/frozen_data.py +0 -0
  35. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/iad/out_of_range.py +0 -0
  36. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/iad/outliers.py +0 -0
  37. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/logger/__init__.py +0 -0
  38. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/logger/alarms.py +0 -0
  39. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/logger/core.py +0 -0
  40. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/logger/events.py +0 -0
  41. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/logger/logdict.py +0 -0
  42. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/logger/logs.py +0 -0
  43. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/logger/machines.py +0 -0
  44. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/logger/opcua_server.py +0 -0
  45. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/logger/users.py +0 -0
  46. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/managers/__init__.py +0 -0
  47. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/managers/alarms.py +0 -0
  48. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/managers/db.py +0 -0
  49. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/managers/opcua_client.py +0 -0
  50. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/managers/state_machine.py +0 -0
  51. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/models.py +0 -0
  52. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/__init__.py +0 -0
  53. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/alarms/__init__.py +0 -0
  54. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/alarms/resources/__init__.py +0 -0
  55. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/alarms/resources/alarms.py +0 -0
  56. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/alarms/resources/summary.py +0 -0
  57. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/events/__init__.py +0 -0
  58. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/events/resources/__init__.py +0 -0
  59. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/events/resources/events.py +0 -0
  60. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/events/resources/logs.py +0 -0
  61. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/tags/__init__.py +0 -0
  62. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/tags/resources/__init__.py +0 -0
  63. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/tags/resources/tags.py +0 -0
  64. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/users/__init__.py +0 -0
  65. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/users/resources/__init__.py +0 -0
  66. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/users/resources/models/__init__.py +0 -0
  67. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/users/resources/models/roles.py +0 -0
  68. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/users/resources/models/users.py +0 -0
  69. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/users/resources/roles.py +0 -0
  70. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/users/resources/users.py +0 -0
  71. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/users/roles.py +0 -0
  72. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/modules/users/users.py +0 -0
  73. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/opcua/__init__.py +0 -0
  74. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/opcua/models.py +0 -0
  75. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/opcua/subscription.py +0 -0
  76. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/__init__.py +0 -0
  77. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/alarms.py +0 -0
  78. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/alarms_history.py +0 -0
  79. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/assets/styles.css +0 -0
  80. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/callbacks/__init__.py +0 -0
  81. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/callbacks/alarms.py +0 -0
  82. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/callbacks/alarms_summary.py +0 -0
  83. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/callbacks/db.py +0 -0
  84. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/callbacks/filter.py +0 -0
  85. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/callbacks/machines.py +0 -0
  86. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/callbacks/machines_detailed.py +0 -0
  87. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/callbacks/opcua.py +0 -0
  88. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/callbacks/opcua_server.py +0 -0
  89. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/callbacks/tags.py +0 -0
  90. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/callbacks/trends.py +0 -0
  91. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/communications.py +0 -0
  92. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/components/__init__.py +0 -0
  93. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/components/alarms.py +0 -0
  94. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/components/alarms_summary.py +0 -0
  95. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/components/database.py +0 -0
  96. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/components/gaussian_filter.py +0 -0
  97. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/components/machines.py +0 -0
  98. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/components/opcua.py +0 -0
  99. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/components/opcua_server.py +0 -0
  100. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/components/tags.py +0 -0
  101. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/components/trends.py +0 -0
  102. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/database.py +0 -0
  103. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/filter.py +0 -0
  104. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/machines.py +0 -0
  105. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/machines_detailed.py +0 -0
  106. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/main.py +0 -0
  107. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/opcua_server.py +0 -0
  108. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/tags.py +0 -0
  109. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/pages/trends.py +0 -0
  110. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/singleton.py +0 -0
  111. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/state_machine.py +0 -0
  112. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/tags/__init__.py +0 -0
  113. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/tags/cvt.py +0 -0
  114. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/tags/filter.py +0 -0
  115. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/tags/tag.py +0 -0
  116. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/tests/__init__.py +0 -0
  117. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/tests/test_alarms.py +0 -0
  118. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/tests/test_core.py +0 -0
  119. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/tests/test_unit.py +0 -0
  120. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/tests/test_user.py +0 -0
  121. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/utils/__init__.py +0 -0
  122. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/utils/decorators.py +0 -0
  123. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/utils/npw.py +0 -0
  124. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/utils/observer.py +0 -0
  125. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/utils/units.py +0 -0
  126. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/variables/__init__.py +0 -0
  127. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/variables/adimentional.py +0 -0
  128. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/variables/current.py +0 -0
  129. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/variables/density.py +0 -0
  130. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/variables/eng_time.py +0 -0
  131. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/variables/force.py +0 -0
  132. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/variables/length.py +0 -0
  133. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/variables/mass.py +0 -0
  134. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/variables/mass_flow.py +0 -0
  135. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/variables/percentage.py +0 -0
  136. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/variables/power.py +0 -0
  137. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/variables/pressure.py +0 -0
  138. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/variables/temperature.py +0 -0
  139. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/variables/volume.py +0 -0
  140. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/variables/volumetric_flow.py +0 -0
  141. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/workers/__init__.py +0 -0
  142. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/workers/logger.py +0 -0
  143. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/workers/state_machine.py +0 -0
  144. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/automation/workers/worker.py +0 -0
  145. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/requirements.txt +0 -0
  146. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/setup.cfg +0 -0
  147. {pyautomationio-1.1.1 → pyautomationio-1.1.2}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyAutomationIO
3
- Version: 1.1.1
3
+ Version: 1.1.2
4
4
  Summary: A python library to develop automation continuous tasks using sync or async concurrent threads
5
5
  Home-page: https://github.com/know-ai/PyAutomation
6
6
  Author: KnowAI
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyAutomationIO
3
- Version: 1.1.1
3
+ Version: 1.1.2
4
4
  Summary: A python library to develop automation continuous tasks using sync or async concurrent threads
5
5
  Home-page: https://github.com/know-ai/PyAutomation
6
6
  Author: KnowAI
@@ -405,7 +405,9 @@ class DataLogger(BaseLogger):
405
405
 
406
406
  Returns:
407
407
  dict: {
408
- "data": [...],
408
+ "tag_names": ["timestamp", "tag1", ...],
409
+ "display_names": ["timestamp", "Display Tag 1", ...],
410
+ "values": [[ts, val1, ...], ...],
409
411
  "pagination": {...}
410
412
  }
411
413
  """
@@ -429,6 +431,23 @@ class DataLogger(BaseLogger):
429
431
  if sample_time <= 0:
430
432
  return dict()
431
433
 
434
+ # Get display names mapping early
435
+ try:
436
+ tags_info = Tags.select(Tags.name, Tags.display_name).where(Tags.name.in_(tags)).dicts()
437
+ display_map = {t['name']: t['display_name'] for t in tags_info}
438
+ except Exception:
439
+ display_map = {}
440
+
441
+ tag_names = ["timestamp"] + tags
442
+ display_names = ["timestamp"] + [display_map.get(tag, tag) for tag in tags]
443
+
444
+ empty_result = {
445
+ "tag_names": tag_names,
446
+ "display_names": display_names,
447
+ "values": [],
448
+ "pagination": {}
449
+ }
450
+
432
451
  # Check for data presence to adjust start time if necessary
433
452
  # 1. Check if there is any data BEFORE or AT start_dt (history)
434
453
  has_history = (TagValue
@@ -456,7 +475,7 @@ class DataLogger(BaseLogger):
456
475
 
457
476
  if min_ts is None:
458
477
  # No data in range and no history
459
- return {"data": [], "pagination": {}}
478
+ return empty_result
460
479
 
461
480
  # Adjust start to the first actual data point
462
481
  # Ensure min_ts is timezone aware if needed, though scalar() returns DB format
@@ -472,7 +491,7 @@ class DataLogger(BaseLogger):
472
491
  # Calculate total records based on time range and sample time
473
492
  total_duration = stop_ts - start_ts
474
493
  if total_duration < 0:
475
- return {"data": [], "pagination": {}}
494
+ return empty_result
476
495
 
477
496
  total_records = math.floor(total_duration / sample_time) + 1
478
497
 
@@ -500,13 +519,6 @@ class DataLogger(BaseLogger):
500
519
  data_points = []
501
520
  current_ts = page_start_ts
502
521
 
503
- # Pre-fetch data for optimization could be complex due to forward fill requirement across large gaps.
504
- # However, we can query per tag or query all data in range.
505
- # For efficiency with many tags/large range, we should query intelligently.
506
- # But to guarantee "last known value", we might need to look back indefinitely if no recent data.
507
- # A simple approach for now: Query "last value before or at page_start_ts" for each tag,
508
- # and all values between page_start_ts and page_end_ts.
509
-
510
522
  # 1. Get initial values (state at page_start_ts)
511
523
  current_values = {}
512
524
  # Convert float timestamp to datetime for Peewee comparison
@@ -566,12 +578,6 @@ class DataLogger(BaseLogger):
566
578
  # We iterate step by step. This might be slow if step is small and range is large,
567
579
  # but we are limited by pagination 'limit' (e.g. 20 rows), so it's fast!
568
580
 
569
- # We need to process from page_start_ts to page_end_ts in sample_time steps.
570
- # BUT we have a list of changes.
571
- # The simple way: Iterate steps.
572
-
573
- # Optimization: We have 'limit' steps.
574
-
575
581
  changes_iter = sorted(changes_by_ts.keys())
576
582
  change_idx = 0
577
583
 
@@ -595,19 +601,21 @@ class DataLogger(BaseLogger):
595
601
  dt_object = datetime.fromtimestamp(step_ts, pytz.UTC)
596
602
  formatted_ts = dt_object.astimezone(_timezone).strftime(DATETIME_FORMAT)
597
603
 
598
- row = {"timestamp": formatted_ts}
604
+ row_values = [formatted_ts]
599
605
  has_data = False
600
606
  for tag in tags:
601
607
  val = current_values.get(tag)
602
- row[tag] = val # None if no value ever recorded
608
+ row_values.append(val)
603
609
  if val is not None:
604
610
  has_data = True
605
611
 
606
612
  if has_data:
607
- data_points.append(row)
613
+ data_points.append(row_values)
608
614
 
609
615
  return {
610
- "data": data_points,
616
+ "tag_names": tag_names,
617
+ "display_names": display_names,
618
+ "values": data_points,
611
619
  "pagination": {
612
620
  "page": page,
613
621
  "limit": limit,
@@ -0,0 +1,2 @@
1
+ __version__ = '1.1.2'
2
+
@@ -1,2 +0,0 @@
1
- __version__ = '1.1.1'
2
-
File without changes
File without changes
File without changes
File without changes