Skip to content
Snippets Groups Projects
Commit 87cbda9c authored by Faidon Liambotis's avatar Faidon Liambotis
Browse files

New upstream version 22.3.0

parent bb3d662e
No related branches found
No related tags found
No related merge requests found
Showing
with 1506 additions and 292 deletions
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of
any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
<mailto:hs@ox.cx>.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of
actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
[https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
Contributor Covenant Code of Conduct
====================================
Our Pledge
----------
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
Our Standards
-------------
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
Our Responsibilities
--------------------
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
Scope
-----
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community.
Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
Representation of a project may be further defined and clarified by project maintainers.
Enforcement
-----------
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hs@ox.cx.
All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances.
The project team is obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
Attribution
-----------
This Code of Conduct is adapted from the `Contributor Covenant <https://www.contributor-covenant.org>`_, version 1.4, available at <https://www.contributor-covenant.org/version/1/4/code-of-conduct.html>.
# How To Contribute
Thank you for considering contributing to *structlog*!
It's people like *you* who make it such a great tool for everyone.
This document intends to make contribution more accessible by codifying tribal knowledge and expectations.
Don't be afraid to open half-finished PRs, and ask questions if something is unclear!
Please note that this project is released with a Contributor [Code of Conduct](https://github.com/hynek/structlog/blob/main/.github/CODE_OF_CONDUCT.md).
By participating in this project you agree to abide by its terms.
Please report any harm to [Hynek Schlawack] in any way you find appropriate.
## Support
In case you'd like to help out but don't want to deal with GitHub, there's a great opportunity:
help your fellow developers on [Stack Overflow](https://stackoverflow.com/questions/tagged/structlog)!
The official tag is `structlog` and helping out in support frees us up to improve *structlog* instead!
## Workflow
- No contribution is too small!
Please submit as many fixes for typos and grammar bloopers as you can!
- Try to limit each pull request to *one* change only.
- Since we squash on merge, it's up to you how you handle updates to the `main branch.
Whether you prefer to rebase on `main` or merge `main` into your branch, do whatever is more comfortable for you.
- *Always* add tests and docs for your code.
This is a hard rule; patches with missing tests or documentation won't be merged.
- Make sure your changes pass our [CI].
You won't get any feedback until it's green unless you ask for it.
For the CI to pass, the coverage must be 100%.
If you have problems to test something, open anyway and ask for advice.
In some situations, we may agree to add an `# pragma: no cover`.
- Once you've addressed review feedback, make sure to bump the pull request with a short note, so we know you're done.
- Don’t break backwards-compatibility.
## Local Development Environment
You can (and should) run our test suite using [*tox*].
However, you’ll probably want a more traditional environment as well.
We highly recommend to develop using the latest Python release because we try to take advantage of modern features whenever possible.
First create a [virtual environment](https://virtualenv.pypa.io/) so you don't break your system-wide Python installation.
It’s out of scope for this document to list all the ways to manage virtual environments in Python, but if you don’t already have a pet way, take some time to look at tools like [*direnv*](https://hynek.me/til/python-project-local-venvs/), [*virtualfish*](https://virtualfish.readthedocs.io/), and [*virtualenvwrapper*](https://virtualenvwrapper.readthedocs.io/).
Next, get an up to date checkout of the *structlog* repository:
```console
$ git clone git@github.com:hynek/structlog.git
```
or if you prefer to use *Git* via `https`:
```console
$ git clone https://github.com/hynek/structlog.git
```
Change into the newly created directory and **after activating your virtual environment** install an editable version of *structlog* along with its tests and docs requirements:
```console
$ cd structlog
$ pip install --upgrade pip wheel setuptools # PLEASE don't skip this step
$ pip install -e '.[dev]'
```
At this point,
```console
$ python -m pytest
```
should work and pass, as should:
```console
$ cd docs
$ make html
```
The built documentation can then be found in `docs/_build/html/`.
---
To avoid committing code that violates our style guide, we strongly advise you to install [*pre-commit*] and its hooks:
```console
$ pre-commit install
```
This is not strictly necessary, because our [*tox*] file contains an environment that runs:
```console
$ pre-commit run --all-files
```
and our CI has integration with [pre-commit.ci](https://pre-commit.ci).
But it's way more comfortable to run it locally and *git* catching avoidable errors.
## Code
- Obey [PEP 8](https://www.python.org/dev/peps/pep-0008/) and [PEP 257](https://www.python.org/dev/peps/pep-0257/).
We use the `"""`-on-separate-lines style for docstrings:
```python
def func(x: str) -> str:
"""
Do something.
:param str x: A very important parameter.
:rtype: str
"""
```
- If you add or change public APIs, tag the docstring using `.. versionadded:: 16.0.0 WHAT` or `.. versionchanged:: 16.2.0 WHAT`.
- We use [*isort*](https://github.com/PyCQA/isort) to sort our imports, and we use [*Black*](https://github.com/psf/black) with line length of 79 characters to format our code.
As long as you run our full [*tox*] suite before committing, or install our [*pre-commit*] hooks (ideally you'll do both – see [*Local Development Environment*](#local-development-environment) above), you won't have to spend any time on formatting your code at all.
If you don't, [CI] will catch it for you – but that seems like a waste of your time!
## Tests
- Write your asserts as `expected == actual` to line them up nicely:
```python
x = f()
assert 42 == x.some_attribute
assert "foo" == x._a_private_attribute
```
- To run the test suite, all you need is a recent [*tox*].
It will ensure the test suite runs with all dependencies against all Python versions just as it will in our [CI].
If you lack some Python versions, you can can always limit the environments like `tox -e py38,py39`, or make it a non-failure using `tox --skip-missing-interpreters`.
In that case you should look into [*asdf*](https://asdf-vm.com) or [*pyenv*](https://github.com/pyenv/pyenv), which make it very easy to install many different Python versions in parallel.
- Write [good test docstrings](https://jml.io/pages/test-docstrings.html).
- If you've changed or added public APIs, please update our type stubs (files ending in `.pyi`).
## Documentation
- We use [*Markdown*] everywhere except in `docs/api.rst` and docstrings.
- Use [semantic newlines] in [*reStructuredText*] and [*Markdown*] files (files ending in `.rst` and `.md`):
```markdown
This is a sentence.
This is another sentence.
```
- If you start a new section, add two blank lines before and one blank line after the header, except if two headers follow immediately after each other:
```markdown
Last line of previous section.
## Header of New Top Section
### Header of New Section
First line of new section.
```
### Changelog
If your change is noteworthy, there needs to be a changelog entry in [`CHANGELOG.md`](https://github.com/hynek/structlog/blob/main/CHANGELOG.md), so our users can learn about it!
- The changelog follows the [*Keep a Changelog*](https://keepachangelog.com/en/1.0.0/) standard.
Please add the best-fitting section if it's missing for the current release.
We use the following order: `Security`, `Removed`, `Deprecated`, `Added`, `Changed`, `Fixed`.
- As with other docs, please use [semantic newlines] in the changelog.
- Make the last line a link to your pull request.
You probably have to open it first to know the number.
- Wrap symbols like modules, functions, or classes into backticks so they are rendered in a `monospace font`.
- Wrap arguments into asterisks like in docstrings:
`Added new argument *an_argument*.`
- If you mention functions or other callables, add parentheses at the end of their names:
`structlog.func()` or `structlog.Class.method()`.
This makes the changelog a lot more readable.
- Prefer simple past tense or constructions with "now".
For example:
* Added `structlog.func()`.
* `structlog.func()` now doesn't crash the Large Hadron Collider anymore when passed the *foobar* argument.
#### Example entries
```markdown
- Added `structlog.func()`.
The feature really *is* awesome.
[#1](https://github.com/hynek/structlog/pull/1)
```
or:
```markdown
- `structlog.func()` now doesn't crash the Large Hadron Collider anymore when passed the *foobar* argument.
The bug really *was* nasty.
[#1](https://github.com/hynek/structlog/pull/1)
```
[CI]: https://github.com/hynek/structlog/actions
[Hynek Schlawack]: https://hynek.me/about/
[*pre-commit*]: https://pre-commit.com/
[*tox*]: https://tox.wiki/
[semantic newlines]: https://rhodesmill.org/brandon/2012/one-sentence-per-line/
[*reStructuredText*]: https://www.sphinx-doc.org/en/stable/usage/restructuredtext/basics.html
[*Markdown*]: https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax
How To Contribute
=================
First off, thank you for considering contributing to ``structlog``!
It's people like *you* who make it is such a great tool for everyone.
This document is mainly to help you to get started by codifying tribal knowledge and expectations and make it more accessible to everyone.
But don't be afraid to open half-finished PRs and ask questions if something is unclear!
Support
-------
In case you'd like to help out but don't want to deal with GitHub, there's a great opportunity:
help your fellow developers on `StackOverflow <https://stackoverflow.com/questions/tagged/structlog>`_!
The offical tag is ``structlog`` and helping out in support frees us up to improve ``structlog`` instead!
Workflow
--------
- No contribution is too small!
Please submit as many fixes for typos and grammar bloopers as you can!
- Try to limit each pull request to *one* change only.
- *Always* add tests and docs for your code.
This is a hard rule; patches with missing tests or documentation can't be merged.
- Make sure your changes pass our CI_.
You won't get any feedback until it's green unless you ask for it.
- Once you've addressed review feedback, make sure to bump the pull request with a short note, so we know you're done.
- Don’t break `backward compatibility`_.
Code
----
- Obey `PEP 8`_ and `PEP 257`_.
We use the ``"""``\ -on-separate-lines style for docstrings:
.. code-block:: python
def func(x):
"""
Do something.
:param str x: A very important parameter.
:rtype: str
"""
- If you add or change public APIs, tag the docstring using ``.. versionadded:: 16.0.0 WHAT`` or ``.. versionchanged:: 17.1.0 WHAT``.
- We use isort_ to sort our imports, and we follow the Black_ code style with a line length of 79 characters.
As long as you run our full tox suite before committing, or install our pre-commit_ hooks (ideally you'll do both -- see below "Local Development Environment"), you won't have to spend any time on formatting your code at all.
If you don't, CI will catch it for you -- but that seems like a waste of your time!
Tests
-----
- Write your asserts as ``expected == actual`` to line them up nicely and leave an empty line before them:
.. code-block:: python
x = f()
assert 42 == x.some_attribute
assert "foo" == x._a_private_attribute
- To run the test suite, all you need is a recent tox_.
It will ensure the test suite runs with all dependencies against all Python versions just as it will in our CI.
If you lack some Python versions, you can can make it a non-failure using ``tox --skip-missing-interpreters`` (in that case you may want to look into pyenv_ that makes it very easy to install many different Python versions in parallel).
- Write `good test docstrings`_.
Documentation
-------------
- Use `semantic newlines`_ in reStructuredText_ files (files ending in ``.rst``):
.. code-block:: rst
This is a sentence.
This is another sentence.
- If you start a new section, add two blank lines before and one blank line after the header except if two headers follow immediately after each other:
.. code-block:: rst
Last line of previous section.
Header of New Top Section
-------------------------
Header of New Section
^^^^^^^^^^^^^^^^^^^^^
First line of new section.
- If your change is noteworthy, add an entry to the changelog_.
Use `semantic newlines`_, and add a link to your pull request:
.. code-block:: rst
- Added ``structlog.func()`` that does foo.
It's pretty cool.
[`#1 <https://github.com/hynek/structlog/pull/1>`_]
- ``structlog.func()`` now doesn't crash the Large Hadron Collider anymore.
That was a nasty bug!
[`#2 <https://github.com/hynek/structlog/pull/2>`_]
Local Development Environment
-----------------------------
You can (and should) run our test suite using tox_.
However, you’ll probably want a more traditional environment as well.
We highly recommend to develop using the latest Python 3 release because you're more likely to catch certain bugs earlier.
First create a `virtual environment <https://virtualenv.pypa.io/>`_.
It’s out of scope for this document to list all the ways to manage virtual environments in Python but if you don’t have already a pet way, take some time to look at tools like `pew <https://github.com/berdario/pew>`_, `virtualfish <https://virtualfish.readthedocs.io/>`_, and `virtualenvwrapper <https://virtualenvwrapper.readthedocs.io/>`_.
Next get an up to date checkout of the ``structlog`` repository:
.. code-block:: bash
$ git checkout git@github.com:hynek/structlog.git
Change into the newly created directory and **after activating your virtual environment** install an editable version of ``structlog`` along with its test and docs dependencies:
.. code-block:: bash
$ cd structlog
$ pip install -e .[dev]
If you run the virtual environment’s Python and try to ``import structlog`` it should work!
At this point
.. code-block:: bash
$ python -m pytest
should work and pass
and
.. code-block:: bash
$ cd docs
$ make html
should build docs in ``docs/_build/html``.
To avoid committing code that violates our style guide, we strongly advise you to install pre-commit_ [#f1]_ hooks:
.. code-block:: bash
$ pre-commit install
You can also run them anytime using:
.. code-block:: bash
$ pre-commit run --all-files
.. [#f1] pre-commit should have been installed into your virtualenv automatically when you ran ``pip install -e '.[dev]'`` above.
If pre-commit is missing, it may be that you need to re-run ``pip install -e '.[dev]'``.
****
Again, this list is mainly to help you to get started by codifying tribal knowledge and expectations.
If something is unclear, feel free to ask for help!
Please note that this project is released with a Contributor `Code of Conduct`_.
By participating in this project you agree to abide by its terms.
Please report any harm to `Hynek Schlawack`_ in any way you find appropriate.
Thank you for considering contributing to ``structlog``!
.. _`Hynek Schlawack`: https://hynek.me/about/
.. _`PEP 8`: https://www.python.org/dev/peps/pep-0008/
.. _`PEP 257`: https://www.python.org/dev/peps/pep-0257/
.. _`good test docstrings`: https://jml.io/pages/test-docstrings.html
.. _`Code of Conduct`: https://github.com/hynek/structlog/blob/master/.github/CODE_OF_CONDUCT.rst
.. _changelog: https://github.com/hynek/structlog/blob/master/CHANGELOG.rst
.. _`backward compatibility`: https://www.structlog.org/en/latest/backward-compatibility.html
.. _tox: https://tox.readthedocs.io/
.. _pyenv: https://github.com/pyenv/pyenv
.. _reStructuredText: https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html
.. _semantic newlines: https://rhodesmill.org/brandon/2012/one-sentence-per-line/
.. _CI: https://dev.azure.com/the-hynek/structlog/_build?definitionId=1
.. _black: https://github.com/psf/black
.. _pre-commit: https://pre-commit.com/
.. _isort: https://github.com/timothycrosley/isort
---
github: hynek
ko_fi: the_hynek
tidelift: pypi/structlog
# Summary
<!-- Please tell us what your pull request is about here. -->
# Pull Request Check List
This is just a friendly reminder about the most common mistakes. Please make sure that you tick all boxes. But please read our [contribution guide](https://www.structlog.org/en/latest/contributing.html) at least once, it will save you unnecessary review cycles!
<!--
This is just a friendly reminder about the most common mistakes.
Please make sure that you tick all boxes.
But please read our [contribution guide](https://github.com/hynek/structlog/blob/main/.github/CONTRIBUTING.md) at least once; it will save you unnecessary review cycles!
If an item doesn't apply to your pull request, **check it anyway** to make it apparent that there's nothing left to do.
-->
- [ ] Added **tests** for changed code.
- The CI fails with less than 100% coverage.
- [ ] **New APIs** are added to [`typing_examples.py`](https://github.com/hynek/structlog/blob/main/tests/typing_examples.py).
- [ ] Updated **documentation** for changed code.
- [ ] New functions/classes have to be added to `docs/api.rst` by hand.
- [ ] Changed/added classes/methods/functions have appropriate `versionadded`, `versionchanged`, or `deprecated` [directives](http://www.sphinx-doc.org/en/stable/markup/para.html#directive-versionadded). Find the appropriate next version in our [``__init__.py``](https://github.com/hynek/structlog/blob/master/src/structlog/__init__.py) file.
- [ ] Documentation in `.rst` files is written using [semantic newlines](https://rhodesmill.org/brandon/2012/one-sentence-per-line/).
- [ ] Changes (and possible deprecations) are documented in the [changelog](https://github.com/hynek/structlog/blob/master/CHANGELOG.rst).
- [ ] Changed/added classes/methods/functions have appropriate `versionadded`, `versionchanged`, or `deprecated` [directives](http://www.sphinx-doc.org/en/stable/markup/para.html#directive-versionadded).
Find the appropriate next version in our [`__init__.py`](https://github.com/hynek/structlog/blob/main/src/structlog/__init__.py) file.
- [ ] Documentation in `.rst` and `.md` files is written using [**semantic newlines**](https://rhodesmill.org/brandon/2012/one-sentence-per-line/).
- [ ] Changes (and possible deprecations) are documented in the [**changelog**](https://github.com/hynek/structlog/blob/main/CHANGELOG.md).
- [ ] Consider granting [push permissions to the PR branch](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork), so maintainers can fix minor issues themselves without pestering you.
If you have *any* questions to *any* of the points above, just **submit and ask**! This checklist is here to *help* you, not to deter you from contributing!
<!--
If you have *any* questions to *any* of the points above, just **submit and ask**!
This checklist is here to *help* you, not to deter you from contributing!
-->
# Security Policy
## Supported Versions
We are following [*CalVer*](https://calver.org) with generous backwards-compatibility guarantees.
Therefore we only support the latest version.
That said, you shouldn't be afraid to upgrade *structlog* if you're using its documented public APIs and pay attention to `DeprecationWarning`s.
Whenever there is a need to break compatibility, it is announced [in the changelog](https://github.com/hynek/structlog/blob/main/CHANGELOG.md) and raises a `DeprecationWarning` for a year (if possible) before it's finally really broken.
You **can't** rely on the default settings and the `structlog.dev` module, though.
They may be adjusted in the future to provide a better experience when starting to use *structlog*.
So please make sure to **always** properly configure your applications.
## Reporting a Vulnerability
To report a security vulnerability, please use the [Tidelift security
contact](https://tidelift.com/security). Tidelift will coordinate the fix and
disclosure.
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
<svg viewBox="0 0 180 60" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path fill="#fff" d="M0 0h180v60H0z"/><path fill="#fff" d="M0 0h180v60H0z"/><path d="M27.917 35.296v9.608h-5V15.662h20v5.013h-15v9.608h8.75v5.013h-8.75zM32.5 54.93c13.807 0 25-11.222 25-25.065C57.5 16.022 46.307 4.8 32.5 4.8s-25 11.222-25 25.065c0 13.843 11.193 25.065 25 25.065zm5.417-33.002v13.368h5V21.928h-5zm30.694.302h8.95v2.16h-6.483v3.81h6.11v2.08h-6.11v5.851h-2.467v-13.9zm10.165 4.477h2.35v9.424h-2.35v-9.424zm-.333-3.2c0-.38.14-.71.421-.992.28-.282.637-.422 1.068-.422.43 0 .793.134 1.086.402.294.268.441.606.441 1.012 0 .405-.146.742-.44 1.01-.295.269-.656.403-1.087.403-.431 0-.787-.14-1.068-.422a1.358 1.358 0 01-.42-.991zm4.957-2.22h2.35v14.844H83.4V21.288zm11.203 9.19c0-.301-.042-.59-.127-.864a1.97 1.97 0 00-.402-.727 1.96 1.96 0 00-.695-.5 2.422 2.422 0 00-.989-.187c-.705 0-1.302.213-1.792.638-.49.426-.76.972-.812 1.64h4.817zm2.35 1.06v.314c0 .104-.007.21-.02.314h-7.147a2.336 2.336 0 00.861 1.66c.248.202.529.363.842.48.314.118.64.177.98.177.587 0 1.083-.108 1.488-.324.405-.217.737-.514.998-.893l1.567 1.256c-.927 1.257-2.272 1.885-4.034 1.885a5.715 5.715 0 01-2.017-.344 4.75 4.75 0 01-1.596-.971 4.39 4.39 0 01-1.058-1.542c-.255-.609-.381-1.299-.381-2.07 0-.76.127-1.45.381-2.072a4.713 4.713 0 011.048-1.59c.444-.439.97-.78 1.576-1.022a5.272 5.272 0 011.969-.363c.653 0 1.256.108 1.811.324a3.93 3.93 0 011.44.962c.404.425.72.956.95 1.59.228.635.342 1.378.342 2.229zm1.764-9.307h4.524a9.82 9.82 0 012.154.216c.64.144 1.188.38 1.645.707.457.327.81.746 1.057 1.257.249.51.373 1.125.373 1.845 0 .773-.144 1.42-.431 1.944a3.498 3.498 0 01-1.165 1.266c-.49.32-1.061.553-1.714.698a9.62 9.62 0 01-2.076.216h-1.9v5.752h-2.467v-13.9zm4.191 6.067c.404 0 .79-.029 1.155-.088.366-.059.692-.164.98-.314.287-.151.515-.357.685-.619.17-.262.254-.602.254-1.02 0-.406-.084-.737-.254-.992a1.761 1.761 0 00-.676-.6c-.28-.143-.6-.238-.96-.284a8.718 8.718 0 00-1.106-.069h-1.801v3.986h1.723zm6.112-1.59h2.252v1.57h.039a3.43 3.43 0 011.097-1.335c.47-.34 1.018-.51 1.645-.51.091 0 .189.003.293.01.105.007.196.023.274.049v2.16a2.728 2.728 0 00-.724-.098c-.536 0-.966.098-1.292.294a2.344 2.344 0 00-.764.707 2.534 2.534 0 00-.372.844 3.289 3.289 0 00-.098.687v5.046h-2.35v-9.424zm12.77 3.77c0-.301-.043-.59-.127-.864a1.97 1.97 0 00-.402-.727 1.96 1.96 0 00-.696-.5 2.42 2.42 0 00-.988-.187c-.705 0-1.302.213-1.792.638-.49.426-.76.972-.813 1.64h4.818zm2.35 1.06v.314c0 .104-.007.21-.02.314h-7.148a2.336 2.336 0 00.862 1.66c.248.202.529.363.842.48.313.118.64.177.979.177.588 0 1.083-.108 1.488-.324a2.813 2.813 0 001-.893l1.566 1.256c-.927 1.257-2.272 1.885-4.034 1.885a5.716 5.716 0 01-2.017-.344 4.748 4.748 0 01-1.596-.971 4.39 4.39 0 01-1.058-1.542c-.255-.609-.382-1.299-.382-2.07 0-.76.127-1.45.382-2.072a4.718 4.718 0 011.048-1.59c.443-.439.969-.78 1.576-1.022a5.272 5.272 0 011.968-.363c.653 0 1.257.108 1.812.324a3.93 3.93 0 011.44.962c.404.425.72.956.95 1.59.228.635.342 1.378.342 2.229zm.236-4.83h2.566l2.467 6.872h.04l2.486-6.872h2.487l-3.74 9.424h-2.506l-3.8-9.424zm10.87 0h2.35v9.424h-2.35v-9.424zm-.332-3.2c0-.38.14-.71.42-.992.281-.282.637-.422 1.068-.422.431 0 .793.134 1.087.402.293.268.44.606.44 1.012 0 .405-.146.742-.44 1.01-.294.269-.656.403-1.087.403-.43 0-.786-.14-1.067-.422a1.358 1.358 0 01-.421-.991zm11.536 6.97c0-.301-.043-.59-.127-.864a1.973 1.973 0 00-.402-.727 1.958 1.958 0 00-.695-.5 2.42 2.42 0 00-.989-.187c-.705 0-1.302.213-1.792.638-.49.426-.76.972-.812 1.64h4.817zm2.35 1.06v.314c0 .104-.007.21-.02.314h-7.147a2.336 2.336 0 00.861 1.66c.248.202.529.363.842.48.314.118.64.177.98.177.587 0 1.083-.108 1.488-.324a2.81 2.81 0 00.999-.893l1.566 1.256c-.927 1.257-2.271 1.885-4.034 1.885a5.717 5.717 0 01-2.017-.344 4.751 4.751 0 01-1.596-.971 4.385 4.385 0 01-1.057-1.542c-.255-.609-.383-1.299-.383-2.07 0-.76.128-1.45.382-2.072a4.709 4.709 0 011.048-1.59c.444-.439.97-.78 1.577-1.022a5.271 5.271 0 011.968-.363c.653 0 1.256.108 1.811.324a3.926 3.926 0 011.44.962c.404.425.72.956.95 1.59.228.635.342 1.378.342 2.229zm.315-4.83h2.546l1.958 6.754h.04l2.016-6.754h2.507l2.037 6.754h.039l1.998-6.754h2.448l-3.252 9.424h-2.388l-2.135-6.597h-.04l-2.114 6.597h-2.39l-3.27-9.424zm21.602 2.513a2.709 2.709 0 00-.862-.717 2.42 2.42 0 00-1.194-.304c-.379 0-.725.079-1.038.236-.313.157-.47.419-.47.785 0 .367.173.625.52.776.346.15.85.304 1.517.461.352.078.708.184 1.067.314.36.131.685.304.98.52.294.217.531.485.714.806.183.32.274.71.274 1.168 0 .576-.107 1.063-.323 1.463a2.757 2.757 0 01-.861.971 3.612 3.612 0 01-1.254.54c-.476.111-.97.167-1.479.167a5.853 5.853 0 01-2.134-.402c-.692-.27-1.267-.651-1.724-1.149l1.548-1.453c.26.34.6.622 1.018.844a2.91 2.91 0 001.39.334c.17 0 .343-.02.52-.059.176-.039.339-.101.49-.186.15-.085.27-.2.361-.344a.972.972 0 00.137-.53c0-.393-.179-.674-.538-.844-.36-.17-.898-.34-1.616-.51a7.739 7.739 0 01-1.028-.305 3.363 3.363 0 01-.891-.49 2.275 2.275 0 01-.627-.757c-.156-.3-.235-.674-.235-1.119 0-.524.108-.975.324-1.355.215-.38.499-.69.851-.932a3.814 3.814 0 011.195-.54c.444-.118.9-.177 1.37-.177.68 0 1.342.118 1.988.353.646.236 1.16.596 1.538 1.08l-1.528 1.355z" fill="#1083ff"/></svg>
<svg viewBox="0 0 180 60" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path fill="#fff" d="M0 0h180v60H0z"/><path d="M29.612 13.2a3.974 3.974 0 00-3.4-1.922c-1.391 0-2.684.73-3.402 1.922l-5.594 9.582a27.415 27.415 0 0115.091 22.666H28.38a23.56 23.56 0 00-13.144-19.317l-5.178 8.953a13.547 13.547 0 017.847 10.347h-9.02a.649.649 0 01-.528-.943l2.5-4.251A9.143 9.143 0 008 38.62l-2.474 4.251a3.862 3.862 0 001.437 5.306c.587.33 1.248.506 1.922.51h12.354a16.511 16.511 0 00-6.802-14.717l1.964-3.402a20.317 20.317 0 018.757 18.119h10.466A30.537 30.537 0 0021.671 21.65l3.97-6.802a.658.658 0 01.893-.23c.451.247 17.251 29.562 17.566 29.903a.645.645 0 01-.564.96h-4.061a34.338 34.338 0 010 3.24h4.089a3.92 3.92 0 003.903-3.903v-.017a3.82 3.82 0 00-.527-1.938L29.612 13.2zm81.043 22.122l-12.55-16.205h-3.128V40.84h3.171V24.193l12.907 16.647h2.772V19.117h-3.172v16.205zm-31.603-4.03h11.249V28.47H79.044V21.93h12.694V19.11H75.813V40.84H91.9v-2.823H79.044l.008-6.725zm-13.229-2.755c-4.378-1.054-5.603-1.887-5.603-3.91 0-1.82 1.607-3.053 4.005-3.053 2.183.064 4.29.824 6.01 2.168l1.701-2.406a11.992 11.992 0 00-7.652-2.55c-4.302 0-7.303 2.55-7.303 6.18 0 3.912 2.55 5.264 7.192 6.394 4.133.952 5.4 1.837 5.4 3.818 0 1.98-1.701 3.205-4.328 3.205-2.615-.012-5.133-1-7.057-2.772l-1.913 2.287a13.554 13.554 0 008.86 3.274c4.658 0 7.651-2.508 7.651-6.386-.025-3.281-1.963-5.041-6.963-6.249zm105.521-9.42l-6.538 10.203-6.496-10.203h-3.792l8.579 13.136v8.596h3.265V32.15L175 19.117h-3.656zm-54.95 2.942h7.116v18.79h3.265v-18.79h7.117v-2.942h-17.49l-.008 2.942zm32.598 10.304c3.281-.91 5.101-3.205 5.101-6.487 0-4.174-3.052-6.801-7.975-6.801h-9.658v21.757h3.23v-7.805h5.484l5.51 7.822h3.775l-5.952-8.35.485-.136zm-9.31-2.125v-8.247h6.096c3.18 0 5 1.505 5 4.115 0 2.61-1.948 4.132-4.966 4.132h-6.13z" fill="#362d59" fill-rule="nonzero"/></svg>
<svg viewBox="0 0 180 60" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path fill="#fff" d="M0 0h180v60H0z"/><g fill-rule="nonzero"><path d="M39.99 39.07V20.93c0-1.838 0-1.838 1.937-1.838s1.937 0 1.937 1.837v18.142c0 1.837 0 1.837-1.937 1.837s-1.937 0-1.937-1.837zm9.422-1.04V21.97c0-2.883 0-2.883 2.883-2.883h4.699c6.294 0 10.168 3.142 10.58 8.259a25.26 25.26 0 010 4.483c-.416 5.084-4.29 9.08-10.58 9.08h-4.699c-2.883 0-2.883 0-2.883-2.88zm7.498-.797c4.308 0 6.524-2.433 6.774-5.779a20.04 20.04 0 000-3.72c-.284-3.38-2.466-4.963-6.774-4.963h-3.62v14.462h3.62zm15.855.797V21.97c0-2.883 0-2.883 2.882-2.883h10.914c1.904 0 1.904 0 1.904 1.788 0 1.787 0 1.82-1.904 1.82h-9.914v5.617h8.96c1.82 0 1.82 0 1.82 1.705 0 1.704 0 1.72-1.82 1.72h-8.96V37.3h9.998c1.903 0 1.903 0 1.903 1.77 0 1.838 0 1.838-1.903 1.838H75.647c-2.882 0-2.882 0-2.882-2.879zm21.261 0V20.945c0-1.871 0-1.871 1.92-1.871s1.937 0 1.937 1.837V37.3h9.64c1.953 0 1.953 0 1.953 1.82 0 1.822 0 1.788-1.953 1.788H96.909c-2.883 0-2.883 0-2.883-2.879zm20.944 1.04V20.93c0-1.838 0-1.838 1.938-1.838 1.937 0 1.937 0 1.937 1.837v18.142c0 1.837 0 1.837-1.937 1.837s-1.937 0-1.937-1.837zm9.378 0V21.988c0-2.883 0-2.883 2.882-2.883h10.914c1.87 0 1.887 0 1.887 1.821 0 1.82 0 1.787-1.887 1.787h-9.918v5.834h9.193c1.887 0 1.887 0 1.887 1.754s0 1.788-1.887 1.788h-9.193v6.983c0 1.837 0 1.837-1.937 1.837s-1.941 0-1.941-1.837zM32.533 19.092H17.346c-1.987 0-1.987 0-1.987 1.82 0 1.821 0 1.788 1.987 1.788h5.665v6.437l3.857-3.025V22.7h5.665c1.954 0 1.954 0 1.954-1.788 0-1.787 0-1.82-1.954-1.82z" fill="#4b5168"/><path d="M23.01 32.87v6.15c0 1.838 0 1.838 1.938 1.838 1.937 0 1.92 0 1.92-1.87v-9.142l-3.857 3.025z" fill="#f6914d"/><path d="M147.463 19.092h15.187c1.987 0 1.987 0 1.987 1.82 0 1.821 0 1.788-1.987 1.788h-5.665v6.437l-3.857-3.025V22.7h-5.665c-1.954 0-1.954 0-1.954-1.788 0-1.787.004-1.82 1.954-1.82z" fill="#4b5168"/><path d="M156.99 32.87v6.15c0 1.838 0 1.838-1.938 1.838-1.937 0-1.92 0-1.92-1.87v-9.142l3.857 3.025z" fill="#f6914d"/></g></svg>
<svg viewBox="0 0 180 60" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path fill="#fff" d="M0 0h180v60H0z"/><g fill-rule="nonzero"><path d="M39.98 2.528c-.986 0-1.777.796-1.777 1.781 0 .324.087.627.238.888l18.6 38.156 6.966-17.195L53.047 3.61a1.783 1.783 0 00-1.566-1.08H39.979z" fill="#3386aa"/><path d="M74.781 2.53c-.77 0-1.424.482-1.674 1.166L57.039 43.354l6.33 13.01c.294.656.905 1.107 1.65 1.107.73 0 1.366-.38 1.716-1.177l20.67-51.241c.094-.23.166-.479.166-.745 0-.986-.797-1.772-1.781-1.779H74.78z" fill="#2ac2ba"/><path d="M89.969 55.009a1.795 1.795 0 001.656 2.463l11.005-.002c.742 0 1.379-.458 1.647-1.102l.003-.002 20.718-51.39a1.782 1.782 0 00-1.652-2.447h-11.011a1.77 1.77 0 00-1.665 1.148L89.969 55.009z" fill="#ec1e79"/><path d="M64.006 26.16l-1.763-3.629-5.204 20.823.63-1.554 6.337-15.64z" fill="#276680"/><path d="M89.873 56.02v-.002l-.009-.05v-.002a1.844 1.844 0 01-.022-.225v-.008c0-.018 0-.035-.002-.053v-.008c0-.236.047-.458.13-.664 1.946-4.833 7.794-19.328 7.794-19.328l.07-.175L87.52 3.88l.01.044c.002.015.006.03.009.044v.001l.008.044v.001l.006.044v.001l.006.045v.001l.005.045v.002l.002.045c.001.024.003.048.003.073v.065c0 .047-.004.094-.01.141 0 .016-.003.03-.005.046-.001.016-.004.03-.007.046l-.008.045v.002l-.01.043v.002l-.01.042v.003a.29.29 0 01-.011.04l-.001.006a.303.303 0 01-.011.039l-.002.007-.011.037-.003.009c-.004.01-.006.022-.01.034l-.005.013a.2.2 0 01-.011.03l-.006.016-.01.027-.008.022a.58.58 0 01-.025.061L79.586 24.43l10.322 31.74a2.272 2.272 0 01-.035-.15zm51.863-.782L125.07 3.863a1.776 1.776 0 01-.072 1.113L118.6 20.85l-1.445 3.584 10.333 31.786a1.79 1.79 0 001.701 1.25h10.838a1.777 1.777 0 001.71-2.233z" fill="#b1175b"/><path d="M118.86 29.685l-1.706-5.25 7.828-19.417-6.123 24.667zm-37.565 0l-1.707-5.25L87.42 5.02l-6.125 24.666zm14.83.581l1.709 5.24-7.831 19.417 6.122-24.657z" fill="#841245"/></g></svg>
---
name: Build docset
on:
push:
tags: ["*"]
workflow_dispatch:
env:
PIP_DISABLE_PIP_VERSION_CHECK: 1
PIP_NO_PYTHON_VERSION_WARNING: 1
permissions: # added using https://github.com/step-security/secure-workflows
contents: read
jobs:
docset:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@v1
with:
egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
- uses: actions/checkout@v3
with:
fetch-depth: 0 # get correct version
- uses: actions/setup-python@v4
with:
python-version: "3.10"
- run: pip install tox
- run: tox -e docset
- run: tar --exclude='.DS_Store' -cvzf structlog.tgz structlog.docset
- uses: actions/upload-artifact@v3
with:
name: docset
path: structlog.tgz
---
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
env:
FORCE_COLOR: "1" # Make tools pretty.
TOX_TESTENV_PASSENV: FORCE_COLOR
PIP_DISABLE_PIP_VERSION_CHECK: "1"
PIP_NO_PYTHON_VERSION_WARNING: "1"
SETUPTOOLS_SCM_PRETEND_VERSION: "1.0" # avoid warnings about shallow checkout
PYTHON_LATEST: "3.10"
permissions:
contents: read
jobs:
tests:
name: tox on ${{ matrix.python-version }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version:
- "3.7"
- "3.8"
- "3.9"
- "3.10"
- "~3.11.0-0"
steps:
- name: Harden Runner
uses: step-security/harden-runner@v1
with:
egress-policy: block
allowed-endpoints: >
api.github.com:443
files.pythonhosted.org:443
github.com:443
objects.githubusercontent.com:443
pypi.org:443
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- run: python -m pip install --upgrade wheel tox tox-gh-actions
- run: python -m tox
- name: Upload coverage data
uses: actions/upload-artifact@v3
with:
name: coverage-data
path: .coverage.*
if-no-files-found: ignore
coverage:
name: Combine & check coverage.
runs-on: ubuntu-latest
needs: tests
steps:
- name: Harden Runner
uses: step-security/harden-runner@v1
with:
egress-policy: block
allowed-endpoints: >
files.pythonhosted.org:443
github.com:443
pypi.org:443
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
# Use latest Python, so it understands all syntax.
python-version: ${{env.PYTHON_LATEST}}
- run: python -m pip install --upgrade coverage[toml]
- uses: actions/download-artifact@v3
with:
name: coverage-data
- name: Combine coverage & fail if it's <100%.
run: |
python -m coverage combine
python -m coverage html --skip-covered --skip-empty
# Report and write to summary.
python -m coverage report | sed 's/^/ /' >> $GITHUB_STEP_SUMMARY
# Report again and fail if under 100%.
python -m coverage report --fail-under=100
- name: Upload HTML report if check failed.
uses: actions/upload-artifact@v3
with:
name: html-report
path: htmlcov
if: ${{ failure() }}
mypy:
name: mypy on ${{ matrix.python-version }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version:
# mypy on 3.7 fails but there's nothing we can do about it
- "3.8"
- "3.9"
- "3.10"
- "~3.11.0-0"
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- run: python -m pip install --upgrade wheel tox
- run: python -m tox -e mypy
docs:
name: Build docs & run doctests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
# Keep in sync with tox.ini/docs & readthedocs.yml
python-version: "3.10"
- run: python -m pip install --upgrade wheel tox
- run: python -m tox -e docs
package:
name: Build & verify package
runs-on: ubuntu-latest
env:
SETUPTOOLS_SCM_PRETEND_VERSION: ""
steps:
- name: Harden Runner
uses: step-security/harden-runner@v1
with:
egress-policy: block
allowed-endpoints: >
files.pythonhosted.org:443
github.com:443
pypi.org:443
- uses: actions/checkout@v3
with:
fetch-depth: 0 # get correct version
- uses: hynek/build-and-inspect-python-package@v1
- run: python -m pip install hatch-fancy-pypi-readme
- run: python -m hatch_fancy_pypi_readme
install-dev:
name: Verify dev env
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
steps:
- name: Harden Runner
uses: step-security/harden-runner@v1
with:
egress-policy: block
allowed-endpoints: >
files.pythonhosted.org:443
github.com:443
pypi.org:443
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{env.PYTHON_LATEST}}
- run: python -m pip install -e .[dev]
- run: python -c 'import structlog; print(structlog.__version__)'
# Ensure everything required is passing for branch protection.
required-checks-pass:
if: always()
needs:
- coverage
- docs
- install-dev
- package
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@v1
with:
egress-policy: block
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
with:
jobs: ${{ toJSON(needs) }}
name: "CodeQL"
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
schedule:
- cron: "41 3 * * 6"
permissions:
contents: read
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: ["python"]
steps:
- name: Harden Runner
uses: step-security/harden-runner@v1
with:
egress-policy: block
allowed-endpoints: >
api.github.com:443
bootstrap.pypa.io:443
files.pythonhosted.org:443
github.com:443
pypi.org:443
- name: Checkout repository
uses: actions/checkout@v3
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
- name: Autobuild
uses: github/codeql-action/autobuild@v2
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
*.pyc
*.pyo
.DS_Store
.cache
.coverage*
.direnv
.envrc
.mypy_cache
.pytest_cache
.tox
.vscode
benchmarks
build
dist
docs/_build
htmlcov
tmp
structlog.docset
structlog.tgz
---
ci:
autoupdate_schedule: monthly
default_language_version:
python: python3.10
repos:
- repo: https://github.com/psf/black
rev: 19.10b0
rev: 22.10.0
hooks:
- id: black
language_version: python3.7
# override until resolved: https://github.com/psf/black/issues/402
files: \.pyi?$
types: []
- repo: https://gitlab.com/pycqa/flake8
rev: 3.7.9
- repo: https://github.com/asottile/pyupgrade
rev: v3.2.2
hooks:
- id: flake8
language_version: python3.7
exclude: docs/code_examples
- id: pyupgrade
args: [--py37-plus]
- repo: https://github.com/asottile/seed-isort-config
rev: v1.9.4
hooks:
- id: seed-isort-config
- repo: https://github.com/pre-commit/mirrors-isort
rev: v4.3.21
- repo: https://github.com/PyCQA/isort
rev: 5.10.1
hooks:
- id: isort
additional_dependencies: [toml]
language_version: python3.7
- repo: https://github.com/asottile/yesqa
rev: v1.4.0
hooks:
- id: yesqa
- repo: https://github.com/PyCQA/flake8
rev: 5.0.4
hooks:
- id: flake8
exclude: docs/code_examples
- repo: https://github.com/codespell-project/codespell
rev: v2.2.2
hooks:
- id: codespell
args: [-L, alog]
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.4.0
rev: v4.3.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: debug-statements
- id: check-toml
- id: check-yaml
---
python:
version: 3
pip_install: true
extra_requirements:
- docs
Authors
=======
``structlog`` is written and maintained by `Hynek Schlawack <https://hynek.me/>`_.
It’s inspired by previous work done by `Jean-Paul Calderone <https://as.ynchrono.us/>`_ and `David Reid <https://dreid.org/>`_.
The development is kindly supported by `Variomedia AG <https://www.variomedia.de/>`_.
A full list of contributors can be found on GitHub’s `overview <https://github.com/hynek/structlog/graphs/contributors>`_.
Some of them disapprove of the addition of thread local context data. :)
The ``structlog`` logo has been contributed by `Russell Keith-Magee <https://github.com/freakboy3742>`_.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment