Compare commits

...

11 commits

Author SHA1 Message Date
Alex Pyrgiotis
a1955dac07
Merge 5ff2b08b4a into b5c09e51d8 2025-04-07 12:59:52 +00:00
Alexis Métaireau
5ff2b08b4a
Move multithreading patch up so that it's working in the GUI 2025-04-07 14:58:59 +02:00
Alex Pyrgiotis
39f96f0c12
Bypass a cx-freeze issue for fitz._wxcolors
Bypass an issue with `cx-freeze` that fails to include the
`fitz._wxcolors` module in the final Windows artifact.
2025-04-07 13:48:52 +03:00
Alex Pyrgiotis
7e5d2c936c
Make our build-image.py script runable on Windows 2025-04-03 20:18:32 +03:00
Alex Pyrgiotis
067c741847
IMPROVE_ME: Handle the case where Docker is not installed
This looks like a regression, and we need to find a better way to handle
it, or add a unit test.
2025-04-02 15:04:24 +03:00
Alex Pyrgiotis
deaeb7c682
Add a way to unset the container runtime
Add a way to set the container runtime that Dangerzone uses back to the
default.
2025-04-02 14:55:54 +03:00
Alex Pyrgiotis
b74fbab6db
fixup! Prefer poetry sync to poetry install --sync 2025-04-02 14:37:20 +03:00
Alex Pyrgiotis
f8f12d37c5
Do not install poetry-plugin-export
Do not unconditionally install the Poetry plugin for exporting
dependencies as a requirements.txt file, since it's used only when
building a Debian package. Keep it instead in the Linux instructions and
when building a Dangerzone environment.
2025-04-02 14:34:46 +03:00
Alex Pyrgiotis
02a1cb6591
Handle the case of empty tesseract dirs during download 2025-04-02 12:14:35 +03:00
Alex Pyrgiotis
63be5463ae
docs: Improve doit docs 2025-04-02 12:14:08 +03:00
Alex Pyrgiotis
d36779aece
Prefer poetry sync to poetry install --sync
Use `poetry sync` instead of `poetry install --sync`, since the latter
is deprecated and will be removed after June 2025, as seen in the
following warning message:

  The `--sync` option is deprecated and slated for removal in the next
  minor release after June 2025, use the `poetry sync` command instead.
2025-04-02 12:11:08 +03:00
13 changed files with 48 additions and 25 deletions

View file

@ -113,7 +113,7 @@ Install Poetry using `pipx`:
```sh
pipx install poetry
pipx inject poetry poetry-plugin-export
pipx inject poetry
```
Clone this repository:
@ -326,7 +326,7 @@ cd dangerzone
Install Python dependencies:
```sh
python3 -m pip install poetry poetry-plugin-export
python3 -m pip install poetry
poetry install
```
@ -387,7 +387,7 @@ Install Microsoft Visual C++ 14.0 or greater. Get it with ["Microsoft C++ Build
Install [poetry](https://python-poetry.org/). Open PowerShell, and run:
```
python -m pip install poetry poetry-plugin-export
python -m pip install poetry
```
Install git from [here](https://git-scm.com/download/win), open a Windows terminal (`cmd.exe`) and clone this repository:

View file

@ -123,7 +123,7 @@ Here is what you need to do:
# In case of a new Python installation or minor version upgrade, e.g., from
# 3.11 to 3.12, reinstall Poetry
python3 -m pip install poetry poetry-plugin-export
python3 -m pip install poetry
# You can verify the correct Python version is used
poetry debug info
@ -141,7 +141,7 @@ Here is what you need to do:
poetry env remove --all
# Install the dependencies
poetry install --sync
poetry sync
```
- [ ] Build the container image and the OCR language data
@ -205,7 +205,7 @@ The Windows release is performed in a Windows 11 virtual machine (as opposed to
```bash
# In case of a new Python installation or minor version upgrade, e.g., from
# 3.11 to 3.12, reinstall Poetry
python3 -m pip install poetry poetry-plugin-export
python3 -m pip install poetry
# You can verify the correct Python version is used
poetry debug info
@ -223,7 +223,7 @@ The Windows release is performed in a Windows 11 virtual machine (as opposed to
poetry env remove --all
# Install the dependencies
poetry install --sync
poetry sync
```
- [ ] Copy the container image into the VM

View file

@ -4,6 +4,12 @@ import sys
logger = logging.getLogger(__name__)
# Call freeze_support() to avoid passing unknown options to the subprocess.
# See https://github.com/freedomofpress/dangerzone/issues/873
import multiprocessing
multiprocessing.freeze_support()
try:
from . import vendor # type: ignore [attr-defined]

View file

@ -52,7 +52,11 @@ def print_header(s: str) -> None:
@click.option(
"--set-container-runtime",
required=False,
help="The path to the container runtime you want to set in the settings",
help=(
"The name or full path of the container runtime you want Dangerzone to use."
" You can specify the value 'default' if you want to take back your choice, and"
" let Dangerzone use the default runtime for this OS"
)
)
@click.version_option(version=get_version(), message="%(version)s")
@errors.handle_document_errors
@ -69,6 +73,12 @@ def cli_main(
display_banner()
if set_container_runtime:
settings = Settings()
if set_container_runtime == "default":
settings.unset_custom_runtime()
click.echo(
"Instructed Dangerzone to use the default container runtime for this OS"
)
else:
container_runtime = settings.set_custom_runtime(
set_container_runtime, autosave=True
)

View file

@ -10,6 +10,7 @@ from typing import List, Optional
import click
import colorama
# FIXME: See https://github.com/freedomofpress/dangerzone/issues/320 for more details.
if typing.TYPE_CHECKING:
from PySide2 import QtCore, QtGui, QtWidgets

View file

@ -3,7 +3,6 @@ import os
import platform
import tempfile
import typing
from multiprocessing import freeze_support
from multiprocessing.pool import ThreadPool
from pathlib import Path
from typing import List, Optional
@ -229,6 +228,8 @@ class MainWindow(QtWidgets.QMainWindow):
self.handle_docker_desktop_version_check(is_version_valid, version)
except errors.UnsupportedContainerRuntime as e:
pass # It's catched later in the flow.
except errors.NoContainerTechException as e:
pass # It's catched later in the flow.
self.show()
@ -1236,9 +1237,6 @@ class DocumentsListWidget(QtWidgets.QListWidget):
def start_conversion(self) -> None:
if not self.thread_pool_initized:
max_jobs = self.dangerzone.isolation_provider.get_max_parallel_conversions()
# Call freeze_support() to avoid passing unknown options to the subprocess.
# See https://github.com/freedomofpress/dangerzone/issues/873
freeze_support()
self.thread_pool = ThreadPool(max_jobs)
for doc in self.docs_list:

View file

@ -52,6 +52,10 @@ class Settings:
self.save()
return container_runtime
def unset_custom_runtime(self) -> None:
self.settings.pop("container_runtime")
self.save()
def get(self, key: str) -> Any:
return self.settings[key]

View file

@ -331,7 +331,7 @@ Install Poetry using `pipx`:
```sh
pipx install poetry
pipx inject poetry poetry-plugin-export
pipx inject poetry
```
Clone this repository:
@ -397,7 +397,7 @@ Install Microsoft Visual C++ 14.0 or greater. Get it with ["Microsoft C++ Build
Install [poetry](https://python-poetry.org/). Open PowerShell, and run:
```
python -m pip install poetry poetry-plugin-export
python -m pip install poetry
```
Install git from [here](https://git-scm.com/download/win), open a Windows terminal (`cmd.exe`) and clone this repository:
@ -835,8 +835,8 @@ class QAWindows(QABase):
"Install Poetry and the project's dependencies", ref=REF_BUILD, auto=True
)
def install_poetry(self):
self.run("python", "-m", "pip", "install", "poetry", "poetry-plugin-export")
self.run("poetry", "install", "--sync")
self.run("python", "-m", "pip", "install", "poetry")
self.run("poetry", "sync")
@QABase.task("Build Dangerzone container image", ref=REF_BUILD, auto=True)
def build_image(self):

View file

@ -42,7 +42,8 @@ doit <task>
## Tips and tricks
* You can run `doit list --all -s` to see the full list of tasks, their
dependencies, and whether they are up to date.
dependencies, and whether they are up to date (U) or will run (R). Note that
certain small tasks are always configured to run.
* You can run `doit info <task>` to see which dependencies are missing.
* You can pass the following environment variables to the script, in order to
affect some global parameters:

View file

@ -206,7 +206,7 @@ def task_build_image():
def task_poetry_install():
"""Setup the Poetry environment"""
return {"actions": ["poetry install --sync"], "clean": ["poetry env remove --all"]}
return {"actions": ["poetry sync"], "clean": ["poetry env remove --all"]}
def task_macos_build_dmg():

View file

@ -5,7 +5,7 @@ import subprocess
import sys
from pathlib import Path
BUILD_CONTEXT = "dangerzone/"
BUILD_CONTEXT = "dangerzone"
IMAGE_NAME = "dangerzone.rocks/dangerzone"
if platform.system() in ["Darwin", "Windows"]:
CONTAINER_RUNTIME = "docker"
@ -122,7 +122,8 @@ def main():
subprocess.run(
[
"./dev_scripts/repro-build.py",
sys.executable,
str(Path("dev_scripts") / "repro-build.py"),
"build",
"--runtime",
args.runtime,

View file

@ -51,6 +51,8 @@ def main():
if files == expected_files:
logger.info("Skipping tessdata download, language data already exists")
return
elif not files:
logger.info("Tesseract dir is empty, proceeding to download language data")
else:
logger.info(f"Found {tessdata_dir} but contents do not match")
return 1

View file

@ -13,7 +13,7 @@ setup(
description="Dangerzone",
options={
"build_exe": {
"packages": ["dangerzone", "dangerzone.gui"],
"packages": ["dangerzone", "dangerzone.gui", "pymupdf._wxcolors"],
"excludes": ["test", "tkinter"],
"include_files": [("share", "share"), ("LICENSE", "LICENSE")],
"include_msvcr": True,