diff --git a/scripts/generate_config_md.py b/scripts/generate_config_md.py index 06213b09..0ea95077 100755 --- a/scripts/generate_config_md.py +++ b/scripts/generate_config_md.py @@ -6,6 +6,7 @@ import json import os import re import sys +import tempfile import textwrap from pathlib import Path from typing import Any, Optional, Type, TypeVar, Union, get_args @@ -524,4 +525,9 @@ def main(): ConfigEOS._force_documentation_mode = False if __name__ == "__main__": - main() + # EOS creates a config file if it finds none. Let it do so in a temporary + # directory, not in the working directory (e.g. the repository root). + with tempfile.TemporaryDirectory(prefix="eos-docs-") as eos_dir: + os.environ["EOS_DIR"] = eos_dir + os.environ["EOS_CONFIG_DIR"] = eos_dir + main() diff --git a/scripts/generate_openapi.py b/scripts/generate_openapi.py index 00c6641a..50e79bc0 100755 --- a/scripts/generate_openapi.py +++ b/scripts/generate_openapi.py @@ -18,6 +18,7 @@ import argparse import json import os import sys +import tempfile from pathlib import Path # Add the src directory to sys.path so import akkudoktoreos works in all cases @@ -101,4 +102,9 @@ def main(): if __name__ == "__main__": - main() + # EOS creates a config file if it finds none. Let it do so in a temporary + # directory, not in the working directory (e.g. the repository root). + with tempfile.TemporaryDirectory(prefix="eos-docs-") as eos_dir: + os.environ["EOS_DIR"] = eos_dir + os.environ["EOS_CONFIG_DIR"] = eos_dir + main() diff --git a/scripts/generate_openapi_md.py b/scripts/generate_openapi_md.py index 61127d98..59e44812 100755 --- a/scripts/generate_openapi_md.py +++ b/scripts/generate_openapi_md.py @@ -5,6 +5,7 @@ import argparse import json import os import sys +import tempfile from typing import TYPE_CHECKING import git @@ -318,4 +319,9 @@ def main(): if __name__ == "__main__": - main() + # EOS creates a config file if it finds none. Let it do so in a temporary + # directory, not in the working directory (e.g. the repository root). + with tempfile.TemporaryDirectory(prefix="eos-docs-") as eos_dir: + os.environ["EOS_DIR"] = eos_dir + os.environ["EOS_CONFIG_DIR"] = eos_dir + main() diff --git a/tests/conftest.py b/tests/conftest.py index 897e812e..beee8cc7 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -211,7 +211,8 @@ def cfg_non_existent(request): # Before test from platformdirs import user_config_dir - user_dir = user_config_dir(ConfigEOS.APP_NAME) + # The same directory as ConfigEOS uses (app author matters on Windows). + user_dir = user_config_dir(ConfigEOS.APP_NAME, ConfigEOS.APP_AUTHOR) user_config_file = Path(user_dir).joinpath(ConfigEOS.CONFIG_FILE_NAME) cwd_config_file = Path.cwd().joinpath(ConfigEOS.CONFIG_FILE_NAME) assert not user_config_file.exists(), ( diff --git a/tests/test_docsphinx.py b/tests/test_docsphinx.py index 01509ab6..589e2b26 100644 --- a/tests/test_docsphinx.py +++ b/tests/test_docsphinx.py @@ -138,6 +138,9 @@ class TestSphinxDocumentation: env = os.environ.copy() env["EOS_DIR"] = eos_dir env["EOS_CONFIG_DIR"] = eos_dir + # An empty config file, so EOS does not fall back to (and migrate) the + # user's own config file in the user config directory. + Path(eos_dir, "EOS.config.json").write_text("{}", encoding="utf-8") try: process = subprocess.run( @@ -146,7 +149,10 @@ class TestSphinxDocumentation: env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, - text=True, + # Sphinx writes UTF-8; the platform default (e.g. cp1252 on + # Windows) cannot decode it. + encoding="utf-8", + errors="replace", cwd=DIR_PROJECT_ROOT, # use the existing constant ) output = process.stdout + "\n" + process.stderr