forked from TrueCloudLab/frostfs-testcases
47 lines
1.9 KiB
Python
47 lines
1.9 KiB
Python
from typing import Optional
|
|
|
|
from cli_helpers import _cmd_run
|
|
|
|
|
|
class NeofsCliCommandBase:
|
|
neofs_cli_exec: Optional[str] = None
|
|
timeout: Optional[int] = None
|
|
__base_params: Optional[str] = None
|
|
map_params = {'json_mode': 'json', 'await_mode': 'await', 'hash_type': 'hash'}
|
|
|
|
def __init__(self, neofs_cli_exec: str, timeout: int = 30, **base_params):
|
|
self.neofs_cli_exec = neofs_cli_exec
|
|
self.timeout = timeout
|
|
self.__base_params = ' '.join([f'--{param} {value}' for param, value in base_params.items() if value])
|
|
|
|
def _format_command(self, command: str, **params) -> str:
|
|
param_str = []
|
|
for param, value in params.items():
|
|
if param in self.map_params.keys():
|
|
param = self.map_params[param]
|
|
param = param.replace('_', '-')
|
|
if not value:
|
|
continue
|
|
if isinstance(value, bool):
|
|
param_str.append(f'--{param}')
|
|
elif isinstance(value, int):
|
|
param_str.append(f'--{param} {value}')
|
|
elif isinstance(value, list):
|
|
for value_item in value:
|
|
val_str = str(value_item).replace("'", "\\'")
|
|
param_str.append(f"--{param} '{val_str}'")
|
|
elif isinstance(value, dict):
|
|
param_str.append(f'--{param} \'{",".join(f"{key}={val}" for key, val in value.items())}\'')
|
|
else:
|
|
if "'" in str(value):
|
|
value_str = str(value).replace('"', '\\"')
|
|
param_str.append(f'--{param} "{value_str}"')
|
|
else:
|
|
param_str.append(f"--{param} '{value}'")
|
|
|
|
param_str = ' '.join(param_str)
|
|
|
|
return f'{self.neofs_cli_exec} {self.__base_params} {command or ""} {param_str}'
|
|
|
|
def _execute(self, command: Optional[str], **params) -> str:
|
|
return _cmd_run(self._format_command(command, **params), timeout=self.timeout)
|