Skip to content

Commit 61cb018

Browse files
committed
Fix linting and typing errors
1 parent a3abdce commit 61cb018

9 files changed

+49
-38
lines changed

src/ansible_runner/__main__.py

+6-8
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@
4444
from ansible_runner import run
4545
from ansible_runner import output
4646
from ansible_runner import cleanup
47-
from ansible_runner.utils import dump_artifact, Bunch, register_for_cleanup
47+
from ansible_runner._internal._dump_artifacts import dump_artifact
48+
from ansible_runner.utils import Bunch, register_for_cleanup
4849
from ansible_runner.utils.capacity import get_cpu_count, get_mem_in_bytes, ensure_uuid
4950
from ansible_runner.utils.importlib_compat import importlib_metadata
5051
from ansible_runner.runner import Runner
@@ -822,14 +823,11 @@ def main(sys_args=None):
822823
else:
823824
vargs['inventory'] = abs_inv
824825

825-
output.configure()
826-
827-
# enable or disable debug mode
828-
output.set_debug('enable' if vargs.get('debug') else 'disable')
829-
830-
# set the output logfile
826+
debug = bool(vargs.get('debug'))
827+
logfile = ''
831828
if ('logfile' in args) and vargs.get('logfile'):
832-
output.set_logfile(vargs.get('logfile'))
829+
logfile = vargs.get('logfile')
830+
output.configure(debug, logfile)
833831

834832
output.debug('starting debug logging')
835833

src/ansible_runner/_internal/_dump_artifacts.py

+13-10
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,23 @@
88
import tempfile
99

1010
from collections.abc import MutableMapping
11+
from typing import Any
1112

1213
from ansible_runner.config.runner import RunnerConfig
1314
from ansible_runner.utils import isinventory, isplaybook
1415

1516

1617
def dump_artifacts(config: RunnerConfig) -> None:
1718
"""Introspect the arguments and dump objects to disk"""
19+
private_data_dir = config.private_data_dir or ""
20+
1821
if config.role:
19-
role = {'name': config.role}
22+
role: dict[str, Any] = {'name': config.role}
2023
if config.role_vars:
2124
role['vars'] = config.role_vars
2225

2326
hosts = config.host_pattern or 'all'
24-
play = [{'hosts': hosts, 'roles': [role]}]
27+
play: list[dict[str, Any]] = [{'hosts': hosts, 'roles': [role]}]
2528

2629
if config.role_skip_facts:
2730
play[0]['gather_facts'] = False
@@ -33,9 +36,9 @@ def dump_artifacts(config: RunnerConfig) -> None:
3336

3437
roles_path = config.roles_path
3538
if not roles_path:
36-
roles_path = os.path.join(config.private_data_dir, 'roles')
39+
roles_path = os.path.join(private_data_dir, 'roles')
3740
else:
38-
roles_path += f":{os.path.join(config.private_data_dir, 'roles')}"
41+
roles_path += f":{os.path.join(private_data_dir, 'roles')}"
3942

4043
config.envvars['ANSIBLE_ROLES_PATH'] = roles_path
4144

@@ -46,12 +49,12 @@ def dump_artifacts(config: RunnerConfig) -> None:
4649
playbook = [playbook]
4750

4851
if isplaybook(playbook):
49-
path = os.path.join(config.private_data_dir, 'project')
52+
path = os.path.join(private_data_dir, 'project')
5053
config.playbook = dump_artifact(json.dumps(playbook), path, 'main.json')
5154

5255
obj = config.inventory
5356
if obj and isinventory(obj):
54-
path = os.path.join(config.private_data_dir, 'inventory')
57+
path = os.path.join(private_data_dir, 'inventory')
5558
if isinstance(obj, MutableMapping):
5659
config.inventory = dump_artifact(json.dumps(obj), path, 'hosts.json')
5760
elif isinstance(obj, str):
@@ -65,14 +68,14 @@ def dump_artifacts(config: RunnerConfig) -> None:
6568
if not config.suppress_env_files:
6669
for key in ('envvars', 'extravars', 'passwords', 'settings'):
6770
obj = getattr(config, key, None)
68-
if obj and not os.path.exists(os.path.join(config.private_data_dir, 'env', key)):
69-
path = os.path.join(config.private_data_dir, 'env')
71+
if obj and not os.path.exists(os.path.join(private_data_dir, 'env', key)):
72+
path = os.path.join(private_data_dir, 'env')
7073
dump_artifact(json.dumps(obj), path, key)
7174

7275
for key in ('ssh_key', 'cmdline'):
7376
obj = getattr(config, key, None)
74-
if obj and not os.path.exists(os.path.join(config.private_data_dir, 'env', key)):
75-
path = os.path.join(config.private_data_dir, 'env')
77+
if obj and not os.path.exists(os.path.join(private_data_dir, 'env', key)):
78+
path = os.path.join(private_data_dir, 'env')
7679
dump_artifact(obj, path, key)
7780

7881

src/ansible_runner/interface.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -67,19 +67,20 @@ def init_runner(
6767

6868
if streamer:
6969
# undo any full paths that were dumped by dump_artifacts above in the streamer case
70-
private_data_dir = config.private_data_dir
70+
private_data_dir = config.private_data_dir or ""
7171
project_dir = os.path.join(private_data_dir, 'project')
7272

7373
playbook_path = config.playbook or ''
74-
if os.path.isabs(playbook_path) and playbook_path.startswith(project_dir):
74+
if isinstance(playbook_path, str) and os.path.isabs(playbook_path) and playbook_path.startswith(project_dir):
7575
config.playbook = os.path.relpath(playbook_path, project_dir)
7676

7777
inventory_path = config.inventory or ''
78-
if os.path.isabs(inventory_path) and inventory_path.startswith(private_data_dir):
78+
if isinstance(inventory_path, str) and os.path.isabs(inventory_path) and inventory_path.startswith(private_data_dir):
7979
config.inventory = os.path.relpath(inventory_path, private_data_dir)
8080

81-
envvars = config.envvars or {}
82-
roles_path = envvars.get('ANSIBLE_ROLES_PATH') or ''
81+
if config.envvars is None:
82+
config.envvars = {}
83+
roles_path = config.envvars.get('ANSIBLE_ROLES_PATH') or ''
8384
if os.path.isabs(roles_path) and roles_path.startswith(private_data_dir):
8485
config.envvars['ANSIBLE_ROLES_PATH'] = os.path.relpath(roles_path, private_data_dir)
8586

src/ansible_runner/output.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def set_traceback(value: str) -> None:
6464
TRACEBACK_ENABLED = value.lower() == 'enable'
6565

6666

67-
def configure(debug: bool, logfile: str) -> None:
67+
def configure(enable_debug: bool, logfile: str) -> None:
6868
'''
6969
Configures the logging facility
7070
@@ -90,6 +90,6 @@ def configure(debug: bool, logfile: str) -> None:
9090
stdout_handler.setFormatter(formatter)
9191
_display_logger.addHandler(stdout_handler)
9292

93-
set_debug('enable' if debug is True else 'disable')
93+
set_debug('enable' if enable_debug is True else 'disable')
9494
if logfile:
9595
set_logfile(logfile)

src/ansible_runner/streaming.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from __future__ import annotations # allow newer type syntax until 3.10 is our minimum
22

33
import codecs
4-
import io
54
import json
65
import os
76
import stat
@@ -13,6 +12,7 @@
1312
from collections.abc import Mapping
1413
from functools import wraps
1514
from threading import Event, RLock, Thread
15+
from typing import BinaryIO
1616

1717
import ansible_runner
1818
from ansible_runner.exceptions import ConfigurationError
@@ -38,7 +38,7 @@ def __init__(self, settings):
3838

3939

4040
class Transmitter:
41-
def __init__(self, only_transmit_kwargs: bool, _output: io.FileIO | None, **kwargs):
41+
def __init__(self, only_transmit_kwargs: bool, _output: BinaryIO | None, **kwargs):
4242
if _output is None:
4343
_output = sys.stdout.buffer
4444
self._output = _output

test/integration/test_display_callback.py

+10-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import pytest
88

9+
from ansible_runner import RunnerConfig
910
from ansible_runner.interface import init_runner
1011

1112

@@ -29,13 +30,15 @@ def executor(tmp_path, request):
2930

3031
inventory = 'localhost ansible_connection=local ansible_python_interpreter="{{ ansible_playbook_python }}"'
3132

32-
r = init_runner(
33-
private_data_dir=private_data_dir,
33+
rc = RunnerConfig(
34+
private_data_dir=str(private_data_dir),
3435
inventory=inventory,
3536
envvars=envvars,
3637
playbook=yaml.safe_load(playbook)
3738
)
3839

40+
r = init_runner(rc, '', False)
41+
3942
return r
4043

4144

@@ -355,12 +358,14 @@ def test_output_when_given_invalid_playbook(tmp_path):
355358
#
356359
# But no test validated it. This does that.
357360
private_data_dir = str(tmp_path)
358-
ex = init_runner(
361+
362+
rc = RunnerConfig(
359363
private_data_dir=private_data_dir,
360364
inventory='localhost ansible_connection=local ansible_python_interpreter="{{ ansible_playbook_python }}"',
361365
envvars={"ANSIBLE_DEPRECATION_WARNINGS": "False"},
362366
playbook=os.path.join(private_data_dir, 'fake_playbook.yml')
363367
)
368+
ex = init_runner(rc, '', False)
364369

365370
ex.run()
366371
with ex.stdout as f:
@@ -392,11 +397,12 @@ def test_output_when_given_non_playbook_script(tmp_path):
392397
with open(os.path.join(private_data_dir, "env", "settings"), 'w') as settings_file:
393398
settings_file.write("pexpect_timeout: 0.2")
394399

395-
ex = init_runner(
400+
rc = RunnerConfig(
396401
private_data_dir=private_data_dir,
397402
inventory='localhost ansible_connection=local ansible_python_interpreter="{{ ansible_playbook_python }}"',
398403
envvars={"ANSIBLE_DEPRECATION_WARNINGS": "False"}
399404
)
405+
ex = init_runner(rc, '', False)
400406

401407
ex.run()
402408

test/integration/test_transmit_worker_process.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ def test_keepalive_setting(self, tmp_path, project_fixtures, keepalive_setting):
142142
buffer.name = 'foo'
143143

144144
status, rc = Transmitter(
145+
only_transmit_kwargs=False,
145146
_output=outgoing_buffer, private_data_dir=project_fixtures / 'sleep',
146147
playbook='sleep.yml', extravars={'sleep_interval': 2}, verbosity=verbosity
147148
).run()
@@ -341,7 +342,7 @@ def transmit_stream(project_fixtures, tmp_path):
341342

342343
transmit_dir = project_fixtures / 'debug'
343344
with outgoing_buffer.open('wb') as f:
344-
transmitter = Transmitter(_output=f, private_data_dir=transmit_dir, playbook='debug.yml')
345+
transmitter = Transmitter(only_transmit_kwargs=False, _output=f, private_data_dir=transmit_dir, playbook='debug.yml')
345346
status, rc = transmitter.run()
346347

347348
assert rc in (None, 0)

test/unit/test_interface.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
11
import pytest
22

3+
from ansible_runner import RunnerConfig
34
from ansible_runner.interface import init_runner
45

56

67
def test_default_callback_set(mocker):
78
mocker.patch('ansible_runner.interface.signal_handler', side_effect=AttributeError('Raised intentionally'))
89

910
with pytest.raises(AttributeError, match='Raised intentionally'):
10-
init_runner(ignore_logging=True)
11+
init_runner(RunnerConfig(), "", False)
1112

1213

1314
def test_set_cancel_callback(mocker):
1415
mock_runner = mocker.patch('ansible_runner.interface.Runner', side_effect=AttributeError('Raised intentionally'))
15-
mock_runner_config = mocker.patch('ansible_runner.interface.RunnerConfig')
16-
mock_runner_config.prepare.return_value = None
16+
mock_runner_config_prepare = mocker.patch('ansible_runner.interface.RunnerConfig.prepare')
17+
mock_runner_config_prepare.return_value = None
1718

1819
def custom_cancel_callback():
19-
return 'custom'
20+
return True
2021

2122
with pytest.raises(AttributeError, match='Raised intentionally'):
22-
init_runner(ignore_logging=True, cancel_callback=custom_cancel_callback)
23+
rc = RunnerConfig(cancel_callback=custom_cancel_callback)
24+
init_runner(rc, "", False)
2325

2426
assert mock_runner.call_args.kwargs['cancel_callback'] is custom_cancel_callback

test/unit/test_utils.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import os
22
import stat
33

4-
from ansible_runner.utils import dump_artifact
4+
from ansible_runner._internal._dump_artifacts import dump_artifact
55

66

77
def test_artifact_permissions(tmp_path):

0 commit comments

Comments
 (0)