Skip to content

Commit f89340e

Browse files
Add helper methods to get_sonar_project_properties
1 parent 03d6a06 commit f89340e

1 file changed

Lines changed: 47 additions & 34 deletions

File tree

src/usethis/_integrations/sonarqube/config.py

Lines changed: 47 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from __future__ import annotations
22

33
import re
4-
from pathlib import Path
54

65
from pydantic import TypeAdapter
76

@@ -20,49 +19,23 @@ class _NonstandardPythonVersionError(Exception):
2019
"""Raised when a non-standard Python version is detected."""
2120

2221

23-
def get_sonar_project_properties() -> str: # noqa: PLR0912
22+
def get_sonar_project_properties() -> str:
2423
"""Get contents for (or from) the sonar-project.properties file."""
2524
path = usethis_config.cpd() / "sonar-project.properties"
2625
if path.exists() and path.is_file():
2726
return path.read_text(encoding="utf-8")
2827

2928
# Get Python version
3029
try:
31-
python_version = _get_short_version(Path(".python-version").read_text().strip())
30+
python_version = _get_short_version(
31+
(usethis_config.cpd() / ".python-version").read_text().strip()
32+
)
3233
except (FileNotFoundError, _NonstandardPythonVersionError):
3334
python_version = get_python_version()
3435

35-
# Get Project key
36-
try:
37-
project_key = PyprojectTOMLManager()[
38-
["tool", "usethis", "sonarqube", "project-key"]
39-
]
40-
except KeyError:
41-
msg = "Could not find SonarQube project key at 'tool.usethis.sonarqube.project-key' in 'pyproject.toml'."
42-
raise MissingProjectKeyError(msg) from None
43-
except FileNotFoundError:
44-
msg = "Could not find 'pyproject.toml' for SonarQube project key at 'tool.usethis.sonarqube.project-key'."
45-
raise MissingProjectKeyError(msg) from None
46-
_validate_project_key(project_key)
47-
48-
# Get verbosity setting
49-
try:
50-
verbose = PyprojectTOMLManager()[["tool", "usethis", "sonarqube", "verbose"]]
51-
except (FileNotFoundError, KeyError):
52-
verbose = False
53-
verbose = TypeAdapter(bool).validate_python(verbose)
54-
55-
# Get exclusions
56-
try:
57-
exclusions = PyprojectTOMLManager()[
58-
["tool", "usethis", "sonarqube", "exclusions"]
59-
]
60-
except (FileNotFoundError, KeyError):
61-
exclusions = []
62-
# TypeAdapter(list).validate_python() ensures we have a list and returns a new list
63-
exclusions = TypeAdapter(list).validate_python(exclusions)
64-
for exclusion in exclusions:
65-
TypeAdapter(str).validate_python(exclusion)
36+
project_key = _get_sonarqube_project_key()
37+
verbose = _is_sonarqube_verbose()
38+
exclusions = _get_sonarqube_exclusions()
6639

6740
# Get coverage report output path
6841
try:
@@ -107,6 +80,46 @@ def _get_short_version(version: str) -> str:
10780
return match.group(1)
10881

10982

83+
def _get_sonarqube_project_key() -> str:
84+
try:
85+
project_key = PyprojectTOMLManager()[
86+
["tool", "usethis", "sonarqube", "project-key"]
87+
]
88+
except KeyError:
89+
msg = "Could not find SonarQube project key at 'tool.usethis.sonarqube.project-key' in 'pyproject.toml'."
90+
raise MissingProjectKeyError(msg) from None
91+
except FileNotFoundError:
92+
msg = "Could not find 'pyproject.toml' for SonarQube project key at 'tool.usethis.sonarqube.project-key'."
93+
raise MissingProjectKeyError(msg) from None
94+
_validate_project_key(project_key)
95+
return project_key
96+
97+
98+
def _is_sonarqube_verbose() -> bool:
99+
try:
100+
verbose = PyprojectTOMLManager()[["tool", "usethis", "sonarqube", "verbose"]]
101+
except (FileNotFoundError, KeyError):
102+
verbose = False
103+
verbose = TypeAdapter(bool).validate_python(verbose)
104+
105+
return verbose
106+
107+
108+
def _get_sonarqube_exclusions() -> list[str]:
109+
try:
110+
exclusions = PyprojectTOMLManager()[
111+
["tool", "usethis", "sonarqube", "exclusions"]
112+
]
113+
except (FileNotFoundError, KeyError):
114+
exclusions = []
115+
# TypeAdapter(list).validate_python() ensures we have a list and returns a new list
116+
exclusions = TypeAdapter(list).validate_python(exclusions)
117+
for exclusion in exclusions:
118+
TypeAdapter(str).validate_python(exclusion)
119+
120+
return exclusions
121+
122+
110123
def _validate_project_key(project_key: str) -> None:
111124
"""Validate the SonarQube project key.
112125

0 commit comments

Comments
 (0)