diff --git a/components/api_server/pyproject.toml b/components/api_server/pyproject.toml index a9355677fc..c6498d197f 100644 --- a/components/api_server/pyproject.toml +++ b/components/api_server/pyproject.toml @@ -30,7 +30,7 @@ optional-dependencies.tools = [ "mypy==1.14.1", "pip-audit==2.7.3", "pyproject-fmt==2.5.0", - "ruff==0.8.6", + "ruff==0.9.0", "vulture==2.14", ] diff --git a/components/api_server/src/initialization/secrets.py b/components/api_server/src/initialization/app_secrets.py similarity index 100% rename from components/api_server/src/initialization/secrets.py rename to components/api_server/src/initialization/app_secrets.py diff --git a/components/api_server/src/initialization/database.py b/components/api_server/src/initialization/database.py index 9e87654edf..a9de540231 100644 --- a/components/api_server/src/initialization/database.py +++ b/components/api_server/src/initialization/database.py @@ -9,7 +9,7 @@ from .migrations import perform_migrations from .datamodel import import_datamodel from .report import import_example_reports, initialize_reports_overview -from .secrets import initialize_secrets +from .app_secrets import initialize_secrets def init_database(database: Database) -> None: # pragma: no feature-test-cover diff --git a/components/api_server/src/model/issue_tracker.py b/components/api_server/src/model/issue_tracker.py index cdaae8f01f..56ffc22892 100644 --- a/components/api_server/src/model/issue_tracker.py +++ b/components/api_server/src/model/issue_tracker.py @@ -222,7 +222,7 @@ def __get_epic_links(self, fields: list[Option]) -> list[Option]: # pragma: no except Exception as reason: logging.warning("Getting epics at %s failed: %s", api_url, reason) return [ - Option(str(epic["key"]), f'{cast(dict[str, dict[str, str]], epic)["fields"]["summary"]} ({epic["key"]})') + Option(str(epic["key"]), f"{cast(dict[str, dict[str, str]], epic)['fields']['summary']} ({epic['key']})") for epic in epics ] diff --git a/components/api_server/src/routes/auth.py b/components/api_server/src/routes/auth.py index 1ec80841be..16b77b631b 100644 --- a/components/api_server/src/routes/auth.py +++ b/components/api_server/src/routes/auth.py @@ -17,7 +17,7 @@ from database.users import upsert_user, get_user from database import sessions -from initialization.secrets import EXPORT_FIELDS_KEYS_NAME +from initialization.app_secrets import EXPORT_FIELDS_KEYS_NAME from utils.functions import uuid from utils.type import SessionId, User diff --git a/components/api_server/src/routes/report.py b/components/api_server/src/routes/report.py index 20d2c92da4..bc4551410d 100644 --- a/components/api_server/src/routes/report.py +++ b/components/api_server/src/routes/report.py @@ -15,7 +15,7 @@ from database.datamodels import latest_datamodel from database.measurements import recent_measurements from database.reports import insert_new_report, latest_report, latest_reports_before_timestamp -from initialization.secrets import EXPORT_FIELDS_KEYS_NAME +from initialization.app_secrets import EXPORT_FIELDS_KEYS_NAME from model.actions import copy_report from model.defaults import default_report_attributes from model.report import Report diff --git a/components/api_server/src/routes/source.py b/components/api_server/src/routes/source.py index f7df3eda80..f2225229da 100644 --- a/components/api_server/src/routes/source.py +++ b/components/api_server/src/routes/source.py @@ -31,8 +31,7 @@ def post_source_new(metric_uuid: MetricId, database: Database): parameters = default_source_parameters(metric.type(), source_type) metric.sources_dict[(source_uuid := uuid())] = {"type": source_type, "parameters": parameters} delta_description = ( - f"{{user}} added a new source to metric '{metric.name}' of subject " - f"'{subject.name}' in report '{report.name}'." + f"{{user}} added a new source to metric '{metric.name}' of subject '{subject.name}' in report '{report.name}'." ) uuids = [report.uuid, subject.uuid, metric.uuid, source_uuid] result = insert_new_report(database, delta_description, uuids, report) diff --git a/components/api_server/tests/initialization/test_secrets.py b/components/api_server/tests/initialization/test_secrets.py index cac04feb80..c6445b8686 100644 --- a/components/api_server/tests/initialization/test_secrets.py +++ b/components/api_server/tests/initialization/test_secrets.py @@ -3,7 +3,7 @@ import unittest from unittest.mock import Mock -from initialization.secrets import initialize_secrets +from initialization.app_secrets import initialize_secrets class TestSecrets(unittest.TestCase): diff --git a/components/api_server/tests/routes/test_measurement.py b/components/api_server/tests/routes/test_measurement.py index ce6ee77cca..7a54b41fc9 100644 --- a/components/api_server/tests/routes/test_measurement.py +++ b/components/api_server/tests/routes/test_measurement.py @@ -213,7 +213,7 @@ def sleep(seconds: float) -> float: stream = stream_nr_measurements(self.database) try: self.assertEqual("retry: 2000\nid: 0\nevent: init\ndata: 42\n\n", next(stream)) - self.assertEqual(f"retry: 2000\nid: 1\nevent: flush\ndata: {"." * 256 ** 2}\n\n", next(stream)) + self.assertEqual(f"retry: 2000\nid: 1\nevent: flush\ndata: {'.' * 256**2}\n\n", next(stream)) self.assertEqual("retry: 2000\nid: 2\nevent: delta\ndata: 43\n\n", next(stream)) self.assertEqual("retry: 2000\nid: 3\nevent: delta\ndata: 43\n\n", next(stream)) self.assertEqual("retry: 2000\nid: 4\nevent: delta\ndata: 44\n\n", next(stream)) diff --git a/components/collector/pyproject.toml b/components/collector/pyproject.toml index c97d1bfd40..82dbd481ee 100644 --- a/components/collector/pyproject.toml +++ b/components/collector/pyproject.toml @@ -30,7 +30,7 @@ optional-dependencies.tools = [ "mypy==1.14.1", "pip-audit==2.7.3", "pyproject-fmt==2.5.0", - "ruff==0.8.6", + "ruff==0.9.0", "vulture==2.14", ] diff --git a/components/collector/src/source_collectors/anchore/security_warnings.py b/components/collector/src/source_collectors/anchore/security_warnings.py index dcdf8fbee3..b252e0bc79 100644 --- a/components/collector/src/source_collectors/anchore/security_warnings.py +++ b/components/collector/src/source_collectors/anchore/security_warnings.py @@ -22,7 +22,7 @@ def _create_entity(vulnerability: dict[str, str], filename: str) -> Entity: # Include the filename in the hash so that it is unique even when multiple images contain the # same package with the same vulnerability. Don't add a colon so existing hashes stay the same # if the source is not a zipped report (filename is an empty string in that case). - key=md5_hash(f'{filename}{vulnerability["vuln"]}:{vulnerability["package"]}'), + key=md5_hash(f"{filename}{vulnerability['vuln']}:{vulnerability['package']}"), cve=vulnerability["vuln"], filename=filename, package=vulnerability["package"], diff --git a/components/collector/src/source_collectors/bandit/security_warnings.py b/components/collector/src/source_collectors/bandit/security_warnings.py index 745924eecc..534d98516a 100644 --- a/components/collector/src/source_collectors/bandit/security_warnings.py +++ b/components/collector/src/source_collectors/bandit/security_warnings.py @@ -18,8 +18,8 @@ def _parse_json(self, json: JSON, filename: str) -> Entities: return Entities( [ Entity( - key=f'{warning["test_id"]}:{warning["filename"]}:{warning["line_number"]}', - location=f'{warning["filename"]}:{warning["line_number"]}', + key=f"{warning['test_id']}:{warning['filename']}:{warning['line_number']}", + location=f"{warning['filename']}:{warning['line_number']}", issue_text=warning["issue_text"], issue_severity=warning["issue_severity"].capitalize(), issue_confidence=warning["issue_confidence"].capitalize(), diff --git a/components/collector/src/source_collectors/composer/dependencies.py b/components/collector/src/source_collectors/composer/dependencies.py index ced927b230..6da41207fa 100644 --- a/components/collector/src/source_collectors/composer/dependencies.py +++ b/components/collector/src/source_collectors/composer/dependencies.py @@ -14,7 +14,7 @@ async def _parse_source_responses(self, responses: SourceResponses) -> SourceMea installed_dependencies.extend((await response.json(content_type=None)).get("installed", [])) entities = [ Entity( - key=f'{dependency["name"]}@{dependency.get("version", "?")}', + key=f"{dependency['name']}@{dependency.get('version', '?')}", name=dependency["name"], version=dependency.get("version", "unknown"), homepage=dependency.get("homepage", ""), diff --git a/components/collector/src/source_collectors/dependency_track/dependencies.py b/components/collector/src/source_collectors/dependency_track/dependencies.py index 20992af830..75a7f0a74a 100644 --- a/components/collector/src/source_collectors/dependency_track/dependencies.py +++ b/components/collector/src/source_collectors/dependency_track/dependencies.py @@ -50,11 +50,11 @@ def _create_entity(self, component: DependencyTrackComponent) -> Entity: landing_url = str(self._parameter("landing_url")).strip("/") return Entity( component=component["name"], - component_landing_url=f"{landing_url}/components/{component["uuid"]}", + component_landing_url=f"{landing_url}/components/{component['uuid']}", key=component["uuid"], latest=latest_version, latest_version_status=self._latest_version_status(current_version, latest_version), project=project["name"], - project_landing_url=f"{landing_url}/projects/{project["uuid"]}", + project_landing_url=f"{landing_url}/projects/{project['uuid']}", version=current_version, ) diff --git a/components/collector/src/source_collectors/dependency_track/security_warnings.py b/components/collector/src/source_collectors/dependency_track/security_warnings.py index 770b539b99..c604d84816 100644 --- a/components/collector/src/source_collectors/dependency_track/security_warnings.py +++ b/components/collector/src/source_collectors/dependency_track/security_warnings.py @@ -65,7 +65,7 @@ def _create_entity(self, finding: DependencyTrackFinding) -> Entity: latest_version = component.get("latestVersion", "unknown") return Entity( component=component["name"], - component_landing_url=f"{landing_url}/components/{component["uuid"]}", + component_landing_url=f"{landing_url}/components/{component['uuid']}", description=vulnerability["description"], identifier=vulnerability["vulnId"], key=finding["matrix"], # Matrix is a combination of project, component, and vulnerability diff --git a/components/collector/src/source_collectors/generic_json/security_warnings.py b/components/collector/src/source_collectors/generic_json/security_warnings.py index 400d4711c5..f7d2ec1e49 100644 --- a/components/collector/src/source_collectors/generic_json/security_warnings.py +++ b/components/collector/src/source_collectors/generic_json/security_warnings.py @@ -17,7 +17,7 @@ def _parse_json(self, json: JSON, filename: str) -> Entities: entities = Entities() vulnerabilities = cast(JSONDict, json).get("vulnerabilities", []) for vulnerability in vulnerabilities: - key = md5_hash(f'{vulnerability["title"]}:{vulnerability["description"]}') + key = md5_hash(f"{vulnerability['title']}:{vulnerability['description']}") entities.append( Entity( key=key, diff --git a/components/collector/src/source_collectors/npm/dependencies.py b/components/collector/src/source_collectors/npm/dependencies.py index 158420fe59..9997f51be9 100644 --- a/components/collector/src/source_collectors/npm/dependencies.py +++ b/components/collector/src/source_collectors/npm/dependencies.py @@ -31,7 +31,7 @@ def _parse_json(self, json: JSON, filename: str) -> Entities: def _create_entity(self, dependency: str, version: DependencyVersionInfo) -> Entity: """Create an entity for the dependency.""" - key = f'{dependency}@{version.get("current", "?")}' + key = f"{dependency}@{version.get('current', '?')}" name = dependency if "dependent" in version: key += f"@{version['dependent']}" diff --git a/components/collector/src/source_collectors/pip/dependencies.py b/components/collector/src/source_collectors/pip/dependencies.py index 9540f30f5a..63cbfa88b7 100644 --- a/components/collector/src/source_collectors/pip/dependencies.py +++ b/components/collector/src/source_collectors/pip/dependencies.py @@ -14,7 +14,7 @@ def _parse_json(self, json: JSON, filename: str) -> Entities: """Override to parse the dependencies from the JSON.""" return Entities( Entity( - key=f'{dependency["name"]}@{dependency.get("version", "?")}', + key=f"{dependency['name']}@{dependency.get('version', '?')}", name=dependency["name"], version=dependency.get("version", "unknown"), latest=dependency.get("latest_version", "unknown"), diff --git a/components/collector/src/source_collectors/sarif/base.py b/components/collector/src/source_collectors/sarif/base.py index 393b1bcb92..e45b84167b 100644 --- a/components/collector/src/source_collectors/sarif/base.py +++ b/components/collector/src/source_collectors/sarif/base.py @@ -23,7 +23,7 @@ def _parse_json(self, json: JSON, filename: str) -> Entities: ] entities.append( Entity( - key=f'{rule["id"]}@{",".join(locations)}', + key=f"{rule['id']}@{','.join(locations)}", message=result["message"]["text"], level=result["level"], locations=", ".join(locations), diff --git a/components/collector/tests/collector_utilities/test_functions.py b/components/collector/tests/collector_utilities/test_functions.py index 2cdd234132..6e23c20583 100644 --- a/components/collector/tests/collector_utilities/test_functions.py +++ b/components/collector/tests/collector_utilities/test_functions.py @@ -161,4 +161,4 @@ def test_decimal_round_half_up(self): self.assertEqual(1, decimal_round_half_up(1.0)) self.assertEqual(1, decimal_round_half_up(1.1)) self.assertEqual(2, decimal_round_half_up(1.5)) - self.assertEqual(2, decimal_round_half_up(Decimal(1.5))) + self.assertEqual(2, decimal_round_half_up(Decimal("1.5"))) diff --git a/components/collector/tests/source_collectors/ncover/test_uncovered_branches.py b/components/collector/tests/source_collectors/ncover/test_uncovered_branches.py index 8c00e0da1e..b79953ecc6 100644 --- a/components/collector/tests/source_collectors/ncover/test_uncovered_branches.py +++ b/components/collector/tests/source_collectors/ncover/test_uncovered_branches.py @@ -23,10 +23,10 @@ class NCoverUncoveredBranchesTest(NCoverTestCase): async def test_uncovered_branches(self): """Test that the number of uncovered branches is returned.""" response = await self.collect(get_request_text=self.NCOVER_HTML) - self.assert_measurement(response, value=f"{12034-9767}", total="12034") + self.assert_measurement(response, value=f"{12034 - 9767}", total="12034") async def test_zipped_report(self): """Test that the coverage can be read from a zip with NCover reports.""" self.set_source_parameter("url", "https://example.org/report.zip") response = await self.collect(get_request_content=self.zipped_report(("ncover.html", self.NCOVER_HTML))) - self.assert_measurement(response, value=f"{12034-9767}", total="12034") + self.assert_measurement(response, value=f"{12034 - 9767}", total="12034") diff --git a/components/collector/tests/source_collectors/ncover/test_uncovered_lines.py b/components/collector/tests/source_collectors/ncover/test_uncovered_lines.py index 149ba01e3b..3812db6702 100644 --- a/components/collector/tests/source_collectors/ncover/test_uncovered_lines.py +++ b/components/collector/tests/source_collectors/ncover/test_uncovered_lines.py @@ -22,10 +22,10 @@ class NCoverUncoveredLinesTest(NCoverTestCase): async def test_uncovered_lines(self): """Test that the number of uncovered sequence points is returned.""" response = await self.collect(get_request_text=self.NCOVER_HTML) - self.assert_measurement(response, value=f"{17153-14070}", total="17153") + self.assert_measurement(response, value=f"{17153 - 14070}", total="17153") async def test_zipped_report(self): """Test that the coverage can be read from a zip with NCover reports.""" self.set_source_parameter("url", "https://example.org/report.zip?parameter=should_not_matter") response = await self.collect(get_request_content=self.zipped_report(("ncover.html", self.NCOVER_HTML))) - self.assert_measurement(response, value=f"{17153-14070}", total="17153") + self.assert_measurement(response, value=f"{17153 - 14070}", total="17153") diff --git a/components/collector/tests/source_collectors/sonarqube/test_commented_out_code.py b/components/collector/tests/source_collectors/sonarqube/test_commented_out_code.py index 46ef4215cf..80d93b4956 100644 --- a/components/collector/tests/source_collectors/sonarqube/test_commented_out_code.py +++ b/components/collector/tests/source_collectors/sonarqube/test_commented_out_code.py @@ -16,5 +16,5 @@ async def test_commented_out_code(self): response, value="2", total="100", - landing_url=f"{self.issues_landing_url}&rules={self.sonar_rules("commented_out")}", + landing_url=f"{self.issues_landing_url}&rules={self.sonar_rules('commented_out')}", ) diff --git a/components/collector/tests/source_collectors/sonarqube/test_complex_units.py b/components/collector/tests/source_collectors/sonarqube/test_complex_units.py index e24eb675f1..86e4d233cf 100644 --- a/components/collector/tests/source_collectors/sonarqube/test_complex_units.py +++ b/components/collector/tests/source_collectors/sonarqube/test_complex_units.py @@ -26,5 +26,5 @@ async def test_complex_units(self): response, value="2", total="4", - landing_url=f"{self.issues_landing_url}&rules={self.sonar_rules("complex_unit")}", + landing_url=f"{self.issues_landing_url}&rules={self.sonar_rules('complex_unit')}", ) diff --git a/components/collector/tests/source_collectors/sonarqube/test_long_units.py b/components/collector/tests/source_collectors/sonarqube/test_long_units.py index 1df28cc448..e02ca09387 100644 --- a/components/collector/tests/source_collectors/sonarqube/test_long_units.py +++ b/components/collector/tests/source_collectors/sonarqube/test_long_units.py @@ -27,5 +27,5 @@ async def test_long_units(self): response, value="2", total="4", - landing_url=f"{self.issues_landing_url}&rules={self.sonar_rules("long_unit")}", + landing_url=f"{self.issues_landing_url}&rules={self.sonar_rules('long_unit')}", ) diff --git a/components/collector/tests/source_collectors/sonarqube/test_many_parameters.py b/components/collector/tests/source_collectors/sonarqube/test_many_parameters.py index 42f02681dc..5a06619314 100644 --- a/components/collector/tests/source_collectors/sonarqube/test_many_parameters.py +++ b/components/collector/tests/source_collectors/sonarqube/test_many_parameters.py @@ -27,5 +27,5 @@ async def test_many_parameters(self): response, value="2", total="4", - landing_url=f"{self.issues_landing_url}&rules={self.sonar_rules("many_parameter")}", + landing_url=f"{self.issues_landing_url}&rules={self.sonar_rules('many_parameter')}", ) diff --git a/components/collector/tests/source_collectors/sonarqube/test_todo_and_fixme_comments.py b/components/collector/tests/source_collectors/sonarqube/test_todo_and_fixme_comments.py index 9fe8a140aa..da7ece884b 100644 --- a/components/collector/tests/source_collectors/sonarqube/test_todo_and_fixme_comments.py +++ b/components/collector/tests/source_collectors/sonarqube/test_todo_and_fixme_comments.py @@ -16,5 +16,5 @@ async def test_todo_and_fixme_comments(self): response, value="2", total="100", - landing_url=f"{self.issues_landing_url}&rules={self.sonar_rules("todo_and_fixme_comment")}", + landing_url=f"{self.issues_landing_url}&rules={self.sonar_rules('todo_and_fixme_comment')}", ) diff --git a/components/frontend/package-lock.json b/components/frontend/package-lock.json index 3ad59c1226..c797dc518d 100644 --- a/components/frontend/package-lock.json +++ b/components/frontend/package-lock.json @@ -13,7 +13,7 @@ "@mui/icons-material": "^6.3.1", "@mui/lab": "^6.0.0-beta.17", "@mui/material": "^6.3.1", - "@mui/x-date-pickers": "^7.23.3", + "@mui/x-date-pickers": "^7.23.6", "crypto-js": "^4.2.0", "dayjs": "^1.11.13", "fomantic-ui-css": "^2.9.3", @@ -2508,6 +2508,8 @@ }, "node_modules/@fluentui/react-component-event-listener": { "version": "0.63.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-component-event-listener/-/react-component-event-listener-0.63.1.tgz", + "integrity": "sha512-gSMdOh6tI3IJKZFqxfQwbTpskpME0CvxdxGM2tdglmf6ZPVDi0L4+KKIm+2dN8nzb8Ya1A8ZT+Ddq0KmZtwVQg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.4" @@ -2519,6 +2521,8 @@ }, "node_modules/@fluentui/react-component-ref": { "version": "0.63.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-component-ref/-/react-component-ref-0.63.1.tgz", + "integrity": "sha512-8MkXX4+R3i80msdbD4rFpEB4WWq2UDvGwG386g3ckIWbekdvN9z2kWAd9OXhRGqB7QeOsoAGWocp6gAMCivRlw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.4", @@ -2531,6 +2535,8 @@ }, "node_modules/@fluentui/react-component-ref/node_modules/react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, "node_modules/@humanfs/core": { @@ -3398,12 +3404,14 @@ "license": "MIT" }, "node_modules/@mui/x-date-pickers": { - "version": "7.23.3", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.23.6.tgz", + "integrity": "sha512-jt6rEAYLju3NZe3y2S+I5KcTiSHV79FW0jeNUEUTceg1qsPzseHbND66k3zVF0hO3N2oZtLtPywof6vN5Doe+Q==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", "@mui/utils": "^5.16.6 || ^6.0.0", - "@mui/x-internals": "7.23.0", + "@mui/x-internals": "7.23.6", "@types/react-transition-group": "^4.4.11", "clsx": "^2.1.1", "prop-types": "^15.8.1", @@ -3422,7 +3430,7 @@ "@mui/material": "^5.15.14 || ^6.0.0", "@mui/system": "^5.15.14 || ^6.0.0", "date-fns": "^2.25.0 || ^3.2.0 || ^4.0.0", - "date-fns-jalali": "^2.13.0-0 || ^3.2.0-0", + "date-fns-jalali": "^2.13.0-0 || ^3.2.0-0 || ^4.0.0-0", "dayjs": "^1.10.7", "luxon": "^3.0.2", "moment": "^2.29.4", @@ -3462,7 +3470,9 @@ } }, "node_modules/@mui/x-internals": { - "version": "7.23.0", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.23.6.tgz", + "integrity": "sha512-hT1Pa4PNCnxwiauPbYMC3p4DiEF1x05Iu4C1MtC/jMJ1LtthymLmTuQ6ZQ53/R9FeqK6sYd6A6noR+vNMjp5DA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", @@ -3688,6 +3698,8 @@ }, "node_modules/@semantic-ui-react/event-stack": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@semantic-ui-react/event-stack/-/event-stack-3.1.3.tgz", + "integrity": "sha512-FdTmJyWvJaYinHrKRsMLDrz4tTMGdFfds299Qory53hBugiDvGC0tEJf+cHsi5igDwWb/CLOgOiChInHwq8URQ==", "license": "MIT", "dependencies": { "exenv": "^1.2.2", @@ -8174,6 +8186,8 @@ }, "node_modules/exenv": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==", "license": "BSD-3-Clause" }, "node_modules/exit": { @@ -8525,6 +8539,8 @@ }, "node_modules/fomantic-ui-css": { "version": "2.9.3", + "resolved": "https://registry.npmjs.org/fomantic-ui-css/-/fomantic-ui-css-2.9.3.tgz", + "integrity": "sha512-7bM6p3QRpfZFofg7Fd3crzox2E/nBsPyyWDN+N4lnTjNMxgKltSaXJTfhLoK5xBA+wEoNtcmm6w6FQ5Drj+27A==", "license": "MIT", "dependencies": { "jquery": "^3.4.0" @@ -10932,6 +10948,8 @@ }, "node_modules/jquery": { "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", "license": "MIT" }, "node_modules/js-tokens": { @@ -11139,6 +11157,8 @@ }, "node_modules/keyboard-key": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keyboard-key/-/keyboard-key-1.1.0.tgz", + "integrity": "sha512-qkBzPTi3rlAKvX7k0/ub44sqOfXeLc/jcnGGmj5c7BJpU8eDrEVPyhCvNYAaoubbsLm9uGWwQJO1ytQK1a9/dQ==", "license": "MIT" }, "node_modules/keyv": { @@ -11290,6 +11310,8 @@ }, "node_modules/lodash-es": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", "license": "MIT" }, "node_modules/lodash.debounce": { @@ -13869,6 +13891,8 @@ }, "node_modules/react-popper": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz", + "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==", "license": "MIT", "dependencies": { "react-fast-compare": "^3.0.1", @@ -15173,6 +15197,8 @@ }, "node_modules/semantic-ui-react": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/semantic-ui-react/-/semantic-ui-react-2.1.5.tgz", + "integrity": "sha512-nIqmmUNpFHfovEb+RI2w3E2/maZQutd8UIWyRjf1SLse+XF51hI559xbz/sLN3O6RpLjr/echLOOXwKCirPy3Q==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.5", @@ -15196,6 +15222,8 @@ }, "node_modules/semantic-ui-react/node_modules/clsx": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", "license": "MIT", "engines": { "node": ">=6" @@ -15382,6 +15410,8 @@ }, "node_modules/shallowequal": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", "license": "MIT" }, "node_modules/shebang-command": { @@ -17335,6 +17365,8 @@ }, "node_modules/warning": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", "license": "MIT", "dependencies": { "loose-envify": "^1.0.0" diff --git a/components/frontend/package.json b/components/frontend/package.json index da991c3349..4c7bbb8275 100644 --- a/components/frontend/package.json +++ b/components/frontend/package.json @@ -9,7 +9,7 @@ "@mui/icons-material": "^6.3.1", "@mui/lab": "^6.0.0-beta.17", "@mui/material": "^6.3.1", - "@mui/x-date-pickers": "^7.23.3", + "@mui/x-date-pickers": "^7.23.6", "crypto-js": "^4.2.0", "dayjs": "^1.11.13", "fomantic-ui-css": "^2.9.3", diff --git a/components/notifier/pyproject.toml b/components/notifier/pyproject.toml index c9b49e7920..e0fe9a1b06 100644 --- a/components/notifier/pyproject.toml +++ b/components/notifier/pyproject.toml @@ -23,7 +23,7 @@ optional-dependencies.tools = [ "mypy==1.14.1", "pip-audit==2.7.3", "pyproject-fmt==2.5.0", - "ruff==0.8.6", + "ruff==0.9.0", "vulture==2.14", ] diff --git a/components/shared_code/pyproject.toml b/components/shared_code/pyproject.toml index c3e1fd6e7b..7b0244081f 100644 --- a/components/shared_code/pyproject.toml +++ b/components/shared_code/pyproject.toml @@ -27,7 +27,7 @@ optional-dependencies.tools = [ "pip-audit==2.7.3", "pydantic==2.10.4", # Needed because pipx needs to inject Pydantic into the mpyp venv, see ci/quality.sh "pyproject-fmt==2.5.0", - "ruff==0.8.6", + "ruff==0.9.0", "vulture==2.14", ] diff --git a/components/shared_code/src/shared_data_model/parameters.py b/components/shared_code/src/shared_data_model/parameters.py index 958eb24836..79a938d7fe 100644 --- a/components/shared_code/src/shared_data_model/parameters.py +++ b/components/shared_code/src/shared_data_model/parameters.py @@ -249,11 +249,10 @@ def access_parameters( url_kwargs = kwargs.get("url") or {"name": "URL"} if source_type: source_type_article = "an" if source_type.startswith("an ") else "a" - source_type = source_type[len("an ") :] if source_type.startswith("an ") else source_type + source_type = source_type.removeprefix("an ") format_phrase = f" in {source_type_format} format" if source_type_format else "" url_kwargs["name"] = ( - f"URL to {source_type_article} {source_type}{format_phrase} or to a zip " - f"with {source_type}s{format_phrase}" + f"URL to {source_type_article} {source_type}{format_phrase} or to a zip with {source_type}s{format_phrase}" ) url_kwargs.setdefault("metrics", metrics) parameters["url"] = URL(validate_on=validate_on, **url_kwargs) diff --git a/components/shared_code/src/shared_data_model/scales.py b/components/shared_code/src/shared_data_model/scales.py index 8ee5ce0086..dedf85af4b 100644 --- a/components/shared_code/src/shared_data_model/scales.py +++ b/components/shared_code/src/shared_data_model/scales.py @@ -14,7 +14,6 @@ ), "version_number": Scale( name="Version number", - description="Version numbers of sources (for example, GitLab 10.2, SonarQube 7.4.1, " - "Quality-time 3.27.1rc-1).", + description="Version numbers of sources (for example, GitLab 10.2, SonarQube 7.4.1, Quality-time 3.27.1rc-1).", ), } diff --git a/components/shared_code/src/shared_data_model/sources/__init__.py b/components/shared_code/src/shared_data_model/sources/__init__.py index 62dc5d5da1..cf11fdae77 100644 --- a/components/shared_code/src/shared_data_model/sources/__init__.py +++ b/components/shared_code/src/shared_data_model/sources/__init__.py @@ -4,7 +4,7 @@ from .axe import AXE_CORE, AXE_CSV, AXE_HTML_REPORTER from .azure_devops import AZURE_DEVOPS from .bandit import BANDIT -from .calendar import CALENDAR +from .calendar_date import CALENDAR from .cargo_audit import CARGO_AUDIT from .cloc import CLOC from .cobertura import COBERTURA, COBERTURA_JENKINS_PLUGIN diff --git a/components/shared_code/src/shared_data_model/sources/calendar.py b/components/shared_code/src/shared_data_model/sources/calendar_date.py similarity index 100% rename from components/shared_code/src/shared_data_model/sources/calendar.py rename to components/shared_code/src/shared_data_model/sources/calendar_date.py diff --git a/docs/pyproject.toml b/docs/pyproject.toml index 6d1f28c24d..76b4d22c48 100644 --- a/docs/pyproject.toml +++ b/docs/pyproject.toml @@ -26,7 +26,7 @@ optional-dependencies.tools = [ "pip-audit==2.7.3", "pydantic==2.10.4", # Needed because pipx needs to inject Pydantic into the mpyp venv, see ci/quality.sh "pyproject-fmt==2.5.0", - "ruff==0.8.6", + "ruff==0.9.0", "vale==3.0.3.0", # Documentation grammar and style checker "vulture==2.14", ] diff --git a/release/pyproject.toml b/release/pyproject.toml index dae05fe674..70aed7bb42 100644 --- a/release/pyproject.toml +++ b/release/pyproject.toml @@ -16,7 +16,7 @@ optional-dependencies.tools = [ "mypy==1.14.1", "pip-audit==2.7.3", "pyproject-fmt==2.5.0", - "ruff==0.8.6", + "ruff==0.9.0", "vulture==2.14", ] diff --git a/tests/application_tests/pyproject.toml b/tests/application_tests/pyproject.toml index f5ea46327a..e820a76054 100644 --- a/tests/application_tests/pyproject.toml +++ b/tests/application_tests/pyproject.toml @@ -20,7 +20,7 @@ optional-dependencies.tools = [ "mypy==1.14.1", "pip-audit==2.7.3", "pyproject-fmt==2.5.0", - "ruff==0.8.6", + "ruff==0.9.0", "vulture==2.14", ] diff --git a/tests/feature_tests/pyproject.toml b/tests/feature_tests/pyproject.toml index 6692f1b0c3..a75ca5959b 100644 --- a/tests/feature_tests/pyproject.toml +++ b/tests/feature_tests/pyproject.toml @@ -25,7 +25,7 @@ optional-dependencies.tools = [ "mypy==1.14.1", "pip-audit==2.7.3", "pyproject-fmt==2.5.0", - "ruff==0.8.6", + "ruff==0.9.0", "vulture==2.14", ]