Skip to content

Commit

Permalink
Pleasing ruff
Browse files Browse the repository at this point in the history
  • Loading branch information
Lucas-C committed Nov 15, 2024
1 parent 1806128 commit 32c4ec0
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 66 deletions.
2 changes: 1 addition & 1 deletion pdfly/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@
import pdfly.metadata
import pdfly.pagemeta
import pdfly.rm
import pdfly.uncompress
import pdfly.up2
import pdfly.update_offsets
import pdfly.x2pdf
import pdfly.uncompress


def version_callback(value: bool) -> None:
Expand Down
104 changes: 52 additions & 52 deletions pdfly/uncompress.py
Original file line number Diff line number Diff line change
@@ -1,52 +1,52 @@
"""Module for uncompressing PDF content streams."""

from pathlib import Path
from typing import Optional
import zlib

from pypdf import PdfReader, PdfWriter
from pypdf.generic import IndirectObject, PdfObject


def main(pdf: Path, output: Path) -> None:
reader = PdfReader(pdf)
writer = PdfWriter()

for page in reader.pages:
if "/Contents" in page:
contents: Optional[PdfObject] = page["/Contents"]
if isinstance(contents, IndirectObject):
contents = contents.get_object()
if contents is not None:
if isinstance(contents, list):
for content in contents:
if isinstance(content, IndirectObject):
decompress_content_stream(content)
elif isinstance(contents, IndirectObject):
decompress_content_stream(contents)
writer.add_page(page)

with open(output, "wb") as fp:
writer.write(fp)

orig_size = pdf.stat().st_size
uncomp_size = output.stat().st_size

print(f"Original Size : {orig_size:,}")
print(
f"Uncompressed Size: {uncomp_size:,} ({(uncomp_size / orig_size) * 100:.1f}% of original)"
)


def decompress_content_stream(content: IndirectObject) -> None:
"""Decompress a content stream if it uses FlateDecode."""
if content.get("/Filter") == "/FlateDecode":
try:
compressed_data = content.get_data()
uncompressed_data = zlib.decompress(compressed_data)
content.set_data(uncompressed_data)
del content["/Filter"]
except zlib.error as error:
print(
f"Some content stream with /FlateDecode failed to be decompressed: {error}"
)
"""Module for uncompressing PDF content streams."""

import zlib
from pathlib import Path
from typing import Optional

from pypdf import PdfReader, PdfWriter
from pypdf.generic import IndirectObject, PdfObject


def main(pdf: Path, output: Path) -> None:
reader = PdfReader(pdf)
writer = PdfWriter()

for page in reader.pages:
if "/Contents" in page:
contents: Optional[PdfObject] = page["/Contents"]
if isinstance(contents, IndirectObject):
contents = contents.get_object()
if contents is not None:
if isinstance(contents, list):
for content in contents:
if isinstance(content, IndirectObject):
decompress_content_stream(content)
elif isinstance(contents, IndirectObject):
decompress_content_stream(contents)
writer.add_page(page)

with open(output, "wb") as fp:
writer.write(fp)

orig_size = pdf.stat().st_size
uncomp_size = output.stat().st_size

print(f"Original Size : {orig_size:,}")
print(
f"Uncompressed Size: {uncomp_size:,} ({(uncomp_size / orig_size) * 100:.1f}% of original)"
)


def decompress_content_stream(content: IndirectObject) -> None:
"""Decompress a content stream if it uses FlateDecode."""
if content.get("/Filter") == "/FlateDecode":
try:
compressed_data = content.get_data()
uncompressed_data = zlib.decompress(compressed_data)
content.set_data(uncompressed_data)
del content["/Filter"]
except zlib.error as error:
print(
f"Some content stream with /FlateDecode failed to be decompressed: {error}"
)
1 change: 0 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,6 @@ ignore = [
"SLF001", # Private member accessed
"INP001", # File `docs/conf.py` is part of an implicit namespace package. Add an `__init__.py`.
"FA100", # Missing `from __future__ import annotations`, but uses `typing.Optional`
"I001" #Imports not at the top of the file.
]

[tool.ruff.mccabe]
Expand Down
9 changes: 5 additions & 4 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
import os
from pathlib import Path

from fpdf import FPDF
import pytest
from fpdf import FPDF

from pdfly.cli import entry_point

try:
Expand Down Expand Up @@ -35,7 +36,7 @@ def run_cli(args):
return error.code


@pytest.fixture
@pytest.fixture()
def two_pages_pdf_filepath(tmp_path):
"A PDF with 2 pages, and a different image on each page"
# Note: prior to v2.7.9, fpdf2 produced incorrect /Resources dicts for each page (cf. fpdf2 PR #1133),
Expand All @@ -50,7 +51,7 @@ def two_pages_pdf_filepath(tmp_path):
return pdf_filepath


@pytest.fixture
@pytest.fixture()
def pdf_file_100(tmp_path):
"""A PDF with 100 pages; each has only the page index on it."""
pdf = FPDF()
Expand All @@ -65,7 +66,7 @@ def pdf_file_100(tmp_path):
return pdf_filepath


@pytest.fixture
@pytest.fixture()
def pdf_file_abc(tmp_path):
"""A PDF with 100 pages; each has only the page index on it."""
pdf = FPDF()
Expand Down
2 changes: 0 additions & 2 deletions tests/test_extract_images.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import pytest

from .conftest import RESOURCES_ROOT, chdir, run_cli


Expand Down
9 changes: 5 additions & 4 deletions tests/test_uncompress.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
"""Tests for the `uncompress` command."""

import pytest
from pathlib import Path
from pdfly.cli import entry_point

import pytest
from pypdf import PdfReader
from typer.testing import CliRunner

from pdfly.cli import entry_point

runner = CliRunner()


Expand All @@ -28,8 +31,6 @@ def test_uncompress_all_sample_files(
output_pdf_filepath.exists()
), f"Output PDF {output_pdf_filepath} does not exist."

from pypdf import PdfReader

reader = PdfReader(str(output_pdf_filepath))
for page in reader.pages:
contents = page.get("/Contents")
Expand Down
4 changes: 2 additions & 2 deletions tests/test_update_offsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
Here should only be end-to-end tests.
"""

import re
from pathlib import Path

import pytest
import re

from .conftest import RESOURCES_ROOT, chdir, run_cli
from .conftest import RESOURCES_ROOT, run_cli


def test_update_offsets(capsys, tmp_path: Path) -> None:
Expand Down

0 comments on commit 32c4ec0

Please sign in to comment.