Subject: CVS commit: pkgsrc/devel/py-test
From: Thomas Klausner
Date: 2022-02-15 17:05:42
Message id: 20220215160542.9F614FB24@cvs.NetBSD.org

Log Message:
py-test: update to 7.0.1.

pytest 7.0.1 (2022-02-11)

Bug Fixes

    #9608: Fix invalid importing of importlib.readers in Python
    3.9.

    #9610: Restore UnitTestFunction.obj to return unbound rather
    than bound method. Fixes a crash during a failed teardown in
    unittest TestCases with non-default __init__. Regressed in
    pytest 7.0.0.

    #9636: The pythonpath plugin was renamed to python_path. This
    avoids a conflict with the pytest-pythonpath plugin.

    #9642: Fix running tests by id with :: in the parametrize
    portion.

    #9643: Delay issuing a PytestWarning about diamond inheritance
    involving Item and Collector so it can be filtered using standard
    warning filters.

pytest 7.0.0 (2022-02-03)

(Please see the full set of changes for this release also in the
7.0.0rc1 notes below) Deprecations

    #9488: If custom subclasses of nodes like pytest.Item override
    the __init__ method, they should take **kwargs. See Constructors
    of custom pytest.Node subclasses should take **kwargs for
    details.

    Note that a deprection warning is only emitted when there is
    a conflict in the arguments pytest expected to pass. This
    deprecation was already part of pytest 7.0.0rc1 but wasn’t
    documented.

Bug Fixes

    #9355: Fixed error message prints function decorators when
    using assert in Python 3.8 and above.

    #9396: Ensure pytest.Config.inifile is available during the
    pytest_cmdline_main hook (regression during 7.0.0rc1).

Improved Documentation

    #9404: Added extra documentation on alternatives to common
    misuses of pytest.warns(None) ahead of its deprecation.

    #9505: Clarify where the configuration files are located. To
    avoid confusions documentation mentions that configuration file
    is located in the root of the repository.

pytest 7.0.0rc1 (2021-12-06)

Breaking Changes

    #7259: The Node.reportinfo() function first return value type
    has been expanded from py.path.local | str to os.PathLike[str]
    | str.

    Most plugins which refer to reportinfo() only define it as part
    of a custom pytest.Item implementation. Since py.path.local is
    a os.PathLike[str], these plugins are unaffacted.

    Plugins and users which call reportinfo(), use the first return
    value and interact with it as a py.path.local, would need to
    adjust by calling py.path.local(fspath). Although preferably,
    avoid the legacy py.path.local and use pathlib.Path, or use
    item.location or item.path, instead.

    Note: pytest was not able to provide a deprecation period for
    this change.

    #8246: --version now writes version information to stdout rather
    than stderr.

    #8733: Drop a workaround for pyreadline that made it work with
    --pdb.

    The workaround was introduced in #1281 in 2015, however since
    then pyreadline seems to have gone unmaintained, is generating
    warnings, and will stop working on Python 3.10.

    #9061: Using pytest.approx() in a boolean context now raises
    an error hinting at the proper usage.

    It is apparently common for users to mistakenly use pytest.approx
    like this:

    assert pytest.approx(actual, expected)

    While the correct usage is:

    assert actual == pytest.approx(expected)

    The new error message helps catch those mistakes.

    #9277: The pytest.Instance collector type has been removed.
    Importing pytest.Instance or _pytest.python.Instance returns
    a dummy type and emits a deprecation warning. See The
    pytest.Instance collector for details.

    #9308: PytestRemovedIn7Warning deprecation warnings are now
    errors by default.

    Following our plan to remove deprecated features with as little
    disruption as possible, all warnings of type PytestRemovedIn7Warning
    now generate errors instead of warning messages by default.

    The affected features will be effectively removed in pytest
    7.1, so please consult the Deprecations and Removals section
    in the docs for directions on how to update existing code.

    In the pytest 7.0.X series, it is possible to change the errors
    back into warnings as a stopgap measure by adding this to your
    pytest.ini file:

    [pytest] filterwarnings =
	ignore::pytest.PytestRemovedIn7Warning

    But this will stop working when pytest 7.1 is released.

    If you have concerns about the removal of a specific feature,
    please add a comment to issue #9308.

Deprecations

    #7259: py.path.local arguments for hooks have been deprecated.
    See the deprecation note for full details.

    py.path.local arguments to Node constructors have been deprecated.
    See the deprecation note for full details.

    Note

    The name of the Node arguments and attributes (the new attribute
    being path) is the opposite of the situation for hooks (the
    old argument being path).

    This is an unfortunate artifact due to historical reasons,
    which should be resolved in future versions as we slowly get
    rid of the py dependency (see issue #9283 for a longer discussion).

    #7469: Directly constructing the following classes is now
    deprecated:

	_pytest.mark.structures.Mark

	_pytest.mark.structures.MarkDecorator

	_pytest.mark.structures.MarkGenerator

	_pytest.python.Metafunc

	_pytest.runner.CallInfo

	_pytest._code.ExceptionInfo

	_pytest.config.argparsing.Parser

	_pytest.config.argparsing.OptionGroup

	_pytest.pytester.HookRecorder

    These constructors have always been considered private, but
    now issue a deprecation warning, which may become a hard error
    in pytest 8.

    #8242: Raising unittest.SkipTest to skip collection of tests
    during the pytest collection phase is deprecated. Use pytest.skip()
    instead.

    Note: This deprecation only relates to using unittest.SkipTest
    during test collection. You are probably not doing that. Ordinary
    usage of unittest.SkipTest / unittest.TestCase.skipTest() /
    unittest.skip() in unittest test cases is fully supported.

    #8315: Several behaviors of Parser.addoption are now scheduled
    for removal in pytest 8 (deprecated since pytest 2.4.0):

	parser.addoption(..., help=".. %default ..") - use %(default)s
	instead.

	parser.addoption(..., type="int/string/float/complex") -
	use type=int etc. instead.

    #8447: Defining a custom pytest node type which is both an
    pytest.Item and a pytest.Collector (e.g. pytest.File) now issues
    a warning. It was never sanely supported and triggers hard to
    debug errors.

    See the deprecation note for full details.

    #8592: pytest_cmdline_preparse has been officially deprecated.
    It will be removed in a future release. Use
    pytest_load_initial_conftests instead.

    See the deprecation note for full details.

    #8645: pytest.warns(None) is now deprecated because many people
    used it to mean “this code does not emit warnings”, but it
    actually had the effect of checking that the code emits at
    least one warning of any type - like pytest.warns() or
    pytest.warns(Warning).

    #8948: pytest.skip(msg=...), pytest.fail(msg=...) and
    pytest.exit(msg=...) signatures now accept a reason argument
    instead of msg. Using msg still works, but is deprecated and
    will be removed in a future release.

    This was changed for consistency with pytest.mark.skip and
    pytest.mark.xfail which both accept reason as an argument.

    #8174: The following changes have been made to types reachable
    through pytest.ExceptionInfo.traceback:

	The path property of _pytest.code.Code returns Path instead
	of py.path.local.

	The path property of _pytest.code.TracebackEntry returns
	Path instead of py.path.local.

    There was no deprecation period for this change (sorry!).

Features

    #5196: Tests are now ordered by definition order in more cases.

    In a class hierarchy, tests from base classes are now consistently
    ordered before tests defined on their subclasses (reverse MRO
    order).

    #7132: Added two environment variables PYTEST_THEME and
    PYTEST_THEME_MODE to let the users customize the pygments theme
    used.

    #7259: Added cache.mkdir(), which is similar to the existing
    cache.makedir(), but returns a pathlib.Path instead of a legacy
    py.path.local.

    Added a paths type to parser.addini(), as in parser.addini("mypaths",
    "my paths", type="paths"), which is similar to the existing
    pathlist, but returns a list of pathlib.Path instead of legacy
    py.path.local.

    #7469: The types of objects used in pytest’s API are now exported
    so they may be used in type annotations.

    The newly-exported types are:

	pytest.Config for Config.

	pytest.Mark for marks.

	pytest.MarkDecorator for mark decorators.

	pytest.MarkGenerator for the pytest.mark singleton.

	pytest.Metafunc for the metafunc argument to the
	pytest_generate_tests hook.

	pytest.CallInfo for the CallInfo type passed to various
	hooks.

	pytest.PytestPluginManager for PytestPluginManager.

	pytest.ExceptionInfo for the ExceptionInfo type returned
	from pytest.raises() and passed to various hooks.

	pytest.Parser for the Parser type passed to the pytest_addoption
	hook.

	pytest.OptionGroup for the OptionGroup type returned from
	the parser.addgroup method.

	pytest.HookRecorder for the HookRecorder type returned from
	Pytester.

	pytest.RecordedHookCall for the RecordedHookCall type
	returned from HookRecorder.

	pytest.RunResult for the RunResult type returned from
	Pytester.

	pytest.LineMatcher for the LineMatcher type used in RunResult
	and others.

	pytest.TestReport for the TestReport type used in various
	hooks.

	pytest.CollectReport for the CollectReport type used in
	various hooks.

    Constructing most of them directly is not supported; they are
    only meant for use in type annotations. Doing so will emit a
    deprecation warning, and may become a hard-error in pytest 8.0.

    Subclassing them is also not supported. This is not currently
    enforced at runtime, but is detected by type-checkers such as
    mypy.

    #7856: –import-mode=importlib now works with features that
    depend on modules being on sys.modules, such as pickle and
    dataclasses.

    #8144: The following hooks now receive an additional pathlib.Path
    argument, equivalent to an existing py.path.local argument:

	pytest_ignore_collect - The collection_path parameter
	(equivalent to existing path parameter).

	pytest_collect_file - The file_path parameter (equivalent
	to existing path parameter).

	pytest_pycollect_makemodule - The module_path parameter
	(equivalent to existing path parameter).

	pytest_report_header - The start_path parameter (equivalent
	to existing startdir parameter).

	pytest_report_collectionfinish - The start_path parameter
	(equivalent to existing startdir parameter).

    Note

    The name of the Node arguments and attributes (the new attribute
    being path) is the opposite of the situation for hooks (the
    old argument being path).

    This is an unfortunate artifact due to historical reasons,
    which should be resolved in future versions as we slowly get
    rid of the py dependency (see issue #9283 for a longer discussion).

    #8251: Implement Node.path as a pathlib.Path. Both the old
    fspath and this new attribute gets set no matter whether path
    or fspath (deprecated) is passed to the constructor. It is a
    replacement for the fspath attribute (which represents the same
    path as py.path.local). While fspath is not deprecated yet due
    to the ongoing migration of methods like reportinfo(), we expect
    to deprecate it in a future release.

    Note

    The name of the Node arguments and attributes (the new attribute
    being path) is the opposite of the situation for hooks (the
    old argument being path).

    This is an unfortunate artifact due to historical reasons,
    which should be resolved in future versions as we slowly get
    rid of the py dependency (see issue #9283 for a longer discussion).

    #8421: pytest.approx() now works on Decimal within mappings/dicts
    and sequences/lists.

    #8606: pytest invocations with --fixtures-per-test and --fixtures
    have been enriched with:

	Fixture location path printed with the fixture name.

	First section of the fixture’s docstring printed under the
	fixture name.

	Whole of fixture’s docstring printed under the fixture name
	using --verbose option.

    #8761: New pytest.version_tuple attribute, which makes it
    simpler for users to do something depending on the pytest
    version (such as declaring hooks which are introduced in later
    versions).

    #8789: Switch TOML parser from toml to tomli for TOML v1.0.0
    support in pyproject.toml.

    #8920: Added pytest.Stash, a facility for plugins to store
    their data on Config and Nodes in a type-safe and conflict-free
    manner. See Storing data on items across hook functions for
    details.

    #8953: RunResult method assert_outcomes now accepts a warnings
    argument to assert the total number of warnings captured.

    #8954: --debug flag now accepts a str file to route debug logs
    into, remains defaulted to pytestdebug.log.

    #9023: Full diffs are now always shown for equality assertions
    of iterables when CI or BUILD_NUMBER is found in the environment,
    even when -v isn’t used.

    #9113: RunResult method assert_outcomes now accepts a deselected
    argument to assert the total number of deselected tests.

    #9114: Added pythonpath setting that adds listed paths to
    sys.path for the duration of the test session. If you currently
    use the pytest-pythonpath or pytest-srcpaths plugins, you should
    be able to replace them with built-in pythonpath setting.

Improvements

    #7480: A deprecation scheduled to be removed in a major version
    X (e.g. pytest 7, 8, 9, …) now uses warning category
    PytestRemovedInXWarning, a subclass of PytestDeprecationWarning,
    instead of PytestDeprecationWarning directly.

    See Backwards Compatibility Policy for more details.

    #7864: Improved error messages when parsing warning filters.

    Previously pytest would show an internal traceback, which
    besides being ugly sometimes would hide the cause of the problem
    (for example an ImportError while importing a specific warning
    type).

    #8335: Improved pytest.approx() assertion messages for sequences
    of numbers.

    The assertion messages now dumps a table with the index and
    the error of each diff. Example:

    >       assert [1, 2, 3, 4] == pytest.approx([1, 3, 3, 5]) E
    assert comparison failed for 2 values:  E         Index |
    Obtained | Expected E         1     | 2        | 3 +- 3.0e-06
    E         3     | 4        | 5 +- 5.0e-06

    #8403: By default, pytest will truncate long strings in assert
    errors so they don’t clutter the output too much, currently at
    240 characters by default.

    However, in some cases the longer output helps, or is even
    crucial, to diagnose a failure. Using -v will now increase the
    truncation threshold to 2400 characters, and -vv or higher will
    disable truncation entirely.

    #8509: Fixed issue where unittest.TestCase.setUpClass() is not
    called when a test has / in its name since pytest 6.2.0.

    This refers to the path part in pytest node IDs, e.g.
    TestClass::test_it in the node ID
    tests/test_file.py::TestClass::test_it.

    Now, instead of assuming that the test name does not contain
    /, it is assumed that test path does not contain ::. We plan
    to hopefully make both of these work in the future.

    #8803: It is now possible to add colors to custom log levels
    on cli log.

    By using add_color_level from a pytest_configure hook, colors
    can be added:

    logging_plugin = config.pluginmanager.get_plugin('logging-plugin')
    logging_plugin.log_cli_handler.formatter.add_color_level(logging.INFO,
    'cyan')
    logging_plugin.log_cli_handler.formatter.add_color_level(logging.SPAM,
    'blue')

    See Customizing Colors for more information.

    #8822: When showing fixture paths in --fixtures or --fixtures-by-test,
    fixtures coming from pytest itself now display an elided path,
    rather than the full path to the file in the site-packages
    directory.

    #8898: Complex numbers are now treated like floats and integers
    when generating parameterization IDs.

    #9062: --stepwise-skip now implicitly enables --stepwise and
    can be used on its own.

    #9205: pytest.Cache.set() now preserves key order when saving
    dicts.

Files:
RevisionActionfile
1.106modifypkgsrc/devel/py-test/Makefile
1.21modifypkgsrc/devel/py-test/PLIST
1.93modifypkgsrc/devel/py-test/distinfo