Skip to content

Commit 4c1caa1

Browse files
authored
CM-12770 - add option to config verbose mode via env var and config file (#7)
* WIP * done
1 parent 884c723 commit 4c1caa1

5 files changed

Lines changed: 32 additions & 6 deletions

File tree

cli/consts.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
# use only for dev envs locally
2424
DEV_MODE_ENV_VAR_NAME = "DEV_MODE"
2525
BATCH_SIZE_ENV_VAR_NAME = "BATCH_SIZE"
26+
VERBOSE_ENV_VAR_NAME = "CYCODE_CLI_VERBOSE"
2627

2728
CYCODE_CONFIGURATION_DIRECTORY: str = '.cycode'
2829

cli/cycode.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from cyclient import ScanClient, K8SUpdaterClient, logger
77
from cli.user_settings.credentials_manager import CredentialsManager
88
from cli.user_settings.user_settings_commands import set_credentials, add_exclusions
9+
from cli.user_settings.configuration_manager import ConfigurationManager
910

1011
CONTEXT = dict()
1112
ISSUE_DETECTED_STATUS_CODE = 1
@@ -92,6 +93,8 @@ def finalize(context: click.Context, *args, **kwargs):
9293
@click.pass_context
9394
def main_cli(context: click.Context, verbose: bool):
9495
context.ensure_object(dict)
96+
configuration_manager = ConfigurationManager()
97+
verbose = verbose or configuration_manager.get_verbose_flag()
9598
context.obj["verbose"] = verbose
9699
log_level = logging.DEBUG if verbose else logging.INFO
97100
logger.setLevel(log_level)

cli/user_settings/config_file_manager.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class ConfigFileManager(BaseFileManager):
1212
EXCLUSIONS_SECTION_NAME: str = 'exclusions'
1313

1414
BASE_URL_FIELD_NAME: str = 'cycode_base_url'
15+
VERBOSE_FIELD_NAME: str = 'verbose'
1516

1617
def __init__(self, path):
1718
self.path = path
@@ -23,6 +24,13 @@ def get_base_url(self) -> Optional[str]:
2324
base_url = environment_section.get(self.BASE_URL_FIELD_NAME)
2425
return base_url
2526

27+
def get_verbose_flag(self) -> Optional[bool]:
28+
file_content = self.read_file()
29+
30+
environment_section = file_content.get(self.ENVIRONMENT_SECTION_NAME, {})
31+
verbose_flag = environment_section.get(self.VERBOSE_FIELD_NAME)
32+
return verbose_flag
33+
2634
def get_exclusions_by_scan_type(self, scan_type) -> Dict:
2735
file_content = self.read_file()
2836
exclusions_section = file_content.get(self.EXCLUSIONS_SECTION_NAME, {})

cli/user_settings/configuration_manager.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from pathlib import Path
33
from typing import Optional, Dict
44
from cli.user_settings.config_file_manager import ConfigFileManager
5-
from cli.consts import DEFAULT_BASE_URL, BASE_URL_ENV_VAR_NAME
5+
from cli.consts import DEFAULT_BASE_URL, BASE_URL_ENV_VAR_NAME, VERBOSE_ENV_VAR_NAME
66

77

88
class ConfigurationManager:
@@ -14,7 +14,7 @@ def __init__(self):
1414
self.global_config_file_manager = ConfigFileManager(Path.home())
1515
self.local_config_file_manager = ConfigFileManager(os.getcwd())
1616

17-
def get_base_url(self) -> Optional[str]:
17+
def get_base_url(self) -> str:
1818
base_url = self.get_base_url_from_environment_variables()
1919
if base_url is not None:
2020
return base_url
@@ -29,8 +29,18 @@ def get_base_url(self) -> Optional[str]:
2929

3030
return DEFAULT_BASE_URL
3131

32-
def get_base_url_from_environment_variables(self) -> str:
33-
return os.getenv(BASE_URL_ENV_VAR_NAME)
32+
def get_verbose_flag(self) -> bool:
33+
verbose_flag_env_var = self.get_verbose_flag_from_environment_variables()
34+
verbose_flag_local_config = self.local_config_file_manager.get_verbose_flag()
35+
verbose_flag_global_config = self.global_config_file_manager.get_verbose_flag()
36+
return verbose_flag_env_var or verbose_flag_local_config or verbose_flag_global_config
37+
38+
def get_base_url_from_environment_variables(self) -> Optional[str]:
39+
return self._get_value_from_environment_variables(BASE_URL_ENV_VAR_NAME)
40+
41+
def get_verbose_flag_from_environment_variables(self) -> bool:
42+
value = self._get_value_from_environment_variables(VERBOSE_ENV_VAR_NAME, '')
43+
return value.lower() in ('true', '1')
3444

3545
def get_exclusions_by_scan_type(self, scan_type) -> Dict:
3646
local_exclusions = self.local_config_file_manager.get_exclusions_by_scan_type(scan_type)
@@ -51,3 +61,6 @@ def update_base_url(self, base_url: str, scope: str = 'local'):
5161

5262
def get_config_file_manager(self, scope):
5363
return self.local_config_file_manager if scope == 'local' else self.global_config_file_manager
64+
65+
def _get_value_from_environment_variables(self, env_var_name, default=None):
66+
return os.getenv(env_var_name, default)

cyclient/config.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from urllib.parse import urlparse
55
from cli.user_settings.configuration_manager import ConfigurationManager
66
from cli.consts import BASE_URL_ENV_VAR_NAME, TIMEOUT_ENV_VAR_NAME, LOGGING_LEVEL_ENV_VAR_NAME, DEV_MODE_ENV_VAR_NAME, \
7-
BATCH_SIZE_ENV_VAR_NAME
7+
BATCH_SIZE_ENV_VAR_NAME, VERBOSE_ENV_VAR_NAME
88

99

1010
# set io encoding (for windows)
@@ -33,7 +33,7 @@
3333
TIMEOUT_ENV_VAR_NAME: 60,
3434
LOGGING_LEVEL_ENV_VAR_NAME: logging.INFO,
3535
DEV_MODE_ENV_VAR_NAME: 'False',
36-
BATCH_SIZE_ENV_VAR_NAME: 20,
36+
BATCH_SIZE_ENV_VAR_NAME: 20
3737
}
3838

3939
configuration = dict(DEFAULT_CONFIGURATION, **os.environ)
@@ -76,3 +76,4 @@ def _get_val_as_int(key):
7676
timeout = _get_val_as_int(TIMEOUT_ENV_VAR_NAME)
7777
dev_mode = _get_val_as_bool(DEV_MODE_ENV_VAR_NAME)
7878
batch_size = _get_val_as_int(BATCH_SIZE_ENV_VAR_NAME)
79+
verbose = _get_val_as_bool(VERBOSE_ENV_VAR_NAME)

0 commit comments

Comments
 (0)