argus-alm 0.14.2__py3-none-any.whl → 0.15.2__py3-none-any.whl

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 (118) hide show
  1. argus/_version.py +21 -0
  2. argus/backend/.gitkeep +0 -0
  3. argus/backend/__init__.py +0 -0
  4. argus/backend/cli.py +57 -0
  5. argus/backend/controller/__init__.py +0 -0
  6. argus/backend/controller/admin.py +20 -0
  7. argus/backend/controller/admin_api.py +355 -0
  8. argus/backend/controller/api.py +589 -0
  9. argus/backend/controller/auth.py +67 -0
  10. argus/backend/controller/client_api.py +109 -0
  11. argus/backend/controller/main.py +316 -0
  12. argus/backend/controller/notification_api.py +72 -0
  13. argus/backend/controller/notifications.py +13 -0
  14. argus/backend/controller/planner_api.py +194 -0
  15. argus/backend/controller/team.py +129 -0
  16. argus/backend/controller/team_ui.py +19 -0
  17. argus/backend/controller/testrun_api.py +513 -0
  18. argus/backend/controller/view_api.py +188 -0
  19. argus/backend/controller/views_widgets/__init__.py +0 -0
  20. argus/backend/controller/views_widgets/graphed_stats.py +54 -0
  21. argus/backend/controller/views_widgets/graphs.py +68 -0
  22. argus/backend/controller/views_widgets/highlights.py +135 -0
  23. argus/backend/controller/views_widgets/nemesis_stats.py +26 -0
  24. argus/backend/controller/views_widgets/summary.py +43 -0
  25. argus/backend/db.py +98 -0
  26. argus/backend/error_handlers.py +41 -0
  27. argus/backend/events/event_processors.py +34 -0
  28. argus/backend/models/__init__.py +0 -0
  29. argus/backend/models/argus_ai.py +24 -0
  30. argus/backend/models/github_issue.py +60 -0
  31. argus/backend/models/plan.py +24 -0
  32. argus/backend/models/result.py +187 -0
  33. argus/backend/models/runtime_store.py +58 -0
  34. argus/backend/models/view_widgets.py +25 -0
  35. argus/backend/models/web.py +403 -0
  36. argus/backend/plugins/__init__.py +0 -0
  37. argus/backend/plugins/core.py +248 -0
  38. argus/backend/plugins/driver_matrix_tests/controller.py +66 -0
  39. argus/backend/plugins/driver_matrix_tests/model.py +429 -0
  40. argus/backend/plugins/driver_matrix_tests/plugin.py +21 -0
  41. argus/backend/plugins/driver_matrix_tests/raw_types.py +62 -0
  42. argus/backend/plugins/driver_matrix_tests/service.py +61 -0
  43. argus/backend/plugins/driver_matrix_tests/udt.py +42 -0
  44. argus/backend/plugins/generic/model.py +86 -0
  45. argus/backend/plugins/generic/plugin.py +15 -0
  46. argus/backend/plugins/generic/types.py +14 -0
  47. argus/backend/plugins/loader.py +39 -0
  48. argus/backend/plugins/sct/controller.py +224 -0
  49. argus/backend/plugins/sct/plugin.py +37 -0
  50. argus/backend/plugins/sct/resource_setup.py +177 -0
  51. argus/backend/plugins/sct/service.py +682 -0
  52. argus/backend/plugins/sct/testrun.py +288 -0
  53. argus/backend/plugins/sct/udt.py +100 -0
  54. argus/backend/plugins/sirenada/model.py +118 -0
  55. argus/backend/plugins/sirenada/plugin.py +16 -0
  56. argus/backend/service/admin.py +26 -0
  57. argus/backend/service/argus_service.py +696 -0
  58. argus/backend/service/build_system_monitor.py +185 -0
  59. argus/backend/service/client_service.py +127 -0
  60. argus/backend/service/event_service.py +18 -0
  61. argus/backend/service/github_service.py +233 -0
  62. argus/backend/service/jenkins_service.py +269 -0
  63. argus/backend/service/notification_manager.py +159 -0
  64. argus/backend/service/planner_service.py +608 -0
  65. argus/backend/service/release_manager.py +229 -0
  66. argus/backend/service/results_service.py +690 -0
  67. argus/backend/service/stats.py +610 -0
  68. argus/backend/service/team_manager_service.py +82 -0
  69. argus/backend/service/test_lookup.py +172 -0
  70. argus/backend/service/testrun.py +489 -0
  71. argus/backend/service/user.py +308 -0
  72. argus/backend/service/views.py +219 -0
  73. argus/backend/service/views_widgets/__init__.py +0 -0
  74. argus/backend/service/views_widgets/graphed_stats.py +180 -0
  75. argus/backend/service/views_widgets/highlights.py +374 -0
  76. argus/backend/service/views_widgets/nemesis_stats.py +34 -0
  77. argus/backend/template_filters.py +27 -0
  78. argus/backend/tests/__init__.py +0 -0
  79. argus/backend/tests/client_service/__init__.py +0 -0
  80. argus/backend/tests/client_service/test_submit_results.py +79 -0
  81. argus/backend/tests/conftest.py +180 -0
  82. argus/backend/tests/results_service/__init__.py +0 -0
  83. argus/backend/tests/results_service/test_best_results.py +178 -0
  84. argus/backend/tests/results_service/test_cell.py +65 -0
  85. argus/backend/tests/results_service/test_chartjs_additional_functions.py +259 -0
  86. argus/backend/tests/results_service/test_create_chartjs.py +220 -0
  87. argus/backend/tests/results_service/test_result_metadata.py +100 -0
  88. argus/backend/tests/results_service/test_results_service.py +203 -0
  89. argus/backend/tests/results_service/test_validation_rules.py +213 -0
  90. argus/backend/tests/view_widgets/__init__.py +0 -0
  91. argus/backend/tests/view_widgets/test_highlights_api.py +532 -0
  92. argus/backend/util/common.py +65 -0
  93. argus/backend/util/config.py +38 -0
  94. argus/backend/util/encoders.py +56 -0
  95. argus/backend/util/logsetup.py +80 -0
  96. argus/backend/util/module_loaders.py +30 -0
  97. argus/backend/util/send_email.py +91 -0
  98. argus/client/base.py +1 -3
  99. argus/client/driver_matrix_tests/cli.py +17 -8
  100. argus/client/generic/cli.py +4 -2
  101. argus/client/generic/client.py +1 -0
  102. argus/client/generic_result.py +48 -9
  103. argus/client/sct/client.py +1 -3
  104. argus/client/sirenada/client.py +4 -1
  105. argus/client/tests/__init__.py +0 -0
  106. argus/client/tests/conftest.py +19 -0
  107. argus/client/tests/test_package.py +45 -0
  108. argus/client/tests/test_results.py +224 -0
  109. argus/common/sct_types.py +3 -0
  110. argus/common/sirenada_types.py +1 -1
  111. {argus_alm-0.14.2.dist-info → argus_alm-0.15.2.dist-info}/METADATA +43 -19
  112. argus_alm-0.15.2.dist-info/RECORD +122 -0
  113. {argus_alm-0.14.2.dist-info → argus_alm-0.15.2.dist-info}/WHEEL +2 -1
  114. argus_alm-0.15.2.dist-info/entry_points.txt +3 -0
  115. argus_alm-0.15.2.dist-info/top_level.txt +1 -0
  116. argus_alm-0.14.2.dist-info/RECORD +0 -20
  117. argus_alm-0.14.2.dist-info/entry_points.txt +0 -4
  118. {argus_alm-0.14.2.dist-info → argus_alm-0.15.2.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,224 @@
1
+ import pytest
2
+
3
+ from argus.client.generic_result import (
4
+ StaticGenericResultTable,
5
+ Status,
6
+ ColumnMetadata,
7
+ ResultType,
8
+ ValidationRule,
9
+ GenericResultTable,
10
+ )
11
+
12
+
13
+ class TestStaticResults(StaticGenericResultTable):
14
+ """
15
+ Testing Results, which contain all the information in Meta class
16
+ """
17
+
18
+ class Meta:
19
+ name = "Important Static Results"
20
+ description = "This is a test for important static results."
21
+ columns = [
22
+ ColumnMetadata(name="column1", unit="unit1", type=ResultType.INTEGER, higher_is_better=True),
23
+ ]
24
+ validation_rules = {"column1": ValidationRule(best_pct=10, best_abs=20, fixed_limit=30)}
25
+
26
+
27
+ class TestDynamicResults(GenericResultTable):
28
+ """
29
+ Testing Results, which pass all the information in the constructor
30
+ """
31
+
32
+ def __init__(self, operation):
33
+ super().__init__(
34
+ name=f"{operation} - Dynamic Results",
35
+ description=f"Dynamic results for {operation}",
36
+ columns=[
37
+ ColumnMetadata(name="column1", unit="unit1", type=ResultType.INTEGER, higher_is_better=True),
38
+ ColumnMetadata(name="column2", unit="unit2", type=ResultType.FLOAT, higher_is_better=False),
39
+ ],
40
+ validation_rules={"column1": ValidationRule(best_pct=10, best_abs=20, fixed_limit=30)},
41
+ )
42
+
43
+
44
+ class TestMixedResults(StaticGenericResultTable):
45
+ """
46
+ Testing Results, which combine Meta class with some dynamic information
47
+ """
48
+
49
+ def __init__(self, operation):
50
+ super().__init__(name=f"{operation} - Dynamic Results")
51
+
52
+ class Meta:
53
+ description = "This is a test for mixed results."
54
+ columns = [
55
+ ColumnMetadata(name="column1", unit="unit1", type=ResultType.INTEGER, higher_is_better=True),
56
+ ColumnMetadata(name="column2", unit="unit2", type=ResultType.FLOAT, higher_is_better=False),
57
+ ]
58
+ validation_rules = {"column1": ValidationRule(best_pct=10, best_abs=20, fixed_limit=30)}
59
+
60
+
61
+ class TestVisibilityResults(StaticGenericResultTable):
62
+ """
63
+ Testing Results with mixed visible and invisible columns
64
+ """
65
+
66
+ class Meta:
67
+ name = "Visibility Test Results"
68
+ description = "Testing column visibility feature"
69
+ columns = [
70
+ ColumnMetadata(name="visible_col", unit="unit1", type=ResultType.INTEGER, higher_is_better=True, visible=True),
71
+ ColumnMetadata(name="invisible_col", unit="unit2", type=ResultType.FLOAT, higher_is_better=False, visible=False),
72
+ ColumnMetadata(name="default_col", unit="unit3", type=ResultType.DURATION, higher_is_better=True), # Should default to visible=True
73
+ ]
74
+
75
+
76
+ def test_static_results():
77
+ """
78
+ Tests that you can create Results with all the information in the Meta class
79
+ """
80
+ results = TestStaticResults()
81
+ serialized = results.as_dict()
82
+ assert serialized["meta"]["name"] == TestStaticResults.Meta.name
83
+ assert serialized["meta"]["description"] == TestStaticResults.Meta.description
84
+ assert len(serialized["meta"]["rows_meta"]) == 0
85
+ assert len(serialized["meta"]["columns_meta"]) == 1
86
+ assert len(serialized["meta"]["validation_rules"]) == 1
87
+ assert len(serialized["results"]) == 0
88
+
89
+
90
+ def test_dynamic_results():
91
+ """
92
+ Tests that you can create Results with all the information in the constructor
93
+ """
94
+ results = TestDynamicResults("Write")
95
+ serialized = results.as_dict()
96
+ assert serialized["meta"]["name"] == "Write - Dynamic Results"
97
+ assert serialized["meta"]["description"] == "Dynamic results for Write"
98
+ assert len(serialized["meta"]["rows_meta"]) == 0
99
+ assert len(serialized["meta"]["columns_meta"]) == 2
100
+ assert len(serialized["meta"]["validation_rules"]) == 1
101
+ assert len(serialized["results"]) == 0
102
+
103
+
104
+ def test_mixed_results():
105
+ """
106
+ Tests that you can create Results, which combine Meta class with some dynamic information
107
+ """
108
+ results = TestMixedResults("Write")
109
+ serialized = results.as_dict()
110
+ assert serialized["meta"]["name"] == "Write - Dynamic Results"
111
+ assert serialized["meta"]["description"] == "This is a test for mixed results."
112
+
113
+ assert len(serialized["meta"]["rows_meta"]) == 0
114
+ assert len(serialized["meta"]["columns_meta"]) == 2
115
+ assert len(serialized["meta"]["validation_rules"]) == 1
116
+ assert len(serialized["results"]) == 0
117
+
118
+
119
+ def test_add_results():
120
+ """Tests add results method"""
121
+ results = TestStaticResults()
122
+ results.add_result(column="column1", row="row1", value=10, status=Status.UNSET)
123
+ results.add_result(column="column1", row="row2", value=20, status=Status.UNSET)
124
+ serialized = results.as_dict()
125
+
126
+ assert len(serialized["meta"]["rows_meta"]) == 2
127
+ assert len(serialized["results"]) == 2
128
+
129
+
130
+ def test_column_metadata_as_dict_includes_visibility():
131
+ """Test that ColumnMetadata.as_dict() includes visibility field"""
132
+ # Test explicitly visible column
133
+ visible_col = ColumnMetadata(name="test", unit="unit", type=ResultType.INTEGER, visible=True)
134
+ visible_dict = visible_col.as_dict()
135
+ assert "visible" in visible_dict
136
+ assert visible_dict["visible"] is True
137
+
138
+ # Test explicitly invisible column
139
+ invisible_col = ColumnMetadata(name="test", unit="unit", type=ResultType.INTEGER, visible=False)
140
+ invisible_dict = invisible_col.as_dict()
141
+ assert "visible" in invisible_dict
142
+ assert invisible_dict["visible"] is False
143
+
144
+ # Test default visibility
145
+ default_col = ColumnMetadata(name="test", unit="unit", type=ResultType.INTEGER)
146
+ default_dict = default_col.as_dict()
147
+ assert "visible" in default_dict
148
+ assert default_dict["visible"] is True
149
+
150
+
151
+ def test_mixed_visibility_dynamic_results():
152
+ """Test dynamic results with mixed column visibility"""
153
+ class TestDynamicVisibility(GenericResultTable):
154
+ def __init__(self):
155
+ super().__init__(
156
+ name="Dynamic Visibility Test",
157
+ description="Testing dynamic column visibility",
158
+ columns=[
159
+ ColumnMetadata(name="visible1", unit="unit1", type=ResultType.INTEGER, visible=True),
160
+ ColumnMetadata(name="invisible1", unit="unit2", type=ResultType.FLOAT, visible=False),
161
+ ColumnMetadata(name="visible2", unit="unit3", type=ResultType.TEXT), # Default visible
162
+ ],
163
+ )
164
+
165
+ results = TestDynamicVisibility()
166
+ serialized = results.as_dict()
167
+
168
+ columns_meta = serialized["meta"]["columns_meta"]
169
+ assert len(columns_meta) == 3
170
+
171
+ visible_columns = [col for col in columns_meta if col["visible"]]
172
+ invisible_columns = [col for col in columns_meta if not col["visible"]]
173
+
174
+ assert len(visible_columns) == 2
175
+ assert len(invisible_columns) == 1
176
+ assert invisible_columns[0]["name"] == "invisible1"
177
+
178
+
179
+ def test_no_column():
180
+ """Tests validation for validation rule with nonexistent column"""
181
+
182
+ class NoColumnRule(StaticGenericResultTable):
183
+ class Meta:
184
+ name = "Testing results"
185
+ description = ""
186
+ columns = [
187
+ ColumnMetadata(name="column1", unit="unit1", type=ResultType.INTEGER, higher_is_better=True),
188
+ ]
189
+ validation_rules = {"nonexistent": ValidationRule(best_pct=10, best_abs=20, fixed_limit=30)}
190
+
191
+ with pytest.raises(ValueError, match="not found"):
192
+ NoColumnRule()
193
+
194
+
195
+ def test_different_type():
196
+ """Tests validation of validation rule type"""
197
+
198
+ class BadType(StaticGenericResultTable):
199
+ class Meta:
200
+ name = "Testing results"
201
+ description = ""
202
+ columns = [
203
+ ColumnMetadata(name="column1", unit="unit1", type=ResultType.INTEGER, higher_is_better=True),
204
+ ]
205
+ validation_rules = {"nonexistent": "test"}
206
+
207
+ with pytest.raises(ValueError, match="ValidationRule"):
208
+ BadType()
209
+
210
+
211
+ def test_text_rule():
212
+ """Test validation of rules for TEXT types"""
213
+
214
+ class TextType(StaticGenericResultTable):
215
+ class Meta:
216
+ name = "Testing results"
217
+ description = ""
218
+ columns = [
219
+ ColumnMetadata(name="column1", unit="unit1", type=ResultType.TEXT, higher_is_better=True),
220
+ ]
221
+ validation_rules = {"column1": ValidationRule(best_pct=10, best_abs=20, fixed_limit=30)}
222
+
223
+ with pytest.raises(ValueError, match="TEXT"):
224
+ TextType()
argus/common/sct_types.py CHANGED
@@ -1,5 +1,6 @@
1
1
  from typing import TypedDict
2
2
 
3
+
3
4
  class RawHDRHistogram(TypedDict):
4
5
  start_time: int
5
6
  percentile_90: float
@@ -12,6 +13,7 @@ class RawHDRHistogram(TypedDict):
12
13
  stddev: float
13
14
  percentile_99_9: float
14
15
 
16
+
15
17
  class GeminiResultsRequest(TypedDict):
16
18
  oracle_nodes_count: int
17
19
  oracle_node_ami_id: str
@@ -26,6 +28,7 @@ class GeminiResultsRequest(TypedDict):
26
28
  gemini_read_ops: int
27
29
  gemini_read_errors: int
28
30
 
31
+
29
32
  class PerformanceResultsRequest(TypedDict):
30
33
  test_name: str
31
34
  stress_cmd: str
@@ -23,7 +23,7 @@ class RawSirenadaTestCase(TypedDict):
23
23
  class RawSirenadaRequest(TypedDict):
24
24
  build_id: str
25
25
  build_job_url: str
26
- run_id: str # UUID
26
+ run_id: str # UUID
27
27
  region: list[str]
28
28
  browsers: list[str]
29
29
  clusters: list[str]
@@ -1,23 +1,50 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: argus-alm
3
- Version: 0.14.2
3
+ Version: 0.15.2
4
4
  Summary: Argus
5
- Home-page: https://github.com/scylladb/argus
6
- License: Apache-2.0
7
- Author: Alexey Kartashov
8
- Author-email: alexey.kartashov@scylladb.com
9
- Requires-Python: >=3.10,<4.0
10
- Classifier: License :: OSI Approved :: Apache Software License
11
- Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.10
13
- Classifier: Programming Language :: Python :: 3.11
14
- Classifier: Programming Language :: Python :: 3.12
15
- Requires-Dist: click (>=8.1.3,<9.0.0)
16
- Requires-Dist: requests (>=2.26.0,<3.0.0)
5
+ Author-email: Alexey Kartashov <alexey.kartashov@scylladb.com>, Łukasz Sójka <lukasz.sojka@scylladb.com>
6
+ License-Expression: Apache-2.0
7
+ Project-URL: Homepage, https://github.com/scylladb/argus
17
8
  Project-URL: Repository, https://github.com/scylladb/argus
9
+ Requires-Python: >=3.12
18
10
  Description-Content-Type: text/markdown
11
+ License-File: LICENSE
12
+ Requires-Dist: requests>=2.26.0
13
+ Requires-Dist: click>=8.1.3
14
+ Provides-Extra: web-backend
15
+ Requires-Dist: PyYAML~=6.0.0; extra == "web-backend"
16
+ Requires-Dist: scylla-driver~=3.26.8; extra == "web-backend"
17
+ Requires-Dist: Flask~=3.0.0; extra == "web-backend"
18
+ Requires-Dist: Flask-WTF~=1.0.0; extra == "web-backend"
19
+ Requires-Dist: Flask-Login~=0.5.0; extra == "web-backend"
20
+ Requires-Dist: humanize~=3.13.1; extra == "web-backend"
21
+ Requires-Dist: python-magic~=0.4.24; extra == "web-backend"
22
+ Requires-Dist: uwsgi~=2.0.20; extra == "web-backend"
23
+ Requires-Dist: python-jenkins~=1.7.0; extra == "web-backend"
24
+ Requires-Dist: python-slugify~=6.1.1; extra == "web-backend"
25
+ Requires-Dist: pygithub~=2.6.1; extra == "web-backend"
26
+ Requires-Dist: boto3~=1.38.9; extra == "web-backend"
27
+ Provides-Extra: docker-image
28
+ Requires-Dist: supervisor~=4.2.4; extra == "docker-image"
29
+ Provides-Extra: dev
30
+ Requires-Dist: pytest==8.3.5; extra == "dev"
31
+ Requires-Dist: coverage==7.8.2; extra == "dev"
32
+ Requires-Dist: docker==7.1.0; extra == "dev"
33
+ Requires-Dist: ipython~=8.36.0; extra == "dev"
34
+ Requires-Dist: pre-commit>=4.2.0; extra == "dev"
35
+ Requires-Dist: ruff~=0.11.11; extra == "dev"
36
+ Requires-Dist: autopep8>=2.3.2; extra == "dev"
37
+ Requires-Dist: requests-mock~=1.12.1; extra == "dev"
38
+ Requires-Dist: codecov~=2.1.12; extra == "dev"
39
+ Requires-Dist: pytest-cov~=6.1.1; extra == "dev"
40
+ Requires-Dist: nox~=2025.5.1; extra == "dev"
41
+ Requires-Dist: pytest-xdist~=3.7.0; extra == "dev"
42
+ Requires-Dist: pytest-subtests~=0.14.1; extra == "dev"
43
+ Requires-Dist: boto3-stubs~=1.38.9; extra == "dev"
44
+ Dynamic: license-file
19
45
 
20
46
  # Argus
47
+ [![PyPI - Version](https://img.shields.io/pypi/v/argus-alm)](https://pypi.python.org/pypi/argus-alm)
21
48
 
22
49
  ## Description
23
50
 
@@ -39,7 +66,7 @@ For development setup instructions, see [dev-setup.md](./docs/dev-setup.md).
39
66
 
40
67
  - nginx
41
68
 
42
- - poetry >=1.2.0b1
69
+ - uv
43
70
 
44
71
  ### From source
45
72
 
@@ -72,7 +99,7 @@ cd ~/app
72
99
  Install project dependencies:
73
100
 
74
101
  ```bash
75
- poetry install --with default,dev,web-backend,docker-image
102
+ uv sync --all-extras
76
103
  yarn install
77
104
  ```
78
105
 
@@ -124,6 +151,3 @@ WARNING: `start_argus.sh` assumes pyenv is installed into `~/.pyenv`
124
151
  sudo systemctl daemon-reload
125
152
  sudo systemctl enable --now argus.service
126
153
  ```
127
-
128
-
129
-
@@ -0,0 +1,122 @@
1
+ argus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ argus/_version.py,sha256=KRKlaCoLoYRe3lmREqbhkmA_Yhx41a2BsvZ95EM3lt0,513
3
+ argus/backend/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ argus/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ argus/backend/cli.py,sha256=BU8QHxyLkF4omKpSVEkLO8priJ4Ku7_JT5Ni6y4qcRA,1678
6
+ argus/backend/db.py,sha256=-zCTfajatRQVTQWBDIjos2tn7FOer7aWO-Tfi2DP9mY,3941
7
+ argus/backend/error_handlers.py,sha256=UNzfknKPcE0CBIAiTHBHJqgooEGLbLr_DSWpqgcThjA,1510
8
+ argus/backend/template_filters.py,sha256=04PHl0DiN4PBHQ82HMAmTfww09fGMXcYy-I5BU_b1s4,682
9
+ argus/backend/controller/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ argus/backend/controller/admin.py,sha256=2z29RX7ZQO_VTklSKH9RrEj-Ag2SsvyOaIzWDKr0ahQ,575
11
+ argus/backend/controller/admin_api.py,sha256=S4yhUORbrmO30F-hX0YQq7ZH3Ov3nAINdImqHRRgPVI,8560
12
+ argus/backend/controller/api.py,sha256=pPIoQI_9lxcTBHPNYU_dbUC2Jyr4pugnlzAPXFdycAc,17034
13
+ argus/backend/controller/auth.py,sha256=A2AV9yLj2d60syju-KjBwiE0qwg_vYJZjkLXqgljHNw,2283
14
+ argus/backend/controller/client_api.py,sha256=ama7Zb1fNaFh3CBxSZSJctwBK6LzpOvPrDo8z6_98XI,3575
15
+ argus/backend/controller/main.py,sha256=Dk1RCcsARFyXh8bL7yhWObmiA8dfS-5Rq5XuD9uQOd4,10570
16
+ argus/backend/controller/notification_api.py,sha256=wz7V4nE6Mxclpq78P8gNnCyeQ7xA9BBJjZ-dPhLLd2I,1964
17
+ argus/backend/controller/notifications.py,sha256=zMSJln72BGU6Q_nQvJesMnuvJ57Ucbov4M2ZI-37Bxo,290
18
+ argus/backend/controller/planner_api.py,sha256=ikT0qa5Qtp6TjChF3q1NmP1Mb9-gzd61Rw4AEeOZesg,4680
19
+ argus/backend/controller/team.py,sha256=hcMy5eGNtsO6033IQC-bxRXB8cFNT4bz9_YMQlGIEO0,3103
20
+ argus/backend/controller/team_ui.py,sha256=cO9z1gsU-VT4GS0PvleDW9jWj-gRKDAtdmZhUhToH7M,590
21
+ argus/backend/controller/testrun_api.py,sha256=X2ZNR-xIEEuM69rwSuuQ08rjg2nHUvfLq-hvLwogyDo,13615
22
+ argus/backend/controller/view_api.py,sha256=rvgTL-XbhBHMxIzduY65bhOpuuDV9k1SAUzF0owF8Dk,5092
23
+ argus/backend/controller/views_widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ argus/backend/controller/views_widgets/graphed_stats.py,sha256=j9c-GwRgSXUxG3WzWmhNyaBxZqy7nU3APFFb9Vgavdg,1611
25
+ argus/backend/controller/views_widgets/graphs.py,sha256=_zECoH_amPYGl4Blv1nXh0WPuTP7tSDK9YCGqkFL8WI,2514
26
+ argus/backend/controller/views_widgets/highlights.py,sha256=aa8v5TBuhjLx5q_6Xut_N3avMnwNDaxkcfyYd76udj0,4436
27
+ argus/backend/controller/views_widgets/nemesis_stats.py,sha256=BJ3QuB-ymf3CGaiBC_wNnRSJNlRwbJgjxLbqQOuawAM,780
28
+ argus/backend/controller/views_widgets/summary.py,sha256=H4naGArXWhsBoI4vd5N5UNOXa_ZqC7iRmn8eQ7tqU8A,1526
29
+ argus/backend/events/event_processors.py,sha256=bsmBayiXvlGn3aqiT2z9WgwnVBRtn2cRqkgn4pLodck,1291
30
+ argus/backend/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
+ argus/backend/models/argus_ai.py,sha256=MGMUfpFHcNdXolpMrVfAPCIV-tW20JcqbfT7wvWANHU,1079
32
+ argus/backend/models/github_issue.py,sha256=Rz2oirxYHervsRcuo-Ltq_5gsro-ARyj6RmZd0RlBOg,2121
33
+ argus/backend/models/plan.py,sha256=x5cCO3MlV1qBnFtclPN0DS9KQTNulk88w6K8nnBy0lo,1142
34
+ argus/backend/models/result.py,sha256=bFKQ3IlTc5pBa8Gxx3fVadVShBNEiw05qrJLFHfoLxo,7726
35
+ argus/backend/models/runtime_store.py,sha256=f_bE4CDhtTIn7Wgrxr3rgr5AMHFDQwbGpH8DRvmmbPQ,1920
36
+ argus/backend/models/view_widgets.py,sha256=ONSwMc5oUedAkd_kl9dvGW5ZoZKfimjrvH7KEwDNGTg,1053
37
+ argus/backend/models/web.py,sha256=olvwMEWtsUy1agqVN3S_ULs3OHNcHLAWyX-oEJAq62E,13649
38
+ argus/backend/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
+ argus/backend/plugins/core.py,sha256=PdRR2n_3avRBjWLEP3KD75cN5y_9NmjTTWAXyimfHDs,9716
40
+ argus/backend/plugins/loader.py,sha256=_LHVTEba_db4V2NaLbUewGrx9jlxxprF0ozf3ESj_VM,1345
41
+ argus/backend/plugins/driver_matrix_tests/controller.py,sha256=ro7S3kwRzuqvDROAvusRrp2vw8q5kVbXkilpMR5f1V4,2323
42
+ argus/backend/plugins/driver_matrix_tests/model.py,sha256=WK_2ix9-WbCB95dn4U_cyDeRQCIfUhMjq1CsUfOqh5I,15615
43
+ argus/backend/plugins/driver_matrix_tests/plugin.py,sha256=FT0Y6nuj_7HKxRoGL00rasEQgKlHnico8GLVqwawcck,700
44
+ argus/backend/plugins/driver_matrix_tests/raw_types.py,sha256=KwbwsvS52RzOZb7_PT7kkYkChNzRH-MpKoO_eeZNDIk,1153
45
+ argus/backend/plugins/driver_matrix_tests/service.py,sha256=nYe_7PfCgclmFrYXTmn3iwPFQQ8KtXSfkXBehlbf8A8,2533
46
+ argus/backend/plugins/driver_matrix_tests/udt.py,sha256=WRtnJU1dZcLXZJQgfU0mgjNzK_DyVhNgLTzr-aXX8K8,1394
47
+ argus/backend/plugins/generic/model.py,sha256=XtLnBlJrOT9yxmlTzzO1Zeo4yFZv3ryWypi8_MtpJWs,3552
48
+ argus/backend/plugins/generic/plugin.py,sha256=FEF_kBe1pXEud17cA6CXZ_3gSdtB04P_BPzQQWttLBQ,362
49
+ argus/backend/plugins/generic/types.py,sha256=xfIjQPX4ZDHnAA5tRX21jcpuWy_tcyKTYsiTC10CS2g,268
50
+ argus/backend/plugins/sct/controller.py,sha256=vt0nc2dMN0-CU8HcHqcnb3_S99oPC6VQiDOsJvUym_k,6692
51
+ argus/backend/plugins/sct/plugin.py,sha256=sHd0fkmFOXTv60Sj7WRHDYqmvXGVdYFTBI9yRpvKTLI,962
52
+ argus/backend/plugins/sct/resource_setup.py,sha256=xQSMhJYHIb2v-T41odMygjcOj9khIiO8JyV3D02Fhwo,10075
53
+ argus/backend/plugins/sct/service.py,sha256=zzVBcQJg5WqngTLaxaKSyVapwM6vyG3d4tgW1UpGZ4E,30331
54
+ argus/backend/plugins/sct/testrun.py,sha256=APbPc-Chh_4PduLwXWPK3yupxHDidjz4d0QkhdL6mPk,11134
55
+ argus/backend/plugins/sct/udt.py,sha256=PJ5EDkjUDuem-ipkplHIXzBwrTwgc_CBvID6S0ycN04,3118
56
+ argus/backend/plugins/sirenada/model.py,sha256=q3YofzagyEHo0SEsUeuCxaR2JkDf4cXiE2cg5MYFkrE,4885
57
+ argus/backend/plugins/sirenada/plugin.py,sha256=6rwKiY2aZwJG0bLZciDWYzFB2Zij_l6aVaTXt5u6vU0,402
58
+ argus/backend/service/admin.py,sha256=pZe8N0hbDSmHZxC9EsFhAdRkquLmXHRHSebeJ1Hmxro,615
59
+ argus/backend/service/argus_service.py,sha256=lYzoyxEkDwabNtSwfnqDs-5eieEdCLm5t2c-H1bmTXg,29612
60
+ argus/backend/service/build_system_monitor.py,sha256=Dj5mEqsDeZIcFhNVAwug1CmzB_cFm9PYhXj_o2pfK9s,8173
61
+ argus/backend/service/client_service.py,sha256=zunnpSfS0NlvgeIpOzmCzvkDAJyN8zUwy_4Yh7QF4Lg,4976
62
+ argus/backend/service/event_service.py,sha256=iYeqxN2QCYTjYB1WPPv4BEFLXG0Oz3TvskkaK4v9pVY,654
63
+ argus/backend/service/github_service.py,sha256=1BWd_1w_nQrq5jfWWAsVigqmjVt7LMFdNgcJT24WYKg,9422
64
+ argus/backend/service/jenkins_service.py,sha256=NkVaR_o-StfAtC1d977qHBUiWrOH8zJQRltktZRsdEY,11264
65
+ argus/backend/service/notification_manager.py,sha256=BSDucHz5rNtS7mvQeReKoMqAyK_HUxG2ce_3szBXWn0,8077
66
+ argus/backend/service/planner_service.py,sha256=OqyvmVUXX0OA1lES2Jb5_dsw3uzTlCFkKIf3iuHDU50,24963
67
+ argus/backend/service/release_manager.py,sha256=sRo1y0_8ckRISvsVqUMZv_BYyuFBq7OPzrkEv9ESVUg,7770
68
+ argus/backend/service/results_service.py,sha256=E3EC9a4R67-tbDRPn4QACe_3rIkVk-olBDnnL16npRE,30618
69
+ argus/backend/service/stats.py,sha256=OnUfKV-qOZqJ8pUB3cZ2FXIyR0oxbGssZA1X9DYyh-c,25650
70
+ argus/backend/service/team_manager_service.py,sha256=z__RxpdasWIDMJI1ddie02qP6E_q_xVAG2x_zc7vIZA,2976
71
+ argus/backend/service/test_lookup.py,sha256=NrhspMyTfg3p0H-C-6GKNwzQlTpUmX9Bw-DUaSdOrG0,6528
72
+ argus/backend/service/testrun.py,sha256=vcAE--tSfxGlCyVC20w9qMFSPK-J-6jAnVLP2LrnoHQ,20128
73
+ argus/backend/service/user.py,sha256=Sj4jnFb5bl9lsAVclPkII9Otyis60RFQYWGvj3F6hAU,10760
74
+ argus/backend/service/views.py,sha256=eVpgvXeUaFeVyBjKXif4Brmq2n7eggtSWdpGxwEJHJ8,9404
75
+ argus/backend/service/views_widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
+ argus/backend/service/views_widgets/graphed_stats.py,sha256=RrvzcWglHNFcF9OsYgNjOI6w138BtTzBSKkaKaNLhYQ,7175
77
+ argus/backend/service/views_widgets/highlights.py,sha256=pSZT6P2W0ce3qefOc1FJ9zbXIEo9ZvlOdi_dyCLqugk,13767
78
+ argus/backend/service/views_widgets/nemesis_stats.py,sha256=wlu7bbTCbmoBClrFvv8Xnm9INIkuNG7hJmDduGkuSWU,1426
79
+ argus/backend/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
+ argus/backend/tests/conftest.py,sha256=WytICjkH5-Sb0LqSqQlwuXFVIXo-SaeOufxK4bBrud8,6797
81
+ argus/backend/tests/client_service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
+ argus/backend/tests/client_service/test_submit_results.py,sha256=BtCGmqogmRguc1yMm87OFYD19XnVTCdFVKTnJ8yWBW0,3176
83
+ argus/backend/tests/results_service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
+ argus/backend/tests/results_service/test_best_results.py,sha256=EF4beEYQq6bBDRPTESpn9qGFbLmsNsp4g35KDR1JNGE,9214
85
+ argus/backend/tests/results_service/test_cell.py,sha256=lVgD2V4Hx1Ycf-G0SSvU8u7IXaft1VlQEprEEUn2lIM,2448
86
+ argus/backend/tests/results_service/test_chartjs_additional_functions.py,sha256=k9EhJ8vO_ghAsXxBzAsB3EvsElY_vUkPx9Qk2EURQv4,10642
87
+ argus/backend/tests/results_service/test_create_chartjs.py,sha256=wYidZEFaC70gZC917UYWGzcfouxwrQ9yY2C8h6VqCuE,7914
88
+ argus/backend/tests/results_service/test_result_metadata.py,sha256=IhhY9eIGG-SO726KG9a0jTZv6KQ3BOcqxPrxCw3Ot_4,4394
89
+ argus/backend/tests/results_service/test_results_service.py,sha256=G5RRPAuTWkpT2aHUl0PE4OoIu7LC3mfvKn4eJHnccmU,6952
90
+ argus/backend/tests/results_service/test_validation_rules.py,sha256=jwD-vIMZLM6n_vus9SmqTdWk9XrrjDigVIrA6a1wAEo,11798
91
+ argus/backend/tests/view_widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
+ argus/backend/tests/view_widgets/test_highlights_api.py,sha256=J7jT8tmNi5hPPCPKg4hSG1GEWHTbvz1dSsDIf38u5YA,17933
93
+ argus/backend/util/common.py,sha256=lWvfvcBRV7njJu0wwdme9hvB0Lpd4wfIGwgaSEVVVtA,1721
94
+ argus/backend/util/config.py,sha256=1HpHm8Du6yz61gwAE1vR6uwuHCStaSerirbEhBLnDws,927
95
+ argus/backend/util/encoders.py,sha256=sv1kxa4X4t_k2FiFFLqW8M9emwqxgZplQ4f82odgR68,1612
96
+ argus/backend/util/logsetup.py,sha256=RQTrfl1CLfl2moZxqbCdJM7PGyZl2HEBxG5LYTDDCNc,2406
97
+ argus/backend/util/module_loaders.py,sha256=AcIlX-VRmUQ2THFKT8DLefLSE62Eub2hCxIosg3WgE0,698
98
+ argus/backend/util/send_email.py,sha256=b3ZVx3bbBxArlyM2al-WgM_BDQtnXvjXs_-uGVNxGsg,3093
99
+ argus/client/__init__.py,sha256=bO9_j5_jK5kvTHR46KEZ0Y-p0li7CBW8QSd-K5Ez4vA,42
100
+ argus/client/base.py,sha256=QlJDC-E6OXf33FtPagOuH1wWsTd9NEBJO2lBUL5eAqE,8143
101
+ argus/client/generic_result.py,sha256=iwQiZLKVRDfSprGp2C8_v28bTSWxW5pp3k1kIjjH4dI,6128
102
+ argus/client/driver_matrix_tests/cli.py,sha256=JpI0v1hzRQr9KkrxO7D4hEbkzumexFFC_iRM8558zHU,8375
103
+ argus/client/driver_matrix_tests/client.py,sha256=fFucqwog6WnDnje1xB-4ERfwHXblXP4upmtt9RtOkls,2806
104
+ argus/client/generic/cli.py,sha256=0mTTjbeB0iDiR5kKim9JYu_0PetCHiJUf8VYvdvmLHo,4570
105
+ argus/client/generic/client.py,sha256=D9j2047guXO0SgkcWQSftuntvj3LtTSAxBMBr4-4v58,1915
106
+ argus/client/sct/client.py,sha256=q5W0RL1BhA6Foc9rA10jLsnQ7MNGWgjbmy3_E0ePjeI,11436
107
+ argus/client/sct/types.py,sha256=VLgVe7qPmJtCLqtPnuX8N8kMKZq-iY3SKz68nvU6nJ4,371
108
+ argus/client/sirenada/client.py,sha256=lzhmBFAUnvPSAJfCjeQ0L5nbp50Q0YLHwIondO9rvt4,6321
109
+ argus/client/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
110
+ argus/client/tests/conftest.py,sha256=du-l80SCRcDsZWQk-yHg5YlfMFofu62Bv5OwwNhlUbo,388
111
+ argus/client/tests/test_package.py,sha256=ml5it_LFdj3GPsKdGt_VQN3ivFtOG2jkYtApzs6NSVM,1652
112
+ argus/client/tests/test_results.py,sha256=ep3qdFMWra7UbcnH1R7UOiaii3yUrPllQU_8G-bWYGM,8404
113
+ argus/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
+ argus/common/enums.py,sha256=EhTQrgedlEz5sDYJ1gFnE2eC2nc1neQCRgzOgssQvWY,749
115
+ argus/common/sct_types.py,sha256=csRkFdYkjLw1qaJhikW2NKvzdA1DQ1a93nwtKUB1gRs,1329
116
+ argus/common/sirenada_types.py,sha256=CZH2JXA1KYUj29eXYe8rIAAWdN1XPqOsDPAXvM25bVQ,698
117
+ argus_alm-0.15.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
118
+ argus_alm-0.15.2.dist-info/METADATA,sha256=2whW37cy0137WYwNDiWYx8KdVTdZyOzwTEXb6onLjFk,4860
119
+ argus_alm-0.15.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
120
+ argus_alm-0.15.2.dist-info/entry_points.txt,sha256=5mSBLLPndhFHKY5M9SCF8WhDBAArrj-S2IL-uoiaJiE,140
121
+ argus_alm-0.15.2.dist-info/top_level.txt,sha256=Pea173vTU-Et8xmNCctS34REW4cH0Xmjyiztu0HuM0c,6
122
+ argus_alm-0.15.2.dist-info/RECORD,,
@@ -1,4 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.9.0
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
+
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ argus-client-generic = argus.client.generic.cli:cli
3
+ argus-driver-matrix-client = argus.client.driver_matrix_tests.cli:cli
@@ -0,0 +1 @@
1
+ argus
@@ -1,20 +0,0 @@
1
- argus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- argus/client/__init__.py,sha256=bO9_j5_jK5kvTHR46KEZ0Y-p0li7CBW8QSd-K5Ez4vA,42
3
- argus/client/base.py,sha256=MzXSJlfsP3BFqA8y8vZjAKoKJbQjayPQ8lcKtV-WkCY,8194
4
- argus/client/driver_matrix_tests/cli.py,sha256=Iq0k78R9vtbxPUUDB6DqrtuT6XTZBnqLOmPQ4F_6M3o,8174
5
- argus/client/driver_matrix_tests/client.py,sha256=fFucqwog6WnDnje1xB-4ERfwHXblXP4upmtt9RtOkls,2806
6
- argus/client/generic/cli.py,sha256=3b1kTG7SzRjSGHTn93KNTCkNPzVs6pFtlOr5GU1p_C4,4541
7
- argus/client/generic/client.py,sha256=k6y_blrCHprZ9l9LYZPWmcYJxHxlu8TQzQPyAHsHdoo,1914
8
- argus/client/generic_result.py,sha256=tZe9IvbhCy-drk31t0FQwVL2EdkF5m8Iwkn4VHGmiK0,4324
9
- argus/client/sct/client.py,sha256=NwcztOz5gLz0Rb5-PQJ4dOkXktHm95y561IRDce-XQo,11439
10
- argus/client/sct/types.py,sha256=VLgVe7qPmJtCLqtPnuX8N8kMKZq-iY3SKz68nvU6nJ4,371
11
- argus/client/sirenada/client.py,sha256=IFH1Nz29rGCs0DeNJOMyOvrd_39Q9oossoR_qOlOa40,6275
12
- argus/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- argus/common/enums.py,sha256=EhTQrgedlEz5sDYJ1gFnE2eC2nc1neQCRgzOgssQvWY,749
14
- argus/common/sct_types.py,sha256=Gw1y4iqYguqNqTh_GopLDFho8vuGaOGuK7fjaHYhAOQ,1326
15
- argus/common/sirenada_types.py,sha256=Gm3XMK9YJoozVaeM9XE7n8iRxA6PKBrS23Mo2vJfdLs,697
16
- argus_alm-0.14.2.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
17
- argus_alm-0.14.2.dist-info/METADATA,sha256=tnWlmhaBV7oSi031GVkCDb5EqzuO9-27Go7SeNfXx7U,3508
18
- argus_alm-0.14.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
19
- argus_alm-0.14.2.dist-info/entry_points.txt,sha256=pcYW8nxZuDaymxE8tn86K0dq8eEodUdiS0sSvwEQ_zU,137
20
- argus_alm-0.14.2.dist-info/RECORD,,
@@ -1,4 +0,0 @@
1
- [console_scripts]
2
- argus-client-generic=argus.client.generic.cli:cli
3
- argus-driver-matrix-client=argus.client.driver_matrix_tests.cli:cli
4
-