This commit is contained in:
jkarasti 2024-12-03 15:18:56 +01:00 committed by GitHub
commit 0ccb7580be
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 88 additions and 149 deletions

View file

@ -38,7 +38,7 @@ jobs:
apt-get install -y git make python3 python3-poetry --no-install-recommends apt-get install -y git make python3 python3-poetry --no-install-recommends
poetry install --only lint,test poetry install --only lint,test
- name: Run linters to enforce code style - name: Run linters to enforce code style
run: poetry run make lint run: poetry run make check
- name: Check that the QA script is up to date with the docs - name: Check that the QA script is up to date with the docs
run: "./dev_scripts/qa.py --check-refs" run: "./dev_scripts/qa.py --check-refs"

View file

@ -2,21 +2,17 @@ LARGE_TEST_REPO_DIR:=tests/test_docs_large
GIT_DESC=$$(git describe) GIT_DESC=$$(git describe)
JUNIT_FLAGS := --capture=sys -o junit_logging=all JUNIT_FLAGS := --capture=sys -o junit_logging=all
.PHONY: lint-black lint-ruff: ## check the python source code with various linter rules through ruff
lint-black: ## check python source code formatting issues, with black ruff check
black --check --diff ./
.PHONY: lint-black-apply lint-ruff-apply: ## apply all fixes made by ruff to the source code
lint-black-apply: ## apply black's source code formatting suggestions ruff check --fix
black ./
.PHONY: lint-isort format-ruff: ## Check the formatting of the python source code with ruff
lint-isort: ## check imports are organized, with isort ruff format --check
isort --check --diff ./
.PHONY: lint-isort-apply format-ruff-apply: ## apply all the formatting suggestions from ruff
lint-isort-apply: ## apply isort's imports organization suggestions ruff format
isort ./
MYPY_ARGS := --ignore-missing-imports \ MYPY_ARGS := --ignore-missing-imports \
--disallow-incomplete-defs \ --disallow-incomplete-defs \
@ -34,11 +30,11 @@ mypy-tests:
mypy: mypy-host mypy-tests ## check type hints with mypy mypy: mypy-host mypy-tests ## check type hints with mypy
.PHONY: lint .PHONY: check
lint: lint-black lint-isort mypy ## check the code with various linters check: lint-ruff format-ruff mypy ## check the code with ruff and mypy
.PHONY: lint-apply .PHONY: fix
format: lint-black-apply lint-isort-apply ## apply all the linter's suggestions fix: lint-ruff-apply format-ruff-apply ## apply all the suggestions from ruff
.PHONY: test .PHONY: test
test: test:

View file

@ -6,7 +6,6 @@ import signal
import subprocess import subprocess
import sys import sys
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from pathlib import Path
from typing import IO, Callable, Iterator, Optional from typing import IO, Callable, Iterator, Optional
import fitz import fitz

View file

@ -71,7 +71,7 @@ class DangerzoneCore(object):
ocr_lang, ocr_lang,
stdout_callback, stdout_callback,
) )
except Exception as e: except Exception:
log.exception( log.exception(
f"Unexpected error occurred while converting '{document}'" f"Unexpected error occurred while converting '{document}'"
) )

View file

@ -8,7 +8,6 @@ import platform
import shutil import shutil
import subprocess import subprocess
import sys import sys
import urllib.request
from datetime import date from datetime import date
DEFAULT_GUI = True DEFAULT_GUI = True

View file

@ -95,11 +95,11 @@ def main():
parser.add_argument( parser.add_argument(
"--version", "--version",
required=True, required=True,
help=f"look for assets with this Dangerzone version", help="look for assets with this Dangerzone version",
) )
parser.add_argument( parser.add_argument(
"dir", "dir",
help=f"look for assets in this directory", help="look for assets in this directory",
) )
args = parser.parse_args() args = parser.parse_args()
setup_logging() setup_logging()

View file

@ -105,7 +105,7 @@ def build_components_xml(root, data):
Guid=subdata["component_guid"], Guid=subdata["component_guid"],
) )
for filename in subdata["files"]: for filename in subdata["files"]:
file_el = ET.SubElement( ET.SubElement(
component_el, "File", Source=filename, Id="file_" + uuid.uuid4().hex component_el, "File", Source=filename, Id="file_" + uuid.uuid4().hex
) )

116
poetry.lock generated
View file

@ -44,52 +44,6 @@ files = [
{file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"},
] ]
[[package]]
name = "black"
version = "24.10.0"
description = "The uncompromising code formatter."
optional = false
python-versions = ">=3.9"
files = [
{file = "black-24.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812"},
{file = "black-24.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea"},
{file = "black-24.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:649fff99a20bd06c6f727d2a27f401331dc0cc861fb69cde910fe95b01b5928f"},
{file = "black-24.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:fe4d6476887de70546212c99ac9bd803d90b42fc4767f058a0baa895013fbb3e"},
{file = "black-24.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5a2221696a8224e335c28816a9d331a6c2ae15a2ee34ec857dcf3e45dbfa99ad"},
{file = "black-24.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9da3333530dbcecc1be13e69c250ed8dfa67f43c4005fb537bb426e19200d50"},
{file = "black-24.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4007b1393d902b48b36958a216c20c4482f601569d19ed1df294a496eb366392"},
{file = "black-24.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:394d4ddc64782e51153eadcaaca95144ac4c35e27ef9b0a42e121ae7e57a9175"},
{file = "black-24.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b5e39e0fae001df40f95bd8cc36b9165c5e2ea88900167bddf258bacef9bbdc3"},
{file = "black-24.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d37d422772111794b26757c5b55a3eade028aa3fde43121ab7b673d050949d65"},
{file = "black-24.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14b3502784f09ce2443830e3133dacf2c0110d45191ed470ecb04d0f5f6fcb0f"},
{file = "black-24.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:30d2c30dc5139211dda799758559d1b049f7f14c580c409d6ad925b74a4208a8"},
{file = "black-24.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cbacacb19e922a1d75ef2b6ccaefcd6e93a2c05ede32f06a21386a04cedb981"},
{file = "black-24.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1f93102e0c5bb3907451063e08b9876dbeac810e7da5a8bfb7aeb5a9ef89066b"},
{file = "black-24.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ddacb691cdcdf77b96f549cf9591701d8db36b2f19519373d60d31746068dbf2"},
{file = "black-24.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:680359d932801c76d2e9c9068d05c6b107f2584b2a5b88831c83962eb9984c1b"},
{file = "black-24.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:17374989640fbca88b6a448129cd1745c5eb8d9547b464f281b251dd00155ccd"},
{file = "black-24.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:63f626344343083322233f175aaf372d326de8436f5928c042639a4afbbf1d3f"},
{file = "black-24.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfa1d0cb6200857f1923b602f978386a3a2758a65b52e0950299ea014be6800"},
{file = "black-24.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:2cd9c95431d94adc56600710f8813ee27eea544dd118d45896bb734e9d7a0dc7"},
{file = "black-24.10.0-py3-none-any.whl", hash = "sha256:3bb2b7a1f7b685f85b11fed1ef10f8a9148bceb49853e47a294a3dd963c1dd7d"},
{file = "black-24.10.0.tar.gz", hash = "sha256:846ea64c97afe3bc677b761787993be4991810ecc7a4a937816dd6bddedc4875"},
]
[package.dependencies]
click = ">=8.0.0"
mypy-extensions = ">=0.4.3"
packaging = ">=22.0"
pathspec = ">=0.9.0"
platformdirs = ">=2"
tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""}
[package.extras]
colorama = ["colorama (>=0.4.3)"]
d = ["aiohttp (>=3.10)"]
jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
uvloop = ["uvloop (>=0.15.2)"]
[[package]] [[package]]
name = "certifi" name = "certifi"
version = "2024.8.30" version = "2024.8.30"
@ -531,20 +485,6 @@ files = [
{file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
] ]
[[package]]
name = "isort"
version = "5.13.2"
description = "A Python utility / library to sort Python imports."
optional = false
python-versions = ">=3.8.0"
files = [
{file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"},
{file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"},
]
[package.extras]
colors = ["colorama (>=0.4.6)"]
[[package]] [[package]]
name = "lief" name = "lief"
version = "0.15.1" version = "0.15.1"
@ -709,33 +649,6 @@ files = [
{file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"},
] ]
[[package]]
name = "pathspec"
version = "0.12.1"
description = "Utility library for gitignore style pattern matching of file paths."
optional = false
python-versions = ">=3.8"
files = [
{file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"},
{file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"},
]
[[package]]
name = "platformdirs"
version = "4.3.6"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
optional = false
python-versions = ">=3.8"
files = [
{file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"},
{file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"},
]
[package.extras]
docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"]
test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"]
type = ["mypy (>=1.11.2)"]
[[package]] [[package]]
name = "pluggy" name = "pluggy"
version = "1.5.0" version = "1.5.0"
@ -1037,6 +950,33 @@ urllib3 = ">=1.21.1,<3"
socks = ["PySocks (>=1.5.6,!=1.5.7)"] socks = ["PySocks (>=1.5.6,!=1.5.7)"]
use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
[[package]]
name = "ruff"
version = "0.8.0"
description = "An extremely fast Python linter and code formatter, written in Rust."
optional = false
python-versions = ">=3.7"
files = [
{file = "ruff-0.8.0-py3-none-linux_armv6l.whl", hash = "sha256:fcb1bf2cc6706adae9d79c8d86478677e3bbd4ced796ccad106fd4776d395fea"},
{file = "ruff-0.8.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:295bb4c02d58ff2ef4378a1870c20af30723013f441c9d1637a008baaf928c8b"},
{file = "ruff-0.8.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7b1f1c76b47c18fa92ee78b60d2d20d7e866c55ee603e7d19c1e991fad933a9a"},
{file = "ruff-0.8.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb0d4f250a7711b67ad513fde67e8870109e5ce590a801c3722580fe98c33a99"},
{file = "ruff-0.8.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e55cce9aa93c5d0d4e3937e47b169035c7e91c8655b0974e61bb79cf398d49c"},
{file = "ruff-0.8.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f4cd64916d8e732ce6b87f3f5296a8942d285bbbc161acee7fe561134af64f9"},
{file = "ruff-0.8.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c5c1466be2a2ebdf7c5450dd5d980cc87c8ba6976fb82582fea18823da6fa362"},
{file = "ruff-0.8.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2dabfd05b96b7b8f2da00d53c514eea842bff83e41e1cceb08ae1966254a51df"},
{file = "ruff-0.8.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:facebdfe5a5af6b1588a1d26d170635ead6892d0e314477e80256ef4a8470cf3"},
{file = "ruff-0.8.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87a8e86bae0dbd749c815211ca11e3a7bd559b9710746c559ed63106d382bd9c"},
{file = "ruff-0.8.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:85e654f0ded7befe2d61eeaf3d3b1e4ef3894469cd664ffa85006c7720f1e4a2"},
{file = "ruff-0.8.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:83a55679c4cb449fa527b8497cadf54f076603cc36779b2170b24f704171ce70"},
{file = "ruff-0.8.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:812e2052121634cf13cd6fddf0c1871d0ead1aad40a1a258753c04c18bb71bbd"},
{file = "ruff-0.8.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:780d5d8523c04202184405e60c98d7595bdb498c3c6abba3b6d4cdf2ca2af426"},
{file = "ruff-0.8.0-py3-none-win32.whl", hash = "sha256:5fdb6efecc3eb60bba5819679466471fd7d13c53487df7248d6e27146e985468"},
{file = "ruff-0.8.0-py3-none-win_amd64.whl", hash = "sha256:582891c57b96228d146725975fbb942e1f30a0c4ba19722e692ca3eb25cc9b4f"},
{file = "ruff-0.8.0-py3-none-win_arm64.whl", hash = "sha256:ba93e6294e9a737cd726b74b09a6972e36bb511f9a102f1d9a7e1ce94dd206a6"},
{file = "ruff-0.8.0.tar.gz", hash = "sha256:a7ccfe6331bf8c8dad715753e157457faf7351c2b69f62f32c165c2dbcbacd44"},
]
[[package]] [[package]]
name = "setuptools" name = "setuptools"
version = "75.5.0" version = "75.5.0"
@ -1189,4 +1129,4 @@ type = ["pytest-mypy"]
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = ">=3.9,<3.13" python-versions = ">=3.9,<3.13"
content-hash = "5d1ff28aa04c3a814280e55c0b2a307efe5ca953cd4cb281056c35fd2e53fdf0" content-hash = "56e1ef68447c1e9d96c0ae369e43b3c7ac79a7ce424674fa78a886553cc5693d"

View file

@ -37,9 +37,8 @@ pyinstaller = {version = "*", platform = "darwin"}
# Dependencies required for linting the code. # Dependencies required for linting the code.
[tool.poetry.group.lint.dependencies] [tool.poetry.group.lint.dependencies]
black = "*"
isort = "*"
mypy = "*" mypy = "*"
ruff = "*"
types-PySide2 = "*" types-PySide2 = "*"
types-Markdown = "*" types-Markdown = "*"
types-requests = "*" types-requests = "*"
@ -60,11 +59,11 @@ pymupdf = "1.24.11" # Last version to support python 3.8 (needed for Ubuntu Foca
[tool.poetry.group.dev.dependencies] [tool.poetry.group.dev.dependencies]
httpx = "^0.27.2" httpx = "^0.27.2"
[tool.isort] [tool.ruff.lint]
profile = "black" select = [
skip_gitignore = true # isort
# This is necessary due to https://github.com/PyCQA/isort/issues/1835 "I",
follow_links = false ]
[build-system] [build-system]
requires = ["poetry-core>=1.2.0"] requires = ["poetry-core>=1.2.0"]

View file

@ -33,17 +33,19 @@ def test_order_mime_handers() -> None:
"LibreOffice", "LibreOffice",
] ]
with mock.patch( with (
mock.patch(
"subprocess.check_output", return_value=b"libreoffice-draw.desktop" "subprocess.check_output", return_value=b"libreoffice-draw.desktop"
) as mock_default_mime_hander, mock.patch( ) as mock_default_mime_hander,
mock.patch(
"os.listdir", "os.listdir",
side_effect=[ side_effect=[
["org.gnome.Evince.desktop"], ["org.gnome.Evince.desktop"],
["org.pwmt.zathura-pdf-mupdf.desktop"], ["org.pwmt.zathura-pdf-mupdf.desktop"],
["libreoffice-draw.desktop"], ["libreoffice-draw.desktop"],
], ],
) as mock_list, mock.patch( ) as mock_list,
"dangerzone.gui.logic.DesktopEntry", return_value=mock_desktop mock.patch("dangerzone.gui.logic.DesktopEntry", return_value=mock_desktop),
): ):
dz = DangerzoneGui(mock_app, dummy) dz = DangerzoneGui(mock_app, dummy)
@ -77,18 +79,20 @@ def test_mime_handers_succeeds_no_default_found() -> None:
"LibreOffice", "LibreOffice",
] ]
with mock.patch( with (
mock.patch(
"subprocess.check_output", "subprocess.check_output",
side_effect=subprocess.CalledProcessError(1, "Oh no, xdg-mime error!)"), side_effect=subprocess.CalledProcessError(1, "Oh no, xdg-mime error!)"),
) as mock_default_mime_hander, mock.patch( ) as mock_default_mime_hander,
mock.patch(
"os.listdir", "os.listdir",
side_effect=[ side_effect=[
["org.gnome.Evince.desktop"], ["org.gnome.Evince.desktop"],
["org.pwmt.zathura-pdf-mupdf.desktop"], ["org.pwmt.zathura-pdf-mupdf.desktop"],
["libreoffice-draw.desktop"], ["libreoffice-draw.desktop"],
], ],
) as mock_list, mock.patch( ) as mock_list,
"dangerzone.gui.logic.DesktopEntry", return_value=mock_desktop mock.patch("dangerzone.gui.logic.DesktopEntry", return_value=mock_desktop),
): ):
dz = DangerzoneGui(mock_app, dummy) dz = DangerzoneGui(mock_app, dummy)
@ -109,13 +113,16 @@ def test_malformed_desktop_entry_is_catched() -> None:
mock_app = mock.MagicMock() mock_app = mock.MagicMock()
dummy = mock.MagicMock() dummy = mock.MagicMock()
with mock.patch("dangerzone.gui.logic.DesktopEntry") as mock_desktop, mock.patch( with (
mock.patch("dangerzone.gui.logic.DesktopEntry") as mock_desktop,
mock.patch(
"os.listdir", "os.listdir",
side_effect=[ side_effect=[
["malformed.desktop", "another.desktop"], ["malformed.desktop", "another.desktop"],
[], [],
[], [],
], ],
),
): ):
mock_desktop.side_effect = ParsingError("Oh noes!", "malformed.desktop") mock_desktop.side_effect = ParsingError("Oh noes!", "malformed.desktop")
DangerzoneGui(mock_app, dummy) DangerzoneGui(mock_app, dummy)

View file

@ -7,7 +7,6 @@ from typing import List
from pytest import MonkeyPatch, fixture from pytest import MonkeyPatch, fixture
from pytest_mock import MockerFixture from pytest_mock import MockerFixture
from pytest_subprocess import FakeProcess
from pytestqt.qtbot import QtBot from pytestqt.qtbot import QtBot
from dangerzone.document import Document from dangerzone.document import Document