Skip to content
Merged

Kill-td #2064

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
10 changes: 3 additions & 7 deletions cli/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,15 +124,15 @@ def __parse_args(desc: str) -> object:

def __normalize_json(json_data: dict[str, any], remove_empty: bool = True, remove_none: bool = True) -> dict[str, any]:
"""Sorts a JSON file and optionally remove empty and none values"""
SORT_FIELDS = {"users": "login", "groups": "name", "qualityGates": "name", "qualityProfiles": "language"}
sort_fields = {"users": "login", "groups": "name", "qualityGates": "name", "qualityProfiles": "language"}
log.info("Normalizing JSON - remove empty = %s, remove nones = %s", str(remove_empty), str(remove_none))
json_data = utilities.clean_data(json_data, remove_none=remove_none, remove_empty=remove_empty)
json_data = utilities.order_keys(json_data, *_SECTIONS_ORDER)
for key in [k for k in _SECTIONS_TO_SORT if k in json_data]:
if isinstance(json_data[key], dict):
json_data[key] = {k: json_data[key][k] for k in sorted(json_data[key])}
else:
json_data[key] = utilities.sort_list_by_key(json_data[key], SORT_FIELDS.get(key, "key"))
json_data[key] = utilities.sort_list_by_key(json_data[key], sort_fields.get(key, "key"))
return json_data


Expand Down Expand Up @@ -192,12 +192,8 @@ def write_objects(queue: Queue[types.ObjectJsonRepr], fd: TextIO, object_type: s
obj_json = __prep_json_for_write(obj_json, export_settings)
key = "" if isinstance(obj_json, list) else obj_json.get("key", obj_json.get("login", obj_json.get("name", "unknown")))
log.debug("Writing %s key '%s'", object_type[:-1], key)
if object_type in objects_exported_as_lists:
if object_type in objects_exported_as_lists or object_type in objects_exported_as_whole:
print(f"{prefix}{utilities.json_dump(obj_json)}", end="", file=fd)
elif object_type in objects_exported_as_whole:
print(f"{prefix}{utilities.json_dump(obj_json)}", end="", file=fd)
elif object_type in ("applications", "portfolios", "users"):
print(f'{prefix}"{key}": {utilities.json_dump(obj_json)}', end="", file=fd)
else:
log.debug("Writing %s", object_type)
print(f"{prefix}{utilities.json_dump(obj_json)[2:-1]}", end="", file=fd)
Expand Down
1 change: 1 addition & 0 deletions conf/.flake8
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
ignore = E501,E401,W503,E128,C901,W504,E302,E265,E741,W291,W292,W293,W391,F401,E226,F841,F821,F541,D400,D401,E800,D102,D105,D107,I900,F632,E261,E731
max-line-length = 150
#exclude = tests/*
exclude = test/gen/*
#max-complexity = 10
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ dev = [
line-length = 150
target-version = "py39"
indent-width = 4

exclude = ["test/gen"]
[tool.ruff.format]
# Like Black, use double quotes for strings.
quote-style = "double"
Expand Down
6 changes: 3 additions & 3 deletions sonar/platform.py
Original file line number Diff line number Diff line change
Expand Up @@ -505,19 +505,19 @@ def export(self, export_settings: types.ConfigSettings, full: bool = False) -> t

# Convert dicts to lists
special_categories = (settings.LANGUAGES_SETTINGS, settings.DEVOPS_INTEGRATION, "permissions", "permissionTemplates")
for categ in [c for c in settings.CATEGORIES if c not in special_categories]:
for categ in [cat for cat in settings.CATEGORIES if cat not in special_categories]:
json_data[categ] = util.sort_list_by_key(util.dict_to_list(json_data[categ], "key"), "key")
for k, v in json_data[settings.LANGUAGES_SETTINGS].items():
json_data[settings.LANGUAGES_SETTINGS][k] = util.sort_list_by_key(util.dict_to_list(v, "key"), "key")
json_data[settings.LANGUAGES_SETTINGS] = util.dict_to_list(json_data[settings.LANGUAGES_SETTINGS], "language", "settings")
json_data[settings.DEVOPS_INTEGRATION] = util.dict_to_list(json_data[settings.DEVOPS_INTEGRATION], "key")
json_data["permissions"] = util.perms_to_list(json_data["permissions"])
for k, v in json_data["permissionTemplates"].items():
for v in json_data["permissionTemplates"].values():
if "permissions" in v:
v["permissions"] = util.perms_to_list(v["permissions"])
json_data["permissionTemplates"] = util.dict_to_list(json_data["permissionTemplates"], "key")

return util.order_dict(json_data, list(settings.CATEGORIES) + ["permissions", "permissionTemplates"])
return util.order_dict(json_data, [*settings.CATEGORIES, "permissions", "permissionTemplates"])

def set_webhooks(self, webhooks_data: types.ObjectJsonRepr) -> bool:
"""Sets global webhooks with a list of webhooks represented as JSON
Expand Down
2 changes: 1 addition & 1 deletion sonar/projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -674,7 +674,7 @@ def export_zip(self, asynchronous: bool = False, timeout: int = 180) -> tuple[st
)
try:
resp = self.post("project_dump/export", params={"key": self.key})
except exceptions.ObjectNotFound as e:
except exceptions.ObjectNotFound:
Project.CACHE.pop(self)
raise
except exceptions.SonarException as e:
Expand Down
3 changes: 1 addition & 2 deletions sonar/qualityprofiles.py
Original file line number Diff line number Diff line change
Expand Up @@ -287,8 +287,7 @@ def activate_rule(self, rule_key: str, severity: Optional[str] = None, **params)
ok = self.post("qualityprofiles/activate_rule", params=api_params).ok
except exceptions.SonarException:
return False
if self._rules is None:
self._rules = {}
self._rules = self._rules or {}
self._rules[rule_key] = rules.Rule.get_object(self.endpoint, rule_key)
return ok

Expand Down
8 changes: 4 additions & 4 deletions sonar/utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ def list_to_regexp(str_list: list[str]) -> str:
return "(" + "|".join(str_list) + ")" if len(str_list) > 0 else ""


def list_to_csv(array: Union[None, str, int, float, list[str], set[str], tuple[str]], separator: str = ",", check_for_separator: bool = False) -> Any:
def list_to_csv(array: Union[None, str, float, list[str], set[str], tuple[str]], separator: str = ",", check_for_separator: bool = False) -> Any:
"""Converts a list of strings to CSV"""
if isinstance(array, str):
return csv_normalize(array, separator) if " " in array else array
Expand Down Expand Up @@ -849,10 +849,10 @@ def order_dict(d: dict[str, Any], key_order: list[str]) -> dict[str, Any]:
return new_d | {k: v for k, v in d.items() if k not in new_d}


def order_list(l: list[str], *key_order) -> list[str]:
def order_list(list_to_order: list[str], *key_order: str) -> list[str]:
"""Orders elements of a list in a given order"""
new_l = [k for k in key_order if k in l]
return new_l + [k for k in l if k not in new_l]
new_l = [k for k in key_order if k in list_to_order]
return new_l + [k for k in list_to_order if k not in new_l]


def perms_to_list(perms: dict[str, Any]) -> list[str, Any]:
Expand Down