[PR #79] [MERGED] Initial Update #119

Closed
opened 2026-02-26 01:33:17 +03:00 by kerem · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/jeffknupp/sandman2/pull/79
Author: @pyup-bot
Created: 1/9/2019
Status: Merged
Merged: 1/9/2019
Merged by: @jeffknupp

Base: masterHead: pyup-initial-update


📝 Commits (9)

  • 3bd4407 Update flask-admin from 1.4.2 to 1.5.3
  • 9db9bfa Update flask-sqlalchemy from 2.1 to 2.3.2
  • 852008e Update sqlalchemy from 1.2.12 to 1.2.15
  • 6c4c3bb Update wtforms from 2.1 to 2.2.1
  • ad0bbb4 Update coverage from 4.1 to 4.5.2
  • 5ff6372 Update pytest from 2.9.2 to 4.1.0
  • fbf23ca Update pytest-cov from 2.3.0 to 2.6.1
  • 336bd5f Update pytest-flask from 0.10.0 to 0.14.0
  • 6052009 Update flask-httpauth from 3.1.2 to 3.2.4

📊 Changes

1 file changed (+9 additions, -9 deletions)

View changed files

📝 requirements.txt (+9 -9)

📄 Description

This PR sets up pyup.io on this repo and updates all dependencies at once, in a single branch.

Subsequent pull requests will update one dependency at a time, each in their own branch. If you want to start with that right away, simply close this PR.

Update Flask-Admin from 1.4.2 to 1.5.3.

Changelog

1.5.3

-----

* Fixed XSS vulnerability
* Support nested categories in the navbar menu
* SQLAlchemy
 * sort on multiple columns with `column_default_sort`
 * sort on related models in `column_sortable_list`
 * fix: inline model forms can now also be used for models with multiple primary keys
 * support for using mapped `column_property`
* Upgrade Leaflet and Leaflet.draw plugins, used for geoalchemy integration
* Specify `minimum_input_length` for ajax widget
* Peewee: support composite keys
* MongoEngine: when searching/filtering the input is now regarded as case-insensitive by default
* FileAdmin
 * handle special characters in filename
 * fix a bug with listing directories on Windows
 * avoid raising an exception when unknown sort parameter is encountered
* WTForms 3 support

1.5.2

-----

* Fixed XSS vulnerability
* Fixed Peewee support
* Added detail view column formatters
* Updated Flask-Login example to work with the newer version of the library
* Various SQLAlchemy-related fixes
* Various Windows related fixes for the file admin

1.5.1

-----

* Dropped Python 2.6 support
* Fixed SQLAlchemy >= 1.2 compatibility
* Fixed Pewee 3.0 compatibility
* Fixed max year for a combo date inline editor
* Lots of small bug fixes

1.5.0

-----

* Fixed CSRF generation logic for multi-process deployments
* Added WTForms >= 3.0 support
* Flask-Admin would not recursively save inline models, allowing arbitrary nesting
* Added configuration properties that allow injection of additional CSS and JS dependencies into templates without overriding them
* SQLAlchemy backend
- Updated hybrid property detection using new SQLAlchemy APIs
- Added support for association proxies
- Added support for remote hybrid properties filters
- Added support for ARRAY column type
* Localization-related fixes
* MongoEngine backend is now properly formats model labels
* Improved Google App Engine support:
- Added TextProperty, KeyProperty and SelectField support
- Added support for form_args, excluded_columns, page_size and after_model_update
* Fixed URL generation with localized named filters
* FileAdmin has Bootstrap 2 support now
* Geoalchemy fixes
- Use Google Places (by default) for place search
* Updated translations
* Bug fixes
Links

Update Flask-SQLAlchemy from 2.1 to 2.3.2.

Changelog

2.3.2

-------------

Released on October 11, 2017

- Don't mask the parent table for single-table inheritance models. (`561`_)

.. _561: https://github.com/mitsuhiko/flask-sqlalchemy/pull/561

2.3.1

-------------

Released on October 5, 2017

- If a model has a table name that matches an existing table in the metadata,
use that table. Fixes a regression where reflected tables were not picked up
by models. (`551`_)
- Raise the correct error when a model has a table name but no primary key.
(`556`_)
- Fix ``repr`` on models that don't have an identity because they have not been
flushed yet. (`555`_)
- Allow specifying a ``max_per_page`` limit for pagination, to avoid users
specifying high values in the request args. (`542`_)
- For ``paginate`` with ``error_out=False``, the minimum value for ``page`` is
1 and ``per_page`` is 0. (`558`_)

.. _542: https://github.com/mitsuhiko/flask-sqlalchemy/pull/542
.. _551: https://github.com/mitsuhiko/flask-sqlalchemy/pull/551
.. _555: https://github.com/mitsuhiko/flask-sqlalchemy/pull/555
.. _556: https://github.com/mitsuhiko/flask-sqlalchemy/pull/556
.. _558: https://github.com/mitsuhiko/flask-sqlalchemy/pull/558

2.3.0

-------------

Released on September 28, 2017

- Multiple bugs with ``__tablename__`` generation are fixed. Names will be
generated for models that define a primary key, but not for single-table
inheritance subclasses. Names will not override a ``declared_attr``.
``PrimaryKeyConstraint`` is detected. (`541`_)
- Passing an existing ``declarative_base()`` as ``model_class`` to
``SQLAlchemy.__init__`` will use this as the base class instead of creating
one. This allows customizing the metaclass used to construct the base.
(`546`_)
- The undocumented ``DeclarativeMeta`` internals that the extension uses for
binds and table name generation have been refactored to work as mixins.
Documentation is added about how to create a custom metaclass that does not
do table name generation. (`546`_)
- Model and metaclass code has been moved to a new ``models`` module.
``_BoundDeclarativeMeta`` is renamed to ``DefaultMeta``; the old name will be
removed in 3.0. (`546`_)
- Models have a default ``repr`` that shows the model name and primary key.
(`530`_)
- Fixed a bug where using ``init_app`` would cause connectors to always use the
``current_app`` rather than the app they were created for. This caused issues
when multiple apps were registered with the extension. (`547`_)

.. _530: https://github.com/mitsuhiko/flask-sqlalchemy/pull/530
.. _541: https://github.com/mitsuhiko/flask-sqlalchemy/pull/541
.. _546: https://github.com/mitsuhiko/flask-sqlalchemy/pull/546
.. _547: https://github.com/mitsuhiko/flask-sqlalchemy/pull/547

2.2

-----------

Released on February 27, 2017, codename Dubnium

- Minimum SQLAlchemy version is 0.8 due to use of ``sqlalchemy.inspect``.
- Added support for custom ``query_class`` and ``model_class`` as args
to the ``SQLAlchemy`` constructor. (`328`_)
- Allow listening to SQLAlchemy events on ``db.session``. (`364`_)
- Allow ``__bind_key__`` on abstract models. (`373`_)
- Allow ``SQLALCHEMY_ECHO`` to be a string. (`409`_)
- Warn when ``SQLALCHEMY_DATABASE_URI`` is not set. (`443`_)
- Don't let pagination generate invalid page numbers. (`460`_)
- Drop support of Flask < 0.10. This means the db session is always tied to
the app context and its teardown event. (`461`_)
- Tablename generation logic no longer accesses class properties unless they
are ``declared_attr``. (`467`_)

.. _328: https://github.com/mitsuhiko/flask-sqlalchemy/pull/328
.. _364: https://github.com/mitsuhiko/flask-sqlalchemy/pull/364
.. _373: https://github.com/mitsuhiko/flask-sqlalchemy/pull/373
.. _409: https://github.com/mitsuhiko/flask-sqlalchemy/pull/409
.. _443: https://github.com/mitsuhiko/flask-sqlalchemy/pull/443
.. _460: https://github.com/mitsuhiko/flask-sqlalchemy/pull/460
.. _461: https://github.com/mitsuhiko/flask-sqlalchemy/pull/461
.. _467: https://github.com/mitsuhiko/flask-sqlalchemy/pull/467
Links

Update SQLAlchemy from 1.2.12 to 1.2.15.

Changelog

1.2.15

:released: December 11, 2018

 .. change::
     :tags: bug, orm
     :tickets: 4367

     Fixed bug where the ORM annotations could be incorrect for the
     primaryjoin/secondaryjoin a relationship if one used the pattern
     ``ForeignKey(SomeClass.id)`` in the declarative mappings.   This pattern
     would leak undesired annotations into the join conditions which can break
     aliasing operations done within :class:`.Query` that are not supposed to
     impact elements in that join condition.  These annotations are now removed
     up front if present.

 .. change::
    :tags: bug, orm, declarative
    :tickets: 4374

    A warning is emitted in the case that a :func:`.column` object is applied to
    a declarative class, as it seems likely this intended to be a
    :class:`.Column` object.

 .. change::
     :tags: bug, orm
     :tickets: 4366

     In continuing with a similar theme as that of very recent :ticket:`4349`,
     repaired issue with :meth:`.RelationshipProperty.Comparator.any` and
     :meth:`.RelationshipProperty.Comparator.has` where the "secondary"
     selectable needs to be explicitly part of the FROM clause in the
     EXISTS subquery to suit the case where this "secondary" is a :class:`.Join`
     object.

 .. change::
     :tags: bug, orm
     :tickets: 4363

     Fixed regression caused by :ticket:`4349` where adding the "secondary"
     table to the FROM clause for a dynamic loader would affect the ability of
     the :class:`.Query` to make a subsequent join to another entity.   The fix
     adds the primary entity as the first element of the FROM list since
     :meth:`.Query.join` wants to jump from that.   Version 1.3 will have
     a more comprehensive solution to this problem as well (:ticket:`4365`).




 .. change::
    :tags: bug, orm
    :tickests: 4400

    Fixed bug where chaining of mapper options using
    :meth:`.RelationshipProperty.of_type` in conjunction with a chained option
    that refers to an attribute name by string only would fail to locate the
    attribute.

 .. change::
     :tag: feature, mysql
     :tickets: 4381

     Added support for the ``write_timeout`` flag accepted by mysqlclient and
     pymysql to  be passed in the URL string.

 .. change::
    :tag: bug, postgresql
    :tickets: 4377, 4380

    Fixed issue where reflection of a PostgreSQL domain that is expressed as an
    array would fail to be recognized.  Pull request courtesy Jakub Synowiec.


.. changelog::

1.2.14

:released: November 10, 2018

 .. change::
    :tags: bug, orm
    :tickets: 4357

    Fixed bug in :meth:`.Session.bulk_update_mappings` where alternate mapped
    attribute names would result in the primary key column of the UPDATE
    statement being included in the SET clause, as well as the WHERE clause;
    while usually harmless, for SQL Server this can raise an error due to the
    IDENTITY column.  This is a continuation of the same bug that was fixed in
    :ticket:`3849`, where testing was insufficient to catch this additional
    flaw.

 .. change::
     :tags: bug, mysql
     :tickets: 4361

     Fixed regression caused by :ticket:`4344` released in 1.2.13, where the fix
     for MySQL 8.0's case sensitivity problem with referenced column names when
     reflecting foreign key referents is worked around using the
     ``information_schema.columns`` view.  The workaround was failing on OSX /
     ``lower_case_table_names=2`` which produces non-matching casing for the
     ``information_schema.columns`` vs. that of ``SHOW CREATE TABLE``, so in
     case-insensitive SQL modes case-insensitive matching is now used.

 .. change::
    :tags: bug, orm
    :tickets: 4347

    Fixed a minor performance issue which could in some cases add unnecessary
    overhead to result fetching, involving the use of ORM columns and entities
    that include those same columns at the same time within a query.  The issue
    has to do with hash / eq overhead when referring to the column in different
    ways.

.. changelog::

1.2.13

:released: October 31, 2018

 .. change::
    :tags: bug, postgresql
    :tickets: 4337

    Added support for the :class:`.aggregate_order_by` function to receive
    multiple ORDER BY elements, previously only a single element was accepted.


 .. change::
    :tags: bug, mysql
    :tickets: 4348

    Added word ``function`` to the list of reserved words for MySQL, which is
    now a keyword in MySQL 8.0

 .. change::
     :tags: feature, sql
     :versions: 1.3.0b1

     Refactored :class:`.SQLCompiler` to expose a
     :meth:`.SQLCompiler.group_by_clause` method similar to the
     :meth:`.SQLCompiler.order_by_clause` and :meth:`.SQLCompiler.limit_clause`
     methods, which can be overridden by dialects to customize how GROUP BY
     renders.  Pull request courtesy Samuel Chou.

 .. change::
    :tags: bug, misc

    Fixed issue where part of the utility language helper internals was passing
    the wrong kind of argument to the Python ``__import__`` builtin as the list
    of modules to be imported.  The issue produced no symptoms within the core
    library but could cause issues with external applications that redefine the
    ``__import__`` builtin or otherwise instrument it. Pull request courtesy Joe
    Urciuoli.

 .. change::
    :tags: bug, orm
    :tickets: 4349

    Fixed bug where "dynamic" loader needs to explicitly set the "secondary"
    table in the FROM clause of the query, to suit the case where the secondary
    is a join object that is otherwise not pulled into the query from its
    columns alone.


 .. change::
    :tags: bug, orm, declarative
    :tickets: 4350

    Fixed regression caused by :ticket:`4326` in version 1.2.12 where using
    :class:`.declared_attr` with a mixin in conjunction with
    :func:`.orm.synonym` would fail to map the synonym properly to an inherited
    subclass.

 .. change::
    :tags: bug, misc, py3k
    :tickets: 4339

    Fixed additional warnings generated by Python 3.7 due to changes in the
    organization of the Python ``collections`` and ``collections.abc`` packages.
    Previous ``collections`` warnings were fixed in version 1.2.11. Pull request
    courtesy xtreak.

 .. change::
    :tags: bug, ext

    Added missing ``.index()`` method to list-based association collections
    in the association proxy extension.

 .. change::
    :tags: bug, mysql
    :tickets: 4344

    Added a workaround for a MySQL bug 88718 introduced in the 8.0 series,
    where the reflection of a foreign key constraint is not reporting the
    correct case sensitivity for the referred column, leading to errors during
    use of the reflected constraint such as when using the automap extension.
    The workaround emits an additional query to the information_schema tables in
    order to retrieve the correct case sensitive name.

 .. change::
    :tags: bug, sql
    :tickets: 4341

    Fixed bug where the :paramref:`.Enum.create_constraint` flag on  the
    :class:`.Enum` datatype would not be propagated to copies of the type, which
    affects use cases such as declarative mixins and abstract bases.

 .. change::
    :tags: bug, orm, declarative
    :tickets: 4352

    The column conflict resolution technique discussed at
    :ref:`declarative_column_conflicts` is now functional for a :class:`.Column`
    that is also a primary key column.  Previously, a check for primary key
    columns declared on a single-inheritance subclass would occur before the
    column copy were allowed to pass.


.. changelog::
Links

Update WTForms from 2.1 to 2.2.1.

Changelog

2.2

-----------

Released June 2nd, 2018

-   Merged new and updated translations from the community.
-   Passing ``data_`` args to render a field converts all the
 underscores to hyphens when rendering the HTML attribute, not just
 the first one. ``data_foo_bar`` becomes ``data-foo-bar``. (`248`_)
-   The :class:`~validators.UUID` validator uses the :class:`uuid.UUID`
 class instead of a regex. (`251`_)
-   :class:`~fields.SelectField` copies the list of ``choices`` passed
 to it so modifying an instance's choices will not modify the global
 form definition. (`286`_)
-   Fields call :meth:`~fields.Field.process_formdata` even if the raw
 data is empty. This makes :class:`~fields.StringField` default to an
 empty string instead of ``None``. (`280`_)
-   Added a :class:`~fields.MultipleFileField` to handle a multi-file
 input. :class:`~fields.FileField` continues to handle only one
 value. The underlying :class:`~widgets.FileInput` widget gained a
 ``multiple`` argument. (`281`_)
-   :class:`~fields.SelectField` choices can contain HTML (MarkupSafe
 ``Markup`` object or equivalent API) and will be rendered properly.
 (`302`_)
-   :class:`~fields.TimeField` and
 :class:`html5.TimeField <fields.html5.TimeField>` were added.
 (`254`_)
-   Improved :class:`~validators.Email`. Note that it is still
 unreasonable to validate all emails with a regex and you should
 prefer validating by actually sending an email. (`294`_)
-   Widgets render the ``required`` attribute when using a validator
 that provides the ``'required'`` flag, such as
 :class:`~validators.DataRequired`. (`361`_)
-   Fix a compatibility issue with SQLAlchemy 2.1 that caused
 :class:`~ext.sqlalchemy.fields.QuerySelectField` to fail with
 ``ValueError: too many values to unpack``. (`391`_)

.. _248: https://github.com/wtforms/wtforms/pull/248
.. _251: https://github.com/wtforms/wtforms/pull/251
.. _254: https://github.com/wtforms/wtforms/pull/254
.. _280: https://github.com/wtforms/wtforms/pull/280
.. _281: https://github.com/wtforms/wtforms/pull/281
.. _286: https://github.com/wtforms/wtforms/pull/286
.. _294: https://github.com/wtforms/wtforms/pull/294
.. _302: https://github.com/wtforms/wtforms/pull/302
.. _361: https://github.com/wtforms/wtforms/pull/361
.. _391: https://github.com/wtforms/wtforms/pull/391
Links

Update coverage from 4.1 to 4.5.2.

Changelog

4.5.1

----------------------------

- Now that 4.5 properly separated the ``[run] omit`` and ``[report] omit``
settings, an old bug has become apparent.  If you specified a package name
for ``[run] source``, then omit patterns weren't matched inside that package.
This bug (`issue 638`_) is now fixed.

- On Python 3.7, reporting about a decorated function with no body other than a
docstring would crash coverage.py with an IndexError (`issue 640`_).  This is
now fixed.

- Configurer plugins are now reported in the output of ``--debug=sys``.

.. _issue 638: https://bitbucket.org/ned/coveragepy/issues/638/run-omit-is-ignored-since-45
.. _issue 640: https://bitbucket.org/ned/coveragepy/issues/640/indexerror-reporting-on-an-empty-decorated


.. _changes_45:

4.5

--------------------------

- A new kind of plugin is supported: configurators are invoked at start-up to
allow more complex configuration than the .coveragerc file can easily do.
See :ref:`api_plugin` for details.  This solves the complex configuration
problem described in `issue 563`_.

- The ``fail_under`` option can now be a float.  Note that you must specify the
``[report] precision`` configuration option for the fractional part to be
used.  Thanks to Lars Hupfeldt Nielsen for help with the implementation.
Fixes `issue 631`_.

- The ``include`` and ``omit`` options can be specified for both the ``[run]``
and ``[report]`` phases of execution.  4.4.2 introduced some incorrect
interactions between those phases, where the options for one were confused
for the other.  This is now corrected, fixing `issue 621`_ and `issue 622`_.
Thanks to Daniel Hahler for seeing more clearly than I could.

- The ``coverage combine`` command used to always overwrite the data file, even
when no data had been read from apparently combinable files.  Now, an error
is raised if we thought there were files to combine, but in fact none of them
could be used.  Fixes `issue 629`_.

- The ``coverage combine`` command could get confused about path separators
when combining data collected on Windows with data collected on Linux, as
described in `issue 618`_.  This is now fixed: the result path always uses
the path separator specified in the ``[paths]`` result.

- On Windows, the HTML report could fail when source trees are deeply nested,
due to attempting to create HTML filenames longer than the 250-character
maximum.  Now filenames will never get much larger than 200 characters,
fixing `issue 627`_.  Thanks to Alex Sandro for helping with the fix.

.. _issue 563: https://bitbucket.org/ned/coveragepy/issues/563/platform-specific-configuration
.. _issue 618: https://bitbucket.org/ned/coveragepy/issues/618/problem-when-combining-windows-generated
.. _issue 621: https://bitbucket.org/ned/coveragepy/issues/621/include-ignored-warning-when-using
.. _issue 622: https://bitbucket.org/ned/coveragepy/issues/622/report-omit-overwrites-run-omit
.. _issue 627: https://bitbucket.org/ned/coveragepy/issues/627/failure-generating-html-reports-when-the
.. _issue 629: https://bitbucket.org/ned/coveragepy/issues/629/multiple-use-of-combine-leads-to-empty
.. _issue 631: https://bitbucket.org/ned/coveragepy/issues/631/precise-coverage-percentage-value


.. _changes_442:

4.4.2

----------------------------

- Support for Python 3.7.  In some cases, class and module docstrings are no
longer counted in statement totals, which could slightly change your total
results.

- Specifying both ``--source`` and ``--include`` no longer silently ignores the
include setting, instead it displays a warning. Thanks, Loïc Dachary.  Closes
`issue 265`_ and `issue 101`_.

- Fixed a race condition when saving data and multiple threads are tracing
(`issue 581`_). It could produce a "dictionary changed size during iteration"
RuntimeError.  I believe this mostly but not entirely fixes the race
condition.  A true fix would likely be too expensive.  Thanks, Peter Baughman
for the debugging, and Olivier Grisel for the fix with tests.

- Configuration values which are file paths will now apply tilde-expansion,
closing `issue 589`_.

- Now secondary config files like tox.ini and setup.cfg can be specified
explicitly, and prefixed sections like `[coverage:run]` will be read. Fixes
`issue 588`_.

- Be more flexible about the command name displayed by help, fixing
`issue 600`_. Thanks, Ben Finney.

.. _issue 101: https://bitbucket.org/ned/coveragepy/issues/101/settings-under-report-affect-running
.. _issue 581: https://bitbucket.org/ned/coveragepy/issues/581/race-condition-when-saving-data-under
.. _issue 588: https://bitbucket.org/ned/coveragepy/issues/588/using-rcfile-path-to-toxini-uses-run
.. _issue 589: https://bitbucket.org/ned/coveragepy/issues/589/allow-expansion-in-coveragerc
.. _issue 600: https://bitbucket.org/ned/coveragepy/issues/600/get-program-name-from-command-line-when


.. _changes_441:

4.4.1

----------------------------

- No code changes: just corrected packaging for Python 2.7 Linux wheels.


.. _changes_44:

4.4

--------------------------

- Reports could produce the wrong file names for packages, reporting ``pkg.py``
instead of the correct ``pkg/__init__.py``.  This is now fixed.  Thanks, Dirk
Thomas.

- XML reports could produce ``<source>`` and ``<class>`` lines that together
didn't specify a valid source file path.  This is now fixed. (`issue 526`_)

- Namespace packages are no longer warned as having no code. (`issue 572`_)

- Code that uses ``sys.settrace(sys.gettrace())`` in a file that wasn't being
coverage-measured would prevent correct coverage measurement in following
code. An example of this was running doctests programmatically. This is now
fixed. (`issue 575`_)

- Errors printed by the ``coverage`` command now go to stderr instead of
stdout.

- Running ``coverage xml`` in a directory named with non-ASCII characters would
fail under Python 2. This is now fixed. (`issue 573`_)

.. _issue 526: https://bitbucket.org/ned/coveragepy/issues/526/generated-xml-invalid-paths-for-cobertura
.. _issue 572: https://bitbucket.org/ned/coveragepy/issues/572/no-python-source-warning-for-namespace
.. _issue 573: https://bitbucket.org/ned/coveragepy/issues/573/cant-generate-xml-report-if-some-source
.. _issue 575: https://bitbucket.org/ned/coveragepy/issues/575/running-doctest-prevents-complete-coverage

4.4b1

----------------------------

- Some warnings can now be individually disabled.  Warnings that can be
disabled have a short name appended.  The ``[run] disable_warnings`` setting
takes a list of these warning names to disable. Closes both `issue 96`_ and
`issue 355`_.

- The XML report now includes attributes from version 4 of the Cobertura XML
format, fixing `issue 570`_.

- In previous versions, calling a method that used collected data would prevent
further collection.  For example, `save()`, `report()`, `html_report()`, and
others would all stop collection.  An explicit `start()` was needed to get it
going again.  This is no longer true.  Now you can use the collected data and
also continue measurement. Both `issue 79`_ and `issue 448`_ described this
problem, and have been fixed.

- Plugins can now find unexecuted files if they choose, by implementing the
`find_executable_files` method.  Thanks, Emil Madsen.

- Minimal IronPython support. You should be able to run IronPython programs
under ``coverage run``, though you will still have to do the reporting phase
with CPython.

- Coverage.py has long had a special hack to support CPython's need to measure
the coverage of the standard library tests. This code was not installed by
kitted versions of coverage.py.  Now it is.

.. _issue 79: https://bitbucket.org/ned/coveragepy/issues/79/save-prevents-harvesting-on-stop
.. _issue 96: https://bitbucket.org/ned/coveragepy/issues/96/unhelpful-warnings-produced-when-using
.. _issue 355: https://bitbucket.org/ned/coveragepy/issues/355/warnings-should-be-suppressable
.. _issue 448: https://bitbucket.org/ned/coveragepy/issues/448/save-and-html_report-prevent-further
.. _issue 570: https://bitbucket.org/ned/coveragepy/issues/570/cobertura-coverage-04dtd-support


.. _changes_434:

4.3.4

----------------------------

- Fixing 2.6 in version 4.3.3 broke other things, because the too-tricky
exception wasn't properly derived from Exception, described in `issue 556`_.
A newb mistake; it hasn't been a good few days.

.. _issue 556: https://bitbucket.org/ned/coveragepy/issues/556/43-fails-if-there-are-html-files-in-the


.. _changes_433:

4.3.3

----------------------------

- Python 2.6 support was broken due to a testing exception imported for the
benefit of the coverage.py test suite.  Properly conditionalizing it fixed
`issue 554`_ so that Python 2.6 works again.

.. _issue 554: https://bitbucket.org/ned/coveragepy/issues/554/traceback-on-python-26-starting-with-432


.. _changes_432:

4.3.2

----------------------------

- Using the ``--skip-covered`` option on an HTML report with 100% coverage
would cause a "No data to report" error, as reported in `issue 549`_. This is
now fixed; thanks, Loïc Dachary.

- If-statements can be optimized away during compilation, for example, `if 0:`
or `if __debug__:`.  Coverage.py had problems properly understanding these
statements which existed in the source, but not in the compiled bytecode.
This problem, reported in `issue 522`_, is now fixed.

- If you specified ``--source`` as a directory, then coverage.py would look for
importable Python files in that directory, and could identify ones that had
never been executed at all.  But if you specified it as a package name, that
detection wasn't performed.  Now it is, closing `issue 426`_. Thanks to Loïc
Dachary for the fix.

- If you started and stopped coverage measurement thousands of times in your
process, you could crash Python with a "Fatal Python error: deallocating
None" error.  This is now fixed.  Thanks to Alex Groce for the bug report.

- On PyPy, measuring coverage in subprocesses could produce a warning: "Trace
function changed, measurement is likely wrong: None".  This was spurious, and
has been suppressed.

- Previously, coverage.py couldn't start on Jython, due to that implementation
missing the multiprocessing module (`issue 551`_). This problem has now been
fixed. Also, `issue 322`_ about not being able to invoke coverage
conveniently, seems much better: ``jython -m coverage run myprog.py`` works
properly.

- Let's say you ran the HTML report over and over again in the same output
directory, with ``--skip-covered``. And imagine due to your heroic
test-writing efforts, a file just achieved the goal of 100% coverage. With
coverage.py 4.3, the old HTML file with the less-than-100% coverage would be
left behind.  This file is now properly deleted.

.. _issue 322: https://bitbucket.org/ned/coveragepy/issues/322/cannot-use-coverage-with-jython
.. _issue 426: https://bitbucket.org/ned/coveragepy/issues/426/difference-between-coverage-results-with
.. _issue 522: https://bitbucket.org/ned/coveragepy/issues/522/incorrect-branch-reporting-with-__debug__
.. _issue 549: https://bitbucket.org/ned/coveragepy/issues/549/skip-covered-with-100-coverage-throws-a-no
.. _issue 551: https://bitbucket.org/ned/coveragepy/issues/551/coveragepy-cannot-be-imported-in-jython27


.. _changes_431:

4.3.1

----------------------------

- Some environments couldn't install 4.3, as described in `issue 540`_. This is
now fixed.

- The check for conflicting ``--source`` and ``--include`` was too simple in a
few different ways, breaking a few perfectly reasonable use cases, described
in `issue 541`_.  The check has been reverted while we re-think the fix for
`issue 265`_.

.. _issue 540: https://bitbucket.org/ned/coveragepy/issues/540/cant-install-coverage-v43-into-under
.. _issue 541: https://bitbucket.org/ned/coveragepy/issues/541/coverage-43-breaks-nosetest-with-coverage


.. _changes_43:

4.3

--------------------------

Special thanks to **Loïc Dachary**, who took an extraordinary interest in
coverage.py and contributed a number of improvements in this release.

- Subprocesses that are measured with `automatic subprocess measurement`_ used
to read in any pre-existing data file.  This meant data would be incorrectly
carried forward from run to run.  Now those files are not read, so each
subprocess only writes its own data. Fixes `issue 510`_.

- The ``coverage combine`` command will now fail if there are no data files to
combine. The combine changes in 4.2 meant that multiple combines could lose
data, leaving you with an empty .coverage data file. Fixes
`issue 525`_, `issue 412`_, `issue 516`_, and probably `issue 511`_.

- Coverage.py wouldn't execute `sys.excepthook`_ when an exception happened in
your program.  Now it does, thanks to Andrew Hoos.  Closes `issue 535`_.

- Branch coverage fixes:

- Branch coverage could misunderstand a finally clause on a try block that
 never continued on to the following statement, as described in `issue
 493`_.  This is now fixed. Thanks to Joe Doherty for the report and Loïc
 Dachary for the fix.

- A while loop with a constant condition (while True) and a continue
 statement would be mis-analyzed, as described in `issue 496`_. This is now
 fixed, thanks to a bug report by Eli Skeggs and a fix by Loïc Dachary.

- While loops with constant conditions that were never executed could result
 in a non-zero coverage report.  Artem Dayneko reported this in `issue
 502`_, and Loïc Dachary provided the fix.

- The HTML report now supports a ``--skip-covered`` option like the other
reporting commands.  Thanks, Loïc Dachary for the implementation, closing
`issue 433`_.

- Options can now be read from a tox.ini file, if any. Like setup.cfg, sections
are prefixed with "coverage:", so ``[run]`` options will be read from the
``[coverage:run]`` section of tox.ini. Implements part of `issue 519`_.
Thanks, Stephen Finucane.

- Specifying both ``--source`` and ``--include`` no longer silently ignores the
include setting, instead it fails with a message. Thanks, Nathan Land and
Loïc Dachary. Closes `issue 265`_.

- The ``Coverage.combine`` method has a new parameter, ``strict=False``, to
support failing if there are no data files to combine.

- When forking subprocesses, the coverage data files would have the same random
number appended to the file name. This didn't cause problems, because the
file names had the process id also, making collisions (nearly) impossible.
But it was disconcerting.  This is now fixed.

- The text report now properly sizes headers when skipping some files, fixing
`issue 524`_. Thanks, Anthony Sottile and Loïc Dachary.

- Coverage.py can now search .pex files for source, just as it can .zip and
.egg.  Thanks, Peter Ebden.

- Data files are now about 15% smaller.

- Improvements in the ``[run] debug`` setting:

- The "dataio" debug setting now also logs when data files are deleted during
 combining or erasing.

- A new debug option, "multiproc", for logging the behavior of
 ``concurrency=multiprocessing``.

- If you used the debug options "config" and "callers" together, you'd get a
 call stack printed for every line in the multi-line config output. This is
 now fixed.

- Fixed an unusual bug involving multiple coding declarations affecting code
containing code in multi-line strings: `issue 529`_.

- Coverage.py will no longer be misled into thinking that a plain file is a
package when interpreting ``--source`` options.  Thanks, Cosimo Lupo.

- If you try to run a non-Python file with coverage.py, you will now get a more
useful error message. `Issue 514`_.

- The default pragma regex changed slightly, but this will only matter to you
if you are deranged and use mixed-case pragmas.

- Deal properly with non-ASCII file names in an ASCII-only world, `issue 533`_.

- Programs that set Unicode configuration values could cause UnicodeErrors when
generating HTML reports.  Pytest-cov is one example.  This is now fixed.

- Prevented deprecation warnings from configparser that happened in some
circumstances, closing `issue 530`_.

- Corrected the name of the jquery.ba-throttle-debounce.js library. Thanks,
Ben Finney.  Closes `issue 505`_.

- Testing against PyPy 5.6 and PyPy3 5.5.

- Switched to pytest from nose for running the coverage.py tests.

- Renamed AUTHORS.txt to CONTRIBUTORS.txt, since there are other ways to
contribute than by writing code. Also put the count of contributors into the
author string in setup.py, though this might be too cute.

.. _sys.excepthook: https://docs.python.org/3/library/sys.htmlsys.excepthook
.. _issue 265: https://bitbucket.org/ned/coveragepy/issues/265/when-using-source-include-is-silently
.. _issue 412: https://bitbucket.org/ned/coveragepy/issues/412/coverage-combine-should-error-if-no
.. _issue 433: https://bitbucket.org/ned/coveragepy/issues/433/coverage-html-does-not-suport-skip-covered
.. _issue 493: https://bitbucket.org/ned/coveragepy/issues/493/confusing-branching-failure
.. _issue 496: https://bitbucket.org/ned/coveragepy/issues/496/incorrect-coverage-with-branching-and
.. _issue 502: https://bitbucket.org/ned/coveragepy/issues/502/incorrect-coverage-report-with-cover
.. _issue 505: https://bitbucket.org/ned/coveragepy/issues/505/use-canonical-filename-for-debounce
.. _issue 514: https://bitbucket.org/ned/coveragepy/issues/514/path-to-problem-file-not-reported-when
.. _issue 510: https://bitbucket.org/ned/coveragepy/issues/510/erase-still-needed-in-42
.. _issue 511: https://bitbucket.org/ned/coveragepy/issues/511/version-42-coverage-combine-empties
.. _issue 516: https://bitbucket.org/ned/coveragepy/issues/516/running-coverage-combine-twice-deletes-all
.. _issue 519: https://bitbucket.org/ned/coveragepy/issues/519/coverage-run-sections-in-toxini-or-as
.. _issue 524: https://bitbucket.org/ned/coveragepy/issues/524/coverage-report-with-skip-covered-column
.. _issue 525: https://bitbucket.org/ned/coveragepy/issues/525/coverage-combine-when-not-in-parallel-mode
.. _issue 529: https://bitbucket.org/ned/coveragepy/issues/529/encoding-marker-may-only-appear-on-the
.. _issue 530: https://bitbucket.org/ned/coveragepy/issues/530/deprecationwarning-you-passed-a-bytestring
.. _issue 533: https://bitbucket.org/ned/coveragepy/issues/533/exception-on-unencodable-file-name
.. _issue 535: https://bitbucket.org/ned/coveragepy/issues/535/sysexcepthook-is-not-called


.. _changes_42:

4.2

--------------------------

- Since ``concurrency=multiprocessing`` uses subprocesses, options specified on
the coverage.py command line will not be communicated down to them.  Only
options in the configuration file will apply to the subprocesses.
Previously, the options didn't apply to the subprocesses, but there was no
indication.  Now it is an error to use ``--concurrency=multiprocessing`` and
other run-affecting options on the command line.  This prevents
failures like those reported in `issue 495`_.

- Filtering the HTML report is now faster, thanks to Ville Skyttä.

.. _issue 495: https://bitbucket.org/ned/coveragepy/issues/495/branch-and-concurrency-are-conflicting

4.2b1

----------------------------

Work from the PyCon 2016 Sprints!

- BACKWARD INCOMPATIBILITY: the ``coverage combine`` command now ignores an
existing ``.coverage`` data file.  It used to include that file in its
combining.  This caused confusing results, and extra tox "clean" steps.  If
you want the old behavior, use the new ``coverage combine --append`` option.

- The ``concurrency`` option can now take multiple values, to support programs
using multiprocessing and another library such as eventlet.  This is only
possible in the configuration file, not from the command line. The
configuration file is the only way for sub-processes to all run with the same
options.  Fixes `issue 484`_.  Thanks to Josh Williams for prototyping.

- Using a ``concurrency`` setting of ``multiprocessing`` now implies
``--parallel`` so that the main program is measured similarly to the
sub-processes.

- When using `automatic subprocess measurement`_, running coverage commands
would create spurious data files.  This is now fixed, thanks to diagnosis and
testing by Dan Riti.  Closes `issue 492`_.

- A new configuration option, ``report:sort``, controls what column of the
text report is used to sort the rows.  Thanks to Dan Wandschneider, this
closes `issue 199`_.

- The HTML report has a more-visible indicator for which column is being
sorted.  Closes `issue 298`_, thanks to Josh Williams.

- If the HTML report cannot find the source for a file, the message now
suggests using the ``-i`` flag to allow the report to continue. Closes
`issue 231`_, thanks, Nathan Land.

- When reports are ignoring errors, there's now a warning if a file cannot be
parsed, rather than being silently ignored.  Closes `issue 396`_. Thanks,
Matthew Boehm.

- A new option for ``coverage debug`` is available: ``coverage debug config``
shows the current configuration.  Closes `issue 454`_, thanks to Matthew
Boehm.

- Running coverage as a module (``python -m coverage``) no longer shows the
program name as ``__main__.py``.  Fixes `issue 478`_.  Thanks, Scott Belden.

- The `test_helpers` module has been moved into a separate pip-installable
package: `unittest-mixins`_.

.. _automatic subprocess measurement: https://coverage.readthedocs.io/en/latest/subprocess.html
.. _issue 199: https://bitbucket.org/ned/coveragepy/issues/199/add-a-way-to-sort-the-text-report
.. _issue 231: https://bitbucket.org/ned/coveragepy/issues/231/various-default-behavior-in-report-phase
.. _issue 298: https://bitbucket.org/ned/coveragepy/issues/298/show-in-html-report-that-the-columns-are
.. _issue 396: https://bitbucket.org/ned/coveragepy/issues/396/coverage-xml-shouldnt-bail-out-on-parse
.. _issue 454: https://bitbucket.org/ned/coveragepy/issues/454/coverage-debug-config-should-be
.. _issue 478: https://bitbucket.org/ned/coveragepy/issues/478/help-shows-silly-program-name-when-running
.. _issue 484: https://bitbucket.org/ned/coveragepy/issues/484/multiprocessing-greenlet-concurrency
.. _issue 492: https://bitbucket.org/ned/coveragepy/issues/492/subprocess-coverage-strange-detection-of
.. _unittest-mixins: https://pypi.org/project/unittest-mixins/


.. _changes_41:
Links

Update pytest from 2.9.2 to 4.1.0.

Changelog

4.1.0

=========================

Removals
--------

- `2169 <https://github.com/pytest-dev/pytest/issues/2169>`_: ``pytest.mark.parametrize``: in previous versions, errors raised by id functions were suppressed and changed into warnings. Now the exceptions are propagated, along with a pytest message informing the node, parameter value and index where the exception occurred.


- `3078 <https://github.com/pytest-dev/pytest/issues/3078>`_: Remove legacy internal warnings system: ``config.warn``, ``Node.warn``. The ``pytest_logwarning`` now issues a warning when implemented.

See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlconfig-warn-and-node-warn>`__ on information on how to update your code.


- `3079 <https://github.com/pytest-dev/pytest/issues/3079>`_: Removed support for yield tests - they are fundamentally broken because they don't support fixtures properly since collection and test execution were separated.

See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlyield-tests>`__ on information on how to update your code.


- `3082 <https://github.com/pytest-dev/pytest/issues/3082>`_: Removed support for applying marks directly to values in ``pytest.mark.parametrize``. Use ``pytest.param`` instead.

See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlmarks-in-pytest-mark-parametrize>`__ on information on how to update your code.


- `3083 <https://github.com/pytest-dev/pytest/issues/3083>`_: Removed ``Metafunc.addcall``. This was the predecessor mechanism to ``pytest.mark.parametrize``.

See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlmetafunc-addcall>`__ on information on how to update your code.


- `3085 <https://github.com/pytest-dev/pytest/issues/3085>`_: Removed support for passing strings to ``pytest.main``. Now, always pass a list of strings instead.

See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlpassing-command-line-string-to-pytest-main>`__ on information on how to update your code.


- `3086 <https://github.com/pytest-dev/pytest/issues/3086>`_: ``[pytest]`` section in **setup.cfg** files is not longer supported, use ``[tool:pytest]`` instead. ``setup.cfg`` files
are meant for use with ``distutils``, and a section named ``pytest`` has notoriously been a source of conflicts and bugs.

Note that for **pytest.ini** and **tox.ini** files the section remains ``[pytest]``.


- `3616 <https://github.com/pytest-dev/pytest/issues/3616>`_: Removed the deprecated compat properties for ``node.Class/Function/Module`` - use ``pytest.Class/Function/Module`` now.

See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlinternal-classes-accessed-through-node>`__ on information on how to update your code.


- `4421 <https://github.com/pytest-dev/pytest/issues/4421>`_: Removed the implementation of the ``pytest_namespace`` hook.

See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlpytest-namespace>`__ on information on how to update your code.


- `4489 <https://github.com/pytest-dev/pytest/issues/4489>`_: Removed ``request.cached_setup``. This was the predecessor mechanism to modern fixtures.

See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlcached-setup>`__ on information on how to update your code.


- `4535 <https://github.com/pytest-dev/pytest/issues/4535>`_: Removed the deprecated ``PyCollector.makeitem`` method. This method was made public by mistake a long time ago.


- `4543 <https://github.com/pytest-dev/pytest/issues/4543>`_: Removed support to define fixtures using the ``pytest_funcarg__`` prefix. Use the ``pytest.fixture`` decorator instead.

See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlpytest-funcarg-prefix>`__ on information on how to update your code.


- `4545 <https://github.com/pytest-dev/pytest/issues/4545>`_: Calling fixtures directly is now always an error instead of a warning.

See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlcalling-fixtures-directly>`__ on information on how to update your code.


- `4546 <https://github.com/pytest-dev/pytest/issues/4546>`_: Remove ``Node.get_marker(name)`` the return value was not usable for more than a existence check.

Use ``Node.get_closest_marker(name)`` as a replacement.


- `4547 <https://github.com/pytest-dev/pytest/issues/4547>`_: The deprecated ``record_xml_property`` fixture has been removed, use the more generic ``record_property`` instead.

See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlrecord-xml-property>`__ for more information.


- `4548 <https://github.com/pytest-dev/pytest/issues/4548>`_: An error is now raised if the ``pytest_plugins`` variable is defined in a non-top-level ``conftest.py`` file (i.e., not residing in the ``rootdir``).

See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlpytest-plugins-in-non-top-level-conftest-files>`__ for more information.


- `891 <https://github.com/pytest-dev/pytest/issues/891>`_: Remove ``testfunction.markername`` attributes - use ``Node.iter_markers(name=None)`` to iterate them.



Deprecations
------------

- `3050 <https://github.com/pytest-dev/pytest/issues/3050>`_: Deprecated the ``pytest.config`` global.

See https://docs.pytest.org/en/latest/deprecations.htmlpytest-config-global for rationale.


- `3974 <https://github.com/pytest-dev/pytest/issues/3974>`_: Passing the ``message`` parameter of ``pytest.raises`` now issues a ``DeprecationWarning``.

It is a common mistake to think this parameter will match the exception message, while in fact
it only serves to provide a custom message in case the ``pytest.raises`` check fails. To avoid this
mistake and because it is believed to be little used, pytest is deprecating it without providing
an alternative for the moment.

If you have concerns about this, please comment on `issue 3974 <https://github.com/pytest-dev/pytest/issues/3974>`__.


- `4435 <https://github.com/pytest-dev/pytest/issues/4435>`_: Deprecated ``raises(..., 'code(as_a_string)')`` and ``warns(..., 'code(as_a_string)')``.

See https://docs.pytest.org/en/latest/deprecations.htmlraises-warns-exec for rationale and examples.



Features
--------

- `3191 <https://github.com/pytest-dev/pytest/issues/3191>`_: A warning is now issued when assertions are made for ``None``.

This is a common source of confusion among new users, which write:

.. code-block:: python

   assert mocked_object.assert_called_with(3, 4, 5, key="value")

When they should write:

.. code-block:: python

   mocked_object.assert_called_with(3, 4, 5, key="value")

Because the ``assert_called_with`` method of mock objects already executes an assertion.

This warning will not be issued when ``None`` is explicitly checked. An assertion like:

.. code-block:: python

   assert variable is None

will not issue the warning.


- `3632 <https://github.com/pytest-dev/pytest/issues/3632>`_: Richer equality comparison introspection on ``AssertionError`` for objects created using `attrs <http://www.attrs.org/en/stable/>`__ or `dataclasses <https://docs.python.org/3/library/dataclasses.html>`_ (Python 3.7+, `backported to 3.6 <https://pypi.org/project/dataclasses>`__).


- `4278 <https://github.com/pytest-dev/pytest/issues/4278>`_: ``CACHEDIR.TAG`` files are now created inside cache directories.

Those files are part of the `Cache Directory Tagging Standard <http://www.bford.info/cachedir/spec.html>`__, and can
be used by backup or synchronization programs to identify pytest's cache directory as such.


- `4292 <https://github.com/pytest-dev/pytest/issues/4292>`_: ``pytest.outcomes.Exit`` is derived from ``SystemExit`` instead of ``KeyboardInterrupt``. This allows us to better handle ``pdb`` exiting.


- `4371 <https://github.com/pytest-dev/pytest/issues/4371>`_: Updated the ``--collect-only`` option to display test descriptions when ran using ``--verbose``.


- `4386 <https://github.com/pytest-dev/pytest/issues/4386>`_: Restructured ``ExceptionInfo`` object construction and ensure incomplete instances have a ``repr``/``str``.


- `4416 <https://github.com/pytest-dev/pytest/issues/4416>`_: pdb: added support for keyword arguments with ``pdb.set_trace``.

It handles ``header`` similar to Python 3.7 does it, and forwards any
other keyword arguments to the ``Pdb`` constructor.

This allows for ``__import__("pdb").set_trace(skip=["foo.*"])``.


- `4483 <https://github.com/pytest-dev/pytest/issues/4483>`_: Added ini parameter ``junit_duration_report`` to optionally report test call durations, excluding setup and teardown times.

The JUnit XML specification and the default pytest behavior is to include setup and teardown times in the test duration
report. You can include just the call durations instead (excluding setup and teardown) by adding this to your ``pytest.ini`` file:

.. code-block:: ini

   [pytest]
   junit_duration_report = call


- `4532 <https://github.com/pytest-dev/pytest/issues/4532>`_: ``-ra`` now will show errors and failures last, instead of as the first items in the summary.

This makes it easier to obtain a list of errors and failures to run tests selectively.


- `4599 <https://github.com/pytest-dev/pytest/issues/4599>`_: ``pytest.importorskip`` now supports a ``reason`` parameter, which will be shown when the
requested module cannot be imported.



Bug Fixes
---------

- `3532 <https://github.com/pytest-dev/pytest/issues/3532>`_: ``-p`` now accepts its argument without a space between the value, for example ``-pmyplugin``.


- `4327 <https://github.com/pytest-dev/pytest/issues/4327>`_: ``approx`` again works with more generic containers, more precisely instances of ``Iterable`` and ``Sized`` instead of more restrictive ``Sequence``.


- `4397 <https://github.com/pytest-dev/pytest/issues/4397>`_: Ensure that node ids are printable.


- `4435 <https://github.com/pytest-dev/pytest/issues/4435>`_: Fixed ``raises(..., 'code(string)')`` frame filename.


- `4458 <https://github.com/pytest-dev/pytest/issues/4458>`_: Display actual test ids in ``--collect-only``.



Improved Documentation
----------------------

- `4557 <https://github.com/pytest-dev/pytest/issues/4557>`_: Markers example documentation page updated to support latest pytest version.


- `4558 <https://github.com/pytest-dev/pytest/issues/4558>`_: Update cache documentation example to correctly show cache hit and miss.


- `4580 <https://github.com/pytest-dev/pytest/issues/4580>`_: Improved detailed summary report documentation.



Trivial/Internal Changes
------------------------

- `4447 <https://github.com/pytest-dev/pytest/issues/4447>`_: Changed the deprecation type of ``--result-log`` to ``PytestDeprecationWarning``.

It was decided to remove this feature at the next major revision.

4.0.2

=========================

Bug Fixes
---------

- `4265 <https://github.com/pytest-dev/pytest/issues/4265>`_: Validate arguments from the ``PYTEST_ADDOPTS`` environment variable and the ``addopts`` ini option separately.


- `4435 <https://github.com/pytest-dev/pytest/issues/4435>`_: Fix ``raises(..., 'code(string)')`` frame filename.


- `4500 <https://github.com/pytest-dev/pytest/issues/4500>`_: When a fixture yields and a log call is made after the test runs, and, if the test is interrupted, capture attributes are ``None``.


- `4538 <https://github.com/pytest-dev/pytest/issues/4538>`_: Raise ``TypeError`` for ``with raises(..., match=<non-None falsey value>)``.



Improved Documentation
----------------------

- `1495 <https://github.com/pytest-dev/pytest/issues/1495>`_: Document common doctest fixture directory tree structure pitfalls

4.0.1

=========================

Bug Fixes
---------

- `3952 <https://github.com/pytest-dev/pytest/issues/3952>`_: Display warnings before "short test summary info" again, but still later warnings in the end.


- `4386 <https://github.com/pytest-dev/pytest/issues/4386>`_: Handle uninitialized exceptioninfo in repr/str.


- `4393 <https://github.com/pytest-dev/pytest/issues/4393>`_: Do not create ``.gitignore``/``README.md`` files in existing cache directories.


- `4400 <https://github.com/pytest-dev/pytest/issues/4400>`_: Rearrange warning handling for the yield test errors so the opt-out in 4.0.x correctly works.


- `4405 <https://github.com/pytest-dev/pytest/issues/4405>`_: Fix collection of testpaths with ``--pyargs``.


- `4412 <https://github.com/pytest-dev/pytest/issues/4412>`_: Fix assertion rewriting involving ``Starred`` + side-effects.


- `4425 <https://github.com/pytest-dev/pytest/issues/4425>`_: Ensure we resolve the absolute path when the given ``--basetemp`` is a relative path.



Trivial/Internal Changes
------------------------

- `4315 <https://github.com/pytest-dev/pytest/issues/4315>`_: Use ``pkg_resources.parse_version`` instead of ``LooseVersion`` in minversion check.


- `4440 <https://github.com/pytest-dev/pytest/issues/4440>`_: Adjust the stack level of some internal pytest warnings.

4.0.0

=========================

Removals
--------

- `3737 <https://github.com/pytest-dev/pytest/issues/3737>`_: **RemovedInPytest4Warnings are now errors by default.**

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

**The affected features will be effectively removed in pytest 4.1**, so please consult the
`Deprecations and Removals <https://docs.pytest.org/en/latest/deprecations.html>`__
section in the docs for directions on how to update existing code.

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

.. code-block:: ini

   [pytest]
   filterwarnings =
       ignore::pytest.RemovedInPytest4Warning

But this will stop working when pytest ``4.1`` is released.

**If you have concerns** about the removal of a specific feature, please add a
comment to `4348 <https://github.com/pytest-dev/pytest/issues/4348>`__.


- `4358 <https://github.com/pytest-dev/pytest/issues/4358>`_: Remove the ``::()`` notation to denote a test class instance in node ids.

Previously, node ids that contain test instances would use ``::()`` to denote the instance like this::

   test_foo.py::Test::()::test_bar

The extra ``::()`` was puzzling to most users and has been removed, so that the test id becomes now::

   test_foo.py::Test::test_bar

This change could not accompany a deprecation period as is usual when user-facing functionality changes because
it was not really possible to detect when the functionality was being used explicitly.

The extra ``::()`` might have been removed in some places internally already,
which then led to confusion in places where it was expected, e.g. with
``--deselect`` (`4127 <https://github.com/pytest-dev/pytest/issues/4127>`_).

Test class instances are also not listed with ``--collect-only`` anymore.



Features
--------

- `4270 <https://github.com/pytest-dev/pytest/issues/4270>`_: The ``cache_dir`` option uses ``$TOX_ENV_DIR`` as prefix (if set in the environment).

This uses a different cache per tox environment by default.



Bug Fixes
---------

- `3554 <https://github.com/pytest-dev/pytest/issues/3554>`_: Fix ``CallInfo.__repr__`` for when the call is not finished yet.

3.10.1

==========================

Bug Fixes
---------

- `4287 <https://github.com/pytest-dev/pytest/issues/4287>`_: Fix nested usage of debugging plugin (pdb), e.g. with pytester's ``testdir.runpytest``.


- `4304 <https://github.com/pytest-dev/pytest/issues/4304>`_: Block the ``stepwise`` plugin if ``cacheprovider`` is also blocked, as one depends on the other.


- `4306 <https://github.com/pytest-dev/pytest/issues/4306>`_: Parse ``minversion`` as an actual version and not as dot-separated strings.


- `4310 <https://github.com/pytest-dev/pytest/issues/4310>`_: Fix duplicate collection due to multiple args matching the same packages.


- `4321 <https://github.com/pytest-dev/pytest/issues/4321>`_: Fix ``item.nodeid`` with resolved symlinks.


- `4325 <https://github.com/pytest-dev/pytest/issues/4325>`_: Fix collection of direct symlinked files, where the target does not match ``python_files``.


- `4329 <https://github.com/pytest-dev/pytest/issues/4329>`_: Fix TypeError in report_collect with _collect_report_last_write.



Trivial/Internal Changes
------------------------

- `4305 <https://github.com/pytest-dev/pytest/issues/4305>`_: Replace byte/unicode helpers in test_capture with python level syntax.

3.10.0

==========================

Features
--------

- `2619 <https://github.com/pytest-dev/pytest/issues/2619>`_: Resume capturing output after ``continue`` with ``__import__("pdb").set_trace()``.

This also adds a new ``pytest_leave_pdb`` hook, and passes in ``pdb`` to the
existing ``pytest_enter_pdb`` hook.


- `4147 <https://github.com/pytest-dev/pytest/issues/4147>`_: Add ``--sw``, ``--stepwise`` as an alternative to ``--lf -x`` for stopping at the first failure, but starting the next test invocation from that test.  See `the documentation <https://docs.pytest.org/en/latest/cache.htmlstepwise>`__ for more info.


- `4188 <https://github.com/pytest-dev/pytest/issues/4188>`_: Make ``--color`` emit colorful dots when not running in verbose mode. Earlier, it would only colorize the test-by-test output if ``--verbose`` was also passed.


- `4225 <https://github.com/pytest-dev/pytest/issues/4225>`_: Improve performance with collection reporting in non-quiet mode with terminals.

The "collecting …" message is only printed/updated every 0.5s.



Bug Fixes
---------

- `2701 <https://github.com/pytest-dev/pytest/issues/2701>`_: Fix false ``RemovedInPytest4Warning: usage of Session... is deprecated, please use pytest`` warnings.


- `4046 <https://github.com/pytest-dev/pytest/issues/4046>`_: Fix problems with running tests in package ``__init__.py`` files.


- `4260 <https://github.com/pytest-dev/pytest/issues/4260>`_: Swallow warnings during anonymous compilation of source.


- `4262 <https://github.com/pytest-dev/pytest/issues/4262>`_: Fix access denied error when deleting stale directories created by ``tmpdir`` / ``tmp_path``.


- `611 <https://github.com/pytest-dev/pytest/issues/611>`_: Naming a fixture ``request`` will now raise a warning: the ``request`` fixture is internal and
should not be overwritten as it will lead to internal errors.

- `4266 <https://github.com/pytest-dev/pytest/issues/4266>`_: Handle (ignore) exceptions raised during collection, e.g. with Django's LazySettings proxy class.



Improved Documentation
----------------------

- `4255 <https://github.com/pytest-dev/pytest/issues/4255>`_: Added missing documentation about the fact that module names passed to filter warnings are not regex-escaped.



Trivial/Internal Changes
------------------------

- `4272 <https://github.com/pytest-dev/pytest/issues/4272>`_: Display cachedir also in non-verbose mode if non-default.


- `4277 <https://github.com/pytest-dev/pytest/issues/4277>`_: pdb: improve message about output capturing with ``set_trace``.

Do not display "IO-capturing turned off/on" when ``-s`` is used to avoid
confusion.


- `4279 <https://github.com/pytest-dev/pytest/issues/4279>`_: Improve message and stack level of warnings issued by ``monkeypatch.setenv`` when the value of the environment variable is not a ``str``.

3.9.3

=========================

Bug Fixes
---------

- `4174 <https://github.com/pytest-dev/pytest/issues/4174>`_: Fix "ValueError: Plugin already registered" with conftest plugins via symlink.


- `4181 <https://github.com/pytest-dev/pytest/issues/4181>`_: Handle race condition between creation and deletion of temporary folders.


- `4221 <https://github.com/pytest-dev/pytest/issues/4221>`_: Fix bug where the warning summary at the end of the test session was not showing the test where the warning was originated.


- `4243 <https://github.com/pytest-dev/pytest/issues/4243>`_: Fix regression when ``stacklevel`` for warnings was passed as positional argument on python2.



Improved Documentation
----------------------

- `3851 <https://github.com/pytest-dev/pytest/issues/3851>`_: Add reference to ``empty_parameter_set_mark`` ini option in documentation of ``pytest.mark.parametrize``



Trivial/Internal Changes
------------------------

- `4028 <https://github.com/pytest-dev/pytest/issues/4028>`_: Revert patching of ``sys.breakpointhook`` since it appears to do nothing.


- `4233 <https://github.com/pytest-dev/pytest/issues/4233>`_: Apply an import sorter (``reorder-python-imports``) to the codebase.


- `4248 <https://github.com/pytest-dev/pytest/issues/4248>`_: Remove use of unnecessary compat shim, six.binary_type

3.9.2

=========================

Bug Fixes
---------

- `2909 <https://github.com/pytest-dev/pytest/issues/2909>`_: Improve error message when a recursive dependency between fixtures is detected.


- `3340 <https://github.com/pytest-dev/pytest/issues/3340>`_: Fix logging messages not shown in hooks ``pytest_sessionstart()`` and ``pytest_sessionfinish()``.


- `3533 <https://github.com/pytest-dev/pytest/issues/3533>`_: Fix unescaped XML raw objects in JUnit report for skipped tests


- `3691 <https://github.com/pytest-dev/pytest/issues/3691>`_: Python 2: safely format warning message about passing unicode strings to ``warnings.warn``, which may cause
surprising ``MemoryError`` exception when monkey patching ``warnings.warn`` itself.


- `4026 <https://github.com/pytest-dev/pytest/issues/4026>`_: Improve error message when it is not possible to determine a function's signature.


- `4177 <https://github.com/pytest-dev/pytest/issues/4177>`_: Pin ``setuptools>=40.0`` to support ``py_modules`` in ``se

---

<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
## 📋 Pull Request Information **Original PR:** https://github.com/jeffknupp/sandman2/pull/79 **Author:** [@pyup-bot](https://github.com/pyup-bot) **Created:** 1/9/2019 **Status:** ✅ Merged **Merged:** 1/9/2019 **Merged by:** [@jeffknupp](https://github.com/jeffknupp) **Base:** `master` ← **Head:** `pyup-initial-update` --- ### 📝 Commits (9) - [`3bd4407`](https://github.com/jeffknupp/sandman2/commit/3bd44075ed4bc43c6addcbf0b11d95e79c45148d) Update flask-admin from 1.4.2 to 1.5.3 - [`9db9bfa`](https://github.com/jeffknupp/sandman2/commit/9db9bfadd14196667e7647877a22e974ae4d7bf4) Update flask-sqlalchemy from 2.1 to 2.3.2 - [`852008e`](https://github.com/jeffknupp/sandman2/commit/852008e3d3f95fc17cc27cd457cb3af3945a2661) Update sqlalchemy from 1.2.12 to 1.2.15 - [`6c4c3bb`](https://github.com/jeffknupp/sandman2/commit/6c4c3bb403465c92c4bfae483f617e2e4d29d414) Update wtforms from 2.1 to 2.2.1 - [`ad0bbb4`](https://github.com/jeffknupp/sandman2/commit/ad0bbb47928559f091ba38e2a896e2eb2057f313) Update coverage from 4.1 to 4.5.2 - [`5ff6372`](https://github.com/jeffknupp/sandman2/commit/5ff6372c88be3cedd1bd2cb2812f242a116dc3f2) Update pytest from 2.9.2 to 4.1.0 - [`fbf23ca`](https://github.com/jeffknupp/sandman2/commit/fbf23ca6a95b7393be2ef183c1a74498767bbe41) Update pytest-cov from 2.3.0 to 2.6.1 - [`336bd5f`](https://github.com/jeffknupp/sandman2/commit/336bd5f032b43310cf1d1ea486e34aad3e711de0) Update pytest-flask from 0.10.0 to 0.14.0 - [`6052009`](https://github.com/jeffknupp/sandman2/commit/6052009a5dcddf3d5919187270ea93eb240c4712) Update flask-httpauth from 3.1.2 to 3.2.4 ### 📊 Changes **1 file changed** (+9 additions, -9 deletions) <details> <summary>View changed files</summary> 📝 `requirements.txt` (+9 -9) </details> ### 📄 Description This PR sets up pyup.io on this repo and updates all dependencies at once, in a single branch. Subsequent pull requests will update one dependency at a time, each in their own branch. If you want to start with that right away, simply close this PR. ### Update [Flask-Admin](https://pypi.org/project/Flask-Admin) from **1.4.2** to **1.5.3**. <details> <summary>Changelog</summary> ### 1.5.3 ``` ----- * Fixed XSS vulnerability * Support nested categories in the navbar menu * SQLAlchemy * sort on multiple columns with `column_default_sort` * sort on related models in `column_sortable_list` * fix: inline model forms can now also be used for models with multiple primary keys * support for using mapped `column_property` * Upgrade Leaflet and Leaflet.draw plugins, used for geoalchemy integration * Specify `minimum_input_length` for ajax widget * Peewee: support composite keys * MongoEngine: when searching/filtering the input is now regarded as case-insensitive by default * FileAdmin * handle special characters in filename * fix a bug with listing directories on Windows * avoid raising an exception when unknown sort parameter is encountered * WTForms 3 support ``` ### 1.5.2 ``` ----- * Fixed XSS vulnerability * Fixed Peewee support * Added detail view column formatters * Updated Flask-Login example to work with the newer version of the library * Various SQLAlchemy-related fixes * Various Windows related fixes for the file admin ``` ### 1.5.1 ``` ----- * Dropped Python 2.6 support * Fixed SQLAlchemy &gt;= 1.2 compatibility * Fixed Pewee 3.0 compatibility * Fixed max year for a combo date inline editor * Lots of small bug fixes ``` ### 1.5.0 ``` ----- * Fixed CSRF generation logic for multi-process deployments * Added WTForms &gt;= 3.0 support * Flask-Admin would not recursively save inline models, allowing arbitrary nesting * Added configuration properties that allow injection of additional CSS and JS dependencies into templates without overriding them * SQLAlchemy backend - Updated hybrid property detection using new SQLAlchemy APIs - Added support for association proxies - Added support for remote hybrid properties filters - Added support for ARRAY column type * Localization-related fixes * MongoEngine backend is now properly formats model labels * Improved Google App Engine support: - Added TextProperty, KeyProperty and SelectField support - Added support for form_args, excluded_columns, page_size and after_model_update * Fixed URL generation with localized named filters * FileAdmin has Bootstrap 2 support now * Geoalchemy fixes - Use Google Places (by default) for place search * Updated translations * Bug fixes ``` </details> <details> <summary>Links</summary> - PyPI: https://pypi.org/project/flask-admin - Changelog: https://pyup.io/changelogs/flask-admin/ - Repo: https://github.com/flask-admin/flask-admin/ - Docs: https://pythonhosted.org/Flask-Admin/ </details> ### Update [Flask-SQLAlchemy](https://pypi.org/project/Flask-SQLAlchemy) from **2.1** to **2.3.2**. <details> <summary>Changelog</summary> ### 2.3.2 ``` ------------- Released on October 11, 2017 - Don&#39;t mask the parent table for single-table inheritance models. (`561`_) .. _561: https://github.com/mitsuhiko/flask-sqlalchemy/pull/561 ``` ### 2.3.1 ``` ------------- Released on October 5, 2017 - If a model has a table name that matches an existing table in the metadata, use that table. Fixes a regression where reflected tables were not picked up by models. (`551`_) - Raise the correct error when a model has a table name but no primary key. (`556`_) - Fix ``repr`` on models that don&#39;t have an identity because they have not been flushed yet. (`555`_) - Allow specifying a ``max_per_page`` limit for pagination, to avoid users specifying high values in the request args. (`542`_) - For ``paginate`` with ``error_out=False``, the minimum value for ``page`` is 1 and ``per_page`` is 0. (`558`_) .. _542: https://github.com/mitsuhiko/flask-sqlalchemy/pull/542 .. _551: https://github.com/mitsuhiko/flask-sqlalchemy/pull/551 .. _555: https://github.com/mitsuhiko/flask-sqlalchemy/pull/555 .. _556: https://github.com/mitsuhiko/flask-sqlalchemy/pull/556 .. _558: https://github.com/mitsuhiko/flask-sqlalchemy/pull/558 ``` ### 2.3.0 ``` ------------- Released on September 28, 2017 - Multiple bugs with ``__tablename__`` generation are fixed. Names will be generated for models that define a primary key, but not for single-table inheritance subclasses. Names will not override a ``declared_attr``. ``PrimaryKeyConstraint`` is detected. (`541`_) - Passing an existing ``declarative_base()`` as ``model_class`` to ``SQLAlchemy.__init__`` will use this as the base class instead of creating one. This allows customizing the metaclass used to construct the base. (`546`_) - The undocumented ``DeclarativeMeta`` internals that the extension uses for binds and table name generation have been refactored to work as mixins. Documentation is added about how to create a custom metaclass that does not do table name generation. (`546`_) - Model and metaclass code has been moved to a new ``models`` module. ``_BoundDeclarativeMeta`` is renamed to ``DefaultMeta``; the old name will be removed in 3.0. (`546`_) - Models have a default ``repr`` that shows the model name and primary key. (`530`_) - Fixed a bug where using ``init_app`` would cause connectors to always use the ``current_app`` rather than the app they were created for. This caused issues when multiple apps were registered with the extension. (`547`_) .. _530: https://github.com/mitsuhiko/flask-sqlalchemy/pull/530 .. _541: https://github.com/mitsuhiko/flask-sqlalchemy/pull/541 .. _546: https://github.com/mitsuhiko/flask-sqlalchemy/pull/546 .. _547: https://github.com/mitsuhiko/flask-sqlalchemy/pull/547 ``` ### 2.2 ``` ----------- Released on February 27, 2017, codename Dubnium - Minimum SQLAlchemy version is 0.8 due to use of ``sqlalchemy.inspect``. - Added support for custom ``query_class`` and ``model_class`` as args to the ``SQLAlchemy`` constructor. (`328`_) - Allow listening to SQLAlchemy events on ``db.session``. (`364`_) - Allow ``__bind_key__`` on abstract models. (`373`_) - Allow ``SQLALCHEMY_ECHO`` to be a string. (`409`_) - Warn when ``SQLALCHEMY_DATABASE_URI`` is not set. (`443`_) - Don&#39;t let pagination generate invalid page numbers. (`460`_) - Drop support of Flask &lt; 0.10. This means the db session is always tied to the app context and its teardown event. (`461`_) - Tablename generation logic no longer accesses class properties unless they are ``declared_attr``. (`467`_) .. _328: https://github.com/mitsuhiko/flask-sqlalchemy/pull/328 .. _364: https://github.com/mitsuhiko/flask-sqlalchemy/pull/364 .. _373: https://github.com/mitsuhiko/flask-sqlalchemy/pull/373 .. _409: https://github.com/mitsuhiko/flask-sqlalchemy/pull/409 .. _443: https://github.com/mitsuhiko/flask-sqlalchemy/pull/443 .. _460: https://github.com/mitsuhiko/flask-sqlalchemy/pull/460 .. _461: https://github.com/mitsuhiko/flask-sqlalchemy/pull/461 .. _467: https://github.com/mitsuhiko/flask-sqlalchemy/pull/467 ``` </details> <details> <summary>Links</summary> - PyPI: https://pypi.org/project/flask-sqlalchemy - Changelog: https://pyup.io/changelogs/flask-sqlalchemy/ - Repo: http://github.com/mitsuhiko/flask-sqlalchemy - Docs: https://pythonhosted.org/Flask-SQLAlchemy/ </details> ### Update [SQLAlchemy](https://pypi.org/project/SQLAlchemy) from **1.2.12** to **1.2.15**. <details> <summary>Changelog</summary> ### 1.2.15 ``` :released: December 11, 2018 .. change:: :tags: bug, orm :tickets: 4367 Fixed bug where the ORM annotations could be incorrect for the primaryjoin/secondaryjoin a relationship if one used the pattern ``ForeignKey(SomeClass.id)`` in the declarative mappings. This pattern would leak undesired annotations into the join conditions which can break aliasing operations done within :class:`.Query` that are not supposed to impact elements in that join condition. These annotations are now removed up front if present. .. change:: :tags: bug, orm, declarative :tickets: 4374 A warning is emitted in the case that a :func:`.column` object is applied to a declarative class, as it seems likely this intended to be a :class:`.Column` object. .. change:: :tags: bug, orm :tickets: 4366 In continuing with a similar theme as that of very recent :ticket:`4349`, repaired issue with :meth:`.RelationshipProperty.Comparator.any` and :meth:`.RelationshipProperty.Comparator.has` where the &quot;secondary&quot; selectable needs to be explicitly part of the FROM clause in the EXISTS subquery to suit the case where this &quot;secondary&quot; is a :class:`.Join` object. .. change:: :tags: bug, orm :tickets: 4363 Fixed regression caused by :ticket:`4349` where adding the &quot;secondary&quot; table to the FROM clause for a dynamic loader would affect the ability of the :class:`.Query` to make a subsequent join to another entity. The fix adds the primary entity as the first element of the FROM list since :meth:`.Query.join` wants to jump from that. Version 1.3 will have a more comprehensive solution to this problem as well (:ticket:`4365`). .. change:: :tags: bug, orm :tickests: 4400 Fixed bug where chaining of mapper options using :meth:`.RelationshipProperty.of_type` in conjunction with a chained option that refers to an attribute name by string only would fail to locate the attribute. .. change:: :tag: feature, mysql :tickets: 4381 Added support for the ``write_timeout`` flag accepted by mysqlclient and pymysql to be passed in the URL string. .. change:: :tag: bug, postgresql :tickets: 4377, 4380 Fixed issue where reflection of a PostgreSQL domain that is expressed as an array would fail to be recognized. Pull request courtesy Jakub Synowiec. .. changelog:: ``` ### 1.2.14 ``` :released: November 10, 2018 .. change:: :tags: bug, orm :tickets: 4357 Fixed bug in :meth:`.Session.bulk_update_mappings` where alternate mapped attribute names would result in the primary key column of the UPDATE statement being included in the SET clause, as well as the WHERE clause; while usually harmless, for SQL Server this can raise an error due to the IDENTITY column. This is a continuation of the same bug that was fixed in :ticket:`3849`, where testing was insufficient to catch this additional flaw. .. change:: :tags: bug, mysql :tickets: 4361 Fixed regression caused by :ticket:`4344` released in 1.2.13, where the fix for MySQL 8.0&#39;s case sensitivity problem with referenced column names when reflecting foreign key referents is worked around using the ``information_schema.columns`` view. The workaround was failing on OSX / ``lower_case_table_names=2`` which produces non-matching casing for the ``information_schema.columns`` vs. that of ``SHOW CREATE TABLE``, so in case-insensitive SQL modes case-insensitive matching is now used. .. change:: :tags: bug, orm :tickets: 4347 Fixed a minor performance issue which could in some cases add unnecessary overhead to result fetching, involving the use of ORM columns and entities that include those same columns at the same time within a query. The issue has to do with hash / eq overhead when referring to the column in different ways. .. changelog:: ``` ### 1.2.13 ``` :released: October 31, 2018 .. change:: :tags: bug, postgresql :tickets: 4337 Added support for the :class:`.aggregate_order_by` function to receive multiple ORDER BY elements, previously only a single element was accepted. .. change:: :tags: bug, mysql :tickets: 4348 Added word ``function`` to the list of reserved words for MySQL, which is now a keyword in MySQL 8.0 .. change:: :tags: feature, sql :versions: 1.3.0b1 Refactored :class:`.SQLCompiler` to expose a :meth:`.SQLCompiler.group_by_clause` method similar to the :meth:`.SQLCompiler.order_by_clause` and :meth:`.SQLCompiler.limit_clause` methods, which can be overridden by dialects to customize how GROUP BY renders. Pull request courtesy Samuel Chou. .. change:: :tags: bug, misc Fixed issue where part of the utility language helper internals was passing the wrong kind of argument to the Python ``__import__`` builtin as the list of modules to be imported. The issue produced no symptoms within the core library but could cause issues with external applications that redefine the ``__import__`` builtin or otherwise instrument it. Pull request courtesy Joe Urciuoli. .. change:: :tags: bug, orm :tickets: 4349 Fixed bug where &quot;dynamic&quot; loader needs to explicitly set the &quot;secondary&quot; table in the FROM clause of the query, to suit the case where the secondary is a join object that is otherwise not pulled into the query from its columns alone. .. change:: :tags: bug, orm, declarative :tickets: 4350 Fixed regression caused by :ticket:`4326` in version 1.2.12 where using :class:`.declared_attr` with a mixin in conjunction with :func:`.orm.synonym` would fail to map the synonym properly to an inherited subclass. .. change:: :tags: bug, misc, py3k :tickets: 4339 Fixed additional warnings generated by Python 3.7 due to changes in the organization of the Python ``collections`` and ``collections.abc`` packages. Previous ``collections`` warnings were fixed in version 1.2.11. Pull request courtesy xtreak. .. change:: :tags: bug, ext Added missing ``.index()`` method to list-based association collections in the association proxy extension. .. change:: :tags: bug, mysql :tickets: 4344 Added a workaround for a MySQL bug 88718 introduced in the 8.0 series, where the reflection of a foreign key constraint is not reporting the correct case sensitivity for the referred column, leading to errors during use of the reflected constraint such as when using the automap extension. The workaround emits an additional query to the information_schema tables in order to retrieve the correct case sensitive name. .. change:: :tags: bug, sql :tickets: 4341 Fixed bug where the :paramref:`.Enum.create_constraint` flag on the :class:`.Enum` datatype would not be propagated to copies of the type, which affects use cases such as declarative mixins and abstract bases. .. change:: :tags: bug, orm, declarative :tickets: 4352 The column conflict resolution technique discussed at :ref:`declarative_column_conflicts` is now functional for a :class:`.Column` that is also a primary key column. Previously, a check for primary key columns declared on a single-inheritance subclass would occur before the column copy were allowed to pass. .. changelog:: ``` </details> <details> <summary>Links</summary> - PyPI: https://pypi.org/project/sqlalchemy - Changelog: https://pyup.io/changelogs/sqlalchemy/ - Homepage: http://www.sqlalchemy.org </details> ### Update [WTForms](https://pypi.org/project/WTForms) from **2.1** to **2.2.1**. <details> <summary>Changelog</summary> ### 2.2 ``` ----------- Released June 2nd, 2018 - Merged new and updated translations from the community. - Passing ``data_`` args to render a field converts all the underscores to hyphens when rendering the HTML attribute, not just the first one. ``data_foo_bar`` becomes ``data-foo-bar``. (`248`_) - The :class:`~validators.UUID` validator uses the :class:`uuid.UUID` class instead of a regex. (`251`_) - :class:`~fields.SelectField` copies the list of ``choices`` passed to it so modifying an instance&#39;s choices will not modify the global form definition. (`286`_) - Fields call :meth:`~fields.Field.process_formdata` even if the raw data is empty. This makes :class:`~fields.StringField` default to an empty string instead of ``None``. (`280`_) - Added a :class:`~fields.MultipleFileField` to handle a multi-file input. :class:`~fields.FileField` continues to handle only one value. The underlying :class:`~widgets.FileInput` widget gained a ``multiple`` argument. (`281`_) - :class:`~fields.SelectField` choices can contain HTML (MarkupSafe ``Markup`` object or equivalent API) and will be rendered properly. (`302`_) - :class:`~fields.TimeField` and :class:`html5.TimeField &lt;fields.html5.TimeField&gt;` were added. (`254`_) - Improved :class:`~validators.Email`. Note that it is still unreasonable to validate all emails with a regex and you should prefer validating by actually sending an email. (`294`_) - Widgets render the ``required`` attribute when using a validator that provides the ``&#39;required&#39;`` flag, such as :class:`~validators.DataRequired`. (`361`_) - Fix a compatibility issue with SQLAlchemy 2.1 that caused :class:`~ext.sqlalchemy.fields.QuerySelectField` to fail with ``ValueError: too many values to unpack``. (`391`_) .. _248: https://github.com/wtforms/wtforms/pull/248 .. _251: https://github.com/wtforms/wtforms/pull/251 .. _254: https://github.com/wtforms/wtforms/pull/254 .. _280: https://github.com/wtforms/wtforms/pull/280 .. _281: https://github.com/wtforms/wtforms/pull/281 .. _286: https://github.com/wtforms/wtforms/pull/286 .. _294: https://github.com/wtforms/wtforms/pull/294 .. _302: https://github.com/wtforms/wtforms/pull/302 .. _361: https://github.com/wtforms/wtforms/pull/361 .. _391: https://github.com/wtforms/wtforms/pull/391 ``` </details> <details> <summary>Links</summary> - PyPI: https://pypi.org/project/wtforms - Changelog: https://pyup.io/changelogs/wtforms/ - Docs: https://wtforms.readthedocs.io/ </details> ### Update [coverage](https://pypi.org/project/coverage) from **4.1** to **4.5.2**. <details> <summary>Changelog</summary> ### 4.5.1 ``` ---------------------------- - Now that 4.5 properly separated the ``[run] omit`` and ``[report] omit`` settings, an old bug has become apparent. If you specified a package name for ``[run] source``, then omit patterns weren&#39;t matched inside that package. This bug (`issue 638`_) is now fixed. - On Python 3.7, reporting about a decorated function with no body other than a docstring would crash coverage.py with an IndexError (`issue 640`_). This is now fixed. - Configurer plugins are now reported in the output of ``--debug=sys``. .. _issue 638: https://bitbucket.org/ned/coveragepy/issues/638/run-omit-is-ignored-since-45 .. _issue 640: https://bitbucket.org/ned/coveragepy/issues/640/indexerror-reporting-on-an-empty-decorated .. _changes_45: ``` ### 4.5 ``` -------------------------- - A new kind of plugin is supported: configurators are invoked at start-up to allow more complex configuration than the .coveragerc file can easily do. See :ref:`api_plugin` for details. This solves the complex configuration problem described in `issue 563`_. - The ``fail_under`` option can now be a float. Note that you must specify the ``[report] precision`` configuration option for the fractional part to be used. Thanks to Lars Hupfeldt Nielsen for help with the implementation. Fixes `issue 631`_. - The ``include`` and ``omit`` options can be specified for both the ``[run]`` and ``[report]`` phases of execution. 4.4.2 introduced some incorrect interactions between those phases, where the options for one were confused for the other. This is now corrected, fixing `issue 621`_ and `issue 622`_. Thanks to Daniel Hahler for seeing more clearly than I could. - The ``coverage combine`` command used to always overwrite the data file, even when no data had been read from apparently combinable files. Now, an error is raised if we thought there were files to combine, but in fact none of them could be used. Fixes `issue 629`_. - The ``coverage combine`` command could get confused about path separators when combining data collected on Windows with data collected on Linux, as described in `issue 618`_. This is now fixed: the result path always uses the path separator specified in the ``[paths]`` result. - On Windows, the HTML report could fail when source trees are deeply nested, due to attempting to create HTML filenames longer than the 250-character maximum. Now filenames will never get much larger than 200 characters, fixing `issue 627`_. Thanks to Alex Sandro for helping with the fix. .. _issue 563: https://bitbucket.org/ned/coveragepy/issues/563/platform-specific-configuration .. _issue 618: https://bitbucket.org/ned/coveragepy/issues/618/problem-when-combining-windows-generated .. _issue 621: https://bitbucket.org/ned/coveragepy/issues/621/include-ignored-warning-when-using .. _issue 622: https://bitbucket.org/ned/coveragepy/issues/622/report-omit-overwrites-run-omit .. _issue 627: https://bitbucket.org/ned/coveragepy/issues/627/failure-generating-html-reports-when-the .. _issue 629: https://bitbucket.org/ned/coveragepy/issues/629/multiple-use-of-combine-leads-to-empty .. _issue 631: https://bitbucket.org/ned/coveragepy/issues/631/precise-coverage-percentage-value .. _changes_442: ``` ### 4.4.2 ``` ---------------------------- - Support for Python 3.7. In some cases, class and module docstrings are no longer counted in statement totals, which could slightly change your total results. - Specifying both ``--source`` and ``--include`` no longer silently ignores the include setting, instead it displays a warning. Thanks, Loïc Dachary. Closes `issue 265`_ and `issue 101`_. - Fixed a race condition when saving data and multiple threads are tracing (`issue 581`_). It could produce a &quot;dictionary changed size during iteration&quot; RuntimeError. I believe this mostly but not entirely fixes the race condition. A true fix would likely be too expensive. Thanks, Peter Baughman for the debugging, and Olivier Grisel for the fix with tests. - Configuration values which are file paths will now apply tilde-expansion, closing `issue 589`_. - Now secondary config files like tox.ini and setup.cfg can be specified explicitly, and prefixed sections like `[coverage:run]` will be read. Fixes `issue 588`_. - Be more flexible about the command name displayed by help, fixing `issue 600`_. Thanks, Ben Finney. .. _issue 101: https://bitbucket.org/ned/coveragepy/issues/101/settings-under-report-affect-running .. _issue 581: https://bitbucket.org/ned/coveragepy/issues/581/race-condition-when-saving-data-under .. _issue 588: https://bitbucket.org/ned/coveragepy/issues/588/using-rcfile-path-to-toxini-uses-run .. _issue 589: https://bitbucket.org/ned/coveragepy/issues/589/allow-expansion-in-coveragerc .. _issue 600: https://bitbucket.org/ned/coveragepy/issues/600/get-program-name-from-command-line-when .. _changes_441: ``` ### 4.4.1 ``` ---------------------------- - No code changes: just corrected packaging for Python 2.7 Linux wheels. .. _changes_44: ``` ### 4.4 ``` -------------------------- - Reports could produce the wrong file names for packages, reporting ``pkg.py`` instead of the correct ``pkg/__init__.py``. This is now fixed. Thanks, Dirk Thomas. - XML reports could produce ``&lt;source&gt;`` and ``&lt;class&gt;`` lines that together didn&#39;t specify a valid source file path. This is now fixed. (`issue 526`_) - Namespace packages are no longer warned as having no code. (`issue 572`_) - Code that uses ``sys.settrace(sys.gettrace())`` in a file that wasn&#39;t being coverage-measured would prevent correct coverage measurement in following code. An example of this was running doctests programmatically. This is now fixed. (`issue 575`_) - Errors printed by the ``coverage`` command now go to stderr instead of stdout. - Running ``coverage xml`` in a directory named with non-ASCII characters would fail under Python 2. This is now fixed. (`issue 573`_) .. _issue 526: https://bitbucket.org/ned/coveragepy/issues/526/generated-xml-invalid-paths-for-cobertura .. _issue 572: https://bitbucket.org/ned/coveragepy/issues/572/no-python-source-warning-for-namespace .. _issue 573: https://bitbucket.org/ned/coveragepy/issues/573/cant-generate-xml-report-if-some-source .. _issue 575: https://bitbucket.org/ned/coveragepy/issues/575/running-doctest-prevents-complete-coverage ``` ### 4.4b1 ``` ---------------------------- - Some warnings can now be individually disabled. Warnings that can be disabled have a short name appended. The ``[run] disable_warnings`` setting takes a list of these warning names to disable. Closes both `issue 96`_ and `issue 355`_. - The XML report now includes attributes from version 4 of the Cobertura XML format, fixing `issue 570`_. - In previous versions, calling a method that used collected data would prevent further collection. For example, `save()`, `report()`, `html_report()`, and others would all stop collection. An explicit `start()` was needed to get it going again. This is no longer true. Now you can use the collected data and also continue measurement. Both `issue 79`_ and `issue 448`_ described this problem, and have been fixed. - Plugins can now find unexecuted files if they choose, by implementing the `find_executable_files` method. Thanks, Emil Madsen. - Minimal IronPython support. You should be able to run IronPython programs under ``coverage run``, though you will still have to do the reporting phase with CPython. - Coverage.py has long had a special hack to support CPython&#39;s need to measure the coverage of the standard library tests. This code was not installed by kitted versions of coverage.py. Now it is. .. _issue 79: https://bitbucket.org/ned/coveragepy/issues/79/save-prevents-harvesting-on-stop .. _issue 96: https://bitbucket.org/ned/coveragepy/issues/96/unhelpful-warnings-produced-when-using .. _issue 355: https://bitbucket.org/ned/coveragepy/issues/355/warnings-should-be-suppressable .. _issue 448: https://bitbucket.org/ned/coveragepy/issues/448/save-and-html_report-prevent-further .. _issue 570: https://bitbucket.org/ned/coveragepy/issues/570/cobertura-coverage-04dtd-support .. _changes_434: ``` ### 4.3.4 ``` ---------------------------- - Fixing 2.6 in version 4.3.3 broke other things, because the too-tricky exception wasn&#39;t properly derived from Exception, described in `issue 556`_. A newb mistake; it hasn&#39;t been a good few days. .. _issue 556: https://bitbucket.org/ned/coveragepy/issues/556/43-fails-if-there-are-html-files-in-the .. _changes_433: ``` ### 4.3.3 ``` ---------------------------- - Python 2.6 support was broken due to a testing exception imported for the benefit of the coverage.py test suite. Properly conditionalizing it fixed `issue 554`_ so that Python 2.6 works again. .. _issue 554: https://bitbucket.org/ned/coveragepy/issues/554/traceback-on-python-26-starting-with-432 .. _changes_432: ``` ### 4.3.2 ``` ---------------------------- - Using the ``--skip-covered`` option on an HTML report with 100% coverage would cause a &quot;No data to report&quot; error, as reported in `issue 549`_. This is now fixed; thanks, Loïc Dachary. - If-statements can be optimized away during compilation, for example, `if 0:` or `if __debug__:`. Coverage.py had problems properly understanding these statements which existed in the source, but not in the compiled bytecode. This problem, reported in `issue 522`_, is now fixed. - If you specified ``--source`` as a directory, then coverage.py would look for importable Python files in that directory, and could identify ones that had never been executed at all. But if you specified it as a package name, that detection wasn&#39;t performed. Now it is, closing `issue 426`_. Thanks to Loïc Dachary for the fix. - If you started and stopped coverage measurement thousands of times in your process, you could crash Python with a &quot;Fatal Python error: deallocating None&quot; error. This is now fixed. Thanks to Alex Groce for the bug report. - On PyPy, measuring coverage in subprocesses could produce a warning: &quot;Trace function changed, measurement is likely wrong: None&quot;. This was spurious, and has been suppressed. - Previously, coverage.py couldn&#39;t start on Jython, due to that implementation missing the multiprocessing module (`issue 551`_). This problem has now been fixed. Also, `issue 322`_ about not being able to invoke coverage conveniently, seems much better: ``jython -m coverage run myprog.py`` works properly. - Let&#39;s say you ran the HTML report over and over again in the same output directory, with ``--skip-covered``. And imagine due to your heroic test-writing efforts, a file just achieved the goal of 100% coverage. With coverage.py 4.3, the old HTML file with the less-than-100% coverage would be left behind. This file is now properly deleted. .. _issue 322: https://bitbucket.org/ned/coveragepy/issues/322/cannot-use-coverage-with-jython .. _issue 426: https://bitbucket.org/ned/coveragepy/issues/426/difference-between-coverage-results-with .. _issue 522: https://bitbucket.org/ned/coveragepy/issues/522/incorrect-branch-reporting-with-__debug__ .. _issue 549: https://bitbucket.org/ned/coveragepy/issues/549/skip-covered-with-100-coverage-throws-a-no .. _issue 551: https://bitbucket.org/ned/coveragepy/issues/551/coveragepy-cannot-be-imported-in-jython27 .. _changes_431: ``` ### 4.3.1 ``` ---------------------------- - Some environments couldn&#39;t install 4.3, as described in `issue 540`_. This is now fixed. - The check for conflicting ``--source`` and ``--include`` was too simple in a few different ways, breaking a few perfectly reasonable use cases, described in `issue 541`_. The check has been reverted while we re-think the fix for `issue 265`_. .. _issue 540: https://bitbucket.org/ned/coveragepy/issues/540/cant-install-coverage-v43-into-under .. _issue 541: https://bitbucket.org/ned/coveragepy/issues/541/coverage-43-breaks-nosetest-with-coverage .. _changes_43: ``` ### 4.3 ``` -------------------------- Special thanks to **Loïc Dachary**, who took an extraordinary interest in coverage.py and contributed a number of improvements in this release. - Subprocesses that are measured with `automatic subprocess measurement`_ used to read in any pre-existing data file. This meant data would be incorrectly carried forward from run to run. Now those files are not read, so each subprocess only writes its own data. Fixes `issue 510`_. - The ``coverage combine`` command will now fail if there are no data files to combine. The combine changes in 4.2 meant that multiple combines could lose data, leaving you with an empty .coverage data file. Fixes `issue 525`_, `issue 412`_, `issue 516`_, and probably `issue 511`_. - Coverage.py wouldn&#39;t execute `sys.excepthook`_ when an exception happened in your program. Now it does, thanks to Andrew Hoos. Closes `issue 535`_. - Branch coverage fixes: - Branch coverage could misunderstand a finally clause on a try block that never continued on to the following statement, as described in `issue 493`_. This is now fixed. Thanks to Joe Doherty for the report and Loïc Dachary for the fix. - A while loop with a constant condition (while True) and a continue statement would be mis-analyzed, as described in `issue 496`_. This is now fixed, thanks to a bug report by Eli Skeggs and a fix by Loïc Dachary. - While loops with constant conditions that were never executed could result in a non-zero coverage report. Artem Dayneko reported this in `issue 502`_, and Loïc Dachary provided the fix. - The HTML report now supports a ``--skip-covered`` option like the other reporting commands. Thanks, Loïc Dachary for the implementation, closing `issue 433`_. - Options can now be read from a tox.ini file, if any. Like setup.cfg, sections are prefixed with &quot;coverage:&quot;, so ``[run]`` options will be read from the ``[coverage:run]`` section of tox.ini. Implements part of `issue 519`_. Thanks, Stephen Finucane. - Specifying both ``--source`` and ``--include`` no longer silently ignores the include setting, instead it fails with a message. Thanks, Nathan Land and Loïc Dachary. Closes `issue 265`_. - The ``Coverage.combine`` method has a new parameter, ``strict=False``, to support failing if there are no data files to combine. - When forking subprocesses, the coverage data files would have the same random number appended to the file name. This didn&#39;t cause problems, because the file names had the process id also, making collisions (nearly) impossible. But it was disconcerting. This is now fixed. - The text report now properly sizes headers when skipping some files, fixing `issue 524`_. Thanks, Anthony Sottile and Loïc Dachary. - Coverage.py can now search .pex files for source, just as it can .zip and .egg. Thanks, Peter Ebden. - Data files are now about 15% smaller. - Improvements in the ``[run] debug`` setting: - The &quot;dataio&quot; debug setting now also logs when data files are deleted during combining or erasing. - A new debug option, &quot;multiproc&quot;, for logging the behavior of ``concurrency=multiprocessing``. - If you used the debug options &quot;config&quot; and &quot;callers&quot; together, you&#39;d get a call stack printed for every line in the multi-line config output. This is now fixed. - Fixed an unusual bug involving multiple coding declarations affecting code containing code in multi-line strings: `issue 529`_. - Coverage.py will no longer be misled into thinking that a plain file is a package when interpreting ``--source`` options. Thanks, Cosimo Lupo. - If you try to run a non-Python file with coverage.py, you will now get a more useful error message. `Issue 514`_. - The default pragma regex changed slightly, but this will only matter to you if you are deranged and use mixed-case pragmas. - Deal properly with non-ASCII file names in an ASCII-only world, `issue 533`_. - Programs that set Unicode configuration values could cause UnicodeErrors when generating HTML reports. Pytest-cov is one example. This is now fixed. - Prevented deprecation warnings from configparser that happened in some circumstances, closing `issue 530`_. - Corrected the name of the jquery.ba-throttle-debounce.js library. Thanks, Ben Finney. Closes `issue 505`_. - Testing against PyPy 5.6 and PyPy3 5.5. - Switched to pytest from nose for running the coverage.py tests. - Renamed AUTHORS.txt to CONTRIBUTORS.txt, since there are other ways to contribute than by writing code. Also put the count of contributors into the author string in setup.py, though this might be too cute. .. _sys.excepthook: https://docs.python.org/3/library/sys.htmlsys.excepthook .. _issue 265: https://bitbucket.org/ned/coveragepy/issues/265/when-using-source-include-is-silently .. _issue 412: https://bitbucket.org/ned/coveragepy/issues/412/coverage-combine-should-error-if-no .. _issue 433: https://bitbucket.org/ned/coveragepy/issues/433/coverage-html-does-not-suport-skip-covered .. _issue 493: https://bitbucket.org/ned/coveragepy/issues/493/confusing-branching-failure .. _issue 496: https://bitbucket.org/ned/coveragepy/issues/496/incorrect-coverage-with-branching-and .. _issue 502: https://bitbucket.org/ned/coveragepy/issues/502/incorrect-coverage-report-with-cover .. _issue 505: https://bitbucket.org/ned/coveragepy/issues/505/use-canonical-filename-for-debounce .. _issue 514: https://bitbucket.org/ned/coveragepy/issues/514/path-to-problem-file-not-reported-when .. _issue 510: https://bitbucket.org/ned/coveragepy/issues/510/erase-still-needed-in-42 .. _issue 511: https://bitbucket.org/ned/coveragepy/issues/511/version-42-coverage-combine-empties .. _issue 516: https://bitbucket.org/ned/coveragepy/issues/516/running-coverage-combine-twice-deletes-all .. _issue 519: https://bitbucket.org/ned/coveragepy/issues/519/coverage-run-sections-in-toxini-or-as .. _issue 524: https://bitbucket.org/ned/coveragepy/issues/524/coverage-report-with-skip-covered-column .. _issue 525: https://bitbucket.org/ned/coveragepy/issues/525/coverage-combine-when-not-in-parallel-mode .. _issue 529: https://bitbucket.org/ned/coveragepy/issues/529/encoding-marker-may-only-appear-on-the .. _issue 530: https://bitbucket.org/ned/coveragepy/issues/530/deprecationwarning-you-passed-a-bytestring .. _issue 533: https://bitbucket.org/ned/coveragepy/issues/533/exception-on-unencodable-file-name .. _issue 535: https://bitbucket.org/ned/coveragepy/issues/535/sysexcepthook-is-not-called .. _changes_42: ``` ### 4.2 ``` -------------------------- - Since ``concurrency=multiprocessing`` uses subprocesses, options specified on the coverage.py command line will not be communicated down to them. Only options in the configuration file will apply to the subprocesses. Previously, the options didn&#39;t apply to the subprocesses, but there was no indication. Now it is an error to use ``--concurrency=multiprocessing`` and other run-affecting options on the command line. This prevents failures like those reported in `issue 495`_. - Filtering the HTML report is now faster, thanks to Ville Skyttä. .. _issue 495: https://bitbucket.org/ned/coveragepy/issues/495/branch-and-concurrency-are-conflicting ``` ### 4.2b1 ``` ---------------------------- Work from the PyCon 2016 Sprints! - BACKWARD INCOMPATIBILITY: the ``coverage combine`` command now ignores an existing ``.coverage`` data file. It used to include that file in its combining. This caused confusing results, and extra tox &quot;clean&quot; steps. If you want the old behavior, use the new ``coverage combine --append`` option. - The ``concurrency`` option can now take multiple values, to support programs using multiprocessing and another library such as eventlet. This is only possible in the configuration file, not from the command line. The configuration file is the only way for sub-processes to all run with the same options. Fixes `issue 484`_. Thanks to Josh Williams for prototyping. - Using a ``concurrency`` setting of ``multiprocessing`` now implies ``--parallel`` so that the main program is measured similarly to the sub-processes. - When using `automatic subprocess measurement`_, running coverage commands would create spurious data files. This is now fixed, thanks to diagnosis and testing by Dan Riti. Closes `issue 492`_. - A new configuration option, ``report:sort``, controls what column of the text report is used to sort the rows. Thanks to Dan Wandschneider, this closes `issue 199`_. - The HTML report has a more-visible indicator for which column is being sorted. Closes `issue 298`_, thanks to Josh Williams. - If the HTML report cannot find the source for a file, the message now suggests using the ``-i`` flag to allow the report to continue. Closes `issue 231`_, thanks, Nathan Land. - When reports are ignoring errors, there&#39;s now a warning if a file cannot be parsed, rather than being silently ignored. Closes `issue 396`_. Thanks, Matthew Boehm. - A new option for ``coverage debug`` is available: ``coverage debug config`` shows the current configuration. Closes `issue 454`_, thanks to Matthew Boehm. - Running coverage as a module (``python -m coverage``) no longer shows the program name as ``__main__.py``. Fixes `issue 478`_. Thanks, Scott Belden. - The `test_helpers` module has been moved into a separate pip-installable package: `unittest-mixins`_. .. _automatic subprocess measurement: https://coverage.readthedocs.io/en/latest/subprocess.html .. _issue 199: https://bitbucket.org/ned/coveragepy/issues/199/add-a-way-to-sort-the-text-report .. _issue 231: https://bitbucket.org/ned/coveragepy/issues/231/various-default-behavior-in-report-phase .. _issue 298: https://bitbucket.org/ned/coveragepy/issues/298/show-in-html-report-that-the-columns-are .. _issue 396: https://bitbucket.org/ned/coveragepy/issues/396/coverage-xml-shouldnt-bail-out-on-parse .. _issue 454: https://bitbucket.org/ned/coveragepy/issues/454/coverage-debug-config-should-be .. _issue 478: https://bitbucket.org/ned/coveragepy/issues/478/help-shows-silly-program-name-when-running .. _issue 484: https://bitbucket.org/ned/coveragepy/issues/484/multiprocessing-greenlet-concurrency .. _issue 492: https://bitbucket.org/ned/coveragepy/issues/492/subprocess-coverage-strange-detection-of .. _unittest-mixins: https://pypi.org/project/unittest-mixins/ .. _changes_41: ``` </details> <details> <summary>Links</summary> - PyPI: https://pypi.org/project/coverage - Changelog: https://pyup.io/changelogs/coverage/ - Repo: https://bitbucket.org/ned/coveragepy </details> ### Update [pytest](https://pypi.org/project/pytest) from **2.9.2** to **4.1.0**. <details> <summary>Changelog</summary> ### 4.1.0 ``` ========================= Removals -------- - `2169 &lt;https://github.com/pytest-dev/pytest/issues/2169&gt;`_: ``pytest.mark.parametrize``: in previous versions, errors raised by id functions were suppressed and changed into warnings. Now the exceptions are propagated, along with a pytest message informing the node, parameter value and index where the exception occurred. - `3078 &lt;https://github.com/pytest-dev/pytest/issues/3078&gt;`_: Remove legacy internal warnings system: ``config.warn``, ``Node.warn``. The ``pytest_logwarning`` now issues a warning when implemented. See our `docs &lt;https://docs.pytest.org/en/latest/deprecations.htmlconfig-warn-and-node-warn&gt;`__ on information on how to update your code. - `3079 &lt;https://github.com/pytest-dev/pytest/issues/3079&gt;`_: Removed support for yield tests - they are fundamentally broken because they don&#39;t support fixtures properly since collection and test execution were separated. See our `docs &lt;https://docs.pytest.org/en/latest/deprecations.htmlyield-tests&gt;`__ on information on how to update your code. - `3082 &lt;https://github.com/pytest-dev/pytest/issues/3082&gt;`_: Removed support for applying marks directly to values in ``pytest.mark.parametrize``. Use ``pytest.param`` instead. See our `docs &lt;https://docs.pytest.org/en/latest/deprecations.htmlmarks-in-pytest-mark-parametrize&gt;`__ on information on how to update your code. - `3083 &lt;https://github.com/pytest-dev/pytest/issues/3083&gt;`_: Removed ``Metafunc.addcall``. This was the predecessor mechanism to ``pytest.mark.parametrize``. See our `docs &lt;https://docs.pytest.org/en/latest/deprecations.htmlmetafunc-addcall&gt;`__ on information on how to update your code. - `3085 &lt;https://github.com/pytest-dev/pytest/issues/3085&gt;`_: Removed support for passing strings to ``pytest.main``. Now, always pass a list of strings instead. See our `docs &lt;https://docs.pytest.org/en/latest/deprecations.htmlpassing-command-line-string-to-pytest-main&gt;`__ on information on how to update your code. - `3086 &lt;https://github.com/pytest-dev/pytest/issues/3086&gt;`_: ``[pytest]`` section in **setup.cfg** files is not longer supported, use ``[tool:pytest]`` instead. ``setup.cfg`` files are meant for use with ``distutils``, and a section named ``pytest`` has notoriously been a source of conflicts and bugs. Note that for **pytest.ini** and **tox.ini** files the section remains ``[pytest]``. - `3616 &lt;https://github.com/pytest-dev/pytest/issues/3616&gt;`_: Removed the deprecated compat properties for ``node.Class/Function/Module`` - use ``pytest.Class/Function/Module`` now. See our `docs &lt;https://docs.pytest.org/en/latest/deprecations.htmlinternal-classes-accessed-through-node&gt;`__ on information on how to update your code. - `4421 &lt;https://github.com/pytest-dev/pytest/issues/4421&gt;`_: Removed the implementation of the ``pytest_namespace`` hook. See our `docs &lt;https://docs.pytest.org/en/latest/deprecations.htmlpytest-namespace&gt;`__ on information on how to update your code. - `4489 &lt;https://github.com/pytest-dev/pytest/issues/4489&gt;`_: Removed ``request.cached_setup``. This was the predecessor mechanism to modern fixtures. See our `docs &lt;https://docs.pytest.org/en/latest/deprecations.htmlcached-setup&gt;`__ on information on how to update your code. - `4535 &lt;https://github.com/pytest-dev/pytest/issues/4535&gt;`_: Removed the deprecated ``PyCollector.makeitem`` method. This method was made public by mistake a long time ago. - `4543 &lt;https://github.com/pytest-dev/pytest/issues/4543&gt;`_: Removed support to define fixtures using the ``pytest_funcarg__`` prefix. Use the ``pytest.fixture`` decorator instead. See our `docs &lt;https://docs.pytest.org/en/latest/deprecations.htmlpytest-funcarg-prefix&gt;`__ on information on how to update your code. - `4545 &lt;https://github.com/pytest-dev/pytest/issues/4545&gt;`_: Calling fixtures directly is now always an error instead of a warning. See our `docs &lt;https://docs.pytest.org/en/latest/deprecations.htmlcalling-fixtures-directly&gt;`__ on information on how to update your code. - `4546 &lt;https://github.com/pytest-dev/pytest/issues/4546&gt;`_: Remove ``Node.get_marker(name)`` the return value was not usable for more than a existence check. Use ``Node.get_closest_marker(name)`` as a replacement. - `4547 &lt;https://github.com/pytest-dev/pytest/issues/4547&gt;`_: The deprecated ``record_xml_property`` fixture has been removed, use the more generic ``record_property`` instead. See our `docs &lt;https://docs.pytest.org/en/latest/deprecations.htmlrecord-xml-property&gt;`__ for more information. - `4548 &lt;https://github.com/pytest-dev/pytest/issues/4548&gt;`_: An error is now raised if the ``pytest_plugins`` variable is defined in a non-top-level ``conftest.py`` file (i.e., not residing in the ``rootdir``). See our `docs &lt;https://docs.pytest.org/en/latest/deprecations.htmlpytest-plugins-in-non-top-level-conftest-files&gt;`__ for more information. - `891 &lt;https://github.com/pytest-dev/pytest/issues/891&gt;`_: Remove ``testfunction.markername`` attributes - use ``Node.iter_markers(name=None)`` to iterate them. Deprecations ------------ - `3050 &lt;https://github.com/pytest-dev/pytest/issues/3050&gt;`_: Deprecated the ``pytest.config`` global. See https://docs.pytest.org/en/latest/deprecations.htmlpytest-config-global for rationale. - `3974 &lt;https://github.com/pytest-dev/pytest/issues/3974&gt;`_: Passing the ``message`` parameter of ``pytest.raises`` now issues a ``DeprecationWarning``. It is a common mistake to think this parameter will match the exception message, while in fact it only serves to provide a custom message in case the ``pytest.raises`` check fails. To avoid this mistake and because it is believed to be little used, pytest is deprecating it without providing an alternative for the moment. If you have concerns about this, please comment on `issue 3974 &lt;https://github.com/pytest-dev/pytest/issues/3974&gt;`__. - `4435 &lt;https://github.com/pytest-dev/pytest/issues/4435&gt;`_: Deprecated ``raises(..., &#39;code(as_a_string)&#39;)`` and ``warns(..., &#39;code(as_a_string)&#39;)``. See https://docs.pytest.org/en/latest/deprecations.htmlraises-warns-exec for rationale and examples. Features -------- - `3191 &lt;https://github.com/pytest-dev/pytest/issues/3191&gt;`_: A warning is now issued when assertions are made for ``None``. This is a common source of confusion among new users, which write: .. code-block:: python assert mocked_object.assert_called_with(3, 4, 5, key=&quot;value&quot;) When they should write: .. code-block:: python mocked_object.assert_called_with(3, 4, 5, key=&quot;value&quot;) Because the ``assert_called_with`` method of mock objects already executes an assertion. This warning will not be issued when ``None`` is explicitly checked. An assertion like: .. code-block:: python assert variable is None will not issue the warning. - `3632 &lt;https://github.com/pytest-dev/pytest/issues/3632&gt;`_: Richer equality comparison introspection on ``AssertionError`` for objects created using `attrs &lt;http://www.attrs.org/en/stable/&gt;`__ or `dataclasses &lt;https://docs.python.org/3/library/dataclasses.html&gt;`_ (Python 3.7+, `backported to 3.6 &lt;https://pypi.org/project/dataclasses&gt;`__). - `4278 &lt;https://github.com/pytest-dev/pytest/issues/4278&gt;`_: ``CACHEDIR.TAG`` files are now created inside cache directories. Those files are part of the `Cache Directory Tagging Standard &lt;http://www.bford.info/cachedir/spec.html&gt;`__, and can be used by backup or synchronization programs to identify pytest&#39;s cache directory as such. - `4292 &lt;https://github.com/pytest-dev/pytest/issues/4292&gt;`_: ``pytest.outcomes.Exit`` is derived from ``SystemExit`` instead of ``KeyboardInterrupt``. This allows us to better handle ``pdb`` exiting. - `4371 &lt;https://github.com/pytest-dev/pytest/issues/4371&gt;`_: Updated the ``--collect-only`` option to display test descriptions when ran using ``--verbose``. - `4386 &lt;https://github.com/pytest-dev/pytest/issues/4386&gt;`_: Restructured ``ExceptionInfo`` object construction and ensure incomplete instances have a ``repr``/``str``. - `4416 &lt;https://github.com/pytest-dev/pytest/issues/4416&gt;`_: pdb: added support for keyword arguments with ``pdb.set_trace``. It handles ``header`` similar to Python 3.7 does it, and forwards any other keyword arguments to the ``Pdb`` constructor. This allows for ``__import__(&quot;pdb&quot;).set_trace(skip=[&quot;foo.*&quot;])``. - `4483 &lt;https://github.com/pytest-dev/pytest/issues/4483&gt;`_: Added ini parameter ``junit_duration_report`` to optionally report test call durations, excluding setup and teardown times. The JUnit XML specification and the default pytest behavior is to include setup and teardown times in the test duration report. You can include just the call durations instead (excluding setup and teardown) by adding this to your ``pytest.ini`` file: .. code-block:: ini [pytest] junit_duration_report = call - `4532 &lt;https://github.com/pytest-dev/pytest/issues/4532&gt;`_: ``-ra`` now will show errors and failures last, instead of as the first items in the summary. This makes it easier to obtain a list of errors and failures to run tests selectively. - `4599 &lt;https://github.com/pytest-dev/pytest/issues/4599&gt;`_: ``pytest.importorskip`` now supports a ``reason`` parameter, which will be shown when the requested module cannot be imported. Bug Fixes --------- - `3532 &lt;https://github.com/pytest-dev/pytest/issues/3532&gt;`_: ``-p`` now accepts its argument without a space between the value, for example ``-pmyplugin``. - `4327 &lt;https://github.com/pytest-dev/pytest/issues/4327&gt;`_: ``approx`` again works with more generic containers, more precisely instances of ``Iterable`` and ``Sized`` instead of more restrictive ``Sequence``. - `4397 &lt;https://github.com/pytest-dev/pytest/issues/4397&gt;`_: Ensure that node ids are printable. - `4435 &lt;https://github.com/pytest-dev/pytest/issues/4435&gt;`_: Fixed ``raises(..., &#39;code(string)&#39;)`` frame filename. - `4458 &lt;https://github.com/pytest-dev/pytest/issues/4458&gt;`_: Display actual test ids in ``--collect-only``. Improved Documentation ---------------------- - `4557 &lt;https://github.com/pytest-dev/pytest/issues/4557&gt;`_: Markers example documentation page updated to support latest pytest version. - `4558 &lt;https://github.com/pytest-dev/pytest/issues/4558&gt;`_: Update cache documentation example to correctly show cache hit and miss. - `4580 &lt;https://github.com/pytest-dev/pytest/issues/4580&gt;`_: Improved detailed summary report documentation. Trivial/Internal Changes ------------------------ - `4447 &lt;https://github.com/pytest-dev/pytest/issues/4447&gt;`_: Changed the deprecation type of ``--result-log`` to ``PytestDeprecationWarning``. It was decided to remove this feature at the next major revision. ``` ### 4.0.2 ``` ========================= Bug Fixes --------- - `4265 &lt;https://github.com/pytest-dev/pytest/issues/4265&gt;`_: Validate arguments from the ``PYTEST_ADDOPTS`` environment variable and the ``addopts`` ini option separately. - `4435 &lt;https://github.com/pytest-dev/pytest/issues/4435&gt;`_: Fix ``raises(..., &#39;code(string)&#39;)`` frame filename. - `4500 &lt;https://github.com/pytest-dev/pytest/issues/4500&gt;`_: When a fixture yields and a log call is made after the test runs, and, if the test is interrupted, capture attributes are ``None``. - `4538 &lt;https://github.com/pytest-dev/pytest/issues/4538&gt;`_: Raise ``TypeError`` for ``with raises(..., match=&lt;non-None falsey value&gt;)``. Improved Documentation ---------------------- - `1495 &lt;https://github.com/pytest-dev/pytest/issues/1495&gt;`_: Document common doctest fixture directory tree structure pitfalls ``` ### 4.0.1 ``` ========================= Bug Fixes --------- - `3952 &lt;https://github.com/pytest-dev/pytest/issues/3952&gt;`_: Display warnings before &quot;short test summary info&quot; again, but still later warnings in the end. - `4386 &lt;https://github.com/pytest-dev/pytest/issues/4386&gt;`_: Handle uninitialized exceptioninfo in repr/str. - `4393 &lt;https://github.com/pytest-dev/pytest/issues/4393&gt;`_: Do not create ``.gitignore``/``README.md`` files in existing cache directories. - `4400 &lt;https://github.com/pytest-dev/pytest/issues/4400&gt;`_: Rearrange warning handling for the yield test errors so the opt-out in 4.0.x correctly works. - `4405 &lt;https://github.com/pytest-dev/pytest/issues/4405&gt;`_: Fix collection of testpaths with ``--pyargs``. - `4412 &lt;https://github.com/pytest-dev/pytest/issues/4412&gt;`_: Fix assertion rewriting involving ``Starred`` + side-effects. - `4425 &lt;https://github.com/pytest-dev/pytest/issues/4425&gt;`_: Ensure we resolve the absolute path when the given ``--basetemp`` is a relative path. Trivial/Internal Changes ------------------------ - `4315 &lt;https://github.com/pytest-dev/pytest/issues/4315&gt;`_: Use ``pkg_resources.parse_version`` instead of ``LooseVersion`` in minversion check. - `4440 &lt;https://github.com/pytest-dev/pytest/issues/4440&gt;`_: Adjust the stack level of some internal pytest warnings. ``` ### 4.0.0 ``` ========================= Removals -------- - `3737 &lt;https://github.com/pytest-dev/pytest/issues/3737&gt;`_: **RemovedInPytest4Warnings are now errors by default.** Following our plan to remove deprecated features with as little disruption as possible, all warnings of type ``RemovedInPytest4Warnings`` now generate errors instead of warning messages. **The affected features will be effectively removed in pytest 4.1**, so please consult the `Deprecations and Removals &lt;https://docs.pytest.org/en/latest/deprecations.html&gt;`__ section in the docs for directions on how to update existing code. In the pytest ``4.0.X`` series, it is possible to change the errors back into warnings as a stop gap measure by adding this to your ``pytest.ini`` file: .. code-block:: ini [pytest] filterwarnings = ignore::pytest.RemovedInPytest4Warning But this will stop working when pytest ``4.1`` is released. **If you have concerns** about the removal of a specific feature, please add a comment to `4348 &lt;https://github.com/pytest-dev/pytest/issues/4348&gt;`__. - `4358 &lt;https://github.com/pytest-dev/pytest/issues/4358&gt;`_: Remove the ``::()`` notation to denote a test class instance in node ids. Previously, node ids that contain test instances would use ``::()`` to denote the instance like this:: test_foo.py::Test::()::test_bar The extra ``::()`` was puzzling to most users and has been removed, so that the test id becomes now:: test_foo.py::Test::test_bar This change could not accompany a deprecation period as is usual when user-facing functionality changes because it was not really possible to detect when the functionality was being used explicitly. The extra ``::()`` might have been removed in some places internally already, which then led to confusion in places where it was expected, e.g. with ``--deselect`` (`4127 &lt;https://github.com/pytest-dev/pytest/issues/4127&gt;`_). Test class instances are also not listed with ``--collect-only`` anymore. Features -------- - `4270 &lt;https://github.com/pytest-dev/pytest/issues/4270&gt;`_: The ``cache_dir`` option uses ``$TOX_ENV_DIR`` as prefix (if set in the environment). This uses a different cache per tox environment by default. Bug Fixes --------- - `3554 &lt;https://github.com/pytest-dev/pytest/issues/3554&gt;`_: Fix ``CallInfo.__repr__`` for when the call is not finished yet. ``` ### 3.10.1 ``` ========================== Bug Fixes --------- - `4287 &lt;https://github.com/pytest-dev/pytest/issues/4287&gt;`_: Fix nested usage of debugging plugin (pdb), e.g. with pytester&#39;s ``testdir.runpytest``. - `4304 &lt;https://github.com/pytest-dev/pytest/issues/4304&gt;`_: Block the ``stepwise`` plugin if ``cacheprovider`` is also blocked, as one depends on the other. - `4306 &lt;https://github.com/pytest-dev/pytest/issues/4306&gt;`_: Parse ``minversion`` as an actual version and not as dot-separated strings. - `4310 &lt;https://github.com/pytest-dev/pytest/issues/4310&gt;`_: Fix duplicate collection due to multiple args matching the same packages. - `4321 &lt;https://github.com/pytest-dev/pytest/issues/4321&gt;`_: Fix ``item.nodeid`` with resolved symlinks. - `4325 &lt;https://github.com/pytest-dev/pytest/issues/4325&gt;`_: Fix collection of direct symlinked files, where the target does not match ``python_files``. - `4329 &lt;https://github.com/pytest-dev/pytest/issues/4329&gt;`_: Fix TypeError in report_collect with _collect_report_last_write. Trivial/Internal Changes ------------------------ - `4305 &lt;https://github.com/pytest-dev/pytest/issues/4305&gt;`_: Replace byte/unicode helpers in test_capture with python level syntax. ``` ### 3.10.0 ``` ========================== Features -------- - `2619 &lt;https://github.com/pytest-dev/pytest/issues/2619&gt;`_: Resume capturing output after ``continue`` with ``__import__(&quot;pdb&quot;).set_trace()``. This also adds a new ``pytest_leave_pdb`` hook, and passes in ``pdb`` to the existing ``pytest_enter_pdb`` hook. - `4147 &lt;https://github.com/pytest-dev/pytest/issues/4147&gt;`_: Add ``--sw``, ``--stepwise`` as an alternative to ``--lf -x`` for stopping at the first failure, but starting the next test invocation from that test. See `the documentation &lt;https://docs.pytest.org/en/latest/cache.htmlstepwise&gt;`__ for more info. - `4188 &lt;https://github.com/pytest-dev/pytest/issues/4188&gt;`_: Make ``--color`` emit colorful dots when not running in verbose mode. Earlier, it would only colorize the test-by-test output if ``--verbose`` was also passed. - `4225 &lt;https://github.com/pytest-dev/pytest/issues/4225&gt;`_: Improve performance with collection reporting in non-quiet mode with terminals. The &quot;collecting …&quot; message is only printed/updated every 0.5s. Bug Fixes --------- - `2701 &lt;https://github.com/pytest-dev/pytest/issues/2701&gt;`_: Fix false ``RemovedInPytest4Warning: usage of Session... is deprecated, please use pytest`` warnings. - `4046 &lt;https://github.com/pytest-dev/pytest/issues/4046&gt;`_: Fix problems with running tests in package ``__init__.py`` files. - `4260 &lt;https://github.com/pytest-dev/pytest/issues/4260&gt;`_: Swallow warnings during anonymous compilation of source. - `4262 &lt;https://github.com/pytest-dev/pytest/issues/4262&gt;`_: Fix access denied error when deleting stale directories created by ``tmpdir`` / ``tmp_path``. - `611 &lt;https://github.com/pytest-dev/pytest/issues/611&gt;`_: Naming a fixture ``request`` will now raise a warning: the ``request`` fixture is internal and should not be overwritten as it will lead to internal errors. - `4266 &lt;https://github.com/pytest-dev/pytest/issues/4266&gt;`_: Handle (ignore) exceptions raised during collection, e.g. with Django&#39;s LazySettings proxy class. Improved Documentation ---------------------- - `4255 &lt;https://github.com/pytest-dev/pytest/issues/4255&gt;`_: Added missing documentation about the fact that module names passed to filter warnings are not regex-escaped. Trivial/Internal Changes ------------------------ - `4272 &lt;https://github.com/pytest-dev/pytest/issues/4272&gt;`_: Display cachedir also in non-verbose mode if non-default. - `4277 &lt;https://github.com/pytest-dev/pytest/issues/4277&gt;`_: pdb: improve message about output capturing with ``set_trace``. Do not display &quot;IO-capturing turned off/on&quot; when ``-s`` is used to avoid confusion. - `4279 &lt;https://github.com/pytest-dev/pytest/issues/4279&gt;`_: Improve message and stack level of warnings issued by ``monkeypatch.setenv`` when the value of the environment variable is not a ``str``. ``` ### 3.9.3 ``` ========================= Bug Fixes --------- - `4174 &lt;https://github.com/pytest-dev/pytest/issues/4174&gt;`_: Fix &quot;ValueError: Plugin already registered&quot; with conftest plugins via symlink. - `4181 &lt;https://github.com/pytest-dev/pytest/issues/4181&gt;`_: Handle race condition between creation and deletion of temporary folders. - `4221 &lt;https://github.com/pytest-dev/pytest/issues/4221&gt;`_: Fix bug where the warning summary at the end of the test session was not showing the test where the warning was originated. - `4243 &lt;https://github.com/pytest-dev/pytest/issues/4243&gt;`_: Fix regression when ``stacklevel`` for warnings was passed as positional argument on python2. Improved Documentation ---------------------- - `3851 &lt;https://github.com/pytest-dev/pytest/issues/3851&gt;`_: Add reference to ``empty_parameter_set_mark`` ini option in documentation of ``pytest.mark.parametrize`` Trivial/Internal Changes ------------------------ - `4028 &lt;https://github.com/pytest-dev/pytest/issues/4028&gt;`_: Revert patching of ``sys.breakpointhook`` since it appears to do nothing. - `4233 &lt;https://github.com/pytest-dev/pytest/issues/4233&gt;`_: Apply an import sorter (``reorder-python-imports``) to the codebase. - `4248 &lt;https://github.com/pytest-dev/pytest/issues/4248&gt;`_: Remove use of unnecessary compat shim, six.binary_type ``` ### 3.9.2 ``` ========================= Bug Fixes --------- - `2909 &lt;https://github.com/pytest-dev/pytest/issues/2909&gt;`_: Improve error message when a recursive dependency between fixtures is detected. - `3340 &lt;https://github.com/pytest-dev/pytest/issues/3340&gt;`_: Fix logging messages not shown in hooks ``pytest_sessionstart()`` and ``pytest_sessionfinish()``. - `3533 &lt;https://github.com/pytest-dev/pytest/issues/3533&gt;`_: Fix unescaped XML raw objects in JUnit report for skipped tests - `3691 &lt;https://github.com/pytest-dev/pytest/issues/3691&gt;`_: Python 2: safely format warning message about passing unicode strings to ``warnings.warn``, which may cause surprising ``MemoryError`` exception when monkey patching ``warnings.warn`` itself. - `4026 &lt;https://github.com/pytest-dev/pytest/issues/4026&gt;`_: Improve error message when it is not possible to determine a function&#39;s signature. - `4177 &lt;https://github.com/pytest-dev/pytest/issues/4177&gt;`_: Pin ``setuptools&gt;=40.0`` to support ``py_modules`` in ``se --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
kerem 2026-02-26 01:33:17 +03:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/sandman2-jeffknupp#119
No description provided.