Skip to content

Commit 07bb859

Browse files
authored
DEP: rotate_clockwise ➔ rotate for PageObject (#913)
Signed-off-by: Matthew Peveler <matt.peveler@gmail.com>
1 parent bb68a4b commit 07bb859

5 files changed

Lines changed: 39 additions & 20 deletions

File tree

PyPDF2/_page.py

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ def createBlankPage(
309309
)
310310
return PageObject.create_blank_page(pdf, width, height)
311311

312-
def rotate_clockwise(self, angle: float) -> "PageObject":
312+
def rotate(self, angle: float) -> "PageObject":
313313
"""
314314
Rotate a page clockwise by increments of 90 degrees.
315315
@@ -318,21 +318,33 @@ def rotate_clockwise(self, angle: float) -> "PageObject":
318318
"""
319319
if angle % 90 != 0:
320320
raise ValueError("Rotation angle must be a multiple of 90")
321-
self._rotate(angle)
321+
rotate_obj = self.get(PG.ROTATE, 0)
322+
current_angle = (
323+
rotate_obj if isinstance(rotate_obj, int) else rotate_obj.get_object()
324+
)
325+
self[NameObject(PG.ROTATE)] = NumberObject(current_angle + angle)
322326
return self
323327

328+
def rotate_clockwise(self, angle: float) -> "PageObject":
329+
warnings.warn(
330+
DEPR_MSG.format("rotate_clockwise", "rotate"),
331+
PendingDeprecationWarning,
332+
stacklevel=2,
333+
)
334+
return self.rotate(angle)
335+
324336
def rotateClockwise(self, angle: float) -> "PageObject":
325337
"""
326338
.. deprecated:: 1.28.0
327339
328340
Use :meth:`rotate_clockwise` instead.
329341
"""
330342
warnings.warn(
331-
DEPR_MSG.format("rotateClockwise", "rotate_clockwise"),
343+
DEPR_MSG.format("rotateClockwise", "rotate"),
332344
PendingDeprecationWarning,
333345
stacklevel=2,
334346
)
335-
return self.rotate_clockwise(angle)
347+
return self.rotate(angle)
336348

337349
def rotateCounterClockwise(self, angle: float) -> "PageObject":
338350
"""
@@ -341,21 +353,11 @@ def rotateCounterClockwise(self, angle: float) -> "PageObject":
341353
Use :meth:`rotate_clockwise` with a negative argument instead.
342354
"""
343355
warnings.warn(
344-
DEPR_MSG.format("rotateCounterClockwise", "rotate_clockwise"),
356+
DEPR_MSG.format("rotateCounterClockwise", "rotate"),
345357
PendingDeprecationWarning,
346358
stacklevel=2,
347359
)
348-
if angle % 90 != 0:
349-
raise ValueError("Rotation angle must be a multiple of 90")
350-
self._rotate(-angle)
351-
return self
352-
353-
def _rotate(self, angle: float) -> None:
354-
rotate_obj = self.get(PG.ROTATE, 0)
355-
current_angle = (
356-
rotate_obj if isinstance(rotate_obj, int) else rotate_obj.get_object()
357-
)
358-
self[NameObject(PG.ROTATE)] = NumberObject(current_angle + angle)
360+
return self.rotate(-angle)
359361

360362
@staticmethod
361363
def _merge_resources(

PyPDF2/_utils.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
from codecs import getencoder
3535
from io import BufferedReader, BufferedWriter, BytesIO, FileIO
3636
from typing import Any, Dict, Optional, Tuple, Union, overload
37+
import warnings
3738

3839
try:
3940
# Python 3.10+: https://www.python.org/dev/peps/pep-0484/
@@ -238,3 +239,19 @@ def paeth_predictor(left: int, up: int, up_left: int) -> int:
238239
return up
239240
else:
240241
return up_left
242+
243+
244+
def deprecate_with_replacement(old_name: str, new_name: str) -> None:
245+
warnings.warn(
246+
DEPR_MSG.format(old_name, new_name),
247+
PendingDeprecationWarning,
248+
stacklevel=2,
249+
)
250+
251+
252+
def deprecate_no_replacement(name: str) -> None:
253+
warnings.warn(
254+
DEPR_MSG_NO_REPLACEMENT.format(name),
255+
PendingDeprecationWarning,
256+
stacklevel=2,
257+
)

docs/user/cropping-and-transforming.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ writer = PdfWriter()
1010
writer.add_page(reader.pages[0])
1111

1212
# add page 2 from reader, but rotated clockwise 90 degrees:
13-
writer.add_page(reader.pages[1].rotate_clockwise(90))
13+
writer.add_page(reader.pages[1].rotate(90))
1414

1515
# add page 3 from reader, but crop it to half size:
1616
page3 = reader.pages[2]

tests/test_basic_features.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ def test_basic_features():
2020
writer.add_page(reader.pages[0])
2121

2222
# add page 2 from input1, but rotated clockwise 90 degrees
23-
writer.add_page(reader.pages[0].rotate_clockwise(90))
23+
writer.add_page(reader.pages[0].rotate(90))
2424

2525
# add page 3 from input1, rotated the other way:
2626
with pytest.warns(PendingDeprecationWarning):
2727
rotated = reader.pages[0].rotateCounterClockwise(90)
2828
writer.add_page(rotated)
29-
# alt: output.addPage(input1.pages[0].rotate_clockwise(270))
29+
# alt: output.addPage(input1.pages[0].rotate(270))
3030

3131
# add page 4 from input1, but first add a watermark from another PDF:
3232
page4 = reader.pages[0]

tests/test_page.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ def test_page_rotation_non90():
188188
reader = PdfReader(os.path.join(RESOURCE_ROOT, "crazyones.pdf"))
189189
page = reader.pages[0]
190190
with pytest.raises(ValueError) as exc:
191-
page.rotate_clockwise(91)
191+
page.rotate(91)
192192
assert exc.value.args[0] == "Rotation angle must be a multiple of 90"
193193

194194

0 commit comments

Comments
 (0)