Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion bugwarrior/config/load.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,8 @@ def parse_file(configpath: str) -> dict:
def load_config(main_section, interactive, quiet) -> Config:
configpath = get_config_path()
rawconfig = parse_file(configpath)
rawconfig['flavor'][main_section]['interactive'] = interactive
for flavor in rawconfig['flavor'].values():
flavor['interactive'] = interactive
config = validate_config(rawconfig, main_section, configpath)
configure_logging(
config.main.log_file, 'WARNING' if quiet else config.main.log_level
Expand Down
2 changes: 1 addition & 1 deletion bugwarrior/config/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ class MainSectionConfig(BaseConfig):

# added during configuration loading
#: Interactive status.
interactive: bool = False
interactive: bool

@computed_field
@property
Expand Down
2 changes: 1 addition & 1 deletion bugwarrior/config/validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ def validate_config(config: dict, main_section: str, config_path: str) -> "Confi
f"[{flavor_name}]\ntargets = {flavor.targets} <- No [{target}] section found\n"
)

main = flavors.get(main_section, MainSectionConfig(targets=[]))
main = flavors.get(main_section, MainSectionConfig(targets=[], interactive=False))
filtered_service_configs = [
service_config
for service_config in service_configs
Expand Down
28 changes: 28 additions & 0 deletions tests/config/test_load.py
Original file line number Diff line number Diff line change
Expand Up @@ -263,3 +263,31 @@ def test_ini_wrong_prefix(self):

with self.assertRaises(SystemExit):
load.parse_file(config_path)


class TestLoadConfig(LoadTest):
def setUp(self):
self.basedir = Path(__file__).parent
super().setUp()

def test_main_section_does_not_exist(self):
config_path = self.create(".bugwarriorrc")
with open(config_path, 'w') as fout:
fout.write(
textwrap.dedent("""
[redmine]
service = redmine
redmine.url = example.com
""")
)

with self.assertRaises(SystemExit):
load.load_config("general", False, False)

self.assertEqual(len(self.caplog.records), 1)
self.assertIn("No section: 'general'", self.caplog.records[0].message)

def test_interactive_flag_propagated(self):
os.environ['BUGWARRIORRC'] = str(self.basedir / 'example-bugwarriorrc')
config = load.load_config('general', interactive=True, quiet=False)
self.assertTrue(config.main.interactive)
8 changes: 7 additions & 1 deletion tests/config/test_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,9 @@ def test_deprecated_project_name(self):
self.validate()

def test_flavors(self):
self.config['flavor'] = {'myflavor': {'targets': ['my_service', 'my_gitlab']}}
self.config['flavor'] = {
'myflavor': {'targets': ['my_service', 'my_gitlab'], 'interactive': False}
}
self.validate()

def test_quoted_flavor_key_error(self):
Expand Down Expand Up @@ -175,6 +177,10 @@ def test_load_and_validate_example_files(self):
for main_section, expected_configs in expected_by_flavor.items():
with self.subTest(config=config_path.name, main_section=main_section):
formatted_config = parse_file(str(config_path))

for flavor in formatted_config['flavor'].values():
flavor['interactive'] = False

config = validation.validate_config(
formatted_config, main_section, str(config_path)
)
Expand Down
Loading