microproduct/atmosphericDelay/ISCEApp/site-packages/hypothesis/entry_points.py

72 lines
2.5 KiB
Python

# This file is part of Hypothesis, which may be found at
# https://github.com/HypothesisWorks/hypothesis/
#
# Most of this work is copyright (C) 2013-2021 David R. MacIver
# (david@drmaciver.com), but it contains contributions by others. See
# CONTRIBUTING.rst for a full list of people who may hold copyright, and
# consult the git log if you need to determine who owns an individual
# contribution.
#
# This Source Code Form is subject to the terms of the Mozilla Public License,
# v. 2.0. If a copy of the MPL was not distributed with this file, You can
# obtain one at https://mozilla.org/MPL/2.0/.
#
# END HEADER
"""Run all functions registered for the "hypothesis" entry point.
This can be used with `st.register_type_strategy` to register strategies for your
custom types, running the relevant code when *hypothesis* is imported instead of
your package.
"""
try:
# We prefer to use importlib.metadata, or the backport on Python <= 3.7,
# because it's much faster than pkg_resources (200ms import time speedup).
try:
from importlib import metadata as importlib_metadata
except ImportError:
import importlib_metadata # type: ignore # mypy thinks this is a redefinition
def get_entry_points():
try:
eps = importlib_metadata.entry_points(group="hypothesis")
except TypeError:
# Load-time selection requires Python >= 3.10 or importlib_metadata >= 3.6,
# so we'll retain this fallback logic for some time to come. See also
# https://importlib-metadata.readthedocs.io/en/latest/using.html
eps = importlib_metadata.entry_points().get("hypothesis", [])
yield from eps
except ImportError:
# But if we're not on Python >= 3.8 and the importlib_metadata backport
# is not installed, we fall back to pkg_resources anyway.
try:
import pkg_resources
except ImportError:
import warnings
from hypothesis.errors import HypothesisWarning
warnings.warn(
"Under Python <= 3.7, Hypothesis requires either the importlib_metadata "
"or setuptools package in order to load plugins via entrypoints.",
HypothesisWarning,
)
def get_entry_points():
yield from ()
else:
def get_entry_points():
yield from pkg_resources.iter_entry_points("hypothesis")
def run():
for entry in get_entry_points(): # pragma: no cover
hook = entry.load()
if callable(hook):
hook()