Skip to content

Commit 6dfa255

Browse files
MartinThomastefan6419846
andauthoredFeb 9, 2025··
DOC: stefan6419846 becomes BDFL of pypdf (#3078)
--------- Co-authored-by: stefan6419846 <96178532+stefan6419846@users.noreply.github.com>
1 parent dd106dc commit 6dfa255

8 files changed

+31
-28
lines changed
 

‎.github/SECURITY.md

+5-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@ Security fixes are applied to the latest version.
66

77
## Reporting a Vulnerability
88

9-
If you find a potential security issue, please report it to info@martin-thoma.de
10-
(the current maintainer).
9+
If you find a potential security issue, please report it using the
10+
[private vulnerability reporting](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities/privately-reporting-a-security-vulnerability) feature of GitHub to
11+
automatically inform all relevant team members. Otherwise, please
12+
get in touch with stefan6419846 through e-mail (current maintainer,
13+
address in GitHub profile).
1114

1215
We will try to find a fix in a timely manner and will then issue a security
1316
advisory together with the update via GitHub

‎docs/dev/releasing.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ A `pypdf` release contains the following artifacts:
1111
## Who does it?
1212

1313
`pypdf` should typically only be released by one of the core maintainers / the
14-
core maintainer. At the moment, this is either Martin Thoma or pubpub-zz and stefan6419846.
14+
core maintainer. At the moment, this is either stefan6419846 or pubpub-zz and Martin Thoma.
1515

1616
Any owner of the py-pdf organization also has the technical permissions to
1717
release.
@@ -61,5 +61,5 @@ The release contains the following steps:
6161
There is no need to wait for anything. If the CI is green (all tests succeeded),
6262
we can release.
6363

64-
I (Martin Thoma) typically only release once a week, because it costs a little
65-
bit of time and I don't want to spam users with too many releases.
64+
At the moment, there is no fixed release cycle - except that we usually release
65+
on Sunday.

‎docs/meta/comparisons.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ As pypdf is free software, there were attempts to fork it and continue
3838
the development. PyPDF3 was first released in 2018 and still receives
3939
updates. PyPDF4 has only one release from 2018.
4040

41-
I (Martin Thoma, the current maintainer of pypdf and PyPDF2), hope that we can
42-
bring the community back to one path of development. I deprecated PyPDF2 in
43-
favor of pypdf already and pypdf has now more features and a cleaner interface
44-
than PyPDF2. See [history of pypdf](history.md).
41+
Martin Thoma has worked on bringing the community back to one path of
42+
development. He deprecated PyPDF2 in favor of pypdf already and pypdf has now
43+
more features and a cleaner interface than PyPDF2. See [history of
44+
pypdf](history.md).
4545

4646
[free]: https://en.wikipedia.org/wiki/Free_software
4747
[PyMuPDF]: https://pypi.org/project/PyMuPDF/

‎docs/meta/history.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ and general project decisions.
6666
encryption schemes.
6767

6868

69-
## pypdf: Back to the Roots (2023-Today)
69+
## pypdf: Back to the Roots (2023-2024)
7070

7171
In order to make things simpler for beginners, PyPDF2 was merged back into
7272
pypdf. Now all lowercase, without a number. We hope that the folks who
@@ -80,6 +80,9 @@ Compared to `PyPDF2 >= 3.0.0`, `pypdf >= 3.1.0` now offers:
8080
* Performance Improvements and Bugfixes
8181
* Page Label support
8282

83+
stefan6419846 made his [first PR for pypdf](https://github.com/py-pdf/pypdf/pull/2022)
84+
in July 2023 and joined the project.
85+
8386

8487
[Mathieu Fenniak]: https://mathieu.fenniak.net/
8588
[pyfpdf]: https://github.com/reingart/pyfpdf

‎docs/meta/project-governance.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,9 @@ maintainers do their best to fix that in a timely manner - please
133133

134134
## People
135135

136-
* Martin Thoma is benevolent dictator since April 2022.
136+
* [stefan6419846](https://github.com/stefan6419846) is the benevolent dictator since January 2025
137+
* [Martin Thoma](https://github.com/MartinThoma) was the benevolent dictator from April 2022 to January 2025.
138+
He still has most of the permissions as a fallback.
137139
* Maintainers:
138140
* Matthew Stamy (mstamy2) was the benevolent dictator for a long time.
139141
He still is around on GitHub once in a while and has permissions on PyPI and GitHub.

‎docs/meta/taking-ownership.md

+6-10
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
# Taking Ownership of pypdf
22

3-
pypdf is currently maintained by me, Martin Thoma. I want to avoid that
3+
pypdf is currently maintained by stefan6419846. We want to avoid that
44
pypdf ever goes unmaintained again. This document serves as a guide to avoid
55
that if I become unavailable, e.g. due to severe health issues.
66

77
This currently is just an abstract scenario. I'm fine and I will likely do this
88
for several more years, but I have seen how projects stand still for many years
99
because of the maintainer becoming inactive.
1010

11-
I've also followed the [GitHub Deceased User Policy](https://docs.github.com/en/site-policy/other-site-policies/github-deceased-user-policy)
12-
and added a [pre-designated successor](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/maintaining-ownership-continuity-of-your-personal-accounts-repositories).
13-
1411
## What belongs to pypdf?
1512

1613
The resources needed for maintaining pypdf are:
@@ -21,20 +18,19 @@ The resources needed for maintaining pypdf are:
2118

2219
## When may somebody take ownership?
2320

24-
**No activity in 180 days**: If I don't answer e-mails (info@martin-thoma.de)
21+
**No activity in 180 days**: If I don't answer e-mails (see my GitHub profile)
2522
and don't make any commits / merges for half a year, you can consider pypdf "not
2623
maintained".
2724

2825
## Who may take ownership?
2926

30-
Preferably, one of the owners of the Github `py-pdf` organization takes care of
27+
Preferably, one of the owners of the GitHub `py-pdf` organization takes care of
3128
that.
3229

33-
From my current perspective (Martin Thoma, 27th of August 2023), the following
34-
people might be candidates:
30+
As of 27th of August 2023, the following people might be candidates:
3531

3632
* [Lucas-C](https://github.com/Lucas-C): He maintains fpdf2 and is a py-pdf owner
37-
* [pubpub-zz](https://github.com/pubpub-zz): He is the most active contributor
33+
* [pubpub-zz](https://github.com/pubpub-zz): He is one of the most active contributors
3834
to pypdf
3935
* [Matthew Peveler](https://github.com/MasterOdin): Less active, but he is very
4036
careful about breaking changes and an experienced software developer.
@@ -44,5 +40,5 @@ people might be candidates:
4440
## How to take ownership?
4541

4642
* PyPI: Follow [PEP 541 – Package Index Name Retention](https://peps.python.org/pep-0541/)
47-
* Github: Talk with one of the other py-pdf organization owners
43+
* GitHub: Talk with one of the other py-pdf organization owners
4844
* ReadTheDocs: Follow the [Abandoned projects policy](https://docs.readthedocs.io/en/latest/abandoned-projects.html)

‎docs/user/cropping-and-transforming.md

+2-3
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,8 @@ writer.write("out-pg-transform.pdf")
196196
`pypdf<=3.4.0` used to merge the other page with `trimbox`.
197197
`pypdf>3.4.0` changes this behavior to `cropbox`.
198198

199-
In case anybody has good reasons to use/expect `trimbox`, please let me know via
200-
info@martin-thoma.de or via https://github.com/py-pdf/pypdf/pull/1622
201-
In the mean time, you can add the following code to get the old behavior:
199+
In case anybody has good reasons to use/expect `trimbox`, you can add the
200+
following code to get the old behavior:
202201

203202
```python
204203
pypdf._page.MERGE_CROP_BOX = "trimbox"

‎pyproject.toml

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ build-backend = "flit_core.buildapi"
55
[project]
66
name = "pypdf"
77
authors = [{ name = "Mathieu Fenniak", email = "biziqe@mathieu.fenniak.net" }]
8-
maintainers = [{ name = "Martin Thoma", email = "info@martin-thoma.de" }]
8+
maintainers = [{ name = "stefan6419846" }, { name = "Martin Thoma", email = "info@martin-thoma.de" }]
99
description = "A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files"
1010
readme = "README.md"
1111
dynamic = ["version"]
@@ -139,7 +139,7 @@ ignore = [
139139
"D404", # First word of the docstring should not be "This"
140140
"D406", # Section name should end with a newline ("Returns")
141141
"D415", # First line should end with a period
142-
"D417", # Missing argument descriptions in the docstring
142+
"D417", # Missing argument descriptions in the docstring
143143
"DTZ001", # The use of `datetime.datetime()` without `tzinfo` is necessary
144144
"EM101", # Exception must not use a string literal, assign to variable first
145145
"EM102", # Exception must not use an f-string literal, assign to variable first
@@ -148,7 +148,7 @@ ignore = [
148148
"FA102", # Missing `from __future__ import annotations`, but uses PEP 604 union
149149
"FBT001", # Boolean positional arg in function definition
150150
"FBT002", # Boolean default value in function definition
151-
"FBT003", # Boolean positional value in function call
151+
"FBT003", # Boolean positional value in function call
152152
"FIX002", # TODOs should typically not be in the code, but sometimes are ok
153153
"G004", # f-string in logging statement
154154
"N806", # non-lowercase-variable-in-function
@@ -169,7 +169,7 @@ ignore = [
169169
"RET501", # Do not explicitly `return None` in function if it is the only possible return value
170170
"RET502", # Do not implicitly `return None` in function able to return non-`None` value
171171
"RET503", # Missing explicit `return` at the end of function able to return non-`None` value
172-
"RET504", # Unnecessary assignment to `changelog` before `return`
172+
"RET504", # Unnecessary assignment to `changelog` before `return`
173173
"RET505", # Unnecessary `else` after `return` statement
174174
"RET506", # Unnecessary `else` after `raise` statement
175175
"RET507", # Unnecessary `else` after `continue` statement

0 commit comments

Comments
 (0)
Please sign in to comment.