3232import sonar .logging as log
3333import sonar .platform as pf
3434from sonar .util import types , cache , constants as c
35+ from sonar .util import qualityprofile_helper as qphelp
3536from sonar import exceptions
3637from sonar import rules , languages
3738import sonar .permissions .qualityprofile_permissions as permissions
4142from sonar .audit .rules import get_rule , RuleId
4243from sonar .audit .problem import Problem
4344
44- _KEY_PARENT = "parent"
45- _CHILDREN_KEY = "children"
46-
4745_IMPORTABLE_PROPERTIES = ("name" , "language" , "parentName" , "isBuiltIn" , "isDefault" , "rules" , "permissions" , "prioritizedRules" )
4846
4947_CLASS_LOCK = Lock ()
@@ -363,20 +361,20 @@ def update(self, data: types.ObjectJsonRepr) -> QualityProfile:
363361 QualityProfile .CACHE .pop (self )
364362 self .name = data ["name" ]
365363 QualityProfile .CACHE .put (self )
366- self .set_parent (data .pop (_KEY_PARENT , None ))
364+ self .set_parent (data .pop (qphelp . KEY_PARENT , None ))
367365 self .set_rules (data .get ("rules" , []) + data .get ("addedRules" , []))
368366 self .activate_rules (data .get ("modifiedRules" , []))
369367 self .set_permissions (data .get ("permissions" , []))
370368 self .is_built_in = data .get ("isBuiltIn" , False )
371369 if data .get ("isDefault" , False ):
372370 self .set_as_default ()
373371
374- for child_name , child_data in data .get (_CHILDREN_KEY , {}).items ():
372+ for child_name , child_data in data .get (qphelp . KEY_CHILDREN , {}).items ():
375373 try :
376374 child_qp = get_object (self .endpoint , child_name , self .language )
377375 except exceptions .ObjectNotFound :
378376 child_qp = QualityProfile .create (self .endpoint , child_name , self .language )
379- child_qp .update (child_data | {_KEY_PARENT : self .name })
377+ child_qp .update (child_data | {qphelp . KEY_PARENT : self .name })
380378 return self
381379
382380 def to_json (self , export_settings : types .ConfigSettings ) -> types .ObjectJsonRepr :
@@ -430,7 +428,6 @@ def rule_impacts(self, rule_key: str, substitute_with_default: bool = True) -> d
430428
431429 :param str rule_key: The rule key to get severities for
432430 :return: The impacts of the rule in the quality profile
433- :rtype: dict[str, str]
434431 """
435432 return rules .Rule .get_object (self .endpoint , rule_key ).impacts (self .key , substitute_with_default = substitute_with_default )
436433
@@ -439,7 +436,6 @@ def rule_severity(self, rule_key: str, substitute_with_default: bool = True) ->
439436
440437 :param str rule_key: The rule key to get severities for
441438 :return: The severity
442- :rtype: str
443439 """
444440 return rules .Rule .get_object (self .endpoint , rule_key ).rule_severity (self .key , substitute_with_default = substitute_with_default )
445441
@@ -742,12 +738,12 @@ def hierarchize_language(qp_list: dict[str, str], endpoint: pf.Platform, languag
742738 continue
743739 parent_qp_name = qp_json_data .pop ("parentName" )
744740 parent_qp = hierarchy [parent_qp_name ]
745- if _CHILDREN_KEY not in parent_qp :
746- parent_qp [_CHILDREN_KEY ] = {}
741+ if qphelp . KEY_CHILDREN not in parent_qp :
742+ parent_qp [qphelp . KEY_CHILDREN ] = {}
747743 this_qp = get_object (endpoint = endpoint , name = qp_name , language = language )
748744 qp_json_data |= this_qp .diff (get_object (endpoint = endpoint , name = parent_qp_name , language = language ))
749745 qp_json_data .pop ("rules" , None )
750- parent_qp [_CHILDREN_KEY ][qp_name ] = qp_json_data
746+ parent_qp [qphelp . KEY_CHILDREN ][qp_name ] = qp_json_data
751747 to_remove .append (qp_name )
752748 for qp_name in to_remove :
753749 hierarchy .pop (qp_name )
@@ -766,29 +762,6 @@ def hierarchize(qp_list: types.ObjectJsonRepr, endpoint: pf.Platform) -> types.O
766762 return {lang : hierarchize_language (lang_qp_list , endpoint = endpoint , language = lang ) for lang , lang_qp_list in qp_list .items ()}
767763
768764
769- def flatten_language (language : str , qp_list : types .ObjectJsonRepr ) -> types .ObjectJsonRepr :
770- """Converts a hierarchical list of QP of a given language into a flat list"""
771- flat_list = {}
772- for qp_name , qp_data in qp_list .copy ().items ():
773- if _CHILDREN_KEY in qp_data :
774- children = flatten_language (language , qp_data [_CHILDREN_KEY ])
775- for child in children .values ():
776- if "parent" not in child :
777- child ["parent" ] = f"{ language } :{ qp_name } "
778- qp_data .pop (_CHILDREN_KEY )
779- flat_list .update (children )
780- flat_list [f"{ language } :{ qp_name } " ] = qp_data
781- return flat_list
782-
783-
784- def flatten (qp_list : types .ObjectJsonRepr ) -> types .ObjectJsonRepr :
785- """Organize a hierarchical list of QP in a flat list"""
786- flat_list = {}
787- for lang , lang_qp_list in qp_list .items ():
788- flat_list .update (flatten_language (lang , lang_qp_list ))
789- return flat_list
790-
791-
792765def export (endpoint : pf .Platform , export_settings : types .ConfigSettings , ** kwargs ) -> types .ObjectJsonRepr :
793766 """Exports all or a list of quality profiles configuration as dict
794767
@@ -807,7 +780,7 @@ def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, **kwarg
807780 qp_list [lang ] = {}
808781 qp_list [lang ][name ] = json_data
809782 qp_list = hierarchize (qp_list , endpoint = endpoint )
810- qp_list = __convert_profiles_to_list (qp_list )
783+ qp_list = qphelp . convert_qps_json (qp_list )
811784 if write_q := kwargs .get ("write_q" , None ):
812785 write_q .put (qp_list )
813786 write_q .put (util .WRITE_END )
@@ -893,27 +866,3 @@ def exists(endpoint: pf.Platform, name: str, language: str) -> bool:
893866 return True
894867 except exceptions .ObjectNotFound :
895868 return False
896-
897-
898- def convert_one_qp_yaml (qp : types .ObjectJsonRepr ) -> types .ObjectJsonRepr :
899- """Converts a QP in a modified version more suitable for YAML export"""
900-
901- if _CHILDREN_KEY in qp :
902- qp [_CHILDREN_KEY ] = {k : convert_one_qp_yaml (q ) for k , q in qp [_CHILDREN_KEY ].items ()}
903- qp [_CHILDREN_KEY ] = util .dict_to_list (qp [_CHILDREN_KEY ], "name" )
904- return qp
905-
906-
907- def __convert_children_to_list (qp_json : dict [str , Any ]) -> list [dict [str , Any ]]:
908- """Converts a profile's children profiles to list"""
909- for v in qp_json .values ():
910- if "children" in v :
911- v ["children" ] = __convert_children_to_list (v ["children" ])
912- return util .dict_to_list (qp_json , "name" )
913-
914-
915- def old_to_new_json (qp_json : dict [str , Any ]) -> list [dict [str , Any ]]:
916- """Converts a language top level list of profiles to list"""
917- for k , v in qp_json .items ():
918- qp_json [k ] = __convert_children_to_list (v )
919- return util .dict_to_list (qp_json , "language" , "profiles" )
0 commit comments