Skip to content
Merged
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
2 changes: 1 addition & 1 deletion sonar/permissions/permission_templates.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
_CREATE_API = "permissions/create_template"
_UPDATE_API = "permissions/update_template"

_IMPORTABLE_PROPERTIES = ("name", "description", "pattern", "permissions", "defaultFor")
_IMPORTABLE_PROPERTIES = ("name", "description", "pattern", "defaultFor", "permissions")


class PermissionTemplate(sqobject.SqObject):
Expand Down
17 changes: 15 additions & 2 deletions sonar/platform.py
Original file line number Diff line number Diff line change
Expand Up @@ -503,8 +503,21 @@ def export(self, export_settings: types.ConfigSettings, full: bool = False) -> t
if not self.is_sonarcloud():
json_data[settings.DEVOPS_INTEGRATION] = devops.export(self, export_settings=export_settings)

order = list(settings.CATEGORIES) + ["permissions", "permissionTemplates"]
return {k: json_data[k] for k in order if k in json_data} | {k: v for k, v in json_data.items() if k not in order}
# 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]:
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():
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"])

def set_webhooks(self, webhooks_data: types.ObjectJsonRepr) -> bool:
"""Sets global webhooks with a list of webhooks represented as JSON
Expand Down
8 changes: 7 additions & 1 deletion sonar/utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
"""

from typing import Any, TextIO, Union, Optional
from collections.abc import Generator
from http import HTTPStatus
import sys
import os
Expand Down Expand Up @@ -460,7 +461,7 @@ def is_api_v2(api: str) -> bool:


@contextlib.contextmanager
def open_file(file: Optional[str] = None, mode: str = "w") -> TextIO:
def open_file(file: Optional[str] = None, mode: str = "w") -> Generator[TextIO, None, None]:
"""Opens a file if not None or -, otherwise stdout"""
if file and file != "-":
log.debug("Opening file '%s' in directory '%s'", file, os.getcwd())
Expand Down Expand Up @@ -850,3 +851,8 @@ def order_list(l: list[str], *key_order) -> 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]


def perms_to_list(perms: dict[str, Any]) -> list[str, Any]:
"""Converts permissions in dict format to list format"""
return dict_to_list(perms.get("groups", {}), "group", "permissions") + dict_to_list(perms.get("users", {}), "user", "permissions")