From 855acda2f2a1a5aa709bf87a34201faf431dbb1d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 20:12:36 +0000 Subject: [PATCH 1/2] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.8.6 → v0.9.6](https://github.com/astral-sh/ruff-pre-commit/compare/v0.8.6...v0.9.6) - [github.com/pre-commit/mirrors-mypy: v1.14.1 → v1.15.0](https://github.com/pre-commit/mirrors-mypy/compare/v1.14.1...v1.15.0) --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0655be6c8..1a2d16f4e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,14 +6,14 @@ repos: - id: taplo-format - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.8.6 + rev: v0.9.6 hooks: - id: ruff args: [--fix] - id: ruff-format - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.14.1 + rev: v1.15.0 hooks: - id: mypy files: sphinx_needs/.* From efe551242b2da70b15dc51e80c0ae2befb1576b1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 20:13:07 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- performance/performance_test.py | 4 ++-- sphinx_needs/api/need.py | 8 ++++---- sphinx_needs/debug.py | 10 +++++----- sphinx_needs/diagrams_common.py | 6 +++--- sphinx_needs/directives/needflow/_plantuml.py | 2 +- sphinx_needs/directives/needgantt.py | 6 +++--- sphinx_needs/directives/needimport.py | 2 +- sphinx_needs/directives/needlist.py | 6 +++--- sphinx_needs/directives/needpie.py | 4 +++- sphinx_needs/directives/needsequence.py | 4 ++-- sphinx_needs/external_needs.py | 4 ++-- sphinx_needs/filter_common.py | 2 +- sphinx_needs/needsfile.py | 2 +- sphinx_needs/roles/need_incoming.py | 10 +++++----- sphinx_needs/roles/need_outgoing.py | 6 +++--- sphinx_needs/roles/need_ref.py | 6 +++--- sphinx_needs/services/github.py | 2 +- sphinx_needs/services/manager.py | 2 +- sphinx_needs/utils.py | 12 ++++++------ tests/test_service_github.py | 2 +- 20 files changed, 51 insertions(+), 49 deletions(-) diff --git a/performance/performance_test.py b/performance/performance_test.py index c7ca7e368..9d692e315 100644 --- a/performance/performance_test.py +++ b/performance/performance_test.py @@ -141,7 +141,7 @@ def start( print(f" Project = {source_tmp_path}") print(f" Build = {project_path}") if debug: - print(f' Call: {" ".join(params)} ') + print(f" Call: {' '.join(params)} ") if debug: subprocess.run(params) @@ -298,7 +298,7 @@ def series( proc = subprocess.Popen(["snakeviz", f"profile/{p}.prof"]) procs.append(proc) - print(f"\nKilling snakeviz server in {len(procs)*5} secs.") + print(f"\nKilling snakeviz server in {len(procs) * 5} secs.") time.sleep(len(procs) * 5) for proc in procs: proc.kill() diff --git a/sphinx_needs/api/need.py b/sphinx_needs/api/need.py index b9c9f08ed..4fd888efa 100644 --- a/sphinx_needs/api/need.py +++ b/sphinx_needs/api/need.py @@ -731,7 +731,7 @@ def _make_hashed_id( hashed = hashlib.sha1(hashable_content.encode("UTF-8")).hexdigest().upper() if config.id_from_title: hashed = full_title.upper().replace(" ", "_") + "_" + hashed - return f"{type_prefix}{hashed[:config.id_length]}" + return f"{type_prefix}{hashed[: config.id_length]}" def _split_list_with_dyn_funcs( @@ -753,9 +753,9 @@ def _split_list_with_dyn_funcs( return if not isinstance(text, str): - assert isinstance(text, list) and all( - isinstance(x, str) for x in text - ), "text must be a string or a list of strings" + assert isinstance(text, list) and all(isinstance(x, str) for x in text), ( + "text must be a string or a list of strings" + ) yield from ((x, False) for x in text) return diff --git a/sphinx_needs/debug.py b/sphinx_needs/debug.py index 0a27c3aca..8c847a15d 100644 --- a/sphinx_needs/debug.py +++ b/sphinx_needs/debug.py @@ -146,11 +146,11 @@ def measure_time_func( def _print_timing_results(app: Sphinx) -> None: for value in TIME_MEASUREMENTS.values(): print(value["name"]) - print(f' amount: {value["amount"]}') - print(f' overall: {value["overall"]:2f}') - print(f' avg: {value["avg"]:2f}') - print(f' max: {value["max"]:2f}') - print(f' min: {value["min"]:2f} \n') + print(f" amount: {value['amount']}") + print(f" overall: {value['overall']:2f}") + print(f" avg: {value['avg']:2f}") + print(f" max: {value['max']:2f}") + print(f" min: {value['min']:2f} \n") def _store_timing_results_json(app: Sphinx, build_data: dict[str, Any]) -> None: diff --git a/sphinx_needs/diagrams_common.py b/sphinx_needs/diagrams_common.py index 944dbaed5..e6cda0209 100644 --- a/sphinx_needs/diagrams_common.py +++ b/sphinx_needs/diagrams_common.py @@ -189,9 +189,9 @@ def calculate_link( builder = app.builder try: if need_info["is_external"]: - assert ( - need_info["external_url"] is not None - ), "external_url must be set for external needs" + assert need_info["external_url"] is not None, ( + "external_url must be set for external needs" + ) link = need_info["external_url"] # check if need_info["external_url"] is relative path parsed_url = urlparse(need_info["external_url"]) diff --git a/sphinx_needs/directives/needflow/_plantuml.py b/sphinx_needs/directives/needflow/_plantuml.py index ec264240c..6d944bfa2 100644 --- a/sphinx_needs/directives/needflow/_plantuml.py +++ b/sphinx_needs/directives/needflow/_plantuml.py @@ -274,7 +274,7 @@ def process_needflow_plantuml( ) if found_needs: - plantuml_block_text = ".. plantuml::\n" "\n" " @startuml" " @enduml" + plantuml_block_text = ".. plantuml::\n\n @startuml @enduml" puml_node = plantuml(plantuml_block_text) # TODO if an alt is not set then sphinxcontrib.plantuml uses the plantuml source code as alt text. # I think this is not great, but currently setting a more sensible default breaks some tests diff --git a/sphinx_needs/directives/needgantt.py b/sphinx_needs/directives/needgantt.py index 16947dd0c..339c063f5 100644 --- a/sphinx_needs/directives/needgantt.py +++ b/sphinx_needs/directives/needgantt.py @@ -85,7 +85,7 @@ def run(self) -> Sequence[nodes.Node]: timeline_options = ["daily", "weekly", "monthly"] if timeline and timeline not in timeline_options: raise NeedGanttException( - "Given scale value {} is invalid. Please use: " "{}".format( + "Given scale value {} is invalid. Please use: {}".format( timeline, ",".join(timeline_options) ) ) @@ -178,7 +178,7 @@ def process_needgantt( no_plantuml(node) continue - plantuml_block_text = ".. plantuml::\n" "\n" " @startgantt" " @endgantt" + plantuml_block_text = ".. plantuml::\n\n @startgantt @endgantt" puml_node = plantuml(plantuml_block_text) # Add source origin @@ -321,7 +321,7 @@ def process_needgantt( start_with_links = need[link_type] # type: ignore[literal-required] for start_with_link in start_with_links: start_need = all_needs_dict[start_with_link] - gantt_constraint = "[{}] {} at [{}]'s " "{}\n".format( + gantt_constraint = "[{}] {} at [{}]'s {}\n".format( need["id"], keyword, start_need["id"], start_end_sync ) puml_node["uml"] += gantt_constraint diff --git a/sphinx_needs/directives/needimport.py b/sphinx_needs/directives/needimport.py index 78f8ff017..10d2691a3 100644 --- a/sphinx_needs/directives/needimport.py +++ b/sphinx_needs/directives/needimport.py @@ -128,7 +128,7 @@ def run(self) -> Sequence[nodes.Node]: f"Schema validation errors detected in file {correct_need_import_path}:" ) for error in errors.schema: - logger.info(f' {error.message} -> {".".join(error.path)}') + logger.info(f" {error.message} -> {'.'.join(error.path)}") if version is None: try: diff --git a/sphinx_needs/directives/needlist.py b/sphinx_needs/directives/needlist.py index c090c0f47..71d652e18 100644 --- a/sphinx_needs/directives/needlist.py +++ b/sphinx_needs/directives/needlist.py @@ -114,9 +114,9 @@ def process_needlist( if need_info["hide"]: para += title elif need_info["is_external"]: - assert ( - need_info["external_url"] is not None - ), "External need without URL" + assert need_info["external_url"] is not None, ( + "External need without URL" + ) ref = nodes.reference("", "") ref["refuri"] = check_and_calc_base_url_rel_path( diff --git a/sphinx_needs/directives/needpie.py b/sphinx_needs/directives/needpie.py index e5355abe7..1c5e8d9c3 100644 --- a/sphinx_needs/directives/needpie.py +++ b/sphinx_needs/directives/needpie.py @@ -187,7 +187,9 @@ def process_needpie( # execute filter_func code if ff_result: args = ff_result.args.split(",") if ff_result.args else [] - args_context = {f"arg{index+1}": arg for index, arg in enumerate(args)} + args_context = { + f"arg{index + 1}": arg for index, arg in enumerate(args) + } sizes = [] ff_result.func(needs=need_list, results=sizes, **args_context) diff --git a/sphinx_needs/directives/needsequence.py b/sphinx_needs/directives/needsequence.py index 644e24773..8ffe45861 100644 --- a/sphinx_needs/directives/needsequence.py +++ b/sphinx_needs/directives/needsequence.py @@ -127,7 +127,7 @@ def process_needsequence( no_plantuml(node) continue - plantuml_block_text = ".. plantuml::\n" "\n" " @startuml" " @enduml" + plantuml_block_text = ".. plantuml::\n\n @startuml @enduml" puml_node = plantuml(plantuml_block_text) # Add source origin @@ -161,7 +161,7 @@ def process_needsequence( need = all_needs_dict[need_id.strip()] except KeyError: raise NeedSequenceException( - "Given {} in needsequence unknown." " File {}" ":{}".format( + "Given {} in needsequence unknown. File {}:{}".format( need_id, current_needsequence["docname"], current_needsequence["lineno"], diff --git a/sphinx_needs/external_needs.py b/sphinx_needs/external_needs.py index e01d237b0..9aa2e014d 100644 --- a/sphinx_needs/external_needs.py +++ b/sphinx_needs/external_needs.py @@ -171,10 +171,10 @@ def load_external_needs( # render jinja content mem_template = get_target_template(target_url) cal_target_url = mem_template.render(**{"need": need}) - need_params["external_url"] = f'{source["base_url"]}/{cal_target_url}' + need_params["external_url"] = f"{source['base_url']}/{cal_target_url}" else: need_params["external_url"] = ( - f'{source["base_url"]}/{need.get("docname", "__error__")}.html#{need["id"]}' + f"{source['base_url']}/{need.get('docname', '__error__')}.html#{need['id']}" ) # check if external needs already exist diff --git a/sphinx_needs/filter_common.py b/sphinx_needs/filter_common.py index 48821b8da..26ae64818 100644 --- a/sphinx_needs/filter_common.py +++ b/sphinx_needs/filter_common.py @@ -199,7 +199,7 @@ def process_filters( args = [] if ff_result.args: args = ff_result.args.split(",") - args_context = {f"arg{index+1}": arg for index, arg in enumerate(args)} + args_context = {f"arg{index + 1}": arg for index, arg in enumerate(args)} # Decorate function to allow time measurments filter_func = measure_time_func( diff --git a/sphinx_needs/needsfile.py b/sphinx_needs/needsfile.py index 06ec149cc..e43760bdf 100644 --- a/sphinx_needs/needsfile.py +++ b/sphinx_needs/needsfile.py @@ -216,7 +216,7 @@ def load_json(self, file: str) -> None: if errors.schema: self.log.info(f"Schema validation errors detected in file {file}:") for error in errors.schema: - self.log.info(f' {error.message} -> {".".join(error.path)}') + self.log.info(f" {error.message} -> {'.'.join(error.path)}") with open(file) as needs_file: try: diff --git a/sphinx_needs/roles/need_incoming.py b/sphinx_needs/roles/need_incoming.py index 8d72557b5..1762b5640 100644 --- a/sphinx_needs/roles/need_incoming.py +++ b/sphinx_needs/roles/need_incoming.py @@ -44,10 +44,10 @@ def process_need_incoming( try: target_need = all_needs[back_link] if needs_config.show_link_title: - link_text = f'{target_need["title"]}' + link_text = f"{target_need['title']}" if needs_config.show_link_id: - link_text += f' ({target_need["id"]})' + link_text += f" ({target_need['id']})" else: link_text = target_need["id"] @@ -70,9 +70,9 @@ def process_need_incoming( node_need_backref["reftarget"], ) else: - assert ( - target_need["external_url"] is not None - ), "External URL must not be set" + assert target_need["external_url"] is not None, ( + "External URL must not be set" + ) new_node_ref = nodes.reference( target_need["id"], target_need["id"] ) diff --git a/sphinx_needs/roles/need_outgoing.py b/sphinx_needs/roles/need_outgoing.py index 0266947a0..056bb6e9b 100644 --- a/sphinx_needs/roles/need_outgoing.py +++ b/sphinx_needs/roles/need_outgoing.py @@ -93,9 +93,9 @@ def process_need_outgoing( node_need_ref["reftarget"], ) else: - assert ( - target_need["external_url"] is not None - ), "External URL must be set" + assert target_need["external_url"] is not None, ( + "External URL must be set" + ) new_node_ref = nodes.reference( target_need["id"], target_need["id"] ) diff --git a/sphinx_needs/roles/need_ref.py b/sphinx_needs/roles/need_ref.py index 59fd26471..118b1e317 100644 --- a/sphinx_needs/roles/need_ref.py +++ b/sphinx_needs/roles/need_ref.py @@ -153,9 +153,9 @@ def process_need_ref( node_need_ref["reftarget"], ) else: - assert ( - target_need["external_url"] is not None - ), "external_url must be set for external needs" + assert target_need["external_url"] is not None, ( + "external_url must be set for external needs" + ) new_node_ref = nodes.reference(target_need["id"], target_need["id"]) new_node_ref["refuri"] = check_and_calc_base_url_rel_path( target_need["external_url"], fromdocname diff --git a/sphinx_needs/services/github.py b/sphinx_needs/services/github.py index d31d82ba0..5f0f000a2 100644 --- a/sphinx_needs/services/github.py +++ b/sphinx_needs/services/github.py @@ -208,7 +208,7 @@ def request_from_directive( if "errors" in response: create_warning( directive, - "GitHub service query error: {}\n" "Used query: {}".format( + "GitHub service query error: {}\nUsed query: {}".format( response["errors"][0]["message"], query ), ) diff --git a/sphinx_needs/services/manager.py b/sphinx_needs/services/manager.py index 698861f95..ebd418b2c 100644 --- a/sphinx_needs/services/manager.py +++ b/sphinx_needs/services/manager.py @@ -45,7 +45,7 @@ def get(self, name: str) -> BaseService: return self.services[name] else: raise NeedsServiceException( - "Service {} could not be found. " "Available services are {}".format( + "Service {} could not be found. Available services are {}".format( name, ", ".join(self.services) ) ) diff --git a/sphinx_needs/utils.py b/sphinx_needs/utils.py index 5ee09f651..a9398bc4d 100644 --- a/sphinx_needs/utils.py +++ b/sphinx_needs/utils.py @@ -153,9 +153,9 @@ def row_col_maker( if make_ref: if need_info["is_external"]: - assert ( - need_info["external_url"] is not None - ), "external_url must be set for external needs" + assert need_info["external_url"] is not None, ( + "external_url must be set for external needs" + ) ref_col["refuri"] = check_and_calc_base_url_rel_path( need_info["external_url"], fromdocname ) @@ -169,9 +169,9 @@ def row_col_maker( elif ref_lookup: temp_need = all_needs[link_id] if temp_need["is_external"]: - assert ( - temp_need["external_url"] is not None - ), "external_url must be set for external needs" + assert temp_need["external_url"] is not None, ( + "external_url must be set for external needs" + ) ref_col["refuri"] = check_and_calc_base_url_rel_path( temp_need["external_url"], fromdocname ) diff --git a/tests/test_service_github.py b/tests/test_service_github.py index 17b0539b0..eb789a475 100644 --- a/tests/test_service_github.py +++ b/tests/test_service_github.py @@ -90,7 +90,7 @@ def test_build(test_app, snapshot): prefix = " [docutils]" if version_info >= (8, 0) else "" expected_warnings = [ f'{Path(str(app.srcdir)) / "index.rst"}:4: WARNING: "query" or "specific" missing as option for github service. [needs.github]', - f'{Path(str(app.srcdir)) / "index.rst"}:23: WARNING: Bullet list ends without a blank line; unexpected unindent.{prefix}', + f"{Path(str(app.srcdir)) / 'index.rst'}:23: WARNING: Bullet list ends without a blank line; unexpected unindent.{prefix}", f"{Path(str(app.srcdir)) / 'index.rst'}:22: WARNING: GitHub: API rate limit exceeded (twice). Stop here. [needs.github]", ]