## 1. Project Overview & Quickstart (py-pdf/intro)

# intro

Open-source repository py-pdf/intro

### Repository Details
- **Repository:** [py-pdf/intro](https://github.com/py-pdf/intro)
- **Primary Language:** Code

*Note: High-volume repository documentation is actively indexed and synchronized by YakaAI.*

## 2. Official Technical Reference & Guides (py-pdf/py-pdf.github.io)

## File: README.md

# py-pdf.github.io
Website py-pdf

## Install requirements
```
$ pip install -r requirements.txt
$ pre-commit install
```

## Launch local server with livereload
```
$ invoke livereload
```

## Adding a Python dependency
1. Edit `requirements.in`
2. Run `pip-compile requirements.in` to generate `requirements.txt`

## Publish
```
$ make github
```

---

## File: content/pages/index.md

Title: The py-pdf organization
Slug: ../index
Save_as: index.html
Authors: Martin Thoma
Summary: What py-pdf is about

The py-pdf organization is a group of Python developers who provide
libraries and applications around PDF documents.

---

## File: content/pages/maintainer-guidelines.md

Title: Maintainer guidelines
Tags: guideline, maintainer

## Table of contents




- [Volunteering](#volunteering)
- [Governance](#governance)
  * [The relationship of py-pdf to its projects](#the-relationship-of-py-pdf-to-its-projects)
  * [Conditions for projects to be added to py-pdf](#conditions-for-projects-to-be-added-to-py-pdf)
  * [Responsibility of project maintainers](#responsibility-of-project-maintainers)
  * [GitHub roles](#github-roles)
- [Releases](#releases)



## Volunteering
All [@py-pdf](https://github.com/py-pdf) members are volunteers.
They dedicate some of their time to maintain open-source projects, answer questions and review Pull Requests.

[@py-pdf](https://github.com/py-pdf) members should never be required to operate within deadlines, or even respond within a given time frame.

If you are a user of a [@py-pdf](https://github.com/py-pdf) project and want something done,
whether it is a bugfix or a feature request, your best options for achieving what you want are:

* being polite and patient
* volunteer to contribute yourself

To all [@py-pdf](https://github.com/py-pdf) members, remember: [it's okay to hit pause](https://opensource.guide/best-practices/#its-okay-to-hit-pause), and take time away from volunteer open-source work.



## Governance
`py-pdf` governance model is descibed there:
<https://pypdf.readthedocs.io/en/latest/meta/project-governance.html>



## The relationship of py-pdf to its projects

`py-pdf` wants to ensure the Python-PDF ecosystem is prospering. We recognize that individual
maintainers did and still do an outstanding job, but we also see that personal lives sometimes
move away from software projects.

That means:

1. `py-pdf` offers the platform to exchange ideas and provide feedback
2. `py-pdf` administrators who are not project members do interfere, when (a) no activity by the maintainers is in the project for at least 6 months and at least 3 friendly "are you alive" questions over at least 6 weeks. (b) security issues are detected
3. `py-pdf` leaves the projects do their thing in all other cases.



## Conditions for projects to be added to py-pdf

We want projects which provide value to users and we need to be able to maintain them. We want to improve the Python / PDF ecosystem and not scatter it.

1. The project has to be a Python project and about PDF documents
2. If it's a software project, it has (1) a README with the projects purpose, installation instructions, and a usage example (2) it's either the main project or the fork that has more popularity measured in GitHub stars
3. It either has a different purpose than all other projects in `py-pdf` or is more popular than the existing projects for that purpose
4. It needs to be a FOSS license (e.g. BSD, MIT, Apache)



## Responsibility of project maintainers

1. **Software Reliability**: Please ensure that your project follows best practices in software development. Introduce a [deprecation process](https://pypdf.readthedocs.io/en/latest/dev/deprecations.html) and follow it.
2. **Kindness**: We are all here because it's fun to help others and create good software. But we are humans: people can have bad days and people might not speak English as a mother tongue. When in doubt, assume the best. Let people know how you perceived their interaction.
3. **Know your Limits**: It's ok to reduce the time you spend on your project or even step away from it. Stay healthy.
4. **Let your Project Grow**: Especially if you step away, let others take over. Make it explicit that you're looking for another person who would take over.
It's OK to [say no](https://opensource.guide/best-practices/#learning-to-say-no).





## GitHub roles
The base permission for [@py-pdf](https://github.com/py-pdf) members is set to **Write**,
meaning any [@py-pdf](https://github.com/py-pdf) member has read permissions,
can manage issues and pull requests, and also push to repositories.

We encourage [@py-pdf](https://github.com/py-pdf) members, and especially maintainers, to make their organization membership **public**
on <https://github.com/orgs/py-pdf/people>, in order to clarify who has ownership of the organization, and the associated rights to perform package releases:





## Releases
Depending on the projects, the release process can be automated inside GitHub Actions pipelines, or stays manual.





<script>
const ANCHOR_ID_CHAR_RANGE_TO_IGNORE = '[\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\uFFFF]+';
function slugify(s) {
  var s = String(s)
  s = s.trim()
  s = s.toLowerCase()
  s = s.replace(new RegExp('^'+ANCHOR_ID_CHAR_RANGE_TO_IGNORE, 'g'), '')
  s = s.replace(new RegExp(ANCHOR_ID_CHAR_RANGE_TO_IGNORE, 'g'), '-')
  return encodeURIComponent(s);
}
document.querySelectorAll('h2').forEach(function (title) {
  // Add an HTML "id" based on the heading title slugified:
  title.id = slugify(title.textContent);
  // Add a clickable link on hover:
  var a = document.createElement('a');
  a.href = document.location + '#' + title.id;
  a['aria-hidden'] = true;
  a.style.float = 'left';
  a.style['padding-right'] = '4px';
  a.style['margin-left'] = '-20px';
  a.style['line-height'] = 1;
  title.appendChild(a);
  var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
  svg.setAttribute('aria-hidden', true);
  svg.setAttribute('height', 16);
  svg.setAttribute('width', 16);
  svg.setAttribute('viewBox', '0 0 16 16');
  svg.style.color = '#1b1f23';
  svg.style['vertical-align'] = 'middle';
  svg.style.visibility = 'hidden';
  a.appendChild(svg);
  var path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
  path.setAttributeNS(null, 'fill-rule', 'evenodd');
  path.setAttributeNS(null, 'd', 'M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z');
  svg.appendChild(path);
  title.onmouseover = function () { this.getElementsByTagName('svg')[0].style.visibility = 'visible'; };
  title.onmouseout = function () { this.getElementsByTagName('svg')[0].style.visibility = 'hidden'; };
});
</script>

---

## File: content/pages/py-pdf-owners.md

Title: Rules for py-pdf owners
Date: 2023-04-18 17:10
Modified: 2023-04-18 17:10
Tags: Governance
Slug: py-pdf-owners
Authors: Martin Thoma
Summary: How py-pdf organization owners agree to act

Welcome to the "py-pdf" organization! As a [GitHub organiztion owner](https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization),
your role is to ensure that our projects flourish while minimizing unnecessary
interference. To achieve this goal, we ask that you follow these rules.

## The Rules

1. **No owner removes any other owner** from the organization, except if any of those events happen:
    1. There is evidence for credentials being stolen / a malicious owner. Latest 30 minutes after the owner was removed, an [issue in py-pdf.github.io](https://github.com/py-pdf/py-pdf.github.io/issues) is created. The incident is publicly documented.
    2. The other owner is not active for at least 12 months. The owner is contacted at least 3 times over at least 3 months. The last e-mail is at least 30 days ago. Am [issue in py-pdf.github.io](https://github.com/py-pdf/py-pdf.github.io/issues) is created to document it.
    3. The other owner is harming the project in the way they act publicly (e.g. insulting people in issues). This needs all other owners to agree + an [issue in py-pdf.github.io](https://github.com/py-pdf/py-pdf.github.io/issues). If there is only 2 owners in total (one about to be removed) a 75% majority of people voting with "thumbs up" (to remove) vs less than 25% people voting with "thumbs down" (not remove). In that case, there need to be at least 4 non-owners to vote to remove the owner.
2. **No owner adds any new owner** to the organization, except if all of the following conditions are met:
    1. The new owner has two-factor authentication enabled (see [security settings](https://github.com/settings/security) - security keys and authenticator app are preferred), and
    2. All other owners agree, and
    3. The new owner agrees to those rules. In case the new owner has an account successor, the new owner ensures that person also agrees to the rules.
3. **Owners typically don't interfere with other projects**, except if the project itself is at risk (e.g. security issues / no merges for at least 6 months)
4. **Those rules can only be changed by all owners agreeing** on the new version. This "py-pdf owner ruleset" should be documented at https://py-pdf.github.io/. Any change is done by PR / agreement is showed by an approval.