From 6035f3791d5c25ca918035ed535e28615d0082ac Mon Sep 17 00:00:00 2001 From: Omar Muhammetkulyyev Date: Sat, 10 Dec 2022 04:05:39 -0600 Subject: [PATCH 01/21] MAINT: use 'page_number' instead of 'position' --- PyPDF2/_merger.py | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/PyPDF2/_merger.py b/PyPDF2/_merger.py index 7d6269b15..b14280139 100644 --- a/PyPDF2/_merger.py +++ b/PyPDF2/_merger.py @@ -131,17 +131,18 @@ def __exit__( @deprecate_bookmark(bookmark="outline_item", import_bookmarks="import_outline") def merge( self, - position: int, fileobj: Union[Path, StrByteType, PdfReader], + page_number: Optional[int] = None, outline_item: Optional[str] = None, pages: Optional[PageRangeSpec] = None, import_outline: bool = True, + position: Optional[int] = None, # deprecated ) -> None: """ Merge the pages from the given file into the output file at the specified page number. - :param int position: The *page number* to insert this file. File will + :param int page_number: The *page number* to insert this file. File will be inserted after the given number. :param fileobj: A File Object or an object that supports the standard @@ -162,6 +163,22 @@ def merge( outline (collection of outline items, previously referred to as 'bookmarks') from being imported by specifying this as ``False``. """ + if page_number is not None and position is not None: + raise ValueError( + "The argument position of merge is deprecated. Use page_number only." + ) + if position is not None: + old_term = "position" + new_term = "page_number" + warnings.warn( + message = ( + f"{old_term} is deprecated as an argument. Use {new_term} instead" + ) + ) + page_number = position + if(page_number is None): + raise ValueError("page_number may not be None") + stream, encryption_obj = self._create_stream(fileobj) # Create a new PdfReader instance using the stream @@ -216,8 +233,8 @@ def merge( self._associate_dests_to_pages(srcpages) self._associate_outline_items_to_pages(srcpages) - # Slice to insert the pages at the specified position - self.pages[position:position] = srcpages + # Slice to insert the pages at the specified page_number + self.pages[page_number:page_number] = srcpages def _create_stream( self, fileobj: Union[Path, StrByteType, PdfReader] @@ -287,7 +304,7 @@ def append( outline (collection of outline items, previously referred to as 'bookmarks') from being imported by specifying this as ``False``. """ - self.merge(len(self.pages), fileobj, outline_item, pages, import_outline) + self.merge(fileobj, len(self.pages), outline_item, pages, import_outline) def write(self, fileobj: Union[Path, StrByteType]) -> None: """ From e102b1aea78da712b672fe1d1f65dba6d02d9238 Mon Sep 17 00:00:00 2001 From: Omar Muhammetkulyyev Date: Sat, 10 Dec 2022 04:07:00 -0600 Subject: [PATCH 02/21] adjusted the argument order for merge calls --- tests/test_merger.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/test_merger.py b/tests/test_merger.py index 9cd1fb127..628382ace 100644 --- a/tests/test_merger.py +++ b/tests/test_merger.py @@ -29,7 +29,7 @@ def merger_operate(merger): merger.append(outline) merger.append(pdf_path, pages=PyPDF2.pagerange.PageRange(slice(0, 0))) merger.append(pdf_forms) - merger.merge(0, pdf_path, import_outline=False) + merger.merge(pdf_path, 0, import_outline=False) with pytest.raises(NotImplementedError) as exc: with open(pdf_path, "rb") as fp: data = fp.read() @@ -172,7 +172,7 @@ def test_merge_page_exception(): merger = PyPDF2.PdfMerger() pdf_path = RESOURCE_ROOT / "crazyones.pdf" with pytest.raises(TypeError) as exc: - merger.merge(0, pdf_path, pages="a:b") + merger.merge(pdf_path, 0, pages="a:b") assert exc.value.args[0] == '"pages" must be a tuple of (start, stop[, step])' merger.close() @@ -180,7 +180,7 @@ def test_merge_page_exception(): def test_merge_page_tuple(): merger = PyPDF2.PdfMerger() pdf_path = RESOURCE_ROOT / "crazyones.pdf" - merger.merge(0, pdf_path, pages=(0, 1)) + merger.merge(pdf_path, 0, pages=(0, 1)) merger.close() @@ -391,14 +391,14 @@ def test_deprecate_bookmark_decorator_warning(): UserWarning, match="import_bookmarks is deprecated as an argument. Use import_outline instead", ): - merger.merge(0, reader, import_bookmarks=True) + merger.merge(reader, 0, import_bookmarks=True) @pytest.mark.filterwarnings("ignore::UserWarning") def test_deprecate_bookmark_decorator_output(): reader = PdfReader(RESOURCE_ROOT / "outlines-with-invalid-destinations.pdf") merger = PdfMerger() - merger.merge(0, reader, import_bookmarks=True) + merger.merge(reader, 0, import_bookmarks=True) first_oi_title = 'Valid Destination: Action /GoTo Named Destination "section.1"' assert merger.outline[0].title == first_oi_title From 2257e490ef8de2812905d8d23e26bd1de1b3888b Mon Sep 17 00:00:00 2001 From: Omar Muhammetkulyyev Date: Sat, 10 Dec 2022 04:19:06 -0600 Subject: [PATCH 03/21] adjusted argument order for merge call as well --- tests/test_workflows.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_workflows.py b/tests/test_workflows.py index 7720a6622..ae00dbf6d 100644 --- a/tests/test_workflows.py +++ b/tests/test_workflows.py @@ -590,7 +590,7 @@ def test_merge_output(caplog): merger.append(base) msg = "Xref table not zero-indexed. ID numbers for objects will be corrected." assert normalize_warnings(caplog.text) == [msg] - merger.merge(1, crazy) + merger.merge(crazy, 1) stream = BytesIO() merger.write(stream) From dd4443a4ef660b342a68766c8e549b03849a6ff6 Mon Sep 17 00:00:00 2001 From: Omar Muhammetkulyyev Date: Sat, 10 Dec 2022 05:33:51 -0600 Subject: [PATCH 04/21] MAINT: use 'page_destination' instead of 'dest' --- PyPDF2/_writer.py | 49 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/PyPDF2/_writer.py b/PyPDF2/_writer.py index 3a46dd1f9..26c0d64b5 100644 --- a/PyPDF2/_writer.py +++ b/PyPDF2/_writer.py @@ -1181,14 +1181,31 @@ def getNamedDestRoot(self) -> ArrayObject: # pragma: no cover def add_outline_item_destination( self, - dest: Union[PageObject, TreeObject], + page_destination: Union[None, PageObject, TreeObject] = None, parent: Union[None, TreeObject, IndirectObject] = None, + dest: Union[None, PageObject, TreeObject] = None, # deprecated ) -> IndirectObject: + if page_destination is not None and dest is not None: + raise ValueError( + "The argument dest of merge is deprecated. Use page_destination only." + ) + if dest is not None: + old_term = "dest" + new_term = "page_destination" + warnings.warn( + message = ( + f"{old_term} is deprecated as an argument. Use {new_term} instead" + ) + ) + page_destination = dest + if(page_destination is None): + raise ValueError("page_destination may not be None") + if parent is None: parent = self.get_outline_root() parent = cast(TreeObject, parent.get_object()) - dest_ref = self._add_object(dest) + dest_ref = self._add_object(page_destination) parent.add_child(dest_ref, self) return dest_ref @@ -1377,11 +1394,31 @@ def add_outline(self) -> None: "This method is not yet implemented. Use :meth:`add_outline_item` instead." ) - def add_named_destination_object(self, dest: PdfObject) -> IndirectObject: - dest_ref = self._add_object(dest) + def add_named_destination_object( + self, + page_destination: Optional[PdfObject] = None, + dest: Optional[PdfObject] = None, + ) -> IndirectObject: + if page_destination is not None and dest is not None: + raise ValueError( + "The argument dest of merge is deprecated. Use page_destination only." + ) + if dest is not None: + old_term = "dest" + new_term = "page_destination" + warnings.warn( + message = ( + f"{old_term} is deprecated as an argument. Use {new_term} instead" + ) + ) + page_destination = dest + if(page_destination is None): + raise ValueError("page_destination may not be None") + + dest_ref = self._add_object(page_destination) nd = self.get_named_dest_root() - nd.extend([dest["/Title"], dest_ref]) # type: ignore + nd.extend([page_destination["/Title"], dest_ref]) # type: ignore return dest_ref def addNamedDestinationObject( @@ -1401,7 +1438,7 @@ def add_named_destination( self, title: str, page_number: Optional[int] = None, - pagenum: Optional[int] = None, + pagenum: Optional[int] = None, # deprecated ) -> IndirectObject: if page_number is not None and pagenum is not None: raise ValueError( From c1f67080122a9ef622a59f1d626dcf055b838984 Mon Sep 17 00:00:00 2001 From: Omar Muhammetkulyyev Date: Sat, 10 Dec 2022 06:03:56 -0600 Subject: [PATCH 05/21] MAINT: use 'user_password' instead of 'user_pwd'. fixed corresponding test as well --- PyPDF2/_writer.py | 54 +++++++++++++++++++++++++++++++++++--------- tests/test_writer.py | 6 ++--- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/PyPDF2/_writer.py b/PyPDF2/_writer.py index 26c0d64b5..45ab4e94d 100644 --- a/PyPDF2/_writer.py +++ b/PyPDF2/_writer.py @@ -776,17 +776,19 @@ def cloneDocumentFromReader( def encrypt( self, - user_pwd: str, - owner_pwd: Optional[str] = None, + user_password: Optional[str] = None, + owner_password: Optional[str] = None, use_128bit: bool = True, permissions_flag: UserAccessPermissions = ALL_DOCUMENT_PERMISSIONS, + user_pwd: Optional[str] = None, # deprecated + owner_pwd: Optional[str] = None, # deprecated ) -> None: """ Encrypt this PDF file with the PDF Standard encryption handler. - :param str user_pwd: The "user password", which allows for opening + :param str user_password: The "user password", which allows for opening and reading the PDF file with the restrictions provided. - :param str owner_pwd: The "owner password", which allows for + :param str owner_password: The "owner password", which allows for opening the PDF files without any restrictions. By default, the owner password is the same as the user password. :param bool use_128bit: flag as to whether to use 128bit @@ -800,8 +802,38 @@ def encrypt( control annotations, 9 for form fields, 10 for extraction of text and graphics. """ - if owner_pwd is None: - owner_pwd = user_pwd + if user_password is not None and user_pwd is not None: + raise ValueError( + "The argument user_pwd of encrypt is deprecated. Use user_password only." + ) + if user_pwd is not None: + old_term = "user_pwd" + new_term = "user_password" + warnings.warn( + message = ( + f"{old_term} is deprecated as an argument. Use {new_term} instead" + ) + ) + user_password = user_pwd + if(user_password is None): + raise ValueError("page_destination may not be None") + + if owner_password is not None and owner_pwd is not None: + raise ValueError( + "The argument owner_pwd of encrypt is deprecated. Use owner_password only." + ) + if owner_pwd is not None: + old_term = "owner_pwd" + new_term = "owner_password" + warnings.warn( + message = ( + f"{old_term} is deprecated as an argument. Use {new_term} instead" + ) + ) + owner_password = owner_pwd + + if owner_password is None: + owner_password = user_password if use_128bit: V = 2 rev = 3 @@ -811,15 +843,15 @@ def encrypt( rev = 2 keylen = int(40 / 8) P = permissions_flag - O = ByteStringObject(_alg33(owner_pwd, user_pwd, rev, keylen)) # type: ignore[arg-type] + O = ByteStringObject(_alg33(owner_password, user_password, rev, keylen)) # type: ignore[arg-type] ID_1 = ByteStringObject(md5((repr(time.time())).encode("utf8")).digest()) ID_2 = ByteStringObject(md5((repr(random.random())).encode("utf8")).digest()) self._ID = ArrayObject((ID_1, ID_2)) if rev == 2: - U, key = _alg34(user_pwd, O, P, ID_1) + U, key = _alg34(user_password, O, P, ID_1) else: assert rev == 3 - U, key = _alg35(user_pwd, rev, keylen, O, P, ID_1, False) # type: ignore[arg-type] + U, key = _alg35(user_password, rev, keylen, O, P, ID_1, False) # type: ignore[arg-type] encrypt = DictionaryObject() encrypt[NameObject(SA.FILTER)] = NameObject("/Standard") encrypt[NameObject("/V")] = NumberObject(V) @@ -1187,7 +1219,7 @@ def add_outline_item_destination( ) -> IndirectObject: if page_destination is not None and dest is not None: raise ValueError( - "The argument dest of merge is deprecated. Use page_destination only." + "The argument dest of add_outline_item_destination is deprecated. Use page_destination only." ) if dest is not None: old_term = "dest" @@ -1401,7 +1433,7 @@ def add_named_destination_object( ) -> IndirectObject: if page_destination is not None and dest is not None: raise ValueError( - "The argument dest of merge is deprecated. Use page_destination only." + "The argument dest of add_named_destination is deprecated. Use page_destination only." ) if dest is not None: old_term = "dest" diff --git a/tests/test_writer.py b/tests/test_writer.py index 1c4e64db5..2e7390c57 100644 --- a/tests/test_writer.py +++ b/tests/test_writer.py @@ -398,10 +398,10 @@ def test_fill_form(): @pytest.mark.parametrize( - ("use_128bit", "user_pwd", "owner_pwd"), + ("use_128bit", "user_password", "owner_password"), [(True, "userpwd", "ownerpwd"), (False, "userpwd", "ownerpwd")], ) -def test_encrypt(use_128bit, user_pwd, owner_pwd): +def test_encrypt(use_128bit, user_password, owner_password): reader = PdfReader(RESOURCE_ROOT / "form.pdf") writer = PdfWriter() @@ -409,7 +409,7 @@ def test_encrypt(use_128bit, user_pwd, owner_pwd): orig_text = page.extract_text() writer.add_page(page) - writer.encrypt(user_pwd=user_pwd, owner_pwd=owner_pwd, use_128bit=use_128bit) + writer.encrypt(user_password=user_password, owner_password=owner_password, use_128bit=use_128bit) # write "output" to PyPDF2-output.pdf tmp_filename = "dont_commit_encrypted.pdf" From d6d2f7265f0785f8bd33b037b5cd6f37f66b6878 Mon Sep 17 00:00:00 2001 From: Omar Muhammetkulyyev Date: Sat, 10 Dec 2022 06:13:50 -0600 Subject: [PATCH 06/21] added the changes to the migration guide --- docs/user/migration-1-to-2.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/user/migration-1-to-2.md b/docs/user/migration-1-to-2.md index 6df87e7ff..055c29ac2 100644 --- a/docs/user/migration-1-to-2.md +++ b/docs/user/migration-1-to-2.md @@ -164,6 +164,11 @@ utils.py: * `PyPDF2.filters` (all classes): `decodeParms` ➔ `decode_parms` * `PyPDF2.filters` (all classes): `decodeStreamData` ➔ `decode_stream_data` * `pagenum` ➔ `page_number` +* `PdfMerger.merge`: `position` ➔ `page_number` +* `PdfWriter.add_outline_item_destination`: `dest` ➔ `page_destination` +* `PdfWriter.add_named_destination_object`: `dest` ➔ `page_destination` +* `PdfWriter.encrypt`: `user_pwd` ➔ `user_password` +* `PdfWriter.encrypt`: `owner_pwd` ➔ `owner_password` ## Deprecations From bd939dd47e5a1ddb862ce65cb6f0fa37612c8aa0 Mon Sep 17 00:00:00 2001 From: Omar Muhammetkulyyev Date: Sat, 10 Dec 2022 06:41:38 -0600 Subject: [PATCH 07/21] should be linted now --- PyPDF2/_merger.py | 4 ++-- PyPDF2/_writer.py | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/PyPDF2/_merger.py b/PyPDF2/_merger.py index b14280139..683961126 100644 --- a/PyPDF2/_merger.py +++ b/PyPDF2/_merger.py @@ -171,12 +171,12 @@ def merge( old_term = "position" new_term = "page_number" warnings.warn( - message = ( + message=( f"{old_term} is deprecated as an argument. Use {new_term} instead" ) ) page_number = position - if(page_number is None): + if page_number is None: raise ValueError("page_number may not be None") stream, encryption_obj = self._create_stream(fileobj) diff --git a/PyPDF2/_writer.py b/PyPDF2/_writer.py index 45ab4e94d..0a483085b 100644 --- a/PyPDF2/_writer.py +++ b/PyPDF2/_writer.py @@ -810,14 +810,14 @@ def encrypt( old_term = "user_pwd" new_term = "user_password" warnings.warn( - message = ( + message=( f"{old_term} is deprecated as an argument. Use {new_term} instead" ) ) user_password = user_pwd - if(user_password is None): + if user_password is None: raise ValueError("page_destination may not be None") - + if owner_password is not None and owner_pwd is not None: raise ValueError( "The argument owner_pwd of encrypt is deprecated. Use owner_password only." @@ -826,7 +826,7 @@ def encrypt( old_term = "owner_pwd" new_term = "owner_password" warnings.warn( - message = ( + message=( f"{old_term} is deprecated as an argument. Use {new_term} instead" ) ) @@ -1225,14 +1225,14 @@ def add_outline_item_destination( old_term = "dest" new_term = "page_destination" warnings.warn( - message = ( + message=( f"{old_term} is deprecated as an argument. Use {new_term} instead" ) ) page_destination = dest - if(page_destination is None): + if page_destination is None: raise ValueError("page_destination may not be None") - + if parent is None: parent = self.get_outline_root() @@ -1433,20 +1433,20 @@ def add_named_destination_object( ) -> IndirectObject: if page_destination is not None and dest is not None: raise ValueError( - "The argument dest of add_named_destination is deprecated. Use page_destination only." + "The argument dest of add_named_destination_object is deprecated. Use page_destination only." ) if dest is not None: old_term = "dest" new_term = "page_destination" warnings.warn( - message = ( + message=( f"{old_term} is deprecated as an argument. Use {new_term} instead" ) ) page_destination = dest - if(page_destination is None): + if page_destination is None: raise ValueError("page_destination may not be None") - + dest_ref = self._add_object(page_destination) nd = self.get_named_dest_root() From 30fe4313490887add14d3a7bf2e171d79810c356 Mon Sep 17 00:00:00 2001 From: Omar Muhammetkulyyev Date: Sat, 10 Dec 2022 07:30:43 -0600 Subject: [PATCH 08/21] reverted the order of the arguments, possible workaround? --- PyPDF2/_merger.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/PyPDF2/_merger.py b/PyPDF2/_merger.py index 683961126..38fd69a46 100644 --- a/PyPDF2/_merger.py +++ b/PyPDF2/_merger.py @@ -131,12 +131,12 @@ def __exit__( @deprecate_bookmark(bookmark="outline_item", import_bookmarks="import_outline") def merge( self, - fileobj: Union[Path, StrByteType, PdfReader], page_number: Optional[int] = None, + fileobj: Union[Path, StrByteType, PdfReader] = None, outline_item: Optional[str] = None, pages: Optional[PageRangeSpec] = None, import_outline: bool = True, - position: Optional[int] = None, # deprecated + position: Optional[int] = None, # deprecated ) -> None: """ Merge the pages from the given file into the output file at the @@ -178,6 +178,8 @@ def merge( page_number = position if page_number is None: raise ValueError("page_number may not be None") + if fileobj is None: + raise ValueError("fileobj may not be None") stream, encryption_obj = self._create_stream(fileobj) From 2c1a3afa43796b00569be5e02ed7558686c9ac5a Mon Sep 17 00:00:00 2001 From: Omar Muhammetkulyyev Date: Sat, 10 Dec 2022 07:38:09 -0600 Subject: [PATCH 09/21] reverted back the argument orders everywhere it was changed --- PyPDF2/_merger.py | 2 +- tests/test_merger.py | 10 +++++----- tests/test_workflows.py | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/PyPDF2/_merger.py b/PyPDF2/_merger.py index 38fd69a46..393c83793 100644 --- a/PyPDF2/_merger.py +++ b/PyPDF2/_merger.py @@ -306,7 +306,7 @@ def append( outline (collection of outline items, previously referred to as 'bookmarks') from being imported by specifying this as ``False``. """ - self.merge(fileobj, len(self.pages), outline_item, pages, import_outline) + self.merge(len(self.pages), fileobj, outline_item, pages, import_outline) def write(self, fileobj: Union[Path, StrByteType]) -> None: """ diff --git a/tests/test_merger.py b/tests/test_merger.py index 628382ace..9cd1fb127 100644 --- a/tests/test_merger.py +++ b/tests/test_merger.py @@ -29,7 +29,7 @@ def merger_operate(merger): merger.append(outline) merger.append(pdf_path, pages=PyPDF2.pagerange.PageRange(slice(0, 0))) merger.append(pdf_forms) - merger.merge(pdf_path, 0, import_outline=False) + merger.merge(0, pdf_path, import_outline=False) with pytest.raises(NotImplementedError) as exc: with open(pdf_path, "rb") as fp: data = fp.read() @@ -172,7 +172,7 @@ def test_merge_page_exception(): merger = PyPDF2.PdfMerger() pdf_path = RESOURCE_ROOT / "crazyones.pdf" with pytest.raises(TypeError) as exc: - merger.merge(pdf_path, 0, pages="a:b") + merger.merge(0, pdf_path, pages="a:b") assert exc.value.args[0] == '"pages" must be a tuple of (start, stop[, step])' merger.close() @@ -180,7 +180,7 @@ def test_merge_page_exception(): def test_merge_page_tuple(): merger = PyPDF2.PdfMerger() pdf_path = RESOURCE_ROOT / "crazyones.pdf" - merger.merge(pdf_path, 0, pages=(0, 1)) + merger.merge(0, pdf_path, pages=(0, 1)) merger.close() @@ -391,14 +391,14 @@ def test_deprecate_bookmark_decorator_warning(): UserWarning, match="import_bookmarks is deprecated as an argument. Use import_outline instead", ): - merger.merge(reader, 0, import_bookmarks=True) + merger.merge(0, reader, import_bookmarks=True) @pytest.mark.filterwarnings("ignore::UserWarning") def test_deprecate_bookmark_decorator_output(): reader = PdfReader(RESOURCE_ROOT / "outlines-with-invalid-destinations.pdf") merger = PdfMerger() - merger.merge(reader, 0, import_bookmarks=True) + merger.merge(0, reader, import_bookmarks=True) first_oi_title = 'Valid Destination: Action /GoTo Named Destination "section.1"' assert merger.outline[0].title == first_oi_title diff --git a/tests/test_workflows.py b/tests/test_workflows.py index ae00dbf6d..7720a6622 100644 --- a/tests/test_workflows.py +++ b/tests/test_workflows.py @@ -590,7 +590,7 @@ def test_merge_output(caplog): merger.append(base) msg = "Xref table not zero-indexed. ID numbers for objects will be corrected." assert normalize_warnings(caplog.text) == [msg] - merger.merge(crazy, 1) + merger.merge(1, crazy) stream = BytesIO() merger.write(stream) From 918c681ce525b80735e66d9529c0e6a4d3cf13a2 Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sat, 10 Dec 2022 17:06:46 +0100 Subject: [PATCH 10/21] Update PyPDF2/_writer.py --- PyPDF2/_writer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PyPDF2/_writer.py b/PyPDF2/_writer.py index d04df35c3..ffa02ef55 100644 --- a/PyPDF2/_writer.py +++ b/PyPDF2/_writer.py @@ -1470,7 +1470,7 @@ def add_named_destination_object( page_destination_ref = self._add_object(page_destination) nd = self.get_named_dest_root() - nd.extend([page_destination["/Title"], dest_ref]) # type: ignore + nd.extend([page_destination["/Title"], page_destination_ref]) # type: ignore return page_destination_ref def addNamedDestinationObject( From fb546994ba4c8222345f14a86dd305e1ec4d66c0 Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sat, 10 Dec 2022 17:48:44 +0100 Subject: [PATCH 11/21] Apply suggestions from code review --- PyPDF2/_merger.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/PyPDF2/_merger.py b/PyPDF2/_merger.py index 393c83793..277820b7d 100644 --- a/PyPDF2/_merger.py +++ b/PyPDF2/_merger.py @@ -163,20 +163,25 @@ def merge( outline (collection of outline items, previously referred to as 'bookmarks') from being imported by specifying this as ``False``. """ - if page_number is not None and position is not None: - raise ValueError( - "The argument position of merge is deprecated. Use page_number only." - ) - if position is not None: - old_term = "position" - new_term = "page_number" - warnings.warn( - message=( - f"{old_term} is deprecated as an argument. Use {new_term} instead" + if position is not None: # deprecated + if page_number is None: + page_number = position + old_term = "position" + new_term = "page_number" + warnings.warn( + message=( + f"{old_term} is deprecated as an argument. Use {new_term} instead" + ) ) - ) - page_number = position - if page_number is None: + else: + raise ValueError( + "The argument position of merge is deprecated. Use page_number only." + ) + + if page_number is None: # deprecated + # The paremter is only marked as Optional as long as + # position is not fully deprecated + raise ValueError("page_number may not be None") raise ValueError("page_number may not be None") if fileobj is None: raise ValueError("fileobj may not be None") From 9c1f153850ab8c0a99f893f52f7147b1b6bb2055 Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sat, 10 Dec 2022 17:49:13 +0100 Subject: [PATCH 12/21] Update PyPDF2/_writer.py --- PyPDF2/_writer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PyPDF2/_writer.py b/PyPDF2/_writer.py index ffa02ef55..ca7b8359c 100644 --- a/PyPDF2/_writer.py +++ b/PyPDF2/_writer.py @@ -836,7 +836,7 @@ def encrypt( ) user_password = user_pwd if user_password is None: - raise ValueError("page_destination may not be None") + raise ValueError("user_password may not be None") if owner_password is not None and owner_pwd is not None: raise ValueError( From ff089028ce0c1f7f17c19b697d340b48057c1a19 Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sat, 10 Dec 2022 17:53:26 +0100 Subject: [PATCH 13/21] Update PyPDF2/_writer.py --- PyPDF2/_writer.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/PyPDF2/_writer.py b/PyPDF2/_writer.py index ca7b8359c..2692631b8 100644 --- a/PyPDF2/_writer.py +++ b/PyPDF2/_writer.py @@ -827,11 +827,16 @@ def encrypt( "The argument user_pwd of encrypt is deprecated. Use user_password only." ) if user_pwd is not None: - old_term = "user_pwd" - new_term = "user_password" - warnings.warn( - message=( - f"{old_term} is deprecated as an argument. Use {new_term} instead" + if user_password is not None: + raise ValueError( + "Please only set 'user_password'. " + "The 'user_pwd' argument is deprecated." + ) + else: + warnings.warn( + "Please use 'user_password' instead of 'user_pwd'. " + "The 'user_pwd' argument is deprecated and will be removed " + "in PyPDF2==3.0.0." ) ) user_password = user_pwd From 188d3d0e2b249565b6684a509771c500901b2243 Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sat, 10 Dec 2022 17:55:24 +0100 Subject: [PATCH 14/21] Update PyPDF2/_writer.py --- PyPDF2/_writer.py | 1 - 1 file changed, 1 deletion(-) diff --git a/PyPDF2/_writer.py b/PyPDF2/_writer.py index 2692631b8..330ba4bc9 100644 --- a/PyPDF2/_writer.py +++ b/PyPDF2/_writer.py @@ -838,7 +838,6 @@ def encrypt( "The 'user_pwd' argument is deprecated and will be removed " "in PyPDF2==3.0.0." ) - ) user_password = user_pwd if user_password is None: raise ValueError("user_password may not be None") From b3e76fb259f9eddd47a2a5d4cc0b57c83c859086 Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sat, 10 Dec 2022 17:57:09 +0100 Subject: [PATCH 15/21] Update PyPDF2/_writer.py --- PyPDF2/_writer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PyPDF2/_writer.py b/PyPDF2/_writer.py index 330ba4bc9..98c0fb63a 100644 --- a/PyPDF2/_writer.py +++ b/PyPDF2/_writer.py @@ -838,7 +838,7 @@ def encrypt( "The 'user_pwd' argument is deprecated and will be removed " "in PyPDF2==3.0.0." ) - user_password = user_pwd + user_password = user_pwd if user_password is None: raise ValueError("user_password may not be None") From ea36097554cce4698a204fb74ff1ff8b0ffdf36d Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sat, 10 Dec 2022 17:58:32 +0100 Subject: [PATCH 16/21] Update PyPDF2/_writer.py --- PyPDF2/_writer.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/PyPDF2/_writer.py b/PyPDF2/_writer.py index 98c0fb63a..cf6b991aa 100644 --- a/PyPDF2/_writer.py +++ b/PyPDF2/_writer.py @@ -842,19 +842,20 @@ def encrypt( if user_password is None: raise ValueError("user_password may not be None") - if owner_password is not None and owner_pwd is not None: - raise ValueError( - "The argument owner_pwd of encrypt is deprecated. Use owner_password only." - ) if owner_pwd is not None: - old_term = "owner_pwd" - new_term = "owner_password" - warnings.warn( - message=( - f"{old_term} is deprecated as an argument. Use {new_term} instead" + if owner_password is not None: + raise ValueError( + "The argument owner_pwd of encrypt is deprecated. Use owner_password only." ) - ) - owner_password = owner_pwd + else: + old_term = "owner_pwd" + new_term = "owner_password" + warnings.warn( + message=( + f"{old_term} is deprecated as an argument. Use {new_term} instead" + ) + ) + owner_password = owner_pwd if owner_password is None: owner_password = user_password From 9e75a496824b91f31bb94f8a6021ba68a3a56b9e Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sat, 10 Dec 2022 18:00:05 +0100 Subject: [PATCH 17/21] Update PyPDF2/_writer.py --- PyPDF2/_writer.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/PyPDF2/_writer.py b/PyPDF2/_writer.py index cf6b991aa..49419d5c4 100644 --- a/PyPDF2/_writer.py +++ b/PyPDF2/_writer.py @@ -822,10 +822,6 @@ def encrypt( control annotations, 9 for form fields, 10 for extraction of text and graphics. """ - if user_password is not None and user_pwd is not None: - raise ValueError( - "The argument user_pwd of encrypt is deprecated. Use user_password only." - ) if user_pwd is not None: if user_password is not None: raise ValueError( From b4a03a7e0703af82094ee3dcb7f86b5c2fa7474c Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sat, 10 Dec 2022 18:09:52 +0100 Subject: [PATCH 18/21] Apply suggestions from code review --- PyPDF2/_merger.py | 4 +++- PyPDF2/_writer.py | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/PyPDF2/_merger.py b/PyPDF2/_merger.py index 277820b7d..080a0543c 100644 --- a/PyPDF2/_merger.py +++ b/PyPDF2/_merger.py @@ -183,7 +183,9 @@ def merge( # position is not fully deprecated raise ValueError("page_number may not be None") raise ValueError("page_number may not be None") - if fileobj is None: + if fileobj is None: # deprecated + # The argument is only Optional due to the deprecated position + # argument raise ValueError("fileobj may not be None") stream, encryption_obj = self._create_stream(fileobj) diff --git a/PyPDF2/_writer.py b/PyPDF2/_writer.py index 49419d5c4..d07602550 100644 --- a/PyPDF2/_writer.py +++ b/PyPDF2/_writer.py @@ -835,7 +835,8 @@ def encrypt( "in PyPDF2==3.0.0." ) user_password = user_pwd - if user_password is None: + if user_password is None: # deprecated + # user_password is only Optional for due to the deprecated user_pwd raise ValueError("user_password may not be None") if owner_pwd is not None: From 67177090f9fc92fefc666e56557b1feb1e899d81 Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sat, 10 Dec 2022 18:26:29 +0100 Subject: [PATCH 19/21] Apply suggestions from code review --- PyPDF2/_writer.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/PyPDF2/_writer.py b/PyPDF2/_writer.py index d07602550..7048d67bd 100644 --- a/PyPDF2/_writer.py +++ b/PyPDF2/_writer.py @@ -839,7 +839,7 @@ def encrypt( # user_password is only Optional for due to the deprecated user_pwd raise ValueError("user_password may not be None") - if owner_pwd is not None: + if owner_pwd is not None: # deprecated if owner_password is not None: raise ValueError( "The argument owner_pwd of encrypt is deprecated. Use owner_password only." @@ -1239,11 +1239,11 @@ def add_outline_item_destination( parent: Union[None, TreeObject, IndirectObject] = None, dest: Union[None, PageObject, TreeObject] = None, # deprecated ) -> IndirectObject: - if page_destination is not None and dest is not None: + if page_destination is not None and dest is not None: # deprecated raise ValueError( "The argument dest of add_outline_item_destination is deprecated. Use page_destination only." ) - if dest is not None: + if dest is not None: # deprecated old_term = "dest" new_term = "page_destination" warnings.warn( @@ -1457,7 +1457,7 @@ def add_named_destination_object( raise ValueError( "The argument dest of add_named_destination_object is deprecated. Use page_destination only." ) - if dest is not None: + if dest is not None: # deprecated old_term = "dest" new_term = "page_destination" warnings.warn( @@ -1466,7 +1466,7 @@ def add_named_destination_object( ) ) page_destination = dest - if page_destination is None: + if page_destination is None: # deprecated raise ValueError("page_destination may not be None") page_destination_ref = self._add_object(page_destination) From 7de7c4b4c6f1b1da1c1fa0827722780ea493898e Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sat, 10 Dec 2022 18:37:26 +0100 Subject: [PATCH 20/21] Apply suggestions from code review --- PyPDF2/_writer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/PyPDF2/_writer.py b/PyPDF2/_writer.py index 7048d67bd..e5beb0ff0 100644 --- a/PyPDF2/_writer.py +++ b/PyPDF2/_writer.py @@ -1252,7 +1252,8 @@ def add_outline_item_destination( ) ) page_destination = dest - if page_destination is None: + if page_destination is None: # deprecated + # argument is only Optional due to deprecated argument. raise ValueError("page_destination may not be None") if parent is None: From 3d1deb25f122f687b0cabedbc77c4e2706dfb468 Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sat, 10 Dec 2022 18:47:36 +0100 Subject: [PATCH 21/21] Update PyPDF2/_merger.py --- PyPDF2/_merger.py | 1 - 1 file changed, 1 deletion(-) diff --git a/PyPDF2/_merger.py b/PyPDF2/_merger.py index 080a0543c..57261baa0 100644 --- a/PyPDF2/_merger.py +++ b/PyPDF2/_merger.py @@ -182,7 +182,6 @@ def merge( # The paremter is only marked as Optional as long as # position is not fully deprecated raise ValueError("page_number may not be None") - raise ValueError("page_number may not be None") if fileobj is None: # deprecated # The argument is only Optional due to the deprecated position # argument