Skip to content

Commit e8d52dd

Browse files
authored
SCANPY-140 Properties should be stored in a dictionary (#146)
1 parent e932208 commit e8d52dd

File tree

13 files changed

+807
-648
lines changed

13 files changed

+807
-648
lines changed

src/pysonar_scanner/__main__.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,21 @@
1919
#
2020

2121
from pysonar_scanner import cache
22-
from pysonar_scanner.configuration import Configuration, ConfigurationLoader
22+
from pysonar_scanner import configuration
2323
from pysonar_scanner.api import get_base_urls, SonarQubeApi
24+
from pysonar_scanner.configuration import ConfigurationLoader
2425
from pysonar_scanner.scannerengine import ScannerEngine
25-
from pysonar_scanner.cache import Cache
26-
from pysonar_scanner.jre import JREProvisioner, JREResolvedPath, JREResolver
2726

2827

2928
def scan():
30-
configuration = ConfigurationLoader().initialize_configuration()
29+
config = ConfigurationLoader.load()
3130
cache_manager = cache.get_default()
32-
api = __build_api(configuration)
31+
api = __build_api(config)
3332
scanner = ScannerEngine(api, cache_manager)
34-
return scanner.run(configuration)
33+
return scanner.run(config)
3534

3635

37-
def __build_api(configuration) -> SonarQubeApi:
38-
base_urls = get_base_urls(configuration)
39-
return SonarQubeApi(base_urls, configuration.sonar.token)
36+
def __build_api(config: dict[str, any]) -> SonarQubeApi:
37+
token = configuration.get_token(config)
38+
base_urls = get_base_urls(config)
39+
return SonarQubeApi(base_urls, token)

src/pysonar_scanner/api.py

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,11 @@
1919
#
2020
import typing
2121
from dataclasses import dataclass
22-
from typing import Optional
22+
from typing import Optional, TypedDict
2323

2424
import requests
2525
import requests.auth
2626

27-
from pysonar_scanner.configuration import Configuration
2827
from pysonar_scanner.exceptions import MissingKeyException, SonarQubeApiException
2928
from pysonar_scanner.utils import Arch, Os, remove_trailing_slash
3029

@@ -103,9 +102,24 @@ def from_dict(dict: dict) -> "JRE":
103102
raise MissingKeyException(f"Missing key in dictionary {dict}") from e
104103

105104

106-
def get_base_urls(config: Configuration) -> BaseUrls:
107-
def is_sq_cloud_url(sonar_host_url: str) -> bool:
108-
sq_cloud_url = config.sonar.scanner.sonarcloud_url.strip() or "https://sonarcloud.io"
105+
ApiConfiguration = TypedDict(
106+
"ApiConfiguration",
107+
{"sonar.host.url": str, "sonar.scanner.sonarcloudUrl": str, "sonar.scanner.apiBaseUrl": str, "sonar.region": str},
108+
)
109+
110+
111+
def to_api_configuration(config_dict: dict[str, any]) -> ApiConfiguration:
112+
return {
113+
"sonar.host.url": config_dict.get("sonar.host.url", ""),
114+
"sonar.scanner.sonarcloudUrl": config_dict.get("sonar.scanner.sonarcloudUrl", ""),
115+
"sonar.scanner.apiBaseUrl": config_dict.get("sonar.scanner.apiBaseUrl", ""),
116+
"sonar.region": config_dict.get("sonar.region", ""),
117+
}
118+
119+
120+
def get_base_urls(config_dict: dict[str, any]) -> BaseUrls:
121+
def is_sq_cloud_url(api_config: ApiConfiguration, sonar_host_url: str) -> bool:
122+
sq_cloud_url = api_config["sonar.scanner.sonarcloudUrl"] or "https://sonarcloud.io"
109123
return remove_trailing_slash(sonar_host_url) == remove_trailing_slash(sq_cloud_url)
110124

111125
def is_blank(str) -> bool:
@@ -114,14 +128,16 @@ def is_blank(str) -> bool:
114128
def region_with_dot(region: str) -> str:
115129
return region + "." if not is_blank(region) else ""
116130

117-
sonar_host_url = remove_trailing_slash(config.sonar.host_url)
118-
if is_blank(sonar_host_url) or is_sq_cloud_url(sonar_host_url):
119-
region = region_with_dot(config.sonar.region)
120-
sonar_host_url = config.sonar.scanner.sonarcloud_url or f"https://{region}sonarcloud.io"
121-
api_base_url = config.sonar.scanner.api_base_url or f"https://api.{region}sonarcloud.io"
131+
api_config: ApiConfiguration = to_api_configuration(config_dict)
132+
133+
sonar_host_url = remove_trailing_slash(api_config["sonar.host.url"])
134+
if is_blank(sonar_host_url) or is_sq_cloud_url(api_config, sonar_host_url):
135+
region = region_with_dot(api_config["sonar.region"])
136+
sonar_host_url = api_config["sonar.scanner.sonarcloudUrl"] or f"https://{region}sonarcloud.io"
137+
api_base_url = api_config["sonar.scanner.apiBaseUrl"] or f"https://api.{region}sonarcloud.io"
122138
return BaseUrls(base_url=sonar_host_url, api_base_url=api_base_url, is_sonar_qube_cloud=True)
123139
else:
124-
api_base_url = config.sonar.scanner.api_base_url or f"{sonar_host_url}/api/v2"
140+
api_base_url = api_config["sonar.scanner.apiBaseUrl"] or f"{sonar_host_url}/api/v2"
125141
return BaseUrls(base_url=sonar_host_url, api_base_url=api_base_url, is_sonar_qube_cloud=False)
126142

127143

0 commit comments

Comments
 (0)