Skip to content

Commit de0d422

Browse files
committed
Convert quality profiles to lists
1 parent 378be11 commit de0d422

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

cli/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def __parse_args(desc: str) -> object:
124124

125125
def __normalize_json(json_data: dict[str, any], remove_empty: bool = True, remove_none: bool = True) -> dict[str, any]:
126126
"""Sorts a JSON file and optionally remove empty and none values"""
127-
SORT_FIELDS = {"users": "login", "groups": "name", "qualityGates": "name"}
127+
SORT_FIELDS = {"users": "login", "groups": "name", "qualityGates": "name", "qualityProfiles": "language"}
128128
log.info("Normalizing JSON - remove empty = %s, remove nones = %s", str(remove_empty), str(remove_none))
129129
json_data = utilities.clean_data(json_data, remove_none=remove_none, remove_empty=remove_empty)
130130
json_data = utilities.order_keys(json_data, *_SECTIONS_ORDER)
@@ -174,7 +174,7 @@ def write_objects(queue: Queue[types.ObjectJsonRepr], fd: TextIO, object_type: s
174174
prefix = ""
175175
log.info("Waiting %s to write...", object_type)
176176
objects_exported_as_lists = ("projects", "applications", "users", "portfolios")
177-
objects_exported_as_whole = ("qualityGates", "groups")
177+
objects_exported_as_whole = ("qualityGates", "groups", "qualityProfiles")
178178
log.info("Waiting %s to write...", object_type)
179179
if object_type in objects_exported_as_lists:
180180
start, stop = ("[", "]")

sonar/qualityprofiles.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"""Abstraction of the SonarQube Quality Profile concept"""
2222

2323
from __future__ import annotations
24-
from typing import Optional
24+
from typing import Optional, Any
2525
import json
2626
from datetime import datetime
2727
import concurrent.futures
@@ -754,6 +754,21 @@ def flatten(qp_list: types.ObjectJsonRepr) -> types.ObjectJsonRepr:
754754
return flat_list
755755

756756

757+
def __convert_children_to_list(qp_json: dict[str, Any]) -> list[dict[str, Any]]:
758+
"""Converts a profile's children profiles to list"""
759+
for v in qp_json.values():
760+
if "children" in v:
761+
v["children"] = __convert_children_to_list(v["children"])
762+
return util.dict_to_list(qp_json, "name")
763+
764+
765+
def __convert_profiles_to_list(qp_json: dict[str, Any]) -> list[dict[str, Any]]:
766+
"""Converts a language top level list of profiles to list"""
767+
for k, v in qp_json.items():
768+
qp_json[k] = __convert_children_to_list(v)
769+
return util.dict_to_list(qp_json, "language", "profiles")
770+
771+
757772
def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, **kwargs) -> types.ObjectJsonRepr:
758773
"""Exports all or a list of quality profiles configuration as dict
759774
@@ -772,10 +787,12 @@ def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, **kwarg
772787
qp_list[lang] = {}
773788
qp_list[lang][name] = json_data
774789
qp_list = hierarchize(qp_list, endpoint=endpoint)
790+
qp_list = __convert_profiles_to_list(qp_list)
775791
if write_q := kwargs.get("write_q", None):
776792
write_q.put(qp_list)
777793
write_q.put(util.WRITE_END)
778-
return dict(sorted(qp_list.items()))
794+
# return dict(sorted(qp_list.items()))
795+
return qp_list
779796

780797

781798
def get_object(endpoint: pf.Platform, name: str, language: str) -> Optional[QualityProfile]:

0 commit comments

Comments
 (0)