argus-alm 0.15.2__py3-none-any.whl → 0.15.5__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.
- argus/_version.py +2 -2
- argus/client/base.py +14 -8
- argus/client/generic/cli.py +3 -2
- argus/client/generic/client.py +2 -1
- argus/client/generic_result.py +6 -1
- argus/client/sct/client.py +2 -1
- argus/common/enums.py +16 -0
- {argus_alm-0.15.2.dist-info → argus_alm-0.15.5.dist-info}/METADATA +4 -4
- argus_alm-0.15.5.dist-info/RECORD +22 -0
- argus/backend/.gitkeep +0 -0
- argus/backend/__init__.py +0 -0
- argus/backend/cli.py +0 -57
- argus/backend/controller/__init__.py +0 -0
- argus/backend/controller/admin.py +0 -20
- argus/backend/controller/admin_api.py +0 -355
- argus/backend/controller/api.py +0 -589
- argus/backend/controller/auth.py +0 -67
- argus/backend/controller/client_api.py +0 -109
- argus/backend/controller/main.py +0 -316
- argus/backend/controller/notification_api.py +0 -72
- argus/backend/controller/notifications.py +0 -13
- argus/backend/controller/planner_api.py +0 -194
- argus/backend/controller/team.py +0 -129
- argus/backend/controller/team_ui.py +0 -19
- argus/backend/controller/testrun_api.py +0 -513
- argus/backend/controller/view_api.py +0 -188
- argus/backend/controller/views_widgets/__init__.py +0 -0
- argus/backend/controller/views_widgets/graphed_stats.py +0 -54
- argus/backend/controller/views_widgets/graphs.py +0 -68
- argus/backend/controller/views_widgets/highlights.py +0 -135
- argus/backend/controller/views_widgets/nemesis_stats.py +0 -26
- argus/backend/controller/views_widgets/summary.py +0 -43
- argus/backend/db.py +0 -98
- argus/backend/error_handlers.py +0 -41
- argus/backend/events/event_processors.py +0 -34
- argus/backend/models/__init__.py +0 -0
- argus/backend/models/argus_ai.py +0 -24
- argus/backend/models/github_issue.py +0 -60
- argus/backend/models/plan.py +0 -24
- argus/backend/models/result.py +0 -187
- argus/backend/models/runtime_store.py +0 -58
- argus/backend/models/view_widgets.py +0 -25
- argus/backend/models/web.py +0 -403
- argus/backend/plugins/__init__.py +0 -0
- argus/backend/plugins/core.py +0 -248
- argus/backend/plugins/driver_matrix_tests/controller.py +0 -66
- argus/backend/plugins/driver_matrix_tests/model.py +0 -429
- argus/backend/plugins/driver_matrix_tests/plugin.py +0 -21
- argus/backend/plugins/driver_matrix_tests/raw_types.py +0 -62
- argus/backend/plugins/driver_matrix_tests/service.py +0 -61
- argus/backend/plugins/driver_matrix_tests/udt.py +0 -42
- argus/backend/plugins/generic/model.py +0 -86
- argus/backend/plugins/generic/plugin.py +0 -15
- argus/backend/plugins/generic/types.py +0 -14
- argus/backend/plugins/loader.py +0 -39
- argus/backend/plugins/sct/controller.py +0 -224
- argus/backend/plugins/sct/plugin.py +0 -37
- argus/backend/plugins/sct/resource_setup.py +0 -177
- argus/backend/plugins/sct/service.py +0 -682
- argus/backend/plugins/sct/testrun.py +0 -288
- argus/backend/plugins/sct/udt.py +0 -100
- argus/backend/plugins/sirenada/model.py +0 -118
- argus/backend/plugins/sirenada/plugin.py +0 -16
- argus/backend/service/admin.py +0 -26
- argus/backend/service/argus_service.py +0 -696
- argus/backend/service/build_system_monitor.py +0 -185
- argus/backend/service/client_service.py +0 -127
- argus/backend/service/event_service.py +0 -18
- argus/backend/service/github_service.py +0 -233
- argus/backend/service/jenkins_service.py +0 -269
- argus/backend/service/notification_manager.py +0 -159
- argus/backend/service/planner_service.py +0 -608
- argus/backend/service/release_manager.py +0 -229
- argus/backend/service/results_service.py +0 -690
- argus/backend/service/stats.py +0 -610
- argus/backend/service/team_manager_service.py +0 -82
- argus/backend/service/test_lookup.py +0 -172
- argus/backend/service/testrun.py +0 -489
- argus/backend/service/user.py +0 -308
- argus/backend/service/views.py +0 -219
- argus/backend/service/views_widgets/__init__.py +0 -0
- argus/backend/service/views_widgets/graphed_stats.py +0 -180
- argus/backend/service/views_widgets/highlights.py +0 -374
- argus/backend/service/views_widgets/nemesis_stats.py +0 -34
- argus/backend/template_filters.py +0 -27
- argus/backend/tests/__init__.py +0 -0
- argus/backend/tests/client_service/__init__.py +0 -0
- argus/backend/tests/client_service/test_submit_results.py +0 -79
- argus/backend/tests/conftest.py +0 -180
- argus/backend/tests/results_service/__init__.py +0 -0
- argus/backend/tests/results_service/test_best_results.py +0 -178
- argus/backend/tests/results_service/test_cell.py +0 -65
- argus/backend/tests/results_service/test_chartjs_additional_functions.py +0 -259
- argus/backend/tests/results_service/test_create_chartjs.py +0 -220
- argus/backend/tests/results_service/test_result_metadata.py +0 -100
- argus/backend/tests/results_service/test_results_service.py +0 -203
- argus/backend/tests/results_service/test_validation_rules.py +0 -213
- argus/backend/tests/view_widgets/__init__.py +0 -0
- argus/backend/tests/view_widgets/test_highlights_api.py +0 -532
- argus/backend/util/common.py +0 -65
- argus/backend/util/config.py +0 -38
- argus/backend/util/encoders.py +0 -56
- argus/backend/util/logsetup.py +0 -80
- argus/backend/util/module_loaders.py +0 -30
- argus/backend/util/send_email.py +0 -91
- argus/client/tests/__init__.py +0 -0
- argus/client/tests/conftest.py +0 -19
- argus/client/tests/test_package.py +0 -45
- argus/client/tests/test_results.py +0 -224
- argus_alm-0.15.2.dist-info/RECORD +0 -122
- {argus_alm-0.15.2.dist-info → argus_alm-0.15.5.dist-info}/WHEEL +0 -0
- {argus_alm-0.15.2.dist-info → argus_alm-0.15.5.dist-info}/entry_points.txt +0 -0
- {argus_alm-0.15.2.dist-info → argus_alm-0.15.5.dist-info}/licenses/LICENSE +0 -0
- {argus_alm-0.15.2.dist-info → argus_alm-0.15.5.dist-info}/top_level.txt +0 -0
argus/backend/util/logsetup.py
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
from logging.config import dictConfig
|
|
3
|
-
from flask import has_request_context, request
|
|
4
|
-
|
|
5
|
-
LOG_FORMAT_REQUEST = "[%(levelcolor)s%(levelname)s%(colorreset)s] %(grey)s<%(remote_addr)s - %(url)s - %(endpoint)s>%(colorreset)s - %(module)s::%(funcName)s - %(message)s"
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class ArgusRequestLogFormatter(logging.Formatter):
|
|
9
|
-
yellow = "\x1b[33;20m"
|
|
10
|
-
red = "\x1b[31;20m"
|
|
11
|
-
blue = "\x1b[34;20m"
|
|
12
|
-
bold_red = "\x1b[31;1m"
|
|
13
|
-
reset = "\x1b[0m"
|
|
14
|
-
grey = "\x1b[38;2;200;200;200m"
|
|
15
|
-
color_map = {
|
|
16
|
-
logging.DEBUG: grey,
|
|
17
|
-
logging.INFO: blue,
|
|
18
|
-
logging.WARNING: yellow,
|
|
19
|
-
logging.ERROR: red,
|
|
20
|
-
logging.CRITICAL: bold_red
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
def format(self, record: logging.LogRecord) -> str:
|
|
24
|
-
record.grey = self.grey
|
|
25
|
-
record.colorreset = self.reset
|
|
26
|
-
record.levelcolor = self.color_map.get(record.levelno, self.grey)
|
|
27
|
-
if has_request_context():
|
|
28
|
-
record.url = request.url
|
|
29
|
-
record.remote_addr = request.remote_addr
|
|
30
|
-
record.endpoint = request.endpoint
|
|
31
|
-
else:
|
|
32
|
-
record.url = ''
|
|
33
|
-
record.remote_addr = ''
|
|
34
|
-
record.endpoint = ''
|
|
35
|
-
return super().format(record)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def setup_application_logging(log_level=logging.INFO):
|
|
39
|
-
dictConfig({
|
|
40
|
-
'version': 1,
|
|
41
|
-
'formatters': {
|
|
42
|
-
'request': {
|
|
43
|
-
'class': f"{__name__}.{ArgusRequestLogFormatter.__name__}",
|
|
44
|
-
'format': LOG_FORMAT_REQUEST,
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
'handlers': {
|
|
48
|
-
'main': {
|
|
49
|
-
'class': 'logging.StreamHandler',
|
|
50
|
-
'stream': 'ext://sys.stderr',
|
|
51
|
-
'formatter': 'request'
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
'loggers': {
|
|
55
|
-
'cassandra': {
|
|
56
|
-
'level': log_level,
|
|
57
|
-
'handlers': ['main']
|
|
58
|
-
},
|
|
59
|
-
'argus': {
|
|
60
|
-
'level': log_level,
|
|
61
|
-
'handlers': ['main']
|
|
62
|
-
},
|
|
63
|
-
'argus_backend': {
|
|
64
|
-
'level': log_level,
|
|
65
|
-
'handlers': ['main']
|
|
66
|
-
},
|
|
67
|
-
'werkzeug': {
|
|
68
|
-
'level': log_level,
|
|
69
|
-
'handlers': ['main']
|
|
70
|
-
},
|
|
71
|
-
'uwsgi': {
|
|
72
|
-
'level': log_level,
|
|
73
|
-
'handlers': ['main']
|
|
74
|
-
},
|
|
75
|
-
'__main__': {
|
|
76
|
-
'level': log_level,
|
|
77
|
-
'handlers': ['main']
|
|
78
|
-
},
|
|
79
|
-
}
|
|
80
|
-
})
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import sys
|
|
2
|
-
from functools import wraps
|
|
3
|
-
from typing import Callable
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
def is_filter(filter_name: str) -> Callable:
|
|
7
|
-
def outer_wrapper(func):
|
|
8
|
-
func.is_filter = True
|
|
9
|
-
func.filter_name = filter_name
|
|
10
|
-
|
|
11
|
-
@wraps(func)
|
|
12
|
-
def wrapper(*args, **kwargs):
|
|
13
|
-
return func(*args, **kwargs)
|
|
14
|
-
|
|
15
|
-
return wrapper
|
|
16
|
-
|
|
17
|
-
return outer_wrapper
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def export_functions(module_name: str, attr: str) -> list[Callable]:
|
|
21
|
-
module = sys.modules[module_name]
|
|
22
|
-
funcs = []
|
|
23
|
-
|
|
24
|
-
for member in dir(module):
|
|
25
|
-
export = getattr(module, member)
|
|
26
|
-
applicable_export = getattr(export, attr, False)
|
|
27
|
-
if applicable_export:
|
|
28
|
-
funcs.append(export)
|
|
29
|
-
|
|
30
|
-
return funcs
|
argus/backend/util/send_email.py
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import smtplib
|
|
2
|
-
from typing import List, Set
|
|
3
|
-
from smtplib import SMTPException
|
|
4
|
-
|
|
5
|
-
from email.mime.multipart import MIMEMultipart
|
|
6
|
-
from email.mime.text import MIMEText
|
|
7
|
-
from flask import current_app
|
|
8
|
-
from flask import render_template
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class Email:
|
|
12
|
-
"""
|
|
13
|
-
Responsible for sending emails
|
|
14
|
-
"""
|
|
15
|
-
_attachments_size_limit = 10485760 # 10Mb = 20 * 1024 * 1024
|
|
16
|
-
_body_size_limit = 26214400 # 25Mb = 20 * 1024 * 1024
|
|
17
|
-
|
|
18
|
-
def __init__(self, init_connection=True):
|
|
19
|
-
self.sender: str = ""
|
|
20
|
-
self._password: str = ""
|
|
21
|
-
self._user: str = ""
|
|
22
|
-
self._server_host: str = ""
|
|
23
|
-
self._server_port: int = 0
|
|
24
|
-
self._connection: smtplib.SMTP | None = None
|
|
25
|
-
self._retrieve_credentials()
|
|
26
|
-
if init_connection:
|
|
27
|
-
self._connect()
|
|
28
|
-
|
|
29
|
-
def _retrieve_credentials(self):
|
|
30
|
-
self.sender = current_app.config["EMAIL_SENDER"]
|
|
31
|
-
self._password = current_app.config["EMAIL_SENDER_PASS"]
|
|
32
|
-
self._user = current_app.config["EMAIL_SENDER_USER"]
|
|
33
|
-
self._server_host = current_app.config["EMAIL_SERVER"]
|
|
34
|
-
self._server_port = int(current_app.config["EMAIL_SERVER_PORT"])
|
|
35
|
-
|
|
36
|
-
def _connect(self):
|
|
37
|
-
try:
|
|
38
|
-
self._connection = smtplib.SMTP(host=self._server_host, port=self._server_port)
|
|
39
|
-
self._connection.ehlo()
|
|
40
|
-
self._connection.starttls()
|
|
41
|
-
self._connection.login(user=self._user, password=self._password)
|
|
42
|
-
except SMTPException as details:
|
|
43
|
-
current_app.logger.error("Failed to initialize smtp session %s", details)
|
|
44
|
-
|
|
45
|
-
def _is_connection_open(self):
|
|
46
|
-
if not self._connection:
|
|
47
|
-
return False
|
|
48
|
-
try:
|
|
49
|
-
status, _ = self._connection.noop()
|
|
50
|
-
except SMTPException:
|
|
51
|
-
status = -1
|
|
52
|
-
|
|
53
|
-
return True if status == 250 else False
|
|
54
|
-
|
|
55
|
-
def _prepare_email(self, subject: str,
|
|
56
|
-
content: str,
|
|
57
|
-
recipients: List[str],
|
|
58
|
-
html: bool = True):
|
|
59
|
-
msg = MIMEMultipart()
|
|
60
|
-
msg['subject'] = subject
|
|
61
|
-
msg['from'] = self.sender
|
|
62
|
-
assert recipients, "No recipients provided"
|
|
63
|
-
msg['to'] = ','.join(recipients)
|
|
64
|
-
if html:
|
|
65
|
-
text_part = MIMEText(content, "html")
|
|
66
|
-
else:
|
|
67
|
-
text_part = MIMEText(content, "plain")
|
|
68
|
-
msg.attach(text_part)
|
|
69
|
-
email = msg.as_string()
|
|
70
|
-
return email
|
|
71
|
-
|
|
72
|
-
def send(self, subject, content, recipients, html=True):
|
|
73
|
-
"""
|
|
74
|
-
:param subject: text
|
|
75
|
-
:param content: text/html
|
|
76
|
-
:param recipients: iterable, list of recipients
|
|
77
|
-
:param html: True/False
|
|
78
|
-
:param files: paths of the files that will be attached to the email
|
|
79
|
-
:return:
|
|
80
|
-
"""
|
|
81
|
-
email = self._prepare_email(subject, content, recipients, html)
|
|
82
|
-
self._send_email(recipients, email)
|
|
83
|
-
|
|
84
|
-
def _send_email(self, recipients, email):
|
|
85
|
-
if not self._is_connection_open():
|
|
86
|
-
self._connect()
|
|
87
|
-
self._connection.sendmail(self.sender, recipients, email)
|
|
88
|
-
|
|
89
|
-
def __del__(self):
|
|
90
|
-
if self._connection:
|
|
91
|
-
self._connection.quit()
|
argus/client/tests/__init__.py
DELETED
|
File without changes
|
argus/client/tests/conftest.py
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import shutil
|
|
2
|
-
from pathlib import Path
|
|
3
|
-
|
|
4
|
-
import pytest
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
@pytest.fixture(scope="module", autouse=True)
|
|
8
|
-
def test_dir():
|
|
9
|
-
return Path(__file__).parent
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
@pytest.fixture(scope="module", autouse=True)
|
|
13
|
-
def env_dir(test_dir):
|
|
14
|
-
env_dir = test_dir / 'test_env'
|
|
15
|
-
if env_dir.exists():
|
|
16
|
-
shutil.rmtree(env_dir)
|
|
17
|
-
yield env_dir
|
|
18
|
-
if env_dir.exists():
|
|
19
|
-
shutil.rmtree(env_dir)
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import subprocess
|
|
2
|
-
import venv
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
|
|
5
|
-
import pytest
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def run_command(command: list[str], cwd: str = None, env=None) -> subprocess.CompletedProcess:
|
|
9
|
-
result = subprocess.run(command, cwd=cwd, check=True, stdout=subprocess.PIPE,
|
|
10
|
-
stderr=subprocess.PIPE, text=True, env=env)
|
|
11
|
-
print(result.stdout)
|
|
12
|
-
return result
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
@pytest.fixture(scope='module', name='build_and_install')
|
|
16
|
-
def fixture_build_and_install(test_dir: Path, env_dir: Path):
|
|
17
|
-
"""Fixture to build and install the package."""
|
|
18
|
-
dist_dir = env_dir / 'dist'
|
|
19
|
-
|
|
20
|
-
# Build the package
|
|
21
|
-
run_command(['uv', 'build', '-o', str(dist_dir)], cwd=str(test_dir.parent.parent.parent))
|
|
22
|
-
|
|
23
|
-
package_path = next(dist_dir.glob("argus_alm-*-py3-none-any.whl"))
|
|
24
|
-
|
|
25
|
-
# install
|
|
26
|
-
run_command(['uv', 'tool', 'install', str(package_path)])
|
|
27
|
-
|
|
28
|
-
yield package_path
|
|
29
|
-
|
|
30
|
-
run_command(['uv', 'tool', 'uninstall', 'argus-alm'])
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def test_should_import_installed_package(env_dir):
|
|
34
|
-
|
|
35
|
-
python_exec = ['uv', 'tool', 'run', '--from', 'argus-alm', 'python']
|
|
36
|
-
run_command(python_exec + ['-c', 'import argus.client; import argus.common; '
|
|
37
|
-
'from argus.client.sct.client import ArgusSCTClient'])
|
|
38
|
-
with pytest.raises(subprocess.CalledProcessError):
|
|
39
|
-
run_command(python_exec + ['-c', 'import argus.client.tests.test_package'])
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def test_should_run_cli(build_and_install):
|
|
43
|
-
"""Test that the CLI can be run successfully."""
|
|
44
|
-
run_command(['uv', 'tool', 'run', '--from', 'argus-alm', 'argus-client-generic', '--help'])
|
|
45
|
-
run_command(['uv', 'tool', 'run', '--from', 'argus-alm', 'argus-driver-matrix-client', '--help'])
|
|
@@ -1,224 +0,0 @@
|
|
|
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()
|
|
@@ -1,122 +0,0 @@
|
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|