pax_global_header 0000666 0000000 0000000 00000000064 14554151257 0014523 g ustar 00root root 0000000 0000000 52 comment=2efd28ef5dcd8b7ad44a41777ce640debbbf9c39
pluggy-1.4.0/ 0000775 0000000 0000000 00000000000 14554151257 0013034 5 ustar 00root root 0000000 0000000 pluggy-1.4.0/.coveragerc 0000664 0000000 0000000 00000001033 14554151257 0015152 0 ustar 00root root 0000000 0000000 [run]
include =
pluggy/*
testing/*
*/lib/python*/site-packages/pluggy/*
*/pypy*/site-packages/pluggy/*
*\Lib\site-packages\pluggy\*
branch = 1
[paths]
source = pluggy/
*/lib/python*/site-packages/pluggy/
*/pypy*/site-packages/pluggy/
*\Lib\site-packages\pluggy\
[report]
exclude_lines =
# Have to re-enable the standard pragma
pragma: no cover
if TYPE_CHECKING:
if False:
if __name__ == .__main__.:
raise NotImplementedError
# Ignore coverage on lines solely with `...`
^\s*\.\.\.\s*$
pluggy-1.4.0/.github/ 0000775 0000000 0000000 00000000000 14554151257 0014374 5 ustar 00root root 0000000 0000000 pluggy-1.4.0/.github/workflows/ 0000775 0000000 0000000 00000000000 14554151257 0016431 5 ustar 00root root 0000000 0000000 pluggy-1.4.0/.github/workflows/main.yml 0000664 0000000 0000000 00000007051 14554151257 0020103 0 ustar 00root root 0000000 0000000 name: main
on:
push:
branches:
- main
tags:
- "*"
pull_request:
branches:
- main
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
name: [
"windows-py38",
"windows-py311",
"windows-pypy3",
"ubuntu-py38-pytestmain",
"ubuntu-py38",
"ubuntu-py39",
"ubuntu-py310",
"ubuntu-py311",
"ubuntu-py312",
"ubuntu-pypy3",
"ubuntu-benchmark",
]
include:
- name: "windows-py38"
python: "3.8"
os: windows-latest
tox_env: "py38"
- name: "windows-py311"
python: "3.10"
os: windows-latest
tox_env: "py311"
- name: "windows-pypy3"
python: "pypy3.9"
os: windows-latest
tox_env: "pypy3"
- name: "ubuntu-py38"
python: "3.8"
os: ubuntu-latest
tox_env: "py38"
use_coverage: true
- name: "ubuntu-py38-pytestmain"
python: "3.8"
os: ubuntu-latest
tox_env: "py38-pytestmain"
use_coverage: true
- name: "ubuntu-py39"
python: "3.9"
os: ubuntu-latest
tox_env: "py39"
use_coverage: true
- name: "ubuntu-py310"
python: "3.10"
os: ubuntu-latest
tox_env: "py310"
- name: "ubuntu-py311"
python: "3.11"
os: ubuntu-latest
tox_env: "py311"
use_coverage: true
- name: "ubuntu-py312"
python: "3.12-dev"
os: ubuntu-latest
tox_env: "py312"
use_coverage: true
- name: "ubuntu-pypy3"
python: "pypy3.9"
os: ubuntu-latest
tox_env: "pypy3"
use_coverage: true
- name: "ubuntu-benchmark"
python: "3.8"
os: ubuntu-latest
tox_env: "benchmark"
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip setuptools
python -m pip install tox coverage
- name: Test without coverage
if: "! matrix.use_coverage"
run: "tox -e ${{ matrix.tox_env }}"
- name: Test with coverage
if: "matrix.use_coverage"
run: "tox -e ${{ matrix.tox_env }}-coverage"
- name: Upload coverage
if: matrix.use_coverage && github.repository == 'pytest-dev/pluggy'
env:
CODECOV_NAME: ${{ matrix.name }}
run: bash scripts/upload-coverage.sh -F GHA,${{ runner.os }}
deploy:
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') && github.repository == 'pytest-dev/pluggy'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install --upgrade build
- name: Build package
run: python -m build --sdist --wheel --outdir dist/
- name: Publish package
uses: pypa/gh-action-pypi-publish@v1.8.6
with:
user: __token__
password: ${{ secrets.pypi_token }}
pluggy-1.4.0/.gitignore 0000664 0000000 0000000 00000001564 14554151257 0015032 0 ustar 00root root 0000000 0000000 # Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
.mypy_cache/
nosetests.xml
coverage.xml
*,cover
# Translations
*.mo
*.pot
# Django stuff:
*.log
# Sphinx documentation
docs/_build/
docs/_changelog_towncrier_draft.rst
# PyBuilder
target/
*.swp
# generated by setuptools_scm
src/pluggy/_version.py
# generated by pip
pip-wheel-metadata/
# pytest-benchmark
.benchmarks/
pluggy-1.4.0/.pre-commit-config.yaml 0000664 0000000 0000000 00000003101 14554151257 0017310 0 ustar 00root root 0000000 0000000 repos:
- repo: https://github.com/PyCQA/autoflake
rev: v2.2.1
hooks:
- id: autoflake
name: autoflake
args: ["--in-place", "--remove-unused-variables", "--remove-all-unused-imports"]
language: python
files: \.py$
- repo: https://github.com/asottile/reorder-python-imports
rev: v3.12.0
hooks:
- id: reorder-python-imports
args: ['--application-directories=.:src', --py38-plus]
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.1.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: flake8
additional_dependencies: [flake8-typing-imports]
- repo: https://github.com/pre-commit/pygrep-hooks
rev: v1.10.0
hooks:
- id: rst-backticks
- repo: https://github.com/asottile/pyupgrade
rev: v3.15.0
hooks:
- id: pyupgrade
args: [--py38-plus]
- repo: https://github.com/psf/black
rev: 23.12.1
hooks:
- id: black
args: [--safe, --quiet]
- repo: https://github.com/asottile/blacken-docs
rev: 1.16.0
hooks:
- id: blacken-docs
additional_dependencies: [black==22.10.0]
- repo: local
hooks:
- id: rst
name: rst
entry: rst-lint --encoding utf-8
files: ^(HOWTORELEASE.rst|README.rst)$
language: python
additional_dependencies: [pygments, restructuredtext_lint]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.8.0
hooks:
- id: mypy
files: ^(src/|testing/)
args: []
additional_dependencies: [pytest]
pluggy-1.4.0/.readthedocs.yml 0000664 0000000 0000000 00000000335 14554151257 0016123 0 ustar 00root root 0000000 0000000 version: 2
python:
install:
# Without this, sphinx can't find pluggy's version.
- method: pip
path: .
- requirements: docs/requirements.txt
build:
os: ubuntu-22.04
tools:
python: "3.11"
pluggy-1.4.0/CHANGELOG.rst 0000664 0000000 0000000 00000046123 14554151257 0015063 0 ustar 00root root 0000000 0000000 =========
Changelog
=========
Versions follow `Semantic Versioning `_ (``..``).
..
You should *NOT* be adding new change log entries to this file, this
file is managed by towncrier. You *may* edit previous change logs to
fix problems like typo corrections or such.
To add a new change log entry, please see
https://pip.pypa.io/en/latest/development/contributing/#news-entries
we named the news folder changelog
.. only:: changelog_towncrier_draft
.. The 'changelog_towncrier_draft' tag is included by our 'tox -e docs',
but not on readthedocs.
.. include:: _changelog_towncrier_draft.rst
.. towncrier release notes start
pluggy 1.4.0 (2024-01-24)
=========================
Features
--------
- `#463 `_: A warning :class:`~pluggy.PluggyTeardownRaisedWarning` is now issued when an old-style hookwrapper raises an exception during teardown.
See the warning documentation for more details.
- `#471 `_: Add :func:`PluginManager.unblock ` method to unblock a plugin by plugin name.
Bug Fixes
---------
- `#441 `_: Fix :func:`~pluggy.HookCaller.call_extra()` extra methods getting ordered before everything else in some circumstances. Regressed in pluggy 1.1.0.
- `#438 `_: Fix plugins registering other plugins in a hook when the other plugins implement the same hook itself. Regressed in pluggy 1.1.0.
pluggy 1.3.0 (2023-08-26)
=========================
Deprecations and Removals
-------------------------
- `#426 `_: Python 3.7 is no longer supported.
Features
--------
- `#428 `_: Pluggy now exposes its typings to static type checkers.
As part of this, the following changes are made:
- Renamed ``_Result`` to ``Result``, and exported as :class:`pluggy.Result`.
- Renamed ``_HookRelay`` to ``HookRelay``, and exported as :class:`pluggy.HookRelay`.
- Renamed ``_HookCaller`` to ``HookCaller``, and exported as :class:`pluggy.HookCaller`.
- Exported ``HookImpl`` as :class:`pluggy.HookImpl`.
- Renamed ``_HookImplOpts`` to ``HookimplOpts``, and exported as :class:`pluggy.HookimplOpts`.
- Renamed ``_HookSpecOpts`` to ``HookspecOpts``, and exported as :class:`pluggy.HookspecOpts`.
- Some fields and classes are marked ``Final`` and ``@final``.
- The :ref:`api-reference` is updated to clearly delineate pluggy's public API.
Compatibility aliases are put in place for the renamed types.
We do not plan to remove the aliases, but we strongly recommend to only import from ``pluggy.*`` to ensure future compatibility.
Please note that pluggy is currently unable to provide strong typing for hook calls, e.g. ``pm.hook.my_hook(...)``,
nor to statically check that a hook implementation matches the hook specification's type.
pluggy 1.2.0 (2023-06-21)
=========================
Features
--------
- `#405 `_: The new-style hook wrappers, added in the yanked 1.1.0 release, now require an explicit ``wrapper=True`` designation in the ``@hookimpl()`` decorator.
pluggy 1.1.0 (YANKED)
=====================
.. note::
This release was yanked because unfortunately the implicit new-style hook wrappers broke some downstream projects.
See `#403 `__ for more information.
This was rectified in the 1.2.0 release.
Deprecations and Removals
-------------------------
- `#364 `_: Python 3.6 is no longer supported.
Features
--------
- `#260 `_: Added "new-style" hook wrappers, a simpler but equally powerful alternative to the existing ``hookwrapper=True`` wrappers.
New-style wrappers are generator functions, similarly to ``hookwrapper``, but do away with the :class:`result ` object.
Instead, the return value is sent directly to the ``yield`` statement, or, if inner calls raised an exception, it is raised from the ``yield``.
The wrapper is expected to return a value or raise an exception, which will become the result of the hook call.
New-style wrappers are fully interoperable with old-style wrappers.
We encourage users to use the new style, however we do not intend to deprecate the old style any time soon.
See :ref:`hookwrappers` for the full documentation.
- `#364 `_: Python 3.11 and 3.12 are now officially supported.
- `#394 `_: Added the :meth:`~pluggy.Result.force_exception` method to ``_Result``.
``force_exception`` allows (old-style) hookwrappers to force an exception or override/adjust an existing exception of a hook invocation,
in a properly behaving manner. Using ``force_exception`` is preferred over raising an exception from the hookwrapper,
because raising an exception causes other hookwrappers to be skipped.
pluggy 1.0.0 (2021-08-25)
=========================
Deprecations and Removals
-------------------------
- `#116 `_: Remove deprecated ``implprefix`` support.
Decorate hook implementations using an instance of HookimplMarker instead.
The deprecation was announced in release ``0.7.0``.
- `#120 `_: Remove the deprecated ``proc`` argument to ``call_historic``.
Use ``result_callback`` instead, which has the same behavior.
The deprecation was announced in release ``0.7.0``.
- `#265 `_: Remove the ``_Result.result`` property. Use ``_Result.get_result()`` instead.
Note that unlike ``result``, ``get_result()`` raises the exception if the hook raised.
The deprecation was announced in release ``0.6.0``.
- `#267 `_: Remove official support for Python 3.4.
- `#272 `_: Dropped support for Python 2.
Continue to use pluggy 0.13.x for Python 2 support.
- `#308 `_: Remove official support for Python 3.5.
- `#313 `_: The internal ``pluggy.callers``, ``pluggy.manager`` and ``pluggy.hooks`` are now explicitly marked private by a ``_`` prefix (e.g. ``pluggy._callers``).
Only API exported by the top-level ``pluggy`` module is considered public.
- `#59 `_: Remove legacy ``__multicall__`` recursive hook calling system.
The deprecation was announced in release ``0.5.0``.
Features
--------
- `#282 `_: When registering a hookimpl which is declared as ``hookwrapper=True`` but whose
function is not a generator function, a :class:`~pluggy.PluginValidationError` exception is
now raised.
Previously this problem would cause an error only later, when calling the hook.
In the unlikely case that you have a hookwrapper that *returns* a generator
instead of yielding directly, for example:
.. code-block:: python
def my_hook_implementation(arg):
print("before")
yield
print("after")
@hookimpl(hookwrapper=True)
def my_hook(arg):
return my_hook_implementation(arg)
change it to use ``yield from`` instead:
.. code-block:: python
@hookimpl(hookwrapper=True)
def my_hook(arg):
yield from my_hook_implementation(arg)
- `#309 `_: Add official support for Python 3.9.
- `#251 `_: Add ``specname`` option to ``@hookimpl``. If ``specname`` is provided, it will be used
instead of the function name when matching this hook implementation to a hook specification during registration (allowing a plugin to register
a hook implementation that was not named the same thing as the corresponding ``@hookspec``).
pluggy 0.13.1 (2019-11-21)
==========================
Trivial/Internal Changes
------------------------
- `#236 `_: Improved documentation, especially with regard to references.
pluggy 0.13.0 (2019-09-10)
==========================
Trivial/Internal Changes
------------------------
- `#222 `_: Replace ``importlib_metadata`` backport with ``importlib.metadata`` from the
standard library on Python 3.8+.
pluggy 0.12.0 (2019-05-27)
==========================
Features
--------
- `#215 `_: Switch from ``pkg_resources`` to ``importlib-metadata`` for entrypoint detection for improved performance and import time. This time with ``.egg`` support.
pluggy 0.11.0 (2019-05-07)
==========================
Bug Fixes
---------
- `#205 `_: Revert changes made in 0.10.0 release breaking ``.egg`` installs.
pluggy 0.10.0 (2019-05-07)
==========================
Features
--------
- `#199 `_: Switch from ``pkg_resources`` to ``importlib-metadata`` for entrypoint detection for improved performance and import time.
pluggy 0.9.0 (2019-02-21)
=========================
Features
--------
- `#189 `_: ``PluginManager.load_setuptools_entrypoints`` now accepts a ``name`` parameter that when given will
load only entry points with that name.
``PluginManager.load_setuptools_entrypoints`` also now returns the number of plugins loaded by the
call, as opposed to the number of all plugins loaded by all calls to this method.
Bug Fixes
---------
- `#187 `_: Fix internal ``varnames`` function for PyPy3.
pluggy 0.8.1 (2018-11-09)
=========================
Trivial/Internal Changes
------------------------
- `#166 `_: Add ``stacklevel=2`` to implprefix warning so that the reported location of warning is the caller of PluginManager.
pluggy 0.8.0 (2018-10-15)
=========================
Features
--------
- `#177 `_: Add ``get_hookimpls()`` method to hook callers.
Trivial/Internal Changes
------------------------
- `#165 `_: Add changelog in long package description and documentation.
- `#172 `_: Add a test exemplifying the opt-in nature of spec defined args.
- `#57 `_: Encapsulate hook specifications in a type for easier introspection.
pluggy 0.7.1 (2018-07-28)
=========================
Deprecations and Removals
-------------------------
- `#116 `_: Deprecate the ``implprefix`` kwarg to ``PluginManager`` and instead
expect users to start using explicit ``HookimplMarker`` everywhere.
Features
--------
- `#122 `_: Add ``.plugin`` member to ``PluginValidationError`` to access failing plugin during post-mortem.
- `#138 `_: Add per implementation warnings support for hookspecs allowing for both
deprecation and future warnings of legacy and (future) experimental hooks
respectively.
Bug Fixes
---------
- `#110 `_: Fix a bug where ``_HookCaller.call_historic()`` would call the ``proc``
arg even when the default is ``None`` resulting in a ``TypeError``.
- `#160 `_: Fix problem when handling ``VersionConflict`` errors when loading setuptools plugins.
Improved Documentation
----------------------
- `#123 `_: Document how exceptions are handled and how the hook call loop
terminates immediately on the first error which is then delivered
to any surrounding wrappers.
- `#136 `_: Docs rework including a much better introduction and comprehensive example
set for new users. A big thanks goes out to @obestwalter for the great work!
Trivial/Internal Changes
------------------------
- `#117 `_: Break up the main monolithic package modules into separate modules by concern
- `#131 `_: Automate ``setuptools`` wheels building and PyPi upload using TravisCI.
- `#153 `_: Reorganize tests more appropriately by modules relating to each
internal component/feature. This is in an effort to avoid (future)
duplication and better separation of concerns in the test set.
- `#156 `_: Add ``HookImpl.__repr__()`` for better debugging.
- `#66 `_: Start using ``towncrier`` and a custom ``tox`` environment to prepare releases!
pluggy 0.7.0 (Unreleased)
=========================
* `#160 `_: We discovered a deployment issue so this version was never released to PyPI, only the tag exists.
pluggy 0.6.0 (2017-11-24)
=========================
- Add CI testing for the features, release, and master
branches of ``pytest`` (PR `#79`_).
- Document public API for ``_Result`` objects passed to wrappers
(PR `#85`_).
- Document and test hook LIFO ordering (PR `#85`_).
- Turn warnings into errors in test suite (PR `#89`_).
- Deprecate ``_Result.result`` (PR `#88`_).
- Convert ``_Multicall`` to a simple function distinguishing it from
the legacy version (PR `#90`_).
- Resolve E741 errors (PR `#96`_).
- Test and bug fix for unmarked hook collection (PRs `#97`_ and
`#102`_).
- Drop support for EOL Python 2.6 and 3.3 (PR `#103`_).
- Fix ``inspect`` based arg introspection on py3.6 (PR `#94`_).
.. _#79: https://github.com/pytest-dev/pluggy/pull/79
.. _#85: https://github.com/pytest-dev/pluggy/pull/85
.. _#88: https://github.com/pytest-dev/pluggy/pull/88
.. _#89: https://github.com/pytest-dev/pluggy/pull/89
.. _#90: https://github.com/pytest-dev/pluggy/pull/90
.. _#94: https://github.com/pytest-dev/pluggy/pull/94
.. _#96: https://github.com/pytest-dev/pluggy/pull/96
.. _#97: https://github.com/pytest-dev/pluggy/pull/97
.. _#102: https://github.com/pytest-dev/pluggy/pull/102
.. _#103: https://github.com/pytest-dev/pluggy/pull/103
pluggy 0.5.2 (2017-09-06)
=========================
- fix bug where ``firstresult`` wrappers were being sent an incorrectly configured
``_Result`` (a list was set instead of a single value). Add tests to check for
this as well as ``_Result.force_result()`` behaviour. Thanks to `@tgoodlet`_
for the PR `#72`_.
- fix incorrect ``getattr`` of ``DeprecationWarning`` from the ``warnings``
module. Thanks to `@nicoddemus`_ for the PR `#77`_.
- hide ``pytest`` tracebacks in certain core routines. Thanks to
`@nicoddemus`_ for the PR `#80`_.
.. _#72: https://github.com/pytest-dev/pluggy/pull/72
.. _#77: https://github.com/pytest-dev/pluggy/pull/77
.. _#80: https://github.com/pytest-dev/pluggy/pull/80
pluggy 0.5.1 (2017-08-29)
=========================
- fix a bug and add tests for case where ``firstresult`` hooks return
``None`` results. Thanks to `@RonnyPfannschmidt`_ and `@tgoodlet`_
for the issue (`#68`_) and PR (`#69`_) respectively.
.. _#69: https://github.com/pytest-dev/pluggy/pull/69
.. _#68: https://github.com/pytest-dev/pluggy/issues/68
pluggy 0.5.0 (2017-08-28)
=========================
- fix bug where callbacks for historic hooks would not be called for
already registered plugins. Thanks `@vodik`_ for the PR
and `@hpk42`_ for further fixes.
- fix `#17`_ by considering only actual functions for hooks
this removes the ability to register arbitrary callable objects
which at first glance is a reasonable simplification,
thanks `@RonnyPfannschmidt`_ for report and pr.
- fix `#19`_: allow registering hookspecs from instances. The PR from
`@tgoodlet`_ also modernized the varnames implementation.
- resolve `#32`_: split up the test set into multiple modules.
Thanks to `@RonnyPfannschmidt`_ for the PR and `@tgoodlet`_ for
the initial request.
- resolve `#14`_: add full sphinx docs. Thanks to `@tgoodlet`_ for
PR `#39`_.
- add hook call mismatch warnings. Thanks to `@tgoodlet`_ for the
PR `#42`_.
- resolve `#44`_: move to new-style classes. Thanks to `@MichalTHEDUDE`_
for PR `#46`_.
- add baseline benchmarking/speed tests using ``pytest-benchmark``
in PR `#54`_. Thanks to `@tgoodlet`_.
- update the README to showcase the API. Thanks to `@tgoodlet`_ for the
issue and PR `#55`_.
- deprecate ``__multicall__`` and add a faster call loop implementation.
Thanks to `@tgoodlet`_ for PR `#58`_.
- raise a comprehensible error when a ``hookimpl`` is called with positional
args. Thanks to `@RonnyPfannschmidt`_ for the issue and `@tgoodlet`_ for
PR `#60`_.
- fix the ``firstresult`` test making it more complete
and remove a duplicate of that test. Thanks to `@tgoodlet`_
for PR `#62`_.
.. _#62: https://github.com/pytest-dev/pluggy/pull/62
.. _#60: https://github.com/pytest-dev/pluggy/pull/60
.. _#58: https://github.com/pytest-dev/pluggy/pull/58
.. _#55: https://github.com/pytest-dev/pluggy/pull/55
.. _#54: https://github.com/pytest-dev/pluggy/pull/54
.. _#46: https://github.com/pytest-dev/pluggy/pull/46
.. _#44: https://github.com/pytest-dev/pluggy/issues/44
.. _#42: https://github.com/pytest-dev/pluggy/pull/42
.. _#39: https://github.com/pytest-dev/pluggy/pull/39
.. _#32: https://github.com/pytest-dev/pluggy/pull/32
.. _#19: https://github.com/pytest-dev/pluggy/issues/19
.. _#17: https://github.com/pytest-dev/pluggy/issues/17
.. _#14: https://github.com/pytest-dev/pluggy/issues/14
pluggy 0.4.0 (2016-09-25)
=========================
- add ``has_plugin(name)`` method to pluginmanager. thanks `@nicoddemus`_.
- fix `#11`_: make plugin parsing more resilient against exceptions
from ``__getattr__`` functions. Thanks `@nicoddemus`_.
- fix issue `#4`_: specific ``HookCallError`` exception for when a hook call
provides not enough arguments.
- better error message when loading setuptools entrypoints fails
due to a ``VersionConflict``. Thanks `@blueyed`_.
.. _#11: https://github.com/pytest-dev/pluggy/issues/11
.. _#4: https://github.com/pytest-dev/pluggy/issues/4
pluggy 0.3.1 (2015-09-17)
=========================
- avoid using deprecated-in-python3.5 getargspec method. Thanks
`@mdboom`_.
pluggy 0.3.0 (2015-05-07)
=========================
initial release
.. contributors
.. _@hpk42: https://github.com/hpk42
.. _@tgoodlet: https://github.com/goodboy
.. _@MichalTHEDUDE: https://github.com/MichalTHEDUDE
.. _@vodik: https://github.com/vodik
.. _@RonnyPfannschmidt: https://github.com/RonnyPfannschmidt
.. _@blueyed: https://github.com/blueyed
.. _@nicoddemus: https://github.com/nicoddemus
.. _@mdboom: https://github.com/mdboom
pluggy-1.4.0/LICENSE 0000664 0000000 0000000 00000002126 14554151257 0014042 0 ustar 00root root 0000000 0000000 The MIT License (MIT)
Copyright (c) 2015 holger krekel (rather uses bitbucket/hpk42)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
pluggy-1.4.0/MANIFEST.in 0000664 0000000 0000000 00000000204 14554151257 0014566 0 ustar 00root root 0000000 0000000 include CHANGELOG
include README.rst
include setup.py
include tox.ini
include LICENSE
graft testing
recursive-exclude * *.pyc *.pyo
pluggy-1.4.0/README.rst 0000664 0000000 0000000 00000005413 14554151257 0014526 0 ustar 00root root 0000000 0000000 ====================================================
pluggy - A minimalist production ready plugin system
====================================================
|pypi| |conda-forge| |versions| |github-actions| |gitter| |black| |codecov|
This is the core framework used by the `pytest`_, `tox`_, and `devpi`_ projects.
Please `read the docs`_ to learn more!
A definitive example
====================
.. code-block:: python
import pluggy
hookspec = pluggy.HookspecMarker("myproject")
hookimpl = pluggy.HookimplMarker("myproject")
class MySpec:
"""A hook specification namespace."""
@hookspec
def myhook(self, arg1, arg2):
"""My special little hook that you can customize."""
class Plugin_1:
"""A hook implementation namespace."""
@hookimpl
def myhook(self, arg1, arg2):
print("inside Plugin_1.myhook()")
return arg1 + arg2
class Plugin_2:
"""A 2nd hook implementation namespace."""
@hookimpl
def myhook(self, arg1, arg2):
print("inside Plugin_2.myhook()")
return arg1 - arg2
# create a manager and add the spec
pm = pluggy.PluginManager("myproject")
pm.add_hookspecs(MySpec)
# register plugins
pm.register(Plugin_1())
pm.register(Plugin_2())
# call our ``myhook`` hook
results = pm.hook.myhook(arg1=1, arg2=2)
print(results)
Running this directly gets us::
$ python docs/examples/toy-example.py
inside Plugin_2.myhook()
inside Plugin_1.myhook()
[-1, 3]
.. badges
.. |pypi| image:: https://img.shields.io/pypi/v/pluggy.svg
:target: https://pypi.org/pypi/pluggy
.. |versions| image:: https://img.shields.io/pypi/pyversions/pluggy.svg
:target: https://pypi.org/pypi/pluggy
.. |github-actions| image:: https://github.com/pytest-dev/pluggy/workflows/main/badge.svg
:target: https://github.com/pytest-dev/pluggy/actions
.. |conda-forge| image:: https://img.shields.io/conda/vn/conda-forge/pluggy.svg
:target: https://anaconda.org/conda-forge/pytest
.. |gitter| image:: https://badges.gitter.im/pytest-dev/pluggy.svg
:alt: Join the chat at https://gitter.im/pytest-dev/pluggy
:target: https://gitter.im/pytest-dev/pluggy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
.. |black| image:: https://img.shields.io/badge/code%20style-black-000000.svg
:target: https://github.com/ambv/black
.. |codecov| image:: https://codecov.io/gh/pytest-dev/pluggy/branch/master/graph/badge.svg
:target: https://codecov.io/gh/pytest-dev/pluggy
:alt: Code coverage Status
.. links
.. _pytest:
http://pytest.org
.. _tox:
https://tox.readthedocs.org
.. _devpi:
http://doc.devpi.net
.. _read the docs:
https://pluggy.readthedocs.io/en/latest/
pluggy-1.4.0/RELEASING.rst 0000664 0000000 0000000 00000001527 14554151257 0015104 0 ustar 00root root 0000000 0000000 Release Procedure
-----------------
#. Dependening on the magnitude of the changes in the release, consider testing
some of the large downstream users of pluggy against the upcoming release.
You can do so using the scripts in the ``downstream/`` directory.
#. From a clean work tree, execute::
tox -e release -- VERSION
This will create the branch ready to be pushed.
#. Open a PR targeting ``main``.
#. All tests must pass and the PR must be approved by at least another maintainer.
#. Publish to PyPI by pushing a tag::
git tag X.Y.Z release-X.Y.Z
git push git@github.com:pytest-dev/pluggy.git X.Y.Z
The tag will trigger a new build, which will deploy to PyPI.
#. Make sure it is `available on PyPI `_.
#. Merge the PR into ``main``, either manually or using GitHub's web interface.
pluggy-1.4.0/changelog/ 0000775 0000000 0000000 00000000000 14554151257 0014763 5 ustar 00root root 0000000 0000000 pluggy-1.4.0/changelog/README.rst 0000664 0000000 0000000 00000003176 14554151257 0016461 0 ustar 00root root 0000000 0000000 This directory contains "newsfragments" which are short files that contain a small **ReST**-formatted
text that will be added to the next ``CHANGELOG``.
The ``CHANGELOG`` will be read by users, so this description should be aimed to pytest users
instead of describing internal changes which are only relevant to the developers.
Make sure to use full sentences with correct case and punctuation, for example::
Fix issue with non-ascii messages from the ``warnings`` module.
Each file should be named like ``..rst``, where
```` is an issue number, and ```` is one of:
* ``feature``: new user facing features, like new command-line options and new behavior.
* ``bugfix``: fixes a reported bug.
* ``doc``: documentation improvement, like rewording an entire session or adding missing docs.
* ``removal``: feature deprecation or removal.
* ``vendor``: changes in packages vendored in pytest.
* ``trivial``: fixing a small typo or internal change that might be noteworthy.
So for example: ``123.feature.rst``, ``456.bugfix.rst``.
If your PR fixes an issue, use that number here. If there is no issue,
then after you submit the PR and get the PR number you can add a
changelog using that instead.
If you are not sure what issue type to use, don't hesitate to ask in your PR.
``towncrier`` preserves multiple paragraphs and formatting (code blocks, lists, and so on), but for entries
other than ``features`` it is usually better to stick to a single paragraph to keep it concise. You can install
``towncrier`` and then run ``towncrier --draft``
if you want to get a preview of how your change will look in the final release notes.
pluggy-1.4.0/changelog/_template.rst 0000664 0000000 0000000 00000001653 14554151257 0017474 0 ustar 00root root 0000000 0000000 {% for section in sections %}
{% set underline = "-" %}
{% if section %}
{{section}}
{{ underline * section|length }}{% set underline = "~" %}
{% endif %}
{% if sections[section] %}
{% for category, val in definitions.items() if category in sections[section] %}
{{ definitions[category]['name'] }}
{{ underline * definitions[category]['name']|length }}
{% if definitions[category]['showcontent'] %}
{% for text, values in sections[section][category]|dictsort(by='value') %}
{% set issue_joiner = joiner(', ') %}
- {% for value in values|sort %}{{ issue_joiner() }}`{{ value }} `_{% endfor %}: {{ text }}
{% endfor %}
{% else %}
- {{ sections[section][category]['']|sort|join(', ') }}
{% endif %}
{% if sections[section][category]|length == 0 %}
No significant changes.
{% else %}
{% endif %}
{% endfor %}
{% else %}
No significant changes.
{% endif %}
{% endfor %}
pluggy-1.4.0/codecov.yml 0000664 0000000 0000000 00000000126 14554151257 0015200 0 ustar 00root root 0000000 0000000 coverage:
status:
project: true
patch: true
changes: true
comment: off
pluggy-1.4.0/docs/ 0000775 0000000 0000000 00000000000 14554151257 0013764 5 ustar 00root root 0000000 0000000 pluggy-1.4.0/docs/_static/ 0000775 0000000 0000000 00000000000 14554151257 0015412 5 ustar 00root root 0000000 0000000 pluggy-1.4.0/docs/_static/img/ 0000775 0000000 0000000 00000000000 14554151257 0016166 5 ustar 00root root 0000000 0000000 pluggy-1.4.0/docs/_static/img/plug.png 0000664 0000000 0000000 00000022206 14554151257 0017645 0 ustar 00root root 0000000 0000000 PNG
IHDR sBIT|d IDATxmlkwǠuΩ!A&Ds{PB4A
a#'ZE-ĕH"U>$$̓%vqym`&q~A{Yfggvv#Y<\kIi @ p Bp Tf 'JH,3\Id^W^[F\ U"t 4a Ps\9px w%9.چݲqB˹y^|ve^{7W$VNMM}c|˺ZZkͨ{ݿB#be}'wݎZlp\ֵ
ɲN綆J݂^L8zc:y.y]F\6r?9~/tĺ
s(tNͺ߭Fn/-!,xjj] H$F\LMMY>䓥u5pe~~CsEbU@3GԺŰC`.say>Gk1r+hԺNjp}EV|v9M)J2N^W;^~7p0H$h9?uڼ}:U}:B/Ф_pr)5}7KSblj]۴ۗeKYl
܆Ïbf~8ݿ
JIv@x1 Bp T! p
#. * @
P Bp T! \ U. * @
P Bp T! \ U. * @
P Bp T! \ U. * @
P Bp T! \ U. * @
P Bp T! \ U. * @
P Bp T! \ U. * @
P Bp T! \ U. * @
P Bp T! \ U. * @
P Bp T! \ U. * @
P Bp T! \ U. * @
P Bp T! \ U. l||\ɤtwwK__LMM+̙3^dѢEH$$(H:N.ԩS) 8R]]-K.+Wʜ9sL\pႴˎ;$J.(XLdݺu2c \CvZ7]JI̟?_:::t)+@w}222b]vM8FpCZgF^PvxĄ]6%"222"kUd\МӲ/ P!ǩSEm[XL^}UZQqytvvVLhR)4]P#.zwާZyf@YcXH&Z"_6$Ie .Bww.B__.4]`,.Q% SSS244$'N'NʧTdxxX>s/B&''%J ͢({\e̙3r{G}$}}}ryeqWt颼ay77ߒ?tI P.RO_~Y~H \
ݻe߾}ri *Wz{{vȡC8 E"o?/K .3l&