@@ -550,7 +550,27 @@ def audit(endpoint: pf.Platform, audit_settings: types.ConfigSettings = None) ->
550550 return problems
551551
552552
553- def hierarchize (qp_list : dict [str , str ], endpoint : pf .Platform ) -> types .ObjectJsonRepr :
553+ def hierarchize_language (qp_list : dict [str , str ]) -> types .ObjectJsonRepr :
554+ """Organizes a flat list of quality profiles in inheritance hierarchy"""
555+ log .debug ("Organizing QP list %s in hierarchy" , str (qp_list .keys ()))
556+ hierarchy = qp_list .copy ()
557+ to_remove = []
558+ for qp_name , qp_json_data in hierarchy .items ():
559+ if "parentName" in qp_json_data :
560+ if qp_json_data ["parentName" ] not in hierarchy :
561+ log .critical ("Can't find parent %s in quality profiles" , qp_json_data ["parentName" ])
562+ continue
563+ parent_qp = hierarchy [qp_json_data .pop ("parentName" )]
564+ if _CHILDREN_KEY not in parent_qp :
565+ parent_qp [_CHILDREN_KEY ] = {}
566+ parent_qp [_CHILDREN_KEY ][qp_name ] = qp_json_data
567+ to_remove .append (qp_name )
568+ for qp_name in to_remove :
569+ hierarchy .pop (qp_name )
570+ return hierarchy
571+
572+
573+ def hierarchize (qp_list : types .ObjectJsonRepr ) -> types .ObjectJsonRepr :
554574 """Organize a flat list of QP in hierarchical (inheritance) fashion
555575
556576 :param qp_list: List of quality profiles
@@ -559,31 +579,17 @@ def hierarchize(qp_list: dict[str, str], endpoint: pf.Platform) -> types.ObjectJ
559579 :rtype: {<language>: {<qp_name>: {"children": <qp_list>; <qp_data>}}}
560580 """
561581 log .info ("Organizing quality profiles in hierarchy" )
562- for lang , qpl in qp_list .copy ().items ():
563- for qp_name , qp_json_data in qpl .copy ().items ():
564- log .debug ("Treating %s:%s" , lang , qp_name )
565- if "parentName" not in qp_json_data :
566- continue
567- parent_qp_name = qp_json_data ["parentName" ]
568- qp_json_data .pop ("rules" , None )
569- log .debug ("QP name '%s:%s' has parent '%s'" , lang , qp_name , qp_json_data ["parentName" ])
570- if _CHILDREN_KEY not in qp_list [lang ][qp_json_data ["parentName" ]]:
571- qp_list [lang ][qp_json_data ["parentName" ]][_CHILDREN_KEY ] = {}
572-
573- this_qp = get_object (endpoint = endpoint , name = qp_name , language = lang )
574- (_ , qp_json_data ) = this_qp .diff (get_object (endpoint = endpoint , name = parent_qp_name , language = lang ), qp_json_data )
575- qp_list [lang ][parent_qp_name ][_CHILDREN_KEY ][qp_name ] = qp_json_data
576- qp_list [lang ].pop (qp_name )
577- qp_json_data .pop ("parentName" )
578- return qp_list
582+ hierarchy = {}
583+ for lang , lang_qp_list in qp_list .items ():
584+ hierarchy [lang ] = hierarchize_language (lang_qp_list )
585+ return hierarchy
579586
580587
581588def export (
582589 endpoint : pf .Platform , export_settings : types .ConfigSettings , key_list : Optional [types .KeyList ] = None , write_q : Optional [Queue ] = None
583590) -> types .ObjectJsonRepr :
584591 """Exports all or a list of quality profiles configuration as dict
585592
586- :param Platform endpoint: reference to the SonarQube platform
587593 :param ConfigSettings export_settings: Export parameters
588594 :param KeyList key_list: Unused
589595 :return: Dict of quality profiles JSON representation
@@ -599,7 +605,7 @@ def export(
599605 if lang not in qp_list :
600606 qp_list [lang ] = {}
601607 qp_list [lang ][name ] = json_data
602- qp_list = hierarchize (qp_list , endpoint )
608+ qp_list = hierarchize (qp_list )
603609 if write_q :
604610 write_q .put (qp_list )
605611 write_q .put (None )
0 commit comments