ezmsg 3.7.2__tar.gz → 3.7.3__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 (120) hide show
  1. {ezmsg-3.7.2 → ezmsg-3.7.3}/.github/workflows/ci.yml +1 -1
  2. {ezmsg-3.7.2 → ezmsg-3.7.3}/PKG-INFO +1 -1
  3. {ezmsg-3.7.2 → ezmsg-3.7.3}/pyproject.toml +1 -1
  4. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/messagereplay.py +1 -1
  5. ezmsg-3.7.3/tests/test_messagereplay.py +92 -0
  6. {ezmsg-3.7.2 → ezmsg-3.7.3}/.flake8 +0 -0
  7. {ezmsg-3.7.2 → ezmsg-3.7.3}/.git-blame-ignore-revs +0 -0
  8. {ezmsg-3.7.2 → ezmsg-3.7.3}/.github/workflows/docs.yml +0 -0
  9. {ezmsg-3.7.2 → ezmsg-3.7.3}/.github/workflows/publish.yml +0 -0
  10. {ezmsg-3.7.2 → ezmsg-3.7.3}/.gitignore +0 -0
  11. {ezmsg-3.7.2 → ezmsg-3.7.3}/.pre-commit-config.yaml +0 -0
  12. {ezmsg-3.7.2 → ezmsg-3.7.3}/LICENSE +0 -0
  13. {ezmsg-3.7.2 → ezmsg-3.7.3}/README.md +0 -0
  14. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/Makefile +0 -0
  15. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/make.bat +0 -0
  16. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/_static/_images/cloning.png +0 -0
  17. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/_static/_images/ezmsg_logo.png +0 -0
  18. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/_static/_images/tutorial_graph.png +0 -0
  19. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/_static/_images/tutorial_graph_compact.png +0 -0
  20. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/_static/_images/tutorial_graphviz.png +0 -0
  21. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/_static/_images/tutorial_pipeline.png +0 -0
  22. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/_static/_images/tutorial_system.png +0 -0
  23. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/_static/custom.css +0 -0
  24. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/conf.py +0 -0
  25. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/index.rst +0 -0
  26. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/reference/API/axisarray-util-units.rst +0 -0
  27. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/reference/API/axisarray.rst +0 -0
  28. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/reference/API/components.rst +0 -0
  29. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/reference/API/content-api.rst +0 -0
  30. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/reference/API/entrypoint.rst +0 -0
  31. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/reference/API/functiondecorators.rst +0 -0
  32. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/reference/API/util-units.rst +0 -0
  33. {ezmsg-3.7.2 → ezmsg-3.7.3}/docs/source/reference/content-reference.rst +0 -0
  34. {ezmsg-3.7.2 → ezmsg-3.7.3}/examples/.gitignore +0 -0
  35. {ezmsg-3.7.2 → ezmsg-3.7.3}/examples/ezmsg_attach.py +0 -0
  36. {ezmsg-3.7.2 → ezmsg-3.7.3}/examples/ezmsg_configs.py +0 -0
  37. {ezmsg-3.7.2 → ezmsg-3.7.3}/examples/ezmsg_count.py +0 -0
  38. {ezmsg-3.7.2 → ezmsg-3.7.3}/examples/ezmsg_generator.py +0 -0
  39. {ezmsg-3.7.2 → ezmsg-3.7.3}/examples/ezmsg_intro.py +0 -0
  40. {ezmsg-3.7.2 → ezmsg-3.7.3}/examples/ezmsg_leaky_subscriber.py +0 -0
  41. {ezmsg-3.7.2 → ezmsg-3.7.3}/examples/ezmsg_log_to_file.py +0 -0
  42. {ezmsg-3.7.2 → ezmsg-3.7.3}/examples/ezmsg_normalterm.py +0 -0
  43. {ezmsg-3.7.2 → ezmsg-3.7.3}/examples/ezmsg_stop.py +0 -0
  44. {ezmsg-3.7.2 → ezmsg-3.7.3}/examples/ezmsg_toy.py +0 -0
  45. {ezmsg-3.7.2 → ezmsg-3.7.3}/examples/lowlevel_api.py +0 -0
  46. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/__init__.py +0 -0
  47. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/__main__.py +0 -0
  48. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/addressable.py +0 -0
  49. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/backend.py +0 -0
  50. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/backendprocess.py +0 -0
  51. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/backpressure.py +0 -0
  52. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/channelmanager.py +0 -0
  53. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/collection.py +0 -0
  54. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/command.py +0 -0
  55. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/component.py +0 -0
  56. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/dag.py +0 -0
  57. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/graph_util.py +0 -0
  58. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/graphcontext.py +0 -0
  59. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/graphserver.py +0 -0
  60. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/message.py +0 -0
  61. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/messagecache.py +0 -0
  62. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/messagechannel.py +0 -0
  63. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/messagemarshal.py +0 -0
  64. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/netprotocol.py +0 -0
  65. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/pubclient.py +0 -0
  66. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/settings.py +0 -0
  67. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/shm.py +0 -0
  68. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/state.py +0 -0
  69. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/stream.py +0 -0
  70. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/subclient.py +0 -0
  71. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/test.py +0 -0
  72. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/unit.py +0 -0
  73. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/core/util.py +0 -0
  74. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/__init__.py +0 -0
  75. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/debuglog.py +0 -0
  76. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/gen_to_unit.py +0 -0
  77. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/generator.py +0 -0
  78. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/messagecodec.py +0 -0
  79. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/messagegate.py +0 -0
  80. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/messagelogger.py +0 -0
  81. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/messagequeue.py +0 -0
  82. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/messages/__init__.py +0 -0
  83. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/messages/axisarray.py +0 -0
  84. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/messages/chunker.py +0 -0
  85. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/messages/key.py +0 -0
  86. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/messages/modify.py +0 -0
  87. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/messages/util.py +0 -0
  88. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/perf/__init__.py +0 -0
  89. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/perf/analysis.py +0 -0
  90. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/perf/command.py +0 -0
  91. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/perf/envinfo.py +0 -0
  92. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/perf/impl.py +0 -0
  93. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/perf/run.py +0 -0
  94. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/perf/util.py +0 -0
  95. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/profiler.py +0 -0
  96. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/rate.py +0 -0
  97. {ezmsg-3.7.2 → ezmsg-3.7.3}/src/ezmsg/util/terminate.py +0 -0
  98. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/__init__.py +0 -0
  99. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/ez_test_utils.py +0 -0
  100. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/messages/__init__.py +0 -0
  101. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/messages/test_axisarray.py +0 -0
  102. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/messages/test_chunker.py +0 -0
  103. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/messages/test_key.py +0 -0
  104. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/messages/test_modify.py +0 -0
  105. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/test_addressable.py +0 -0
  106. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/test_attach.py +0 -0
  107. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/test_channel.py +0 -0
  108. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/test_channelmanager.py +0 -0
  109. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/test_connections.py +0 -0
  110. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/test_dag.py +0 -0
  111. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/test_generator.py +0 -0
  112. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/test_graph.py +0 -0
  113. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/test_graph_visualization.py +0 -0
  114. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/test_leaky_subscriber.py +0 -0
  115. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/test_perf_configs.py +0 -0
  116. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/test_profiler.py +0 -0
  117. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/test_run.py +0 -0
  118. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/test_shm.py +0 -0
  119. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/test_state.py +0 -0
  120. {ezmsg-3.7.2 → ezmsg-3.7.3}/tests/test_test.py +0 -0
@@ -15,7 +15,7 @@ jobs:
15
15
  pytest:
16
16
  strategy:
17
17
  matrix:
18
- python-version: ["3.10.15", "3.11"] # Omit until shutdown fixed: , "3.12", "3.13"]
18
+ python-version: ["3.10.15", "3.11", "3.12", "3.13"]
19
19
  os:
20
20
  - "ubuntu-latest"
21
21
  - "windows-latest"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ezmsg
3
- Version: 3.7.2
3
+ Version: 3.7.3
4
4
  Summary: A simple DAG-based computation model
5
5
  Author-email: Griffin Milsap <griffin.milsap@gmail.com>, Preston Peranich <pperanich@gmail.com>, Chadwick Boulay <chadwick.boulay@gmail.com>
6
6
  License: MIT License
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ezmsg"
3
- version = "3.7.2"
3
+ version = "3.7.3"
4
4
  description = "A simple DAG-based computation model"
5
5
  authors = [
6
6
  { name = "Griffin Milsap", email = "griffin.milsap@gmail.com" },
@@ -31,7 +31,7 @@ class ReplayStatusMessage:
31
31
  done: bool = False
32
32
 
33
33
 
34
- @dataclass
34
+ @dataclass(frozen=True)
35
35
  class FileReplayMessage:
36
36
  """
37
37
  Add a file to the queue.
@@ -0,0 +1,92 @@
1
+ """Tests for ezmsg.util.messagereplay module."""
2
+
3
+ import json
4
+ import typing
5
+ from dataclasses import fields
6
+ from pathlib import Path
7
+
8
+ import pytest
9
+
10
+ import ezmsg.core as ez
11
+ from ezmsg.util.messagecodec import MessageEncoder, LogStart
12
+
13
+
14
+ def test_import():
15
+ """Importing the module should not raise (regression: frozen dataclass inheritance on 3.13+)."""
16
+ from ezmsg.util.messagereplay import (
17
+ FileReplayMessage,
18
+ MessageCollector,
19
+ MessageReplay,
20
+ MessageReplaySettings,
21
+ ReplayStatusMessage,
22
+ )
23
+
24
+
25
+ def test_replay_status_message():
26
+ from ezmsg.util.messagereplay import ReplayStatusMessage
27
+
28
+ msg = ReplayStatusMessage(filename=Path("/tmp/test.log"), idx=3, total=10)
29
+ assert msg.filename == Path("/tmp/test.log")
30
+ assert msg.idx == 3
31
+ assert msg.total == 10
32
+ assert msg.done is False
33
+
34
+ msg_done = ReplayStatusMessage(filename=Path("/tmp/test.log"), idx=10, total=10, done=True)
35
+ assert msg_done.done is True
36
+
37
+
38
+ def test_file_replay_message_defaults():
39
+ from ezmsg.util.messagereplay import FileReplayMessage
40
+
41
+ msg = FileReplayMessage()
42
+ assert msg.filename is None
43
+ assert msg.rate is None
44
+
45
+ msg2 = FileReplayMessage(filename=Path("/tmp/test.log"), rate=10.0)
46
+ assert msg2.filename == Path("/tmp/test.log")
47
+ assert msg2.rate == 10.0
48
+
49
+
50
+ def test_message_replay_settings():
51
+ """Settings should inherit from both ez.Settings and FileReplayMessage without error."""
52
+ from ezmsg.util.messagereplay import MessageReplaySettings
53
+
54
+ settings = MessageReplaySettings()
55
+ assert settings.filename is None
56
+ assert settings.rate is None
57
+ assert settings.progress is False
58
+
59
+ settings2 = MessageReplaySettings(filename=Path("/tmp/test.log"), rate=5.0, progress=True)
60
+ assert settings2.filename == Path("/tmp/test.log")
61
+ assert settings2.rate == 5.0
62
+ assert settings2.progress is True
63
+
64
+
65
+ def test_message_replay_settings_is_frozen():
66
+ """ez.Settings subclasses should be frozen dataclasses."""
67
+ from ezmsg.util.messagereplay import MessageReplaySettings
68
+
69
+ settings = MessageReplaySettings()
70
+ with pytest.raises(AttributeError):
71
+ settings.progress = True
72
+
73
+
74
+ def test_message_replay_unit_streams():
75
+ """MessageReplay unit should have the expected stream attributes."""
76
+ from ezmsg.util.messagereplay import MessageReplay
77
+
78
+ assert hasattr(MessageReplay, "INPUT_FILE")
79
+ assert hasattr(MessageReplay, "INPUT_PAUSED")
80
+ assert hasattr(MessageReplay, "INPUT_STOP")
81
+ assert hasattr(MessageReplay, "OUTPUT_MESSAGE")
82
+ assert hasattr(MessageReplay, "OUTPUT_TOTAL")
83
+ assert hasattr(MessageReplay, "OUTPUT_REPLAY_STATUS")
84
+
85
+
86
+ def test_message_collector_collects(tmp_path):
87
+ """MessageCollector should be instantiable and have an empty messages list."""
88
+ from ezmsg.util.messagereplay import MessageCollector
89
+
90
+ collector = MessageCollector()
91
+ assert hasattr(collector, "INPUT_MESSAGE")
92
+ assert hasattr(collector, "OUTPUT_MESSAGE")
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes