diff --git a/src/ocrmypdf/_validation.py b/src/ocrmypdf/_validation.py index 6dc0566b..76f9b7a4 100644 --- a/src/ocrmypdf/_validation.py +++ b/src/ocrmypdf/_validation.py @@ -28,7 +28,13 @@ from ocrmypdf.exceptions import ( MissingDependencyError, OutputFileAccessError, ) -from ocrmypdf.helpers import is_file_writable, monotonic, safe_symlink +from ocrmypdf.helpers import ( + is_file_writable, + monotonic, + running_in_docker, + running_in_snap, + safe_symlink, +) from ocrmypdf.subprocess import check_external_program log = logging.getLogger(__name__) @@ -237,18 +243,6 @@ def check_options(options: Namespace, plugin_manager: PluginManager) -> None: _check_plugin_options(options, plugin_manager) -def _in_docker(): - return Path('/.dockerenv').exists() - - -def _in_snap(): - try: - cgroup_text = Path('/proc/self/cgroup').read_text() - return 'snap.ocrmypdf' in cgroup_text - except FileNotFoundError: - return False - - def create_input_file(options: Namespace, work_folder: Path) -> tuple[Path, str]: if options.input_file == '-': # stdin @@ -272,7 +266,7 @@ def create_input_file(options: Namespace, work_folder: Path) -> tuple[Path, str] return target, os.fspath(options.input_file) except FileNotFoundError as e: msg = f"File not found - {options.input_file}" - if _in_docker(): # pragma: no cover + if running_in_docker(): # pragma: no cover msg += ( "\nDocker cannot access your working directory unless you " "explicitly share it with the Docker container and set up" @@ -282,7 +276,7 @@ def create_input_file(options: Namespace, work_folder: Path) -> tuple[Path, str] "\tdocker run -i --rm jbarlow83/ocrmypdf - - output.pdf" "\n" ) - elif _in_snap(): # pragma: no cover + elif running_in_snap(): # pragma: no cover msg += ( "\nSnap applications cannot access files outside of " "your home directory unless you explicitly allow it. " diff --git a/src/ocrmypdf/helpers.py b/src/ocrmypdf/helpers.py index 6402e951..a8b421be 100644 --- a/src/ocrmypdf/helpers.py +++ b/src/ocrmypdf/helpers.py @@ -335,3 +335,17 @@ def pikepdf_enable_mmap() -> None: ) except AttributeError: log.debug("pikepdf mmap not available") + + +def running_in_docker() -> bool: + """Returns True if we seem to be running in a Docker container.""" + return Path('/.dockerenv').exists() + + +def running_in_snap() -> bool: + """Returns True if we seem to be running in a Snap container.""" + try: + cgroup_text = Path('/proc/self/cgroup').read_text() + return 'snap.ocrmypdf' in cgroup_text + except FileNotFoundError: + return False diff --git a/tests/conftest.py b/tests/conftest.py index c3a74850..004d91df 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -24,11 +24,6 @@ def is_macos(): return platform.system() == 'Darwin' -def running_in_docker(): - # Docker creates a file named /.dockerenv in all supported versions - return Path('/.dockerenv').exists() - - def have_unpaper(): try: unpaper.version() diff --git a/tests/test_completion.py b/tests/test_completion.py index aff017fd..f8462a9e 100644 --- a/tests/test_completion.py +++ b/tests/test_completion.py @@ -8,7 +8,7 @@ from subprocess import run import pytest -from .conftest import running_in_docker +from ocrmypdf.helpers import running_in_docker pytestmark = pytest.mark.skipif( running_in_docker(), diff --git a/tests/test_helpers.py b/tests/test_helpers.py index b4cb541d..058c339c 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -13,8 +13,7 @@ import pytest from packaging.version import Version from ocrmypdf import helpers - -from .conftest import running_in_docker +from ocrmypdf.helpers import running_in_docker needs_symlink = pytest.mark.skipif(os.name == 'nt', reason='needs posix symlink') windows_only = pytest.mark.skipif(os.name != 'nt', reason="Windows test") diff --git a/tests/test_main.py b/tests/test_main.py index a6b40622..c7f051b6 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -18,6 +18,7 @@ from PIL import Image import ocrmypdf from ocrmypdf._exec import tesseract from ocrmypdf.exceptions import ExitCode, MissingDependencyError +from ocrmypdf.helpers import running_in_docker from ocrmypdf.pdfa import file_claims_pdfa from ocrmypdf.pdfinfo import Colorspace, Encoding, PdfInfo from ocrmypdf.subprocess import get_version @@ -29,7 +30,6 @@ from .conftest import ( is_macos, run_ocrmypdf, run_ocrmypdf_api, - running_in_docker, ) # pylint: disable=redefined-outer-name