userver
C++ Async Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
service.py
1
import
pathlib
2
import
urllib.parse
3
4
from
testsuite.environment
import
service, utils
5
6
from
.
import
classes
7
8
DEFAULT_HOSTNAME =
'localhost'
9
DEFAULT_PORT = 13307
10
11
PLUGIN_DIR = pathlib.Path(__file__).parent
12
SCRIPTS_DIR = PLUGIN_DIR.joinpath(
'scripts'
)
13
14
15
def
create_service(
16
service_name: str,
17
working_dir: str,
18
settings: classes.ServiceSettings |
None
=
None
,
19
env: dict[str, str] |
None
=
None
,
20
):
21
if
settings
is
None
:
22
settings = get_service_settings()
23
return
service.ScriptService(
24
service_name=service_name,
25
script_path=str(SCRIPTS_DIR.joinpath(
'service-mysql'
)),
26
working_dir=working_dir,
27
environment={
28
'MYSQL_TMPDIR'
: working_dir,
29
'MYSQL_PORT'
: str(settings.port),
30
**(env
or
{}),
31
},
32
check_ports=[settings.port],
33
start_timeout=utils.getenv_float(
34
key=
'TESTSUITE_MYSQL_SERVER_START_TIMEOUT'
,
35
default=10.0,
36
),
37
)
38
39
40
def
get_service_settings():
41
return
classes.ServiceSettings(
42
port=utils.getenv_int(
43
key=
'TESTSUITE_MYSQL_PORT'
,
44
default=DEFAULT_PORT,
45
),
46
)
47
48
49
def
parse_connection_url(url: str):
50
parts = urllib.parse.urlparse(url)
51
if
parts.scheme !=
'mysql'
:
52
raise
RuntimeError(f
'Unknown url scheme {parts.scheme}'
)
53
kwargs: dict = {
54
key: value
55
for
value, key
in
(
56
(parts.hostname,
'hostname'
),
57
(parts.port,
'port'
),
58
(parts.username,
'user'
),
59
(parts.password,
'password'
),
60
)
61
if
value
is
not
None
62
}
63
return
classes.ConnectionInfo(**kwargs)
en
testsuite
databases
mysql
service.py
Generated on
for userver by
Doxygen
1.17.0