tts-data-utils 0.7.3__tar.gz → 0.7.4__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 (99) hide show
  1. {tts_data_utils-0.7.3/src/tts_data_utils.egg-info → tts_data_utils-0.7.4}/PKG-INFO +1 -1
  2. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/core/data_container.py +23 -5
  3. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/core/visual_diff.py +2 -23
  4. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/multimission/evr.py +3 -12
  5. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4/src/tts_data_utils.egg-info}/PKG-INFO +1 -1
  6. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/.gitignore +0 -0
  7. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/README.md +0 -0
  8. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/ci/sphinx_ignore_tags.txt +0 -0
  9. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/docs/_static/bugfix.css +0 -0
  10. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/docs/conf.py +0 -0
  11. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/docs/core/container_history.rst +0 -0
  12. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/docs/core/data_container.rst +0 -0
  13. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/docs/core/data_item.rst +0 -0
  14. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/docs/core/diff.rst +0 -0
  15. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/docs/core/generic.rst +0 -0
  16. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/docs/index.rst +0 -0
  17. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/docs/invulnerable_data_manager/idm_utilities.rst +0 -0
  18. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/docs/invulnerable_data_manager/invulnerable_data_manager.rst +0 -0
  19. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/docs/lorem_ipsum_feature.md +0 -0
  20. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/docs/multimission/eha.rst +0 -0
  21. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/docs/multimission/evr.rst +0 -0
  22. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/docs/multimission/evr_gaps.rst +0 -0
  23. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/docs/multimission/expected_lad.rst +0 -0
  24. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/docs/multimission/planning_rule.rst +0 -0
  25. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/examples/data_utils_demo.ipynb +0 -0
  26. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/license.md +0 -0
  27. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/napkin +0 -0
  28. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/pyproject.toml +0 -0
  29. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/setup.cfg +0 -0
  30. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/setup.py +0 -0
  31. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/__init__.py +0 -0
  32. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/core/__init__.py +0 -0
  33. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/core/container_history.py +0 -0
  34. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/core/data_item.py +0 -0
  35. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/core/diff.py +0 -0
  36. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/core/generic.py +0 -0
  37. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/core/lorem_utils.py +0 -0
  38. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/invulnerable_data_manager/__init__.py +0 -0
  39. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/invulnerable_data_manager/batch.py +0 -0
  40. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/invulnerable_data_manager/invulnerable_data_manager.py +0 -0
  41. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/invulnerable_data_manager/utilities.py +0 -0
  42. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/multimission/__init__.py +0 -0
  43. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/multimission/alarms.py +0 -0
  44. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/multimission/eha.py +0 -0
  45. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/multimission/evr_gaps.py +0 -0
  46. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/multimission/expected_lad.py +0 -0
  47. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/multimission/planning_rule.py +0 -0
  48. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/multimission/taco.py +0 -0
  49. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/__init__.py +0 -0
  50. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/__init__.py +0 -0
  51. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_data_container.py +0 -0
  52. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_data_item.py +0 -0
  53. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_diff.py +0 -0
  54. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_dict/actual_diff.csv +0 -0
  55. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_dict/expected_diff.csv +0 -0
  56. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_dict/left.csv +0 -0
  57. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_dict/right.csv +0 -0
  58. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_list/actual_diff.csv +0 -0
  59. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_list/expected_diff.csv +0 -0
  60. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_list/left.csv +0 -0
  61. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_list/right.csv +0 -0
  62. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_list_size/actual_diff.csv +0 -0
  63. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_list_size/expected_diff.csv +0 -0
  64. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_list_size/left.csv +0 -0
  65. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_list_size/right.csv +0 -0
  66. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_simple_types/actual_diff.csv +0 -0
  67. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_simple_types/expected_diff.csv +0 -0
  68. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_simple_types/left.csv +0 -0
  69. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_simple_types/right.csv +0 -0
  70. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_type/actual_diff.csv +0 -0
  71. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_type/expected_diff.csv +0 -0
  72. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_type/left.csv +0 -0
  73. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/diff_type/right.csv +0 -0
  74. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/diff/same_not_same/actual_diff.csv +0 -0
  75. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/visdiff/adjacent_insert_delete.html +0 -0
  76. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/visdiff/insert_and_delete.html +0 -0
  77. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/visdiff/no_diff.html +0 -0
  78. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/visdiff/overlapping_insert_delete.html +0 -0
  79. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/visdiff/replace.html +0 -0
  80. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/visdiff/replace_with_delete.html +0 -0
  81. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/visdiff/simple_delete.html +0 -0
  82. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/visdiff/simple_insert.html +0 -0
  83. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_files/visdiff/stressing_case.html +0 -0
  84. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_filters.py +0 -0
  85. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_generic_container.py +0 -0
  86. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_history.py +0 -0
  87. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/core/test_visdiff.py +0 -0
  88. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/invulnerable_data_manager/test_invulnerable_data_manager.py +0 -0
  89. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/multimission/__init__.py +0 -0
  90. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/multimission/evr/__init__.py +0 -0
  91. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/multimission/evr/test_evr.py +0 -0
  92. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/multimission/evr/test_files/actual_evr_gaps.csv +0 -0
  93. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/multimission/evr/test_files/evrs_with_gaps.csv +0 -0
  94. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/test/multimission/evr/test_files/expected_evr_gaps.csv +0 -0
  95. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils/util.py +0 -0
  96. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils.egg-info/SOURCES.txt +0 -0
  97. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils.egg-info/dependency_links.txt +0 -0
  98. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils.egg-info/requires.txt +0 -0
  99. {tts_data_utils-0.7.3 → tts_data_utils-0.7.4}/src/tts_data_utils.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tts-data-utils
3
- Version: 0.7.3
3
+ Version: 0.7.4
4
4
  Summary: Utilities for working with 2D data.
5
5
  Author: muszynsk
6
6
  Author-email: muszynsk <matt.muszynski@jpl.nasa.gov>
@@ -238,7 +238,7 @@ class DataContainer(ABC):
238
238
  table_builder = DocxTable(template, self.records, headers=self._repr_cols, row_styles=[r.default_rich_text_row_style for r in self.records])
239
239
  return table_builder.render()
240
240
 
241
- def power_table(self, superheader=None, columns=None, bypass_styles=False, row_styles=None, cell_styles=None, **kwargs):
241
+ def power_table(self, superheader=None, columns=None, bypass_styles=False, row_styles=None, cell_styles=None, expand_blocks='subcontainers', add_filters=None, add_sorting=None, **kwargs):
242
242
  """
243
243
  Produce a rich, interactive HTML table representation of this DataContainer.
244
244
 
@@ -257,12 +257,27 @@ class DataContainer(ABC):
257
257
  :type row_styles: list[dict[str, str]]
258
258
  :param cell_styles: Custom CSS for each cell. Must match `self.records` length.
259
259
  :type cell_styles: list[list[dict[str, str]]]
260
- :param kwargs: Passthrough arguments for PowerTable (e.g., `id`, `add_filters`).
260
+ :param expand_blocks: Controls how nested content is rendered. If 'subcontainers',
261
+ automatically expands all subcontainers. Otherwise, provide a list
262
+ of HtmlComponent objects matching the length of `self.records` to
263
+ explicitly define expandable content for each row.
264
+ :type expand_blocks: str | list[HtmlComponent]
265
+ :param add_filters: Enable column filtering. Options: 'local', 'django', or None.
266
+ :type add_filters: str, optional
267
+ :param add_sorting: Enable column sorting. Options: 'local', 'django', or None.
268
+ :type add_sorting: str, optional
269
+ :param kwargs: Additional passthrough arguments for PowerTable (e.g., `id`, `class_name`).
261
270
  :return: A rendered PowerTable component.
271
+
262
272
  """
263
273
 
264
274
  # TO DO: Rethink how we handle repr_cols here when you're not so braindead
265
- row_data = [(r.values, [subcontainer_obj.power_table(subcontainer_name) for subcontainer_name, subcontainer_obj in r.subcontainers.items()]) for r in self.records]
275
+ if expand_blocks == 'subcontainers':
276
+ row_data = [(r.values, [subcontainer_obj.power_table(subcontainer_name) for subcontainer_name, subcontainer_obj in r.subcontainers.items()]) for r in self.records]
277
+ else:
278
+ if len(self.records) != len(expand_blocks):
279
+ raise ValueError("The number of expand blocks must match the number of records")
280
+ row_data = [(r.values, e) for r, e in zip(self.records, expand_blocks)]
266
281
 
267
282
  if columns is not None:
268
283
  repr_cols = columns
@@ -296,6 +311,8 @@ class DataContainer(ABC):
296
311
  row_data=row_data,
297
312
  row_styles=row_styles,
298
313
  cell_styles=cell_styles,
314
+ add_filters=add_filters,
315
+ add_sorting=add_sorting,
299
316
  **kwargs
300
317
  )
301
318
  if superheader:
@@ -1696,11 +1713,12 @@ class DataContainer(ABC):
1696
1713
  records_copy = copy(self.records)
1697
1714
  if by is None and lam is None:
1698
1715
  by = self.default_time_label
1699
- records_copy.sort(key=lambda r: r.source[by], reverse=reverse)
1716
+ records_copy.sort(key=lambda r: r.source[by] if r.source[by] is not None else '', reverse=reverse)
1700
1717
  elif lam is not None:
1701
1718
  records_copy.sort(key=lam, reverse=reverse)
1702
1719
  else:
1703
- records_copy.sort(key=lambda r: r.values[by], reverse=reverse)
1720
+ # Handle None values by treating them as empty strings for sorting
1721
+ records_copy.sort(key=lambda r: r.values.get(by, '') if r.values.get(by) is not None else '', reverse=reverse)
1704
1722
  return self._copy(records_copy)
1705
1723
 
1706
1724
  def append(self, items, cast_fields=False, fill=False):
@@ -8,7 +8,7 @@ from jpl_time import Time
8
8
  from jpl_time.jpl_time import TimeConversionError
9
9
 
10
10
  #Teamtool Studio Imports
11
- # None
11
+ from tts_html_utils.core.palette import VisDiffPalette
12
12
 
13
13
  #This Library Imports
14
14
  from tts_data_utils.core.data_container import DataContainer
@@ -33,26 +33,6 @@ class VisualDiffItem(DataItem):
33
33
  the `_mismatched_keys` list.
34
34
  """
35
35
 
36
- PALETTE = {
37
- 'green': {'background-color': '#95FB95', 'color': '#333333'},
38
- 'blue': {'background-color': '#ADC4DF', 'color': '#333333'},
39
- 'grey': {'background-color': '#BDBEBD', 'color': '#BDBEBD'},
40
- 'red': {'background-color': '#FF614A', 'color': '#333333'},
41
- 'white': {'background-color': '#FFFFF', 'color': '#333333'},
42
- 'error': {'background-color': '#000000', 'color': '#FF614A'}
43
- }
44
-
45
-
46
- MATCH_STATUS_COLORS = {
47
- 'insert': PALETTE['green'],
48
- 'replace': PALETTE['blue'],
49
- 'delete': PALETTE['red'],
50
- 'equal': PALETTE['white'],
51
- 'empty_from_delete': PALETTE['grey'],
52
- 'empty_from_insert': PALETTE['grey'],
53
- 'unmatched': PALETTE['red'],
54
- }
55
-
56
36
  DICT_VALID_KEYS = [
57
37
  ('_visdiff_index', (int, None)),
58
38
  ('_visdiff_match', (str, None)),
@@ -71,8 +51,7 @@ class VisualDiffItem(DataItem):
71
51
  """
72
52
  Returns the CSS style dictionary for the table row based on the match status.
73
53
  """
74
- return self.MATCH_STATUS_COLORS[self['_visdiff_match']]
75
-
54
+ return VisDiffPalette()[self['_visdiff_match']]
76
55
  @property
77
56
  def default_html_cell_styles(self):
78
57
  """
@@ -5,21 +5,12 @@ from datetime import datetime
5
5
 
6
6
  #JPL Imports
7
7
  from jpl_time import Time
8
+ from tts_html_utils.core.palette import EvrPalette
8
9
 
9
10
  #This Library Imports
10
11
  from tts_data_utils.core.data_container import DataContainer
11
12
  from tts_data_utils.core.data_item import DataItem
12
13
 
13
- EVR_LEVEL_COLORS = {
14
- 'DIAGNOSTIC': {'background-color': '#90ED91', 'color': '#333333'},
15
- 'COMMAND': {'background-color': '#0D00FF', 'color': '#F1F1F2'},
16
- 'ACTIVITY_LO': {'background-color': '#D3D3D3', 'color': '#333333'},
17
- 'ACTIVITY_HI': {'background-color': '#666666', 'color': '#F1F1F2'},
18
- 'WARNING_LO': {'background-color': '#F0F001', 'color': '#333333'},
19
- 'WARNING_HI': {'background-color': '#FEA500', 'color': '#333333'},
20
- 'FATAL': {'background-color': '#FF5E66', 'color': '#F1F1F2'} ,
21
- 'SIM ERROR': {'background-color': '#FF5E66', 'color': '#F1F1F2'}
22
- }
23
14
 
24
15
  class EvrItem(DataItem):
25
16
  """
@@ -94,7 +85,7 @@ class EvrItem(DataItem):
94
85
  @property
95
86
  def default_html_row_style(self):
96
87
  """Returns row styling based on the EVR severity level."""
97
- return EVR_LEVEL_COLORS[self.level]
88
+ return EvrPalette[self.level]
98
89
 
99
90
  @property
100
91
  def time(self):
@@ -278,7 +269,7 @@ class EvrGapItem(DataItem):
278
269
  @property
279
270
  def default_html_row_style(self):
280
271
  """Styles the row based on the severity of the missing EVRs."""
281
- return EVR_LEVEL_COLORS[self.level]
272
+ return EvrPalette[self.level]
282
273
 
283
274
  @property
284
275
  def time(self):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tts-data-utils
3
- Version: 0.7.3
3
+ Version: 0.7.4
4
4
  Summary: Utilities for working with 2D data.
5
5
  Author: muszynsk
6
6
  Author-email: muszynsk <matt.muszynski@jpl.nasa.gov>
File without changes
File without changes
File without changes
File without changes