hardpy 0.10.0__tar.gz → 0.11.0__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.
- {hardpy-0.10.0 → hardpy-0.11.0}/PKG-INFO +1 -1
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/__init__.py +2 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/cli/cli.py +0 -12
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/cli/template.py +0 -4
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/common/config.py +11 -21
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/common/stand_cloud/registration.py +28 -1
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/common/stand_cloud/token_storage.py +5 -1
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/asset-manifest.json +3 -3
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/index.html +1 -1
- hardpy-0.11.0/hardpy/hardpy_panel/frontend/dist/static/js/main.114c5914.js +3 -0
- hardpy-0.11.0/hardpy/hardpy_panel/frontend/dist/static/js/main.114c5914.js.map +1 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/base_store.py +7 -2
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/const.py +3 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/schema/v1.py +22 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/plugin.py +4 -12
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/pytest_call.py +30 -41
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/pytest_wrapper.py +7 -17
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/reporter/base.py +9 -4
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/reporter/hook_reporter.py +7 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/__init__.py +2 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/connection_data.py +0 -4
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/dialog_box.py +59 -6
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/exception.py +1 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/pyproject.toml +1 -1
- hardpy-0.10.0/hardpy/hardpy_panel/frontend/dist/static/js/main.8a7d8f7d.js +0 -3
- hardpy-0.10.0/hardpy/hardpy_panel/frontend/dist/static/js/main.8a7d8f7d.js.map +0 -1
- {hardpy-0.10.0 → hardpy-0.11.0}/.gitignore +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/LICENSE +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/README.md +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/cli/__init__.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/common/__init__.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/common/stand_cloud/__init__.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/common/stand_cloud/connector.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/common/stand_cloud/exception.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/common/stand_cloud/oauth_callback.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/__init__.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/api.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/favicon.ico +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/logo192.png +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/logo512.png +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/manifest.json +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/css/main.e8a862f1.css +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/css/main.e8a862f1.css.map +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/808.ce070002.chunk.js +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/808.ce070002.chunk.js.map +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-16px-paths.d605910e.chunk.js +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-16px-paths.d605910e.chunk.js.map +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-20px-paths.7ee05cc8.chunk.js +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-20px-paths.7ee05cc8.chunk.js.map +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths-loader.0aa89747.chunk.js +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths-loader.0aa89747.chunk.js.map +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.chunk.js +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.chunk.js.map +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js.map +0 -0
- /hardpy-0.10.0/hardpy/hardpy_panel/frontend/dist/static/js/main.8a7d8f7d.js.LICENSE.txt → /hardpy-0.11.0/hardpy/hardpy_panel/frontend/dist/static/js/main.114c5914.js.LICENSE.txt +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.520846c6beb41df528c8.eot +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.5c52b39c697f2323ce8b.svg +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.84db1772f4bfb529f64f.woff +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.b67ee1736e20e37a3225.woff2 +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.e02ecf515378db143652.ttf +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.429cacb8accf72488451.ttf +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.6ae3791ee2d86fc228a6.svg +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.8cecf62de42997e4d82f.woff2 +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.afbadb627d43b7857223.eot +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.e857f5a5132b8bfa71a1.woff +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/logo_smol.5b16f92447a4a9e80331.png +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/__init__.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/__init__.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/base_connector.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/base_server.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/runstore.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/schema/__init__.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/statestore.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/reporter/__init__.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/reporter/runner_reporter.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/result/__init__.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/result/couchdb_config.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/result/report_loader/__init__.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/result/report_loader/couchdb_loader.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/result/report_loader/stand_cloud_loader.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/result/report_reader/__init__.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/result/report_reader/couchdb_reader.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/const.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/machineid.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/node_info.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/progress_calculator.py +0 -0
- {hardpy-0.10.0 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/singleton.py +0 -0
|
@@ -30,6 +30,7 @@ from hardpy.pytest_hardpy.utils import (
|
|
|
30
30
|
DuplicateSerialNumberError,
|
|
31
31
|
DuplicateTestStandLocationError,
|
|
32
32
|
DuplicateTestStandNameError,
|
|
33
|
+
HTMLComponent,
|
|
33
34
|
ImageComponent,
|
|
34
35
|
MultistepWidget,
|
|
35
36
|
NumericInputWidget,
|
|
@@ -48,6 +49,7 @@ __all__ = [
|
|
|
48
49
|
"DuplicateSerialNumberError",
|
|
49
50
|
"DuplicateTestStandLocationError",
|
|
50
51
|
"DuplicateTestStandNameError",
|
|
52
|
+
"HTMLComponent",
|
|
51
53
|
"ImageComponent",
|
|
52
54
|
"MultistepWidget",
|
|
53
55
|
"NumericInputWidget",
|
|
@@ -59,14 +59,6 @@ def init( # noqa: PLR0913
|
|
|
59
59
|
default=default_config.frontend.port,
|
|
60
60
|
help="Specify a frontend port.",
|
|
61
61
|
),
|
|
62
|
-
socket_host: str = typer.Option(
|
|
63
|
-
default=default_config.socket.host,
|
|
64
|
-
help="Specify a socket host.",
|
|
65
|
-
),
|
|
66
|
-
socket_port: int = typer.Option(
|
|
67
|
-
default=default_config.socket.port,
|
|
68
|
-
help="Specify a socket port.",
|
|
69
|
-
),
|
|
70
62
|
sc_address: str = typer.Option(
|
|
71
63
|
default="",
|
|
72
64
|
help="Specify a StandCloud address.",
|
|
@@ -87,8 +79,6 @@ def init( # noqa: PLR0913
|
|
|
87
79
|
database_port (int): Database port
|
|
88
80
|
frontend_host (str): Panel operator host
|
|
89
81
|
frontend_port (int): Panel operator port
|
|
90
|
-
socket_host (str): Socket host
|
|
91
|
-
socket_port (int): Socket port
|
|
92
82
|
sc_address (str): StandCloud address
|
|
93
83
|
sc_connection_only (bool): Flag to check StandCloud service availability
|
|
94
84
|
"""
|
|
@@ -101,8 +91,6 @@ def init( # noqa: PLR0913
|
|
|
101
91
|
database_port=database_port,
|
|
102
92
|
frontend_host=frontend_host,
|
|
103
93
|
frontend_port=frontend_port,
|
|
104
|
-
socket_host=socket_host,
|
|
105
|
-
socket_port=socket_port,
|
|
106
94
|
sc_address=sc_address,
|
|
107
95
|
sc_connection_only=sc_connection_only,
|
|
108
96
|
)
|
|
@@ -138,8 +138,6 @@ log_cli_format = %%(asctime)s [%%(levelname)s] %%(message)s
|
|
|
138
138
|
log_cli_date_format = %H:%M:%S
|
|
139
139
|
addopts = --hardpy-pt
|
|
140
140
|
--hardpy-db-url http://{}:{}@{}:{}/
|
|
141
|
-
--hardpy-sh {}
|
|
142
|
-
--hardpy-sp {}
|
|
143
141
|
"""
|
|
144
142
|
|
|
145
143
|
test_1_py = """import pytest
|
|
@@ -207,8 +205,6 @@ class TemplateGenerator:
|
|
|
207
205
|
self._config.database.password,
|
|
208
206
|
self._config.database.host,
|
|
209
207
|
self._config.database.port,
|
|
210
|
-
self._config.socket.host,
|
|
211
|
-
self._config.socket.port,
|
|
212
208
|
)
|
|
213
209
|
|
|
214
210
|
@property
|
|
@@ -42,14 +42,6 @@ class FrontendConfig(BaseModel):
|
|
|
42
42
|
port: int = 8000
|
|
43
43
|
|
|
44
44
|
|
|
45
|
-
class SocketConfig(BaseModel):
|
|
46
|
-
"""Socket configuration."""
|
|
47
|
-
|
|
48
|
-
model_config = ConfigDict(extra="forbid")
|
|
49
|
-
|
|
50
|
-
host: str = "localhost"
|
|
51
|
-
port: int = 6525
|
|
52
|
-
|
|
53
45
|
class StandCloudConfig(BaseModel):
|
|
54
46
|
"""StandCloud configuration."""
|
|
55
47
|
|
|
@@ -58,7 +50,7 @@ class StandCloudConfig(BaseModel):
|
|
|
58
50
|
address: str = ""
|
|
59
51
|
connection_only: bool = False
|
|
60
52
|
|
|
61
|
-
class HardpyConfig(BaseModel):
|
|
53
|
+
class HardpyConfig(BaseModel, extra="allow"):
|
|
62
54
|
"""HardPy configuration."""
|
|
63
55
|
|
|
64
56
|
model_config = ConfigDict(extra="forbid")
|
|
@@ -67,7 +59,6 @@ class HardpyConfig(BaseModel):
|
|
|
67
59
|
tests_dir: str = "tests"
|
|
68
60
|
database: DatabaseConfig = DatabaseConfig()
|
|
69
61
|
frontend: FrontendConfig = FrontendConfig()
|
|
70
|
-
socket: SocketConfig = SocketConfig()
|
|
71
62
|
stand_cloud: StandCloudConfig = StandCloudConfig()
|
|
72
63
|
|
|
73
64
|
|
|
@@ -87,8 +78,6 @@ class ConfigManager:
|
|
|
87
78
|
database_port: int,
|
|
88
79
|
frontend_host: str,
|
|
89
80
|
frontend_port: int,
|
|
90
|
-
socket_host: str,
|
|
91
|
-
socket_port: int,
|
|
92
81
|
sc_address: str = "",
|
|
93
82
|
sc_connection_only: bool = False,
|
|
94
83
|
) -> None:
|
|
@@ -102,8 +91,6 @@ class ConfigManager:
|
|
|
102
91
|
database_port (int): Database port.
|
|
103
92
|
frontend_host (str): Operator panel host.
|
|
104
93
|
frontend_port (int): Operator panel port.
|
|
105
|
-
socket_host (str): Socket host.
|
|
106
|
-
socket_port (int): Socket port.
|
|
107
94
|
sc_address (str): StandCloud address.
|
|
108
95
|
sc_connection_only (bool): StandCloud check availability.
|
|
109
96
|
"""
|
|
@@ -114,8 +101,6 @@ class ConfigManager:
|
|
|
114
101
|
cls.obj.database.port = database_port
|
|
115
102
|
cls.obj.frontend.host = frontend_host
|
|
116
103
|
cls.obj.frontend.port = frontend_port
|
|
117
|
-
cls.obj.socket.host = socket_host
|
|
118
|
-
cls.obj.socket.port = socket_port
|
|
119
104
|
cls.obj.stand_cloud.address = sc_address
|
|
120
105
|
cls.obj.stand_cloud.connection_only = sc_connection_only
|
|
121
106
|
|
|
@@ -149,13 +134,18 @@ class ConfigManager:
|
|
|
149
134
|
return None
|
|
150
135
|
try:
|
|
151
136
|
with Path.open(toml_path / "hardpy.toml", "rb") as f:
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
logger.exception(
|
|
137
|
+
toml_data = tomli.load(f)
|
|
138
|
+
except tomli.TOMLDecodeError as exc:
|
|
139
|
+
msg = f"Error parsing TOML: {exc}"
|
|
140
|
+
logger.exception(msg)
|
|
141
|
+
return None
|
|
142
|
+
|
|
143
|
+
try:
|
|
144
|
+
cls.obj = HardpyConfig(**toml_data)
|
|
156
145
|
except ValidationError:
|
|
157
146
|
logger.exception("Error parsing TOML")
|
|
158
|
-
|
|
147
|
+
return None
|
|
148
|
+
return cls.obj
|
|
159
149
|
|
|
160
150
|
@classmethod
|
|
161
151
|
def get_config(cls) -> HardpyConfig:
|
|
@@ -12,6 +12,8 @@ import secrets
|
|
|
12
12
|
import socket
|
|
13
13
|
import subprocess
|
|
14
14
|
import sys
|
|
15
|
+
from contextlib import suppress
|
|
16
|
+
from platform import system
|
|
15
17
|
from time import sleep
|
|
16
18
|
from typing import TYPE_CHECKING
|
|
17
19
|
from urllib.parse import urlencode
|
|
@@ -109,6 +111,12 @@ def logout() -> bool:
|
|
|
109
111
|
delete_password(service_name, cred.username)
|
|
110
112
|
except KeyringError:
|
|
111
113
|
return False
|
|
114
|
+
# TODO(xorialexandrov): fix keyring clearing
|
|
115
|
+
# Windows does not clear refresh token by itself
|
|
116
|
+
if system() == "Windows":
|
|
117
|
+
storage_keyring, _ = get_token_store()
|
|
118
|
+
with suppress(KeyringError):
|
|
119
|
+
storage_keyring.delete_password(service_name, "refresh_token")
|
|
112
120
|
return True
|
|
113
121
|
|
|
114
122
|
|
|
@@ -147,6 +155,18 @@ def _create_callback_process(port: str) -> subprocess.Popen:
|
|
|
147
155
|
"--log-level=error",
|
|
148
156
|
]
|
|
149
157
|
|
|
158
|
+
if system() == "Windows":
|
|
159
|
+
env = os.environ.copy()
|
|
160
|
+
env["PYTHONUNBUFFERED"] = "1"
|
|
161
|
+
|
|
162
|
+
return subprocess.Popen( # noqa: S603
|
|
163
|
+
args,
|
|
164
|
+
stdout=subprocess.PIPE,
|
|
165
|
+
bufsize=1,
|
|
166
|
+
universal_newlines=True,
|
|
167
|
+
env=env,
|
|
168
|
+
creationflags=subprocess.CREATE_NEW_PROCESS_GROUP, # type: ignore
|
|
169
|
+
)
|
|
150
170
|
return subprocess.Popen( # noqa: S603
|
|
151
171
|
args,
|
|
152
172
|
stdout=subprocess.PIPE,
|
|
@@ -187,7 +207,14 @@ def _check_incorrect_response(response: dict, state: str) -> None:
|
|
|
187
207
|
print(f"{error}: {error_description}")
|
|
188
208
|
sys.exit(1)
|
|
189
209
|
|
|
190
|
-
|
|
210
|
+
|
|
211
|
+
def _par_data(
|
|
212
|
+
code_verifier: str,
|
|
213
|
+
client_id: str,
|
|
214
|
+
port: str,
|
|
215
|
+
state: str,
|
|
216
|
+
api_url: str,
|
|
217
|
+
) -> dict:
|
|
191
218
|
"""Create pushed authorization request data.
|
|
192
219
|
|
|
193
220
|
Returns:
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
# GNU General Public License v3.0 (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from platform import system
|
|
5
6
|
from typing import TYPE_CHECKING
|
|
6
7
|
|
|
7
8
|
from keyring.core import load_keyring
|
|
@@ -16,7 +17,10 @@ def get_token_store() -> tuple[KeyringBackend, KeyringBackend]:
|
|
|
16
17
|
Returns:
|
|
17
18
|
tuple[KeyringBackend, KeyringBackend]: token store
|
|
18
19
|
"""
|
|
19
|
-
|
|
20
|
+
if system() == "Linux":
|
|
21
|
+
storage_keyring = load_keyring("keyring.backends.SecretService.Keyring")
|
|
22
|
+
elif system() == "Windows":
|
|
23
|
+
storage_keyring = load_keyring("keyring.backends.Windows.WinVaultKeyring")
|
|
20
24
|
# TODO(xorialexandrov): add memory keyring or other store
|
|
21
25
|
mem_keyring = storage_keyring
|
|
22
26
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"files": {
|
|
3
3
|
"main.css": "/static/css/main.e8a862f1.css",
|
|
4
|
-
"main.js": "/static/js/main.
|
|
4
|
+
"main.js": "/static/js/main.114c5914.js",
|
|
5
5
|
"blueprint-icons-all-paths-loader.js": "/static/js/blueprint-icons-all-paths-loader.0aa89747.chunk.js",
|
|
6
6
|
"blueprint-icons-split-paths-by-size-loader.js": "/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js",
|
|
7
7
|
"static/js/808.ce070002.chunk.js": "/static/js/808.ce070002.chunk.js",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"static/media/logo_smol.png": "/static/media/logo_smol.5b16f92447a4a9e80331.png",
|
|
22
22
|
"index.html": "/index.html",
|
|
23
23
|
"main.e8a862f1.css.map": "/static/css/main.e8a862f1.css.map",
|
|
24
|
-
"main.
|
|
24
|
+
"main.114c5914.js.map": "/static/js/main.114c5914.js.map",
|
|
25
25
|
"blueprint-icons-all-paths-loader.0aa89747.chunk.js.map": "/static/js/blueprint-icons-all-paths-loader.0aa89747.chunk.js.map",
|
|
26
26
|
"blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js.map": "/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js.map",
|
|
27
27
|
"808.ce070002.chunk.js.map": "/static/js/808.ce070002.chunk.js.map",
|
|
@@ -31,6 +31,6 @@
|
|
|
31
31
|
},
|
|
32
32
|
"entrypoints": [
|
|
33
33
|
"static/css/main.e8a862f1.css",
|
|
34
|
-
"static/js/main.
|
|
34
|
+
"static/js/main.114c5914.js"
|
|
35
35
|
]
|
|
36
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>HardPy Operator Panel</title><script defer="defer" src="/static/js/main.
|
|
1
|
+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>HardPy Operator Panel</title><script defer="defer" src="/static/js/main.114c5914.js"></script><link href="/static/css/main.e8a862f1.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|