[PR #138] [CLOSED] Scheduled weekly dependency update for week 05 #168

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

📋 Pull Request Information

Original PR: https://github.com/jeffknupp/sandman2/pull/138
Author: @pyup-bot
Created: 2/3/2020
Status: Closed

Base: masterHead: pyup-scheduled-update-2020-02-03


📝 Commits (9)

  • 5d1ff39 Update flask-admin from 1.5.3 to 1.5.4
  • 644d9aa Update sqlalchemy from 1.3.8 to 1.3.13
  • bd094b0 Update coverage from 4.5.4 to 5.0.3
  • 6a1f9a5 Update pytest from 5.2.0 to 5.3.5
  • f51e360 Update pytest-cov from 2.7.1 to 2.8.1
  • 885e9f5 Update six from 1.12.0 to 1.14.0
  • 93f2796 Update wcwidth from 0.1.7 to 0.1.8
  • 2da1847 Update werkzeug from 0.15.4 to 0.16.1
  • 37d64cc Update zipp from 0.5.1 to 2.1.0

📊 Changes

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

View changed files

📝 requirements.txt (+9 -9)

📄 Description

Update Flask-Admin from 1.5.3 to 1.5.4.

Changelog

1.5.4

-----

* Fix display of inline x-editable boolean fields on list view
* Add support for several SQLAlchemy-Utils data types
* Support searching on SQLAlchemy hybrid properties
* Extra URL paramaters are now propagated to the next page when searching / filtering
* Add enum34 dependency when running on legacy Python version
* Update Mapbox API v1 URL format
* Update jQuery and moment dependencies in templates
* Fixed a datepicker issue, where only dates up to 2015 were showing up
* Updated Pillow dependency version
Links

Update SQLAlchemy from 1.3.8 to 1.3.13.

Changelog

1.3.13

:released: January 22, 2020

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

     Fixed issue where the PostgreSQL dialect would fail to parse a reflected
     CHECK constraint that was a boolean-valued function (as opposed to a
     boolean-valued expression).

 .. change::
     :tags: bug, ext
     :tickets: 5086

     Fixed bug in sqlalchemy.ext.serializer where a unique
     :class:`.BindParameter` object could conflict with itself if it were
     present in the mapping itself, as well as the filter condition of the
     query, as one side would be used against the non-deserialized version and
     the other side would use the deserialized version.  Logic is added to
     :class:`.BindParameter` similar to its "clone" method which will uniquify
     the parameter name upon deserialize so that it doesn't conflict with its
     original.


 .. change::
     :tags: usecase, sql
     :tickets: 5079

     A function created using :class:`.GenericFunction` can now specify that the
     name of the function should be rendered with or without quotes by assigning
     the :class:`.quoted_name` construct to the .name element of the object.
     Prior to 1.3.4, quoting was never applied to function names, and some
     quoting was introduced in :ticket:`4467` but no means to force quoting for
     a mixed case name was available.  Additionally, the :class:`.quoted_name`
     construct when used as the name will properly register its lowercase name
     in the function registry so that the name continues to be available via the
     ``func.`` registry.

     .. seealso::

         :class:`.GenericFunction`


 .. change::
     :tags: bug, engine
     :tickets: 5048

     Fixed issue where the collection of value processors on a
     :class:`.Compiled` object would be mutated when "expanding IN" parameters
     were used with a datatype that has bind value processors; in particular,
     this would mean that when using statement caching and/or baked queries, the
     same compiled._bind_processors collection would be mutated concurrently.
     Since these processors are the same function for a given bind parameter
     namespace every time, there was no actual negative effect of this issue,
     however, the execution of a :class:`.Compiled` object should never be
     causing any changes in its state, especially given that they are intended
     to be thread-safe and reusable once fully constructed.


 .. change::
     :tags: tests, postgresql
     :tickets: 5057

     Improved detection of two phase transactions requirement for the PostgreSQL
     database by testing that max_prepared_transactions is set to a value
     greater than 0.  Pull request courtesy Federico Caselli.


 .. change::
     :tags: bug, orm, engine
     :tickets: 5056, 5050, 5071

     Added test support and repaired a wide variety of unnecessary reference
     cycles created for short-lived objects, mostly in the area of ORM queries.
     Thanks much to Carson Ip for the help on this.


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

     Fixed regression in loader options introduced in 1.3.0b3 via :ticket:`4468`
     where the ability to create a loader option using
     :meth:`.PropComparator.of_type` targeting an aliased entity that is an
     inheriting subclass of the entity which the preceding relationship refers
     to would fail to produce a matching path.   See also :ticket:`5082` fixed
     in this same release which involves a similar kind of issue.

 .. change::
     :tags: bug, tests
     :tickets: 4946

     Fixed a few test failures which would occur on Windows due to SQLite file
     locking issues, as well as some timing issues in connection pool related
     tests; pull request courtesy Federico Caselli.


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

     Fixed regression in joined eager loading introduced in 1.3.0b3 via
     :ticket:`4468` where the ability to create a joined option across a
     :func:`.with_polymorphic` into a polymorphic subclass using
     :meth:`.RelationshipProperty.of_type` and then further along regular mapped
     relationships would fail as the polymorphic subclass would not add itself
     to the load path in a way that could be located by the loader strategy.  A
     tweak has been made to resolve this scenario.


 .. change::
     :tags: performance, orm

     Identified a performance issue in the system by which a join is constructed
     based on a mapped relationship.   The clause adaption system would be used
     for the majority of join expressions including in the common case where no
     adaptation is needed.   The conditions under which this adaptation occur
     have been refined so that average non-aliased joins along a simple
     relationship without a "secondary" table use about 70% less function calls.


 .. change::
     :tags: usecase, postgresql
     :tickets: 5040

     Added support for prefixes to the :class:`.CTE` construct, to allow
     support for Postgresql 12 "MATERIALIZED" and "NOT MATERIALIZED" phrases.
     Pull request courtesy Marat Sharafutdinov.

     .. seealso::

         :meth:`.HasCTE.cte`

 .. change::
     :tags: bug, mssql
     :tickets: 5045

     Fixed issue where a timezone-aware ``datetime`` value being converted to
     string for use as a parameter value of a :class:`.mssql.DATETIMEOFFSET`
     column was omitting the fractional seconds.

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

     Repaired a warning in the ORM flush process that was not covered by  test
     coverage when deleting objects that use the "version_id" feature. This
     warning is generally unreachable unless using a dialect that sets the
     "supports_sane_rowcount" flag to False, which  is not typically the case
     however is possible for some MySQL configurations as well as older Firebird
     drivers, and likely some third party dialects.

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

     Fixed bug where usage of joined eager loading would not properly wrap the
     query inside of a subquery when :meth:`.Query.group_by` were used against
     the query.   When any kind of result-limiting approach is used, such as
     DISTINCT, LIMIT, OFFSET, joined eager loading embeds the row-limited query
     inside of a subquery so that the collection results are not impacted.   For
     some reason, the presence of GROUP BY was never included in this criterion,
     even though it has a similar effect as using DISTINCT.   Additionally, the
     bug would prevent using GROUP BY at all for a joined eager load query for
     most database platforms which forbid non-aggregated, non-grouped columns
     from being in the query, as the additional columns for the joined eager
     load would not be accepted by the database.



.. changelog::

1.3.12

:released: December 16, 2019

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

     Fixed bug where "distinct" keyword passed to :func:`.select` would not
     treat a string value as a "label reference" in the same way that the
     :meth:`.select.distinct` does; it would instead raise unconditionally. This
     keyword argument and the others passed to :func:`.select` will ultimately
     be deprecated for SQLAlchemy 2.0.


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

     Fixed issue involving ``lazy="raise"`` strategy where an ORM delete of an
     object would raise for a simple "use-get" style many-to-one relationship
     that had lazy="raise" configured.  This is inconsistent vs. the change
     introduced in 1.3 as part of :ticket:`4353`, where it was established that
     a history operation that does not expect emit SQL should bypass the
     ``lazy="raise"`` check, and instead effectively treat it as
     ``lazy="raise_on_sql"`` for this case.  The fix adjusts the lazy loader
     strategy to not raise for the case where the lazy load was instructed that
     it should not emit SQL if the object were not present.

 .. change::
     :tags: bug, sql

     Changed the text of the exception for "Can't resolve label reference" to
     include other kinds of label coercions, namely that "DISTINCT" is also in
     this category under the PostgreSQL dialect.


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

     Fixed regression introduced in 1.3.0 related to the association proxy
     refactor in :ticket:`4351` that prevented :func:`.composite` attributes
     from working in terms of an association proxy that references them.

 .. change::
     :tags: bug, mssql
     :tickets: 4983

     Repaired support for the :class:`.mssql.DATETIMEOFFSET` datatype on PyODBC,
     by adding PyODBC-level result handlers as it does not include native
     support for this datatype.  This includes usage of the Python 3 "timezone"
     tzinfo subclass in order to set up a timezone, which on Python 2 makes
     use of a minimal backport of "timezone" in sqlalchemy.util.


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

     Setting persistence-related flags on :func:`.relationship` while also
     setting viewonly=True will now emit a regular warning, as these flags do
     not make sense for a viewonly=True relationship.   In particular, the
     "cascade" settings have their own warning that is generated based on the
     individual values, such as "delete, delete-orphan", that should not apply
     to a viewonly relationship.   Note however that in the case of "cascade",
     these settings are still erroneously taking effect even though the
     relationship is set up as "viewonly".   In 1.4, all persistence-related
     cascade settings will be disallowed on a viewonly=True relationship in
     order to resolve this issue.

 .. change::
     :tags: bug, sqlite
     :tickets: 5014

     Fixed issue to workaround SQLite's behavior of assigning "numeric" affinity
     to JSON datatypes, first described at :ref:`change_3850`, which returns
     scalar numeric JSON values as a number and not as a string that can be JSON
     deserialized.  The SQLite-specific JSON deserializer now gracefully
     degrades for this case as an exception and bypasses deserialization for
     single numeric values, as from a JSON perspective they are already
     deserialized.



 .. change::
     :tags: bug, orm, py3k
     :tickets: 4990

     Fixed issue where when assigning a collection to itself as a slice, the
     mutation operation would fail as it would first erase the assigned
     collection inadvertently.   As an assignment that does not change  the
     contents should not generate events, the operation is now a no-op. Note
     that the fix only applies to Python 3; in Python 2, the ``__setitem__``
     hook isn't called in this case; ``__setslice__`` is used instead which
     recreates the list item-by-item in all cases.

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

     Fixed issue where by if the "begin" of a transaction failed at the Core
     engine/connection level, such as due to network error or database is locked
     for some transactional recipes, within the context of the :class:`.Session`
     procuring that connection from the conneciton pool and then immediately
     returning it, the ORM :class:`.Session` would not close the connection
     despite this connection not being stored within the state of that
     :class:`.Session`.  This would lead to the connection being cleaned out by
     the connection pool weakref handler within garbage collection which is an
     unpreferred codepath that in some special configurations can emit errors in
     standard error.

.. changelog::

1.3.11

:released: November 11, 2019

 .. change::
     :tags: bug, mssql
     :tickets: 4973

     Fixed issue in MSSQL dialect where an expression-based OFFSET value in a
     SELECT would be rejected, even though the dialect can render this
     expression inside of a ROW NUMBER-oriented LIMIT/OFFSET construct.


 .. change::
     :tags: orm, usecase
     :tickets: 4934

     Added accessor :meth:`.Query.is_single_entity` to :class:`.Query`, which
     will indicate if the results returned by this :class:`.Query` will be a
     list of ORM entities, or a tuple of entities or column expressions.
     SQLAlchemy hopes to improve upon the behavior of single entity / tuples in
     future releases such that the behavior would be explicit up front, however
     this attribute should be helpful with the current behavior.  Pull request
     courtesy Patrick Hayes.

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

     Added "Connection was killed" message interpreted from the base
     pymysql.Error class in order to detect closed connection, based on reports
     that this message is arriving via a pymysql.InternalError() object which
     indicates pymysql is not handling it correctly.

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

     The :paramref:`.relationship.omit_join` flag was not intended to be
     manually set to True, and will now emit a warning when this occurs.  The
     omit_join optimization is detected automatically, and the ``omit_join``
     flag was only intended to disable the optimization in the hypothetical case
     that the optimization may have interfered with correct results, which has
     not been observed with the modern version of this feature.   Setting the
     flag to True when it is not automatically detected may cause the selectin
     load feature to not work correctly when a non-default primary join
     condition is in use.


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

     A warning is emitted if a primary key value is passed to :meth:`.Query.get`
     that consists of None for all primary key column positions.   Previously,
     passing a single None outside of a tuple would raise a ``TypeError`` and
     passing a composite None (tuple of None values) would silently pass
     through.   The fix now coerces the single None into a tuple where it is
     handled consistently with the other None conditions.  Thanks to Lev
     Izraelit for the help with this.


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

     The :class:`.BakedQuery` will not cache a query that was modified by a
     :meth:`.QueryEvents.before_compile` event, so that compilation hooks that
     may be applying ad-hoc modifications to queries will take effect on each
     run.  In particular this is helpful for events that modify queries used in
     lazy loading as well as eager loading such as "select in" loading.  In
     order to re-enable caching for a query modified by this event, a new
     flag ``bake_ok`` is added; see :ref:`baked_with_before_compile` for
     details.

     A longer term plan to provide a new form of SQL caching should solve this
     kind of issue more comprehensively.

 .. change::
     :tags: bug, tests
     :tickets: 4920

     Fixed test failures which would occur with newer SQLite as of version 3.30
     or greater, due to their addition of nulls ordering syntax as well as new
     restrictions on aggregate functions.  Pull request courtesy Nils Philippsen.



 .. change::
     :tags: bug, installation, windows
     :tickets: 4967

     Added a workaround for a setuptools-related failure that has been observed
     as occurring on Windows installations, where setuptools is not correctly
     reporting a build error when the MSVC build dependencies are not installed
     and therefore not allowing graceful degradation into non C extensions
     builds.

 .. change::
     :tags: bug, sql, py3k
     :tickets: 4931

     Changed the ``repr()`` of the :class:`.quoted_name` construct to use
     regular string repr() under Python 3, rather than running it through
     "backslashreplace" escaping, which can be misleading.

 .. change::
     :tags: bug, oracle, firebird
     :tickets: 4931

     Modified the approach of "name normalization" for the Oracle and Firebird
     dialects, which converts from the UPPERCASE-as-case-insensitive convention
     of these dialects into lowercase-as-case-insensitive for SQLAlchemy, to not
     automatically apply the :class:`.quoted_name` construct to a name that
     matches itself under upper or lower case conversion, as is the case for
     many non-european characters.   All names used within metadata structures
     are converted to :class:`.quoted_name` objects in any case; the change
     here would only affect the output of some inspection functions.

 .. change::
     :tags: bug, schema
     :tickets: 4911

     Fixed bug where a table that would have a column label overlap with a plain
     column name, such as "foo.id AS foo_id" vs. "foo.foo_id", would prematurely
     generate the ``._label`` attribute for a column before this overlap could
     be detected due to the use of the ``index=True`` or ``unique=True`` flag on
     the column in conjunction with the default naming convention of
     ``"column_0_label"``.  This would then lead to failures when ``._label``
     were used later to generate a bound parameter name, in particular those
     used by the ORM when generating the WHERE clause for an UPDATE statement.
     The issue has been fixed by using an alternate ``._label`` accessor for DDL
     generation that does not affect the state of the :class:`.Column`.   The
     accessor also bypasses the key-deduplication step as it is not necessary
     for DDL, the naming is now consistently ``"<tablename>_<columnname>"``
     without any subsequent numeric symbols when used in DDL.



 .. change::
     :tags: bug, engine
     :tickets: 4902

     Fixed bug where parameter repr as used in logging and error reporting needs
     additional context in order to distinguish between a list of parameters for
     a single statement and a list of parameter lists, as the "list of lists"
     structure could also indicate a single parameter list where the first
     parameter itself is a list, such as for an array parameter.   The
     engine/connection now passes in an additional boolean indicating how the
     parameters should be considered.  The only SQLAlchemy backend that expects
     arrays as parameters is that of  psycopg2 which uses pyformat parameters,
     so this issue has not been too apparent, however as other drivers that use
     positional gain more features it is important that this be supported. It
     also eliminates the need for the parameter repr function to guess based on
     the parameter structure passed.

 .. change::
     :tags: usecase, schema
     :tickets: 4894

     Added DDL support for "computed columns"; these are DDL column
     specifications for columns that have a server-computed value, either upon
     SELECT (known as "virtual") or at the point of which they are INSERTed or
     UPDATEd (known as "stored").  Support is established for Postgresql, MySQL,
     Oracle SQL Server and Firebird. Thanks to Federico Caselli for lots of work
     on this one.

     .. seealso::

         :ref:`computed_ddl`


 .. change::
     :tags: bug, engine, postgresql
     :tickets: 4955

     Fixed bug in :class:`.Inspector` where the cache key generation did not
     take into account arguments passed in the form of tuples, such as the tuple
     of view name styles to return for the PostgreSQL dialect. This would lead
     the inspector to cache too generally for a more specific set of criteria.
     The logic has been adjusted to include every keyword element in the cache,
     as every argument is expected to be appropriate for a cache else the
     caching decorator should be bypassed by the dialect.


 .. change::
     :tags: bug, mssql
     :tickets: 4923

     Fixed an issue in the :meth:`.Engine.table_names` method where it would
     feed the dialect's default schema name back into the dialect level table
     function, which in the case of SQL Server would interpret it as a
     dot-tokenized schema name as viewed by the mssql dialect, which would
     cause the method to fail in the case where the database username actually
     had a dot inside of it.  In 1.3, this method is still used by the
     :meth:`.MetaData.reflect` function so is a prominent codepath. In 1.4,
     which is the current master development branch, this issue doesn't exist,
     both because :meth:`.MetaData.reflect` isn't using this method nor does the
     method pass the default schema name explicitly.  The fix nonetheless
     guards against the default server name value returned by the dialect from
     being interpreted as dot-tokenized name under any circumstances by
     wrapping it in quoted_name().

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

     Fixed ORM bug where a "secondary" table that referred to a selectable which
     in some way would refer to the local primary table would apply aliasing to
     both sides of the join condition when a relationship-related join, either
     via :meth:`.Query.join` or by :func:`.joinedload`, were generated.  The
     "local" side is now excluded.

 .. change::
     :tags: usecase, sql
     :tickets: 4276

     Added new accessors to expressions of type :class:`.JSON` to allow for
     specific datatype access and comparison, covering strings, integers,
     numeric, boolean elements.   This revises the documented approach of
     CASTing to string when comparing values, instead adding specific
     functionality into the PostgreSQL, SQlite, MySQL dialects to reliably
     deliver these basic types in all cases.

     .. seealso::

         :class:`.JSON`

         :meth:`.JSON.Comparator.as_string`

         :meth:`.JSON.Comparator.as_boolean`

         :meth:`.JSON.Comparator.as_float`

         :meth:`.JSON.Comparator.as_integer`

 .. change::
     :tags: usecase, oracle
     :tickets: 4799

     Added dialect-level flag ``encoding_errors`` to the cx_Oracle dialect,
     which can be specified as part of :func:`.create_engine`.   This is passed
     to SQLAlchemy's unicode decoding converter under Python 2, and to
     cx_Oracle's ``cursor.var()`` object as the ``encodingErrors`` parameter
     under Python 3, for the very unusual case that broken encodings are present
     in the target database which cannot be fetched unless error handling is
     relaxed.  The value is ultimately one of the Python "encoding errors"
     parameters passed to ``decode()``.

 .. change::
     :tags: usecase, sql
     :tickets: 4933

     The :func:`.text` construct now supports "unique" bound parameters, which
     will dynamically uniquify themselves on compilation thus allowing multiple
     :func:`.text` constructs with the same bound parameter names to be combined
     together.


 .. change::
     :tags: bug, oracle
     :tickets: 4913

     The :class:`.sqltypes.NCHAR` datatype will now bind to the
     ``cx_Oracle.FIXED_NCHAR`` DBAPI data bindings when used in a bound
     parameter, which supplies proper comparison behavior against a
     variable-length string.  Previously, the :class:`.sqltypes.NCHAR` datatype
     would bind to ``cx_oracle.NCHAR`` which is not fixed length; the
     :class:`.sqltypes.CHAR` datatype already binds to ``cx_Oracle.FIXED_CHAR``
     so it is now consistent that :class:`.sqltypes.NCHAR` binds to
     ``cx_Oracle.FIXED_NCHAR``.



 .. change::
     :tags: bug, firebird
     :tickets: 4903

     Added additional "disconnect" message "Error writing data to the
     connection" to Firebird disconnection detection.  Pull request courtesy
     lukens.

.. changelog::

1.3.10

:released: October 9, 2019

 .. change::
     :tags: bug, mssql
     :tickets: 4857

     Fixed bug in SQL Server dialect with new "max_identifier_length" feature
     where the mssql dialect already featured this flag, and the implementation
     did not accommodate for the new initialization hook correctly.


 .. change::
     :tags: bug, oracle
     :tickets: 4898, 4857

     Fixed regression in Oracle dialect that was inadvertently using max
     identifier length of 128 characters on Oracle server 12.2 and greater even
     though the stated contract for the remainder of the 1.3 series is  that
     this value stays at 30 until version SQLAlchemy 1.4.  Also repaired issues
     with the retrieval of the "compatibility" version, and removed the warning
     emitted when the "v$parameter" view was not accessible as this was  causing
     user confusion.

.. changelog::

1.3.9

:released: October 4, 2019

 .. change::
     :tags: usecase, engine
     :tickets: 4857

     Added new :func:`.create_engine` parameter
     :paramref:`.create_engine.max_identifier_length`. This overrides the
     dialect-coded "max identifier length" in order to accommodate for databases
     that have recently changed this length and the SQLAlchemy dialect has
     not yet been adjusted to detect for that version.  This parameter interacts
     with the existing :paramref:`.create_engine.label_length` parameter in that
     it establishes the maximum (and default) value for anonymously generated
     labels.   Additionally, post-connection detection of max identifier lengths
     has been added to the dialect system.  This feature is first being used
     by the Oracle dialect.

     .. seealso::

         :ref:`oracle_max_identifier_lengths` - in the Oracle dialect documentation

 .. change::
     :tags: usecase, oracle
     :tickets: 4857

     The Oracle dialect now emits a warning if Oracle version 12.2 or greater is
     used, and the :paramref:`.create_engine.max_identifier_length` parameter is
     not set.   The version in this specific case defaults to that of the
     "compatibility" version set in the Oracle server configuration, not the
     actual server version.   In version 1.4, the default max_identifier_length
     for 12.2 or greater will move to 128 characters.  In order to maintain
     forwards compatibility, applications should set
     :paramref:`.create_engine.max_identifier_length` to 30 in order to maintain
     the same length behavior, or to 128 in order to test the upcoming behavior.
     This length determines among other things how generated constraint names
     are truncated for statements like ``CREATE CONSTRAINT`` and ``DROP
     CONSTRAINT``, which means a the new length may produce a name-mismatch
     against a name that was generated with the old length, impacting database
     migrations.

     .. seealso::

         :ref:`oracle_max_identifier_lengths` - in the Oracle dialect documentation

 .. change::
     :tags: usecase, sqlite
     :tickets: 4863

     Added support for sqlite "URI" connections, which allow for sqlite-specific
     flags to be passed in the query string such as "read only" for Python
     sqlite3 drivers that support this.

     .. seealso::

         :ref:`pysqlite_uri_connections`

 .. change::
     :tags: bug, tests
     :tickets: 4285

     Fixed unit test regression released in 1.3.8 that would cause failure for
     Oracle, SQL Server and other non-native ENUM platforms due to new
     enumeration tests added as part of :ticket:`4285` enum sortability in the
     unit of work; the enumerations created constraints that were duplicated on
     name.

 .. change::
     :tags: bug, oracle
     :tickets: 4886

     Restored adding cx_Oracle.DATETIME to the setinputsizes() call when a
     SQLAlchemy :class:`.Date`, :class:`.DateTime` or :class:`.Time` datatype is
     used, as some complex queries require this to be present.  This was removed
     in the 1.2 series for arbitrary reasons.

 .. change::
     :tags: bug, mssql
     :tickets: 4883

     Added identifier quoting to the schema name applied to the "use" statement
     which is invoked when a SQL Server multipart schema name is used within  a
     :class:`.Table` that is being reflected, as well as for :class:`.Inspector`
     methods such as :meth:`.Inspector.get_table_names`; this accommodates for
     special characters or spaces in the database name.  Additionally, the "use"
     statement is not emitted if the current database matches the target owner
     database name being passed.

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

     Fixed regression in selectinload loader strategy caused by :ticket:`4775`
     (released in version 1.3.6) where a many-to-one attribute of None would no
     longer be populated by the loader.  While this was usually not noticeable
     due to the lazyloader populating None upon get, it would lead to a detached
     instance error if the object were detached.

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

     Passing a plain string expression to :meth:`.Session.query` is deprecated,
     as all string coercions were removed in :ticket:`4481` and this one should
     have been included.   The :func:`.literal_column` function may be used to
     produce a textual column expression.

 .. change::
     :tags: usecase, sql
     :tickets: 4847

     Added an explicit error message for the case when objects passed to
     :class:`.Table` are not :class:`.SchemaItem` objects, rather than resolving
     to an attribute error.


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

     A warning is emitted for a condition in which the :class:`.Session` may
     implicitly swap an object out of the identity map for another one with the
     same primary key, detaching the old one, which can be an observed result of
     load operations which occur within the :meth:`.SessionEvents.after_flush`
     hook.  The warning is intended to notify the user that some special
     condition has caused this to happen and that the previous object may not be
     in the expected state.

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

     Characters that interfere with "pyformat" or "named" formats in bound
     parameters, namely ``%, (, )`` and the space character, as well as a few
     other typically undesirable characters, are stripped early for a
     :func:`.bindparam` that is using an anonymized name, which is typically
     generated automatically from a named column which itself includes these
     characters in its name and does not use a ``.key``, so that they do not
     interfere either with the SQLAlchemy compiler's use of string formatting or
     with the driver-level parsing of the parameter, both of which could be
     demonstrated before the fix.  The change only applies to anonymized
     parameter names that are generated and consumed internally, not end-user
     defined names, so the change should have no impact on any existing code.
     Applies in particular to the psycopg2 driver which does not otherwise quote
     special parameter names, but also strips leading underscores to suit Oracle
     (but not yet leading numbers, as some anon parameters are currently
     entirely numeric/underscore based); Oracle in any case continues to quote
     parameter names that include special characters.

.. changelog::
Links

Update coverage from 4.5.4 to 5.0.3.

Changelog

5.0.3

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

- A performance improvement in 5.0.2 didn't work for test suites that changed
directory before combining data, causing "Couldn't use data file: no such
table: meta" errors (`issue 916`_).  This is now fixed.

- Coverage could fail to run your program with some form of "ModuleNotFound" or
"ImportError" trying to import from the current directory. This would happen
if coverage had been packaged into a zip file (for example, on Windows), or
was found indirectly (for example, by pyenv-virtualenv).  A number of
different scenarios were described in `issue 862`_ which is now fixed.  Huge
thanks to Agbonze O. Jeremiah for reporting it, and Alexander Waters and
George-Cristian Bîrzan for protracted debugging sessions.

- Added the "premain" debug option.

- Added SQLite compile-time options to the "debug sys" output.

.. _issue 862: https://github.com/nedbat/coveragepy/issues/862
.. _issue 916: https://github.com/nedbat/coveragepy/issues/916


.. _changes_502:

5.0.2

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

- Programs that used multiprocessing and changed directories would fail under
coverage.  This is now fixed (`issue 890`_).  A side effect is that debug
information about the config files read now shows absolute paths to the
files.

- When running programs as modules (``coverage run -m``) with ``--source``,
some measured modules were imported before coverage starts.  This resulted in
unwanted warnings ("Already imported a file that will be measured") and a
reduction in coverage totals (`issue 909`_).  This is now fixed.

- If no data was collected, an exception about "No data to report" could happen
instead of a 0% report being created (`issue 884`_).  This is now fixed.

- The handling of source files with non-encodable file names has changed.
Previously, if a file name could not be encoded as UTF-8, an error occurred,
as described in `issue 891`_.  Now, those files will not be measured, since
their data would not be recordable.

- A new warning ("dynamic-conflict") is issued if two mechanisms are trying to
change the dynamic context.  Closes `issue 901`_.

- ``coverage run --debug=sys`` would fail with an AttributeError. This is now
fixed (`issue 907`_).

.. _issue 884: https://github.com/nedbat/coveragepy/issues/884
.. _issue 890: https://github.com/nedbat/coveragepy/issues/890
.. _issue 891: https://github.com/nedbat/coveragepy/issues/891
.. _issue 901: https://github.com/nedbat/coveragepy/issues/901
.. _issue 907: https://github.com/nedbat/coveragepy/issues/907
.. _issue 909: https://github.com/nedbat/coveragepy/issues/909


.. _changes_501:

5.0.1

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

- If a 4.x data file is the cause of a "file is not a database" error, then use
a more specific error message, "Looks like a coverage 4.x data file, are you
mixing versions of coverage?"  Helps diagnose the problems described in
`issue 886`_.

- Measurement contexts and relative file names didn't work together, as
reported in `issue 899`_ and `issue 900`_.  This is now fixed, thanks to
David Szotten.

- When using ``coverage run --concurrency=multiprocessing``, all data files
should be named with parallel-ready suffixes.  5.0 mistakenly named the main
process' file with no suffix when using ``--append``.  This is now fixed,
closing `issue 880`_.

- Fixed a problem on Windows when the current directory is changed to a
different drive (`issue 895`_).  Thanks, Olivier Grisel.

- Updated Python 3.9 support to 3.9a2.

.. _issue 880: https://github.com/nedbat/coveragepy/issues/880
.. _issue 886: https://github.com/nedbat/coveragepy/issues/886
.. _issue 895: https://github.com/nedbat/coveragepy/issues/895
.. _issue 899: https://github.com/nedbat/coveragepy/issues/899
.. _issue 900: https://github.com/nedbat/coveragepy/issues/900


.. _changes_50:

5.0

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

Nothing new beyond 5.0b2.


.. _changes_50b2:

5.0b2

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

- An experimental ``[run] relative_files`` setting tells coverage to store
relative file names in the data file. This makes it easier to run tests in
one (or many) environments, and then report in another.  It has not had much
real-world testing, so it may change in incompatible ways in the future.

- When constructing a :class:`coverage.Coverage` object, `data_file` can be
specified as None to prevent writing any data file at all.  In previous
versions, an explicit `data_file=None` argument would use the default of
".coverage". Fixes `issue 871`_.

- Python files run with ``-m`` now have ``__spec__`` defined properly.  This
fixes `issue 745`_ (about not being able to run unittest tests that spawn
subprocesses), and `issue 838`_, which described the problem directly.

- The ``[paths]`` configuration section is now ordered. If you specify more
than one list of patterns, the first one that matches will be used.  Fixes
`issue 649`_.

- The :func:`.coverage.numbits.register_sqlite_functions` function now also
registers `numbits_to_nums` for use in SQLite queries.  Thanks, Simon
Willison.

- Python 3.9a1 is supported.

- Coverage.py has a mascot: :ref:`Sleepy Snake <sleepy>`.

.. _issue 649: https://github.com/nedbat/coveragepy/issues/649
.. _issue 745: https://github.com/nedbat/coveragepy/issues/745
.. _issue 838: https://github.com/nedbat/coveragepy/issues/838
.. _issue 871: https://github.com/nedbat/coveragepy/issues/871


.. _changes_50b1:

5.0b1

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

- The HTML and textual reports now have a ``--skip-empty`` option that skips
files with no statements, notably ``__init__.py`` files.  Thanks, Reya B.

- Configuration can now be read from `TOML`_ files.  This requires installing
coverage.py with the ``[toml]`` extra.  The standard "pyproject.toml" file
will be read automatically if no other configuration file is found, with
settings in the ``[tool.coverage.]`` namespace.  Thanks to Frazer McLean for
implementation and persistence.  Finishes `issue 664`_.

- The ``[run] note`` setting has been deprecated. Using it will result in a
warning, and the note will not be written to the data file.  The
corresponding :class:`.CoverageData` methods have been removed.

- The HTML report has been reimplemented (no more table around the source
code). This allowed for a better presentation of the context information,
hopefully resolving `issue 855`_.

- Added sqlite3 module version information to ``coverage debug sys`` output.

- Asking the HTML report to show contexts (``[html] show_contexts=True`` or
``coverage html --show-contexts``) will issue a warning if there were no
contexts measured (`issue 851`_).

.. _TOML: https://github.com/toml-lang/tomlreadme
.. _issue 664: https://github.com/nedbat/coveragepy/issues/664
.. _issue 851: https://github.com/nedbat/coveragepy/issues/851
.. _issue 855: https://github.com/nedbat/coveragepy/issues/855


.. _changes_50a8:

5.0a8

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

- The :class:`.CoverageData` API has changed how queries are limited to
specific contexts.  Now you use :meth:`.CoverageData.set_query_context` to
set a single exact-match string, or :meth:`.CoverageData.set_query_contexts`
to set a list of regular expressions to match contexts.  This changes the
command-line ``--contexts`` option to use regular expressions instead of
filename-style wildcards.


.. _changes_50a7:

5.0a7

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

- Data can now be "reported" in JSON format, for programmatic use, as requested
in `issue 720`_.  The new ``coverage json`` command writes raw and summarized
data to a JSON file.  Thanks, Matt Bachmann.

- Dynamic contexts are now supported in the Python tracer, which is important
for PyPy users.  Closes `issue 846`_.

- The compact line number representation introduced in 5.0a6 is called a
"numbits."  The :mod:`coverage.numbits` module provides functions for working
with them.

- The reporting methods used to permanently apply their arguments to the
configuration of the Coverage object.  Now they no longer do.  The arguments
affect the operation of the method, but do not persist.

- A class named "test_something" no longer confuses the ``test_function``
dynamic context setting.  Fixes `issue 829`_.

- Fixed an unusual tokenizing issue with backslashes in comments.  Fixes
`issue 822`_.

- ``debug=plugin`` didn't properly support configuration or dynamic context
plugins, but now it does, closing `issue 834`_.

.. _issue 720: https://github.com/nedbat/coveragepy/issues/720
.. _issue 822: https://github.com/nedbat/coveragepy/issues/822
.. _issue 834: https://github.com/nedbat/coveragepy/issues/834
.. _issue 829: https://github.com/nedbat/coveragepy/issues/829
.. _issue 846: https://github.com/nedbat/coveragepy/issues/846


.. _changes_50a6:

5.0a6

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

- Reporting on contexts. Big thanks to Stephan Richter and Albertas Agejevas
for the contribution.

- The ``--contexts`` option is available on the ``report`` and ``html``
 commands.  It's a comma-separated list of shell-style wildcards, selecting
 the contexts to report on.  Only contexts matching one of the wildcards
 will be included in the report.

- The ``--show-contexts`` option for the ``html`` command adds context
 information to each covered line.  Hovering over the "ctx" marker at the
 end of the line reveals a list of the contexts that covered the line.

- Database changes:

- Line numbers are now stored in a much more compact way.  For each file and
 context, a single binary string is stored with a bit per line number.  This
 greatly improves memory use, but makes ad-hoc use difficult.

- Dynamic contexts with no data are no longer written to the database.

- SQLite data storage is now faster.  There's no longer a reason to keep the
 JSON data file code, so it has been removed.

- Changes to the :class:`.CoverageData` interface:

- The new :meth:`.CoverageData.dumps` method serializes the data to a string,
 and a corresponding :meth:`.CoverageData.loads` method reconstitutes this
 data.  The format of the data string is subject to change at any time, and
 so should only be used between two installations of the same version of
 coverage.py.

- The :meth:`CoverageData constructor<.CoverageData.__init__>` has a new
 argument, `no_disk` (default: False).  Setting it to True prevents writing
 any data to the disk.  This is useful for transient data objects.

- Added the classmethod :meth:`.Coverage.current` to get the latest started
Coverage instance.

- Multiprocessing support in Python 3.8 was broken, but is now fixed.  Closes
`issue 828`_.

- Error handling during reporting has changed slightly.  All reporting methods
now behave the same.  The ``--ignore-errors`` option keeps errors from
stopping the reporting, but files that couldn't parse as Python will always
be reported as warnings.  As with other warnings, you can suppress them with
the ``[run] disable_warnings`` configuration setting.

- Coverage.py no longer fails if the user program deletes its current
directory. Fixes `issue 806`_.  Thanks, Dan Hemberger.

- The scrollbar markers in the HTML report now accurately show the highlighted
lines, regardless of what categories of line are highlighted.

- The hack to accommodate ShiningPanda_ looking for an obsolete internal data
file has been removed, since ShiningPanda 0.22 fixed it four years ago.

- The deprecated `Reporter.file_reporters` property has been removed.

.. _ShiningPanda: https://wiki.jenkins.io/display/JENKINS/ShiningPanda+Plugin
.. _issue 806: https://github.com/nedbat/coveragepy/pull/806
.. _issue 828: https://github.com/nedbat/coveragepy/issues/828


.. _changes_50a5:

5.0a5

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

- Drop support for Python 3.4

- Dynamic contexts can now be set two new ways, both thanks to Justas
Sadzevičius.

- A plugin can implement a ``dynamic_context`` method to check frames for
 whether a new context should be started.  See
 :ref:`dynamic_context_plugins` for more details.

- Another tool (such as a test runner) can use the new
 :meth:`.Coverage.switch_context` method to explicitly change the context.

- The ``dynamic_context = test_function`` setting now works with Python 2
old-style classes, though it only reports the method name, not the class it
was defined on.  Closes `issue 797`_.

- ``fail_under`` values more than 100 are reported as errors.  Thanks to Mike
Fiedler for closing `issue 746`_.

- The "missing" values in the text output are now sorted by line number, so
that missing branches are reported near the other lines they affect. The
values used to show all missing lines, and then all missing branches.

- Access to the SQLite database used for data storage is now thread-safe.
Thanks, Stephan Richter. This closes `issue 702`_.

- Combining data stored in SQLite is now about twice as fast, fixing `issue
761`_.  Thanks, Stephan Richter.

- The ``filename`` attribute on :class:`.CoverageData` objects has been made
private.  You can use the ``data_filename`` method to get the actual file
name being used to store data, and the ``base_filename`` method to get the
original filename before parallelizing suffixes were added.  This is part of
fixing `issue 708`_.

- Line numbers in the HTML report now align properly with source lines, even
when Chrome's minimum font size is set, fixing `issue 748`_.  Thanks Wen Ye.

.. _issue 702: https://github.com/nedbat/coveragepy/issues/702
.. _issue 708: https://github.com/nedbat/coveragepy/issues/708
.. _issue 746: https://github.com/nedbat/coveragepy/issues/746
.. _issue 748: https://github.com/nedbat/coveragepy/issues/748
.. _issue 761: https://github.com/nedbat/coveragepy/issues/761
.. _issue 797: https://github.com/nedbat/coveragepy/issues/797


.. _changes_50a4:

5.0a4

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

- You can specify the command line to run your program with the ``[run]
command_line`` configuration setting, as requested in `issue 695`_.

- Coverage will create directories as needed for the data file if they don't
exist, closing `issue 721`_.

- The ``coverage run`` command has always adjusted the first entry in sys.path,
to properly emulate how Python runs your program.  Now this adjustment is
skipped if sys.path[0] is already different than Python's default.  This
fixes `issue 715`_.

- Improvements to context support:

- The "no such table: meta" error is fixed.: `issue 716`_.

- Combining data files is now much faster.

- Python 3.8 (as of today!) passes all tests.

.. _issue 695: https://github.com/nedbat/coveragepy/issues/695
.. _issue 715: https://github.com/nedbat/coveragepy/issues/715
.. _issue 716: https://github.com/nedbat/coveragepy/issues/716
.. _issue 721: https://github.com/nedbat/coveragepy/issues/721


.. _changes_50a3:

5.0a3

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

- Context support: static contexts let you specify a label for a coverage run,
which is recorded in the data, and retained when you combine files.  See
:ref:`contexts` for more information.

- Dynamic contexts: specifying ``[run] dynamic_context = test_function`` in the
config file will record the test function name as a dynamic context during
execution.  This is the core of "Who Tests What" (`issue 170`_).  Things to
note:

- There is no reporting support yet.  Use SQLite to query the .coverage file
 for information.  Ideas are welcome about how reporting could be extended
 to use this data.

- There's a noticeable slow-down before any test is run.

- Data files will now be roughly N times larger, where N is the number of
 tests you have.  Combining data files is therefore also N times slower.

- No other values for ``dynamic_context`` are recognized yet.  Let me know
 what else would be useful.  I'd like to use a pytest plugin to get better
 information directly from pytest, for example.

.. _issue 170: https://github.com/nedbat/coveragepy/issues/170

- Environment variable substitution in configuration files now supports two
syntaxes for controlling the behavior of undefined variables: if ``VARNAME``
is not defined, ``${VARNAME?}`` will raise an error, and ``${VARNAME-default
value}`` will use "default value".

- Partial support for Python 3.8, which has not yet released an alpha. Fixes
`issue 707`_ and `issue 714`_.

.. _issue 707: https://github.com/nedbat/coveragepy/issues/707
.. _issue 714: https://github.com/nedbat/coveragepy/issues/714


.. _changes_50a2:

5.0a2

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

- Coverage's data storage has changed.  In version 4.x, .coverage files were
basically JSON.  Now, they are SQLite databases.  This means the data file
can be created earlier than it used to.  A large amount of code was
refactored to support this change.

- Because the data file is created differently than previous releases, you
 may need ``parallel=true`` where you didn't before.

- The old data format is still available (for now) by setting the environment
 variable COVERAGE_STORAGE=json. Please tell me if you think you need to
 keep the JSON format.

- The database schema is guaranteed to change in the future, to support new
 features.  I'm looking for opinions about making the schema part of the
 public API to coverage.py or not.

- Development moved from `Bitbucket`_ to `GitHub`_.

- HTML files no longer have trailing and extra whitespace.

- The sort order in the HTML report is stored in local storage rather than
cookies, closing `issue 611`_.  Thanks, Federico Bond.

- pickle2json, for converting v3 data files to v4 data files, has been removed.

.. _Bitbucket: https://bitbucket.org/ned/coveragepy
.. _GitHub: https://github.com/nedbat/coveragepy

.. _issue 611: https://github.com/nedbat/coveragepy/issues/611


.. _changes_50a1:

5.0a1

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

- Coverage.py no longer supports Python 2.6 or 3.3.

- The location of the configuration file can now be specified with a
``COVERAGE_RCFILE`` environment variable, as requested in `issue 650`_.

- Namespace packages are supported on Python 3.7, where they used to cause
TypeErrors about path being None. Fixes `issue 700`_.

- A new warning (``already-imported``) is issued if measurable files have
already been imported before coverage.py started measurement.  See
:ref:`cmd_warnings` for more information.

- Running coverage many times for small runs in a single process should be
faster, closing `issue 625`_.  Thanks, David MacIver.

- Large HTML report pages load faster.  Thanks, Pankaj Pandey.

.. _issue 625: https://bitbucket.org/ned/coveragepy/issues/625/lstat-dominates-in-the-case-of-small
.. _issue 650: https://bitbucket.org/ned/coveragepy/issues/650/allow-setting-configuration-file-location
.. _issue 700: https://github.com/nedbat/coveragepy/issues/700


.. _changes_454:
Links

Update pytest from 5.2.0 to 5.3.5.

The bot wasn't able to find a changelog for this release. Got an idea?

Links

Update pytest-cov from 2.7.1 to 2.8.1.

Changelog

2.8.1

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

* Fixed `348 <https://github.com/pytest-dev/pytest-cov/issues/348>`_ -
regression when only certain reports (html or xml) are used then ``--cov-fail-under`` always fails.

2.8.0

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

* Fixed ``RecursionError`` that can occur when using
`cleanup_on_signal <https://pytest-cov.readthedocs.io/en/latest/subprocess-support.htmlif-you-got-custom-signal-handling>`__ or
`cleanup_on_sigterm <https://pytest-cov.readthedocs.io/en/latest/subprocess-support.htmlif-you-got-custom-signal-handling>`__.
See: `294 <https://github.com/pytest-dev/pytest-cov/issues/294>`_.
The 2.7.x releases of pytest-cov should be considered broken regarding aforementioned cleanup API.
* Added compatibility with future xdist release that deprecates some internals
(match pytest-xdist master/worker terminology).
Contributed by Thomas Grainger in `321 <https://github.com/pytest-dev/pytest-cov/pull/321>`_
* Fixed breakage that occurs when multiple reporting options are used.
Contributed by Thomas Grainger in `338 <https://github.com/pytest-dev/pytest-cov/pull/338>`_.
* Changed internals to use a stub instead of ``os.devnull``.
Contributed by Thomas Grainger in `332 <https://github.com/pytest-dev/pytest-cov/pull/332>`_.
* Added support for Coverage 5.0.
Contributed by Ned Batchelder in `319 <https://github.com/pytest-dev/pytest-cov/pull/319>`_.
* Added support for float values in ``--cov-fail-under``.
Contributed by Martín Gaitán in `311 <https://github.com/pytest-dev/pytest-cov/pull/311>`_.
* Various documentation fixes. Contributed by
Juanjo Bazán,
Andrew Murray and
Albert Tugushev in
`298 <https://github.com/pytest-dev/pytest-cov/pull/298>`_,
`299 <https://github.com/pytest-dev/pytest-cov/pull/299>`_ and
`307 <https://github.com/pytest-dev/pytest-cov/pull/307>`_.
* Various testing improvements. Contributed by
Ned Batchelder,
Daniel Hahler,
Ionel Cristian Mărieș and
Hugo van Kemenade in
`313 <https://github.com/pytest-dev/pytest-cov/pull/313>`_,
`314 <https://github.com/pytest-dev/pytest-cov/pull/314>`_,
`315 <https://github.com/pytest-dev/pytest-cov/pull/315>`_,
`316 <https://github.com/pytest-dev/pytest-cov/pull/316>`_,
`325 <https://github.com/pytest-dev/pytest-cov/pull/325>`_,
`326 <https://github.com/pytest-dev/pytest-cov/pull/326>`_,
`334 <https://github.com/pytest-dev/pytest-cov/pull/334>`_ and
`335 <https://github.com/pytest-dev/pytest-cov/pull/335>`_.
* Added the ``--cov-context`` CLI options that enables coverage contexts. Only works with coverage 5.0+.
Contributed by Ned Batchelder in `345 <https://github.com/pytest-dev/pytest-cov/pull/345>`_.
Links

Update six from 1.12.0 to 1.14.0.

Changelog

1.14.0

------

- Issue 288, pull request 289: Add `six.assertNotRegex`.

- Issue 317: `six.moves._dummy_thread` now points to the `_thread` module on
Python 3.9+. Python 3.7 and later requires threading and deprecated the
`_dummy_thread` module.

- Issue 308, pull request 314: Remove support for Python 2.6 and Python 3.2.

- Issue 250, issue 165, pull request 251: `six.wraps` now ignores missing
attributes. This follows the Python 3.2+ standard library behavior.

1.13.0

------

- Issue 298, pull request 299: Add `six.moves.dbm_ndbm`.

- Issue 155: Add `six.moves.collections_abc`, which aliases the `collections`
module on Python 2-3.2 and the `collections.abc` on Python 3.3 and greater.

- Pull request 304: Re-add distutils fallback in `setup.py`.

- Pull request 305: On Python 3.7, `with_metaclass` supports classes using PEP
560 features.
Links

Update wcwidth from 0.1.7 to 0.1.8.

Changelog
Links

Update Werkzeug from 0.15.4 to 0.16.1.

Changelog

0.16.1

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

Released 2020-01-27

-   Fix import location in deprecation messages for subpackages.
 :issue:`1663`
-   Fix an SSL error on Python 3.5 when the dev server responds with no
 content. :issue:`1659`

0.16.0

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

Released 2019-09-19

-   Deprecate most top-level attributes provided by the ``werkzeug``
 module in favor of direct imports. The deprecated imports will be
 removed in version 1.0.

 For example, instead of ``import werkzeug; werkzeug.url_quote``, do
 ``from werkzeug.urls import url_quote``. A deprecation warning will
 show the correct import to use. ``werkzeug.exceptions`` and
 ``werkzeug.routing`` should also be imported instead of accessed,
 but for technical reasons can't show a warning.

 :issue:`2`, :pr:`1640`

0.15.6

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

Released 2019-09-04

-   Work around a bug in pip that caused the reloader to fail on
 Windows when the script was an entry point. This fixes the issue
 with Flask's `flask run` command failing with "No module named
 Scripts\flask". :issue:`1614`
-   ``ProxyFix`` trusts the ``X-Forwarded-Proto`` header by default.
 :issue:`1630`
-   The deprecated ``num_proxies`` argument to ``ProxyFix`` sets
 ``x_for``, ``x_proto``, and ``x_host`` to match 0.14 behavior. This
 is intended to make intermediate upgrades less disruptive, but the
 argument will still be removed in 1.0. :issue:`1630`

0.15.5

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

Released 2019-07-17

-   Fix a ``TypeError`` due to changes to ``ast.Module`` in Python 3.8.
 :issue:`1551`
-   Fix a C assertion failure in debug builds of some Python 2.7
 releases. :issue:`1553`
-   :class:`~exceptions.BadRequestKeyError` adds the ``KeyError``
 message to the description if ``e.show_exception`` is set to
 ``True``. This is a more secure default than the original 0.15.0
 behavior and makes it easier to control without losing information.
 :pr:`1592`
-   Upgrade the debugger to jQuery 3.4.1. :issue:`1581`
-   Work around an issue in some external debuggers that caused the
 reloader to fail. :issue:`1607`
-   Work around an issue where the reloader couldn't introspect a
 setuptools script installed as an egg. :issue:`1600`
-   The reloader will use ``sys.executable`` even if the script is
 marked executable, reverting a behavior intended for NixOS
 introduced in 0.15. The reloader should no longer cause
 ``OSError: [Errno 8] Exec format error``. :issue:`1482`,
 :issue:`1580`
-   ``SharedDataMiddleware`` safely handles paths with Windows drive
 names. :issue:`1589`
Links

Update zipp from 0.5.1 to 2.1.0.

Changelog

2.1.0

======

32: Merge with v1.1.0.

2.0.1

======

30: Corrected version inference (from jaraco/skeleton12).

2.0.0

======

Require Python 3.6 or later.

1.1.0

======

32: For read-only zip files, complexity of ``.exists`` and
``joinpath`` is now constant time instead of ``O(n)``, preventing
quadratic time in common use-cases and rendering large
zip files unusable for Path. Big thanks to Benjy Weinberger
for the bug report and contributed fix (33).

1.0.0

======

Re-release of 0.6 to correspond with release as found in
Python 3.8.

0.6.0

======

12: When adding implicit dirs, ensure that ancestral directories
are added and that duplicates are excluded.

The library now relies on
`more_itertools <https://pypi.org/project/more_itertools>`_.

0.5.2

======

7: Parent of a directory now actually returns the parent.
Links

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/jeffknupp/sandman2/pull/138 **Author:** [@pyup-bot](https://github.com/pyup-bot) **Created:** 2/3/2020 **Status:** ❌ Closed **Base:** `master` ← **Head:** `pyup-scheduled-update-2020-02-03` --- ### 📝 Commits (9) - [`5d1ff39`](https://github.com/jeffknupp/sandman2/commit/5d1ff390b8d36ac3a73840d7721a0c03d8354b71) Update flask-admin from 1.5.3 to 1.5.4 - [`644d9aa`](https://github.com/jeffknupp/sandman2/commit/644d9aa8c70e25611b3ac97e21170f86a4c24753) Update sqlalchemy from 1.3.8 to 1.3.13 - [`bd094b0`](https://github.com/jeffknupp/sandman2/commit/bd094b0650b3723fac2b70141e44bfb87f364aac) Update coverage from 4.5.4 to 5.0.3 - [`6a1f9a5`](https://github.com/jeffknupp/sandman2/commit/6a1f9a58134d920ba7fee8d7be852841e29196be) Update pytest from 5.2.0 to 5.3.5 - [`f51e360`](https://github.com/jeffknupp/sandman2/commit/f51e360633c827df85a9ea33444eee8446f0513c) Update pytest-cov from 2.7.1 to 2.8.1 - [`885e9f5`](https://github.com/jeffknupp/sandman2/commit/885e9f5651e1a5a5d2e2f2240e0914827d4a42fd) Update six from 1.12.0 to 1.14.0 - [`93f2796`](https://github.com/jeffknupp/sandman2/commit/93f279657829145aff85e6b462746e6674645cd3) Update wcwidth from 0.1.7 to 0.1.8 - [`2da1847`](https://github.com/jeffknupp/sandman2/commit/2da1847250a293cc9355ecefcd75a3f6e9687edf) Update werkzeug from 0.15.4 to 0.16.1 - [`37d64cc`](https://github.com/jeffknupp/sandman2/commit/37d64cc818c5926abe3cdd43ed97743ac390577e) Update zipp from 0.5.1 to 2.1.0 ### 📊 Changes **1 file changed** (+9 additions, -9 deletions) <details> <summary>View changed files</summary> 📝 `requirements.txt` (+9 -9) </details> ### 📄 Description ### Update [Flask-Admin](https://pypi.org/project/Flask-Admin) from **1.5.3** to **1.5.4**. <details> <summary>Changelog</summary> ### 1.5.4 ``` ----- * Fix display of inline x-editable boolean fields on list view * Add support for several SQLAlchemy-Utils data types * Support searching on SQLAlchemy hybrid properties * Extra URL paramaters are now propagated to the next page when searching / filtering * Add enum34 dependency when running on legacy Python version * Update Mapbox API v1 URL format * Update jQuery and moment dependencies in templates * Fixed a datepicker issue, where only dates up to 2015 were showing up * Updated Pillow dependency version ``` </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 [SQLAlchemy](https://pypi.org/project/SQLAlchemy) from **1.3.8** to **1.3.13**. <details> <summary>Changelog</summary> ### 1.3.13 ``` :released: January 22, 2020 .. change:: :tags: bug, postgresql :tickets: 5039 Fixed issue where the PostgreSQL dialect would fail to parse a reflected CHECK constraint that was a boolean-valued function (as opposed to a boolean-valued expression). .. change:: :tags: bug, ext :tickets: 5086 Fixed bug in sqlalchemy.ext.serializer where a unique :class:`.BindParameter` object could conflict with itself if it were present in the mapping itself, as well as the filter condition of the query, as one side would be used against the non-deserialized version and the other side would use the deserialized version. Logic is added to :class:`.BindParameter` similar to its &quot;clone&quot; method which will uniquify the parameter name upon deserialize so that it doesn&#39;t conflict with its original. .. change:: :tags: usecase, sql :tickets: 5079 A function created using :class:`.GenericFunction` can now specify that the name of the function should be rendered with or without quotes by assigning the :class:`.quoted_name` construct to the .name element of the object. Prior to 1.3.4, quoting was never applied to function names, and some quoting was introduced in :ticket:`4467` but no means to force quoting for a mixed case name was available. Additionally, the :class:`.quoted_name` construct when used as the name will properly register its lowercase name in the function registry so that the name continues to be available via the ``func.`` registry. .. seealso:: :class:`.GenericFunction` .. change:: :tags: bug, engine :tickets: 5048 Fixed issue where the collection of value processors on a :class:`.Compiled` object would be mutated when &quot;expanding IN&quot; parameters were used with a datatype that has bind value processors; in particular, this would mean that when using statement caching and/or baked queries, the same compiled._bind_processors collection would be mutated concurrently. Since these processors are the same function for a given bind parameter namespace every time, there was no actual negative effect of this issue, however, the execution of a :class:`.Compiled` object should never be causing any changes in its state, especially given that they are intended to be thread-safe and reusable once fully constructed. .. change:: :tags: tests, postgresql :tickets: 5057 Improved detection of two phase transactions requirement for the PostgreSQL database by testing that max_prepared_transactions is set to a value greater than 0. Pull request courtesy Federico Caselli. .. change:: :tags: bug, orm, engine :tickets: 5056, 5050, 5071 Added test support and repaired a wide variety of unnecessary reference cycles created for short-lived objects, mostly in the area of ORM queries. Thanks much to Carson Ip for the help on this. .. change:: :tags: orm, bug :tickets: 5107 Fixed regression in loader options introduced in 1.3.0b3 via :ticket:`4468` where the ability to create a loader option using :meth:`.PropComparator.of_type` targeting an aliased entity that is an inheriting subclass of the entity which the preceding relationship refers to would fail to produce a matching path. See also :ticket:`5082` fixed in this same release which involves a similar kind of issue. .. change:: :tags: bug, tests :tickets: 4946 Fixed a few test failures which would occur on Windows due to SQLite file locking issues, as well as some timing issues in connection pool related tests; pull request courtesy Federico Caselli. .. change:: :tags: orm, bug :tickets: 5082 Fixed regression in joined eager loading introduced in 1.3.0b3 via :ticket:`4468` where the ability to create a joined option across a :func:`.with_polymorphic` into a polymorphic subclass using :meth:`.RelationshipProperty.of_type` and then further along regular mapped relationships would fail as the polymorphic subclass would not add itself to the load path in a way that could be located by the loader strategy. A tweak has been made to resolve this scenario. .. change:: :tags: performance, orm Identified a performance issue in the system by which a join is constructed based on a mapped relationship. The clause adaption system would be used for the majority of join expressions including in the common case where no adaptation is needed. The conditions under which this adaptation occur have been refined so that average non-aliased joins along a simple relationship without a &quot;secondary&quot; table use about 70% less function calls. .. change:: :tags: usecase, postgresql :tickets: 5040 Added support for prefixes to the :class:`.CTE` construct, to allow support for Postgresql 12 &quot;MATERIALIZED&quot; and &quot;NOT MATERIALIZED&quot; phrases. Pull request courtesy Marat Sharafutdinov. .. seealso:: :meth:`.HasCTE.cte` .. change:: :tags: bug, mssql :tickets: 5045 Fixed issue where a timezone-aware ``datetime`` value being converted to string for use as a parameter value of a :class:`.mssql.DATETIMEOFFSET` column was omitting the fractional seconds. .. change:: :tags: bug, orm :tickets: 5068 Repaired a warning in the ORM flush process that was not covered by test coverage when deleting objects that use the &quot;version_id&quot; feature. This warning is generally unreachable unless using a dialect that sets the &quot;supports_sane_rowcount&quot; flag to False, which is not typically the case however is possible for some MySQL configurations as well as older Firebird drivers, and likely some third party dialects. .. change:: :tags: bug, orm :tickets: 5065 Fixed bug where usage of joined eager loading would not properly wrap the query inside of a subquery when :meth:`.Query.group_by` were used against the query. When any kind of result-limiting approach is used, such as DISTINCT, LIMIT, OFFSET, joined eager loading embeds the row-limited query inside of a subquery so that the collection results are not impacted. For some reason, the presence of GROUP BY was never included in this criterion, even though it has a similar effect as using DISTINCT. Additionally, the bug would prevent using GROUP BY at all for a joined eager load query for most database platforms which forbid non-aggregated, non-grouped columns from being in the query, as the additional columns for the joined eager load would not be accepted by the database. .. changelog:: ``` ### 1.3.12 ``` :released: December 16, 2019 .. change:: :tags: bug, sql :tickets: 5028 Fixed bug where &quot;distinct&quot; keyword passed to :func:`.select` would not treat a string value as a &quot;label reference&quot; in the same way that the :meth:`.select.distinct` does; it would instead raise unconditionally. This keyword argument and the others passed to :func:`.select` will ultimately be deprecated for SQLAlchemy 2.0. .. change:: :tags: bug, orm :tickets: 4997 Fixed issue involving ``lazy=&quot;raise&quot;`` strategy where an ORM delete of an object would raise for a simple &quot;use-get&quot; style many-to-one relationship that had lazy=&quot;raise&quot; configured. This is inconsistent vs. the change introduced in 1.3 as part of :ticket:`4353`, where it was established that a history operation that does not expect emit SQL should bypass the ``lazy=&quot;raise&quot;`` check, and instead effectively treat it as ``lazy=&quot;raise_on_sql&quot;`` for this case. The fix adjusts the lazy loader strategy to not raise for the case where the lazy load was instructed that it should not emit SQL if the object were not present. .. change:: :tags: bug, sql Changed the text of the exception for &quot;Can&#39;t resolve label reference&quot; to include other kinds of label coercions, namely that &quot;DISTINCT&quot; is also in this category under the PostgreSQL dialect. .. change:: :tags: bug, orm :tickets: 5000 Fixed regression introduced in 1.3.0 related to the association proxy refactor in :ticket:`4351` that prevented :func:`.composite` attributes from working in terms of an association proxy that references them. .. change:: :tags: bug, mssql :tickets: 4983 Repaired support for the :class:`.mssql.DATETIMEOFFSET` datatype on PyODBC, by adding PyODBC-level result handlers as it does not include native support for this datatype. This includes usage of the Python 3 &quot;timezone&quot; tzinfo subclass in order to set up a timezone, which on Python 2 makes use of a minimal backport of &quot;timezone&quot; in sqlalchemy.util. .. change:: :tags: bug, orm :tickets: 4993 Setting persistence-related flags on :func:`.relationship` while also setting viewonly=True will now emit a regular warning, as these flags do not make sense for a viewonly=True relationship. In particular, the &quot;cascade&quot; settings have their own warning that is generated based on the individual values, such as &quot;delete, delete-orphan&quot;, that should not apply to a viewonly relationship. Note however that in the case of &quot;cascade&quot;, these settings are still erroneously taking effect even though the relationship is set up as &quot;viewonly&quot;. In 1.4, all persistence-related cascade settings will be disallowed on a viewonly=True relationship in order to resolve this issue. .. change:: :tags: bug, sqlite :tickets: 5014 Fixed issue to workaround SQLite&#39;s behavior of assigning &quot;numeric&quot; affinity to JSON datatypes, first described at :ref:`change_3850`, which returns scalar numeric JSON values as a number and not as a string that can be JSON deserialized. The SQLite-specific JSON deserializer now gracefully degrades for this case as an exception and bypasses deserialization for single numeric values, as from a JSON perspective they are already deserialized. .. change:: :tags: bug, orm, py3k :tickets: 4990 Fixed issue where when assigning a collection to itself as a slice, the mutation operation would fail as it would first erase the assigned collection inadvertently. As an assignment that does not change the contents should not generate events, the operation is now a no-op. Note that the fix only applies to Python 3; in Python 2, the ``__setitem__`` hook isn&#39;t called in this case; ``__setslice__`` is used instead which recreates the list item-by-item in all cases. .. change:: :tags: bug, orm :tickets: 5034 Fixed issue where by if the &quot;begin&quot; of a transaction failed at the Core engine/connection level, such as due to network error or database is locked for some transactional recipes, within the context of the :class:`.Session` procuring that connection from the conneciton pool and then immediately returning it, the ORM :class:`.Session` would not close the connection despite this connection not being stored within the state of that :class:`.Session`. This would lead to the connection being cleaned out by the connection pool weakref handler within garbage collection which is an unpreferred codepath that in some special configurations can emit errors in standard error. .. changelog:: ``` ### 1.3.11 ``` :released: November 11, 2019 .. change:: :tags: bug, mssql :tickets: 4973 Fixed issue in MSSQL dialect where an expression-based OFFSET value in a SELECT would be rejected, even though the dialect can render this expression inside of a ROW NUMBER-oriented LIMIT/OFFSET construct. .. change:: :tags: orm, usecase :tickets: 4934 Added accessor :meth:`.Query.is_single_entity` to :class:`.Query`, which will indicate if the results returned by this :class:`.Query` will be a list of ORM entities, or a tuple of entities or column expressions. SQLAlchemy hopes to improve upon the behavior of single entity / tuples in future releases such that the behavior would be explicit up front, however this attribute should be helpful with the current behavior. Pull request courtesy Patrick Hayes. .. change:: :tags: bug, mysql :tickets: 4945 Added &quot;Connection was killed&quot; message interpreted from the base pymysql.Error class in order to detect closed connection, based on reports that this message is arriving via a pymysql.InternalError() object which indicates pymysql is not handling it correctly. .. change:: :tags: bug, orm :tickets: 4954 The :paramref:`.relationship.omit_join` flag was not intended to be manually set to True, and will now emit a warning when this occurs. The omit_join optimization is detected automatically, and the ``omit_join`` flag was only intended to disable the optimization in the hypothetical case that the optimization may have interfered with correct results, which has not been observed with the modern version of this feature. Setting the flag to True when it is not automatically detected may cause the selectin load feature to not work correctly when a non-default primary join condition is in use. .. change:: :tags: bug, orm :tickets: 4915 A warning is emitted if a primary key value is passed to :meth:`.Query.get` that consists of None for all primary key column positions. Previously, passing a single None outside of a tuple would raise a ``TypeError`` and passing a composite None (tuple of None values) would silently pass through. The fix now coerces the single None into a tuple where it is handled consistently with the other None conditions. Thanks to Lev Izraelit for the help with this. .. change:: :tags: bug, orm :tickets: 4947 The :class:`.BakedQuery` will not cache a query that was modified by a :meth:`.QueryEvents.before_compile` event, so that compilation hooks that may be applying ad-hoc modifications to queries will take effect on each run. In particular this is helpful for events that modify queries used in lazy loading as well as eager loading such as &quot;select in&quot; loading. In order to re-enable caching for a query modified by this event, a new flag ``bake_ok`` is added; see :ref:`baked_with_before_compile` for details. A longer term plan to provide a new form of SQL caching should solve this kind of issue more comprehensively. .. change:: :tags: bug, tests :tickets: 4920 Fixed test failures which would occur with newer SQLite as of version 3.30 or greater, due to their addition of nulls ordering syntax as well as new restrictions on aggregate functions. Pull request courtesy Nils Philippsen. .. change:: :tags: bug, installation, windows :tickets: 4967 Added a workaround for a setuptools-related failure that has been observed as occurring on Windows installations, where setuptools is not correctly reporting a build error when the MSVC build dependencies are not installed and therefore not allowing graceful degradation into non C extensions builds. .. change:: :tags: bug, sql, py3k :tickets: 4931 Changed the ``repr()`` of the :class:`.quoted_name` construct to use regular string repr() under Python 3, rather than running it through &quot;backslashreplace&quot; escaping, which can be misleading. .. change:: :tags: bug, oracle, firebird :tickets: 4931 Modified the approach of &quot;name normalization&quot; for the Oracle and Firebird dialects, which converts from the UPPERCASE-as-case-insensitive convention of these dialects into lowercase-as-case-insensitive for SQLAlchemy, to not automatically apply the :class:`.quoted_name` construct to a name that matches itself under upper or lower case conversion, as is the case for many non-european characters. All names used within metadata structures are converted to :class:`.quoted_name` objects in any case; the change here would only affect the output of some inspection functions. .. change:: :tags: bug, schema :tickets: 4911 Fixed bug where a table that would have a column label overlap with a plain column name, such as &quot;foo.id AS foo_id&quot; vs. &quot;foo.foo_id&quot;, would prematurely generate the ``._label`` attribute for a column before this overlap could be detected due to the use of the ``index=True`` or ``unique=True`` flag on the column in conjunction with the default naming convention of ``&quot;column_0_label&quot;``. This would then lead to failures when ``._label`` were used later to generate a bound parameter name, in particular those used by the ORM when generating the WHERE clause for an UPDATE statement. The issue has been fixed by using an alternate ``._label`` accessor for DDL generation that does not affect the state of the :class:`.Column`. The accessor also bypasses the key-deduplication step as it is not necessary for DDL, the naming is now consistently ``&quot;&lt;tablename&gt;_&lt;columnname&gt;&quot;`` without any subsequent numeric symbols when used in DDL. .. change:: :tags: bug, engine :tickets: 4902 Fixed bug where parameter repr as used in logging and error reporting needs additional context in order to distinguish between a list of parameters for a single statement and a list of parameter lists, as the &quot;list of lists&quot; structure could also indicate a single parameter list where the first parameter itself is a list, such as for an array parameter. The engine/connection now passes in an additional boolean indicating how the parameters should be considered. The only SQLAlchemy backend that expects arrays as parameters is that of psycopg2 which uses pyformat parameters, so this issue has not been too apparent, however as other drivers that use positional gain more features it is important that this be supported. It also eliminates the need for the parameter repr function to guess based on the parameter structure passed. .. change:: :tags: usecase, schema :tickets: 4894 Added DDL support for &quot;computed columns&quot;; these are DDL column specifications for columns that have a server-computed value, either upon SELECT (known as &quot;virtual&quot;) or at the point of which they are INSERTed or UPDATEd (known as &quot;stored&quot;). Support is established for Postgresql, MySQL, Oracle SQL Server and Firebird. Thanks to Federico Caselli for lots of work on this one. .. seealso:: :ref:`computed_ddl` .. change:: :tags: bug, engine, postgresql :tickets: 4955 Fixed bug in :class:`.Inspector` where the cache key generation did not take into account arguments passed in the form of tuples, such as the tuple of view name styles to return for the PostgreSQL dialect. This would lead the inspector to cache too generally for a more specific set of criteria. The logic has been adjusted to include every keyword element in the cache, as every argument is expected to be appropriate for a cache else the caching decorator should be bypassed by the dialect. .. change:: :tags: bug, mssql :tickets: 4923 Fixed an issue in the :meth:`.Engine.table_names` method where it would feed the dialect&#39;s default schema name back into the dialect level table function, which in the case of SQL Server would interpret it as a dot-tokenized schema name as viewed by the mssql dialect, which would cause the method to fail in the case where the database username actually had a dot inside of it. In 1.3, this method is still used by the :meth:`.MetaData.reflect` function so is a prominent codepath. In 1.4, which is the current master development branch, this issue doesn&#39;t exist, both because :meth:`.MetaData.reflect` isn&#39;t using this method nor does the method pass the default schema name explicitly. The fix nonetheless guards against the default server name value returned by the dialect from being interpreted as dot-tokenized name under any circumstances by wrapping it in quoted_name(). .. change:: :tags: bug, orm :tickets: 4974 Fixed ORM bug where a &quot;secondary&quot; table that referred to a selectable which in some way would refer to the local primary table would apply aliasing to both sides of the join condition when a relationship-related join, either via :meth:`.Query.join` or by :func:`.joinedload`, were generated. The &quot;local&quot; side is now excluded. .. change:: :tags: usecase, sql :tickets: 4276 Added new accessors to expressions of type :class:`.JSON` to allow for specific datatype access and comparison, covering strings, integers, numeric, boolean elements. This revises the documented approach of CASTing to string when comparing values, instead adding specific functionality into the PostgreSQL, SQlite, MySQL dialects to reliably deliver these basic types in all cases. .. seealso:: :class:`.JSON` :meth:`.JSON.Comparator.as_string` :meth:`.JSON.Comparator.as_boolean` :meth:`.JSON.Comparator.as_float` :meth:`.JSON.Comparator.as_integer` .. change:: :tags: usecase, oracle :tickets: 4799 Added dialect-level flag ``encoding_errors`` to the cx_Oracle dialect, which can be specified as part of :func:`.create_engine`. This is passed to SQLAlchemy&#39;s unicode decoding converter under Python 2, and to cx_Oracle&#39;s ``cursor.var()`` object as the ``encodingErrors`` parameter under Python 3, for the very unusual case that broken encodings are present in the target database which cannot be fetched unless error handling is relaxed. The value is ultimately one of the Python &quot;encoding errors&quot; parameters passed to ``decode()``. .. change:: :tags: usecase, sql :tickets: 4933 The :func:`.text` construct now supports &quot;unique&quot; bound parameters, which will dynamically uniquify themselves on compilation thus allowing multiple :func:`.text` constructs with the same bound parameter names to be combined together. .. change:: :tags: bug, oracle :tickets: 4913 The :class:`.sqltypes.NCHAR` datatype will now bind to the ``cx_Oracle.FIXED_NCHAR`` DBAPI data bindings when used in a bound parameter, which supplies proper comparison behavior against a variable-length string. Previously, the :class:`.sqltypes.NCHAR` datatype would bind to ``cx_oracle.NCHAR`` which is not fixed length; the :class:`.sqltypes.CHAR` datatype already binds to ``cx_Oracle.FIXED_CHAR`` so it is now consistent that :class:`.sqltypes.NCHAR` binds to ``cx_Oracle.FIXED_NCHAR``. .. change:: :tags: bug, firebird :tickets: 4903 Added additional &quot;disconnect&quot; message &quot;Error writing data to the connection&quot; to Firebird disconnection detection. Pull request courtesy lukens. .. changelog:: ``` ### 1.3.10 ``` :released: October 9, 2019 .. change:: :tags: bug, mssql :tickets: 4857 Fixed bug in SQL Server dialect with new &quot;max_identifier_length&quot; feature where the mssql dialect already featured this flag, and the implementation did not accommodate for the new initialization hook correctly. .. change:: :tags: bug, oracle :tickets: 4898, 4857 Fixed regression in Oracle dialect that was inadvertently using max identifier length of 128 characters on Oracle server 12.2 and greater even though the stated contract for the remainder of the 1.3 series is that this value stays at 30 until version SQLAlchemy 1.4. Also repaired issues with the retrieval of the &quot;compatibility&quot; version, and removed the warning emitted when the &quot;v$parameter&quot; view was not accessible as this was causing user confusion. .. changelog:: ``` ### 1.3.9 ``` :released: October 4, 2019 .. change:: :tags: usecase, engine :tickets: 4857 Added new :func:`.create_engine` parameter :paramref:`.create_engine.max_identifier_length`. This overrides the dialect-coded &quot;max identifier length&quot; in order to accommodate for databases that have recently changed this length and the SQLAlchemy dialect has not yet been adjusted to detect for that version. This parameter interacts with the existing :paramref:`.create_engine.label_length` parameter in that it establishes the maximum (and default) value for anonymously generated labels. Additionally, post-connection detection of max identifier lengths has been added to the dialect system. This feature is first being used by the Oracle dialect. .. seealso:: :ref:`oracle_max_identifier_lengths` - in the Oracle dialect documentation .. change:: :tags: usecase, oracle :tickets: 4857 The Oracle dialect now emits a warning if Oracle version 12.2 or greater is used, and the :paramref:`.create_engine.max_identifier_length` parameter is not set. The version in this specific case defaults to that of the &quot;compatibility&quot; version set in the Oracle server configuration, not the actual server version. In version 1.4, the default max_identifier_length for 12.2 or greater will move to 128 characters. In order to maintain forwards compatibility, applications should set :paramref:`.create_engine.max_identifier_length` to 30 in order to maintain the same length behavior, or to 128 in order to test the upcoming behavior. This length determines among other things how generated constraint names are truncated for statements like ``CREATE CONSTRAINT`` and ``DROP CONSTRAINT``, which means a the new length may produce a name-mismatch against a name that was generated with the old length, impacting database migrations. .. seealso:: :ref:`oracle_max_identifier_lengths` - in the Oracle dialect documentation .. change:: :tags: usecase, sqlite :tickets: 4863 Added support for sqlite &quot;URI&quot; connections, which allow for sqlite-specific flags to be passed in the query string such as &quot;read only&quot; for Python sqlite3 drivers that support this. .. seealso:: :ref:`pysqlite_uri_connections` .. change:: :tags: bug, tests :tickets: 4285 Fixed unit test regression released in 1.3.8 that would cause failure for Oracle, SQL Server and other non-native ENUM platforms due to new enumeration tests added as part of :ticket:`4285` enum sortability in the unit of work; the enumerations created constraints that were duplicated on name. .. change:: :tags: bug, oracle :tickets: 4886 Restored adding cx_Oracle.DATETIME to the setinputsizes() call when a SQLAlchemy :class:`.Date`, :class:`.DateTime` or :class:`.Time` datatype is used, as some complex queries require this to be present. This was removed in the 1.2 series for arbitrary reasons. .. change:: :tags: bug, mssql :tickets: 4883 Added identifier quoting to the schema name applied to the &quot;use&quot; statement which is invoked when a SQL Server multipart schema name is used within a :class:`.Table` that is being reflected, as well as for :class:`.Inspector` methods such as :meth:`.Inspector.get_table_names`; this accommodates for special characters or spaces in the database name. Additionally, the &quot;use&quot; statement is not emitted if the current database matches the target owner database name being passed. .. change:: :tags: bug, orm :tickets: 4872 Fixed regression in selectinload loader strategy caused by :ticket:`4775` (released in version 1.3.6) where a many-to-one attribute of None would no longer be populated by the loader. While this was usually not noticeable due to the lazyloader populating None upon get, it would lead to a detached instance error if the object were detached. .. change:: :tags: bug, orm :tickets: 4873 Passing a plain string expression to :meth:`.Session.query` is deprecated, as all string coercions were removed in :ticket:`4481` and this one should have been included. The :func:`.literal_column` function may be used to produce a textual column expression. .. change:: :tags: usecase, sql :tickets: 4847 Added an explicit error message for the case when objects passed to :class:`.Table` are not :class:`.SchemaItem` objects, rather than resolving to an attribute error. .. change:: :tags: bug, orm :tickets: 4890 A warning is emitted for a condition in which the :class:`.Session` may implicitly swap an object out of the identity map for another one with the same primary key, detaching the old one, which can be an observed result of load operations which occur within the :meth:`.SessionEvents.after_flush` hook. The warning is intended to notify the user that some special condition has caused this to happen and that the previous object may not be in the expected state. .. change:: :tags: bug, sql :tickets: 4837 Characters that interfere with &quot;pyformat&quot; or &quot;named&quot; formats in bound parameters, namely ``%, (, )`` and the space character, as well as a few other typically undesirable characters, are stripped early for a :func:`.bindparam` that is using an anonymized name, which is typically generated automatically from a named column which itself includes these characters in its name and does not use a ``.key``, so that they do not interfere either with the SQLAlchemy compiler&#39;s use of string formatting or with the driver-level parsing of the parameter, both of which could be demonstrated before the fix. The change only applies to anonymized parameter names that are generated and consumed internally, not end-user defined names, so the change should have no impact on any existing code. Applies in particular to the psycopg2 driver which does not otherwise quote special parameter names, but also strips leading underscores to suit Oracle (but not yet leading numbers, as some anon parameters are currently entirely numeric/underscore based); Oracle in any case continues to quote parameter names that include special characters. .. 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 [coverage](https://pypi.org/project/coverage) from **4.5.4** to **5.0.3**. <details> <summary>Changelog</summary> ### 5.0.3 ``` ---------------------------- - A performance improvement in 5.0.2 didn&#39;t work for test suites that changed directory before combining data, causing &quot;Couldn&#39;t use data file: no such table: meta&quot; errors (`issue 916`_). This is now fixed. - Coverage could fail to run your program with some form of &quot;ModuleNotFound&quot; or &quot;ImportError&quot; trying to import from the current directory. This would happen if coverage had been packaged into a zip file (for example, on Windows), or was found indirectly (for example, by pyenv-virtualenv). A number of different scenarios were described in `issue 862`_ which is now fixed. Huge thanks to Agbonze O. Jeremiah for reporting it, and Alexander Waters and George-Cristian Bîrzan for protracted debugging sessions. - Added the &quot;premain&quot; debug option. - Added SQLite compile-time options to the &quot;debug sys&quot; output. .. _issue 862: https://github.com/nedbat/coveragepy/issues/862 .. _issue 916: https://github.com/nedbat/coveragepy/issues/916 .. _changes_502: ``` ### 5.0.2 ``` ---------------------------- - Programs that used multiprocessing and changed directories would fail under coverage. This is now fixed (`issue 890`_). A side effect is that debug information about the config files read now shows absolute paths to the files. - When running programs as modules (``coverage run -m``) with ``--source``, some measured modules were imported before coverage starts. This resulted in unwanted warnings (&quot;Already imported a file that will be measured&quot;) and a reduction in coverage totals (`issue 909`_). This is now fixed. - If no data was collected, an exception about &quot;No data to report&quot; could happen instead of a 0% report being created (`issue 884`_). This is now fixed. - The handling of source files with non-encodable file names has changed. Previously, if a file name could not be encoded as UTF-8, an error occurred, as described in `issue 891`_. Now, those files will not be measured, since their data would not be recordable. - A new warning (&quot;dynamic-conflict&quot;) is issued if two mechanisms are trying to change the dynamic context. Closes `issue 901`_. - ``coverage run --debug=sys`` would fail with an AttributeError. This is now fixed (`issue 907`_). .. _issue 884: https://github.com/nedbat/coveragepy/issues/884 .. _issue 890: https://github.com/nedbat/coveragepy/issues/890 .. _issue 891: https://github.com/nedbat/coveragepy/issues/891 .. _issue 901: https://github.com/nedbat/coveragepy/issues/901 .. _issue 907: https://github.com/nedbat/coveragepy/issues/907 .. _issue 909: https://github.com/nedbat/coveragepy/issues/909 .. _changes_501: ``` ### 5.0.1 ``` ---------------------------- - If a 4.x data file is the cause of a &quot;file is not a database&quot; error, then use a more specific error message, &quot;Looks like a coverage 4.x data file, are you mixing versions of coverage?&quot; Helps diagnose the problems described in `issue 886`_. - Measurement contexts and relative file names didn&#39;t work together, as reported in `issue 899`_ and `issue 900`_. This is now fixed, thanks to David Szotten. - When using ``coverage run --concurrency=multiprocessing``, all data files should be named with parallel-ready suffixes. 5.0 mistakenly named the main process&#39; file with no suffix when using ``--append``. This is now fixed, closing `issue 880`_. - Fixed a problem on Windows when the current directory is changed to a different drive (`issue 895`_). Thanks, Olivier Grisel. - Updated Python 3.9 support to 3.9a2. .. _issue 880: https://github.com/nedbat/coveragepy/issues/880 .. _issue 886: https://github.com/nedbat/coveragepy/issues/886 .. _issue 895: https://github.com/nedbat/coveragepy/issues/895 .. _issue 899: https://github.com/nedbat/coveragepy/issues/899 .. _issue 900: https://github.com/nedbat/coveragepy/issues/900 .. _changes_50: ``` ### 5.0 ``` -------------------------- Nothing new beyond 5.0b2. .. _changes_50b2: ``` ### 5.0b2 ``` ---------------------------- - An experimental ``[run] relative_files`` setting tells coverage to store relative file names in the data file. This makes it easier to run tests in one (or many) environments, and then report in another. It has not had much real-world testing, so it may change in incompatible ways in the future. - When constructing a :class:`coverage.Coverage` object, `data_file` can be specified as None to prevent writing any data file at all. In previous versions, an explicit `data_file=None` argument would use the default of &quot;.coverage&quot;. Fixes `issue 871`_. - Python files run with ``-m`` now have ``__spec__`` defined properly. This fixes `issue 745`_ (about not being able to run unittest tests that spawn subprocesses), and `issue 838`_, which described the problem directly. - The ``[paths]`` configuration section is now ordered. If you specify more than one list of patterns, the first one that matches will be used. Fixes `issue 649`_. - The :func:`.coverage.numbits.register_sqlite_functions` function now also registers `numbits_to_nums` for use in SQLite queries. Thanks, Simon Willison. - Python 3.9a1 is supported. - Coverage.py has a mascot: :ref:`Sleepy Snake &lt;sleepy&gt;`. .. _issue 649: https://github.com/nedbat/coveragepy/issues/649 .. _issue 745: https://github.com/nedbat/coveragepy/issues/745 .. _issue 838: https://github.com/nedbat/coveragepy/issues/838 .. _issue 871: https://github.com/nedbat/coveragepy/issues/871 .. _changes_50b1: ``` ### 5.0b1 ``` ---------------------------- - The HTML and textual reports now have a ``--skip-empty`` option that skips files with no statements, notably ``__init__.py`` files. Thanks, Reya B. - Configuration can now be read from `TOML`_ files. This requires installing coverage.py with the ``[toml]`` extra. The standard &quot;pyproject.toml&quot; file will be read automatically if no other configuration file is found, with settings in the ``[tool.coverage.]`` namespace. Thanks to Frazer McLean for implementation and persistence. Finishes `issue 664`_. - The ``[run] note`` setting has been deprecated. Using it will result in a warning, and the note will not be written to the data file. The corresponding :class:`.CoverageData` methods have been removed. - The HTML report has been reimplemented (no more table around the source code). This allowed for a better presentation of the context information, hopefully resolving `issue 855`_. - Added sqlite3 module version information to ``coverage debug sys`` output. - Asking the HTML report to show contexts (``[html] show_contexts=True`` or ``coverage html --show-contexts``) will issue a warning if there were no contexts measured (`issue 851`_). .. _TOML: https://github.com/toml-lang/tomlreadme .. _issue 664: https://github.com/nedbat/coveragepy/issues/664 .. _issue 851: https://github.com/nedbat/coveragepy/issues/851 .. _issue 855: https://github.com/nedbat/coveragepy/issues/855 .. _changes_50a8: ``` ### 5.0a8 ``` ---------------------------- - The :class:`.CoverageData` API has changed how queries are limited to specific contexts. Now you use :meth:`.CoverageData.set_query_context` to set a single exact-match string, or :meth:`.CoverageData.set_query_contexts` to set a list of regular expressions to match contexts. This changes the command-line ``--contexts`` option to use regular expressions instead of filename-style wildcards. .. _changes_50a7: ``` ### 5.0a7 ``` ---------------------------- - Data can now be &quot;reported&quot; in JSON format, for programmatic use, as requested in `issue 720`_. The new ``coverage json`` command writes raw and summarized data to a JSON file. Thanks, Matt Bachmann. - Dynamic contexts are now supported in the Python tracer, which is important for PyPy users. Closes `issue 846`_. - The compact line number representation introduced in 5.0a6 is called a &quot;numbits.&quot; The :mod:`coverage.numbits` module provides functions for working with them. - The reporting methods used to permanently apply their arguments to the configuration of the Coverage object. Now they no longer do. The arguments affect the operation of the method, but do not persist. - A class named &quot;test_something&quot; no longer confuses the ``test_function`` dynamic context setting. Fixes `issue 829`_. - Fixed an unusual tokenizing issue with backslashes in comments. Fixes `issue 822`_. - ``debug=plugin`` didn&#39;t properly support configuration or dynamic context plugins, but now it does, closing `issue 834`_. .. _issue 720: https://github.com/nedbat/coveragepy/issues/720 .. _issue 822: https://github.com/nedbat/coveragepy/issues/822 .. _issue 834: https://github.com/nedbat/coveragepy/issues/834 .. _issue 829: https://github.com/nedbat/coveragepy/issues/829 .. _issue 846: https://github.com/nedbat/coveragepy/issues/846 .. _changes_50a6: ``` ### 5.0a6 ``` ---------------------------- - Reporting on contexts. Big thanks to Stephan Richter and Albertas Agejevas for the contribution. - The ``--contexts`` option is available on the ``report`` and ``html`` commands. It&#39;s a comma-separated list of shell-style wildcards, selecting the contexts to report on. Only contexts matching one of the wildcards will be included in the report. - The ``--show-contexts`` option for the ``html`` command adds context information to each covered line. Hovering over the &quot;ctx&quot; marker at the end of the line reveals a list of the contexts that covered the line. - Database changes: - Line numbers are now stored in a much more compact way. For each file and context, a single binary string is stored with a bit per line number. This greatly improves memory use, but makes ad-hoc use difficult. - Dynamic contexts with no data are no longer written to the database. - SQLite data storage is now faster. There&#39;s no longer a reason to keep the JSON data file code, so it has been removed. - Changes to the :class:`.CoverageData` interface: - The new :meth:`.CoverageData.dumps` method serializes the data to a string, and a corresponding :meth:`.CoverageData.loads` method reconstitutes this data. The format of the data string is subject to change at any time, and so should only be used between two installations of the same version of coverage.py. - The :meth:`CoverageData constructor&lt;.CoverageData.__init__&gt;` has a new argument, `no_disk` (default: False). Setting it to True prevents writing any data to the disk. This is useful for transient data objects. - Added the classmethod :meth:`.Coverage.current` to get the latest started Coverage instance. - Multiprocessing support in Python 3.8 was broken, but is now fixed. Closes `issue 828`_. - Error handling during reporting has changed slightly. All reporting methods now behave the same. The ``--ignore-errors`` option keeps errors from stopping the reporting, but files that couldn&#39;t parse as Python will always be reported as warnings. As with other warnings, you can suppress them with the ``[run] disable_warnings`` configuration setting. - Coverage.py no longer fails if the user program deletes its current directory. Fixes `issue 806`_. Thanks, Dan Hemberger. - The scrollbar markers in the HTML report now accurately show the highlighted lines, regardless of what categories of line are highlighted. - The hack to accommodate ShiningPanda_ looking for an obsolete internal data file has been removed, since ShiningPanda 0.22 fixed it four years ago. - The deprecated `Reporter.file_reporters` property has been removed. .. _ShiningPanda: https://wiki.jenkins.io/display/JENKINS/ShiningPanda+Plugin .. _issue 806: https://github.com/nedbat/coveragepy/pull/806 .. _issue 828: https://github.com/nedbat/coveragepy/issues/828 .. _changes_50a5: ``` ### 5.0a5 ``` ---------------------------- - Drop support for Python 3.4 - Dynamic contexts can now be set two new ways, both thanks to Justas Sadzevičius. - A plugin can implement a ``dynamic_context`` method to check frames for whether a new context should be started. See :ref:`dynamic_context_plugins` for more details. - Another tool (such as a test runner) can use the new :meth:`.Coverage.switch_context` method to explicitly change the context. - The ``dynamic_context = test_function`` setting now works with Python 2 old-style classes, though it only reports the method name, not the class it was defined on. Closes `issue 797`_. - ``fail_under`` values more than 100 are reported as errors. Thanks to Mike Fiedler for closing `issue 746`_. - The &quot;missing&quot; values in the text output are now sorted by line number, so that missing branches are reported near the other lines they affect. The values used to show all missing lines, and then all missing branches. - Access to the SQLite database used for data storage is now thread-safe. Thanks, Stephan Richter. This closes `issue 702`_. - Combining data stored in SQLite is now about twice as fast, fixing `issue 761`_. Thanks, Stephan Richter. - The ``filename`` attribute on :class:`.CoverageData` objects has been made private. You can use the ``data_filename`` method to get the actual file name being used to store data, and the ``base_filename`` method to get the original filename before parallelizing suffixes were added. This is part of fixing `issue 708`_. - Line numbers in the HTML report now align properly with source lines, even when Chrome&#39;s minimum font size is set, fixing `issue 748`_. Thanks Wen Ye. .. _issue 702: https://github.com/nedbat/coveragepy/issues/702 .. _issue 708: https://github.com/nedbat/coveragepy/issues/708 .. _issue 746: https://github.com/nedbat/coveragepy/issues/746 .. _issue 748: https://github.com/nedbat/coveragepy/issues/748 .. _issue 761: https://github.com/nedbat/coveragepy/issues/761 .. _issue 797: https://github.com/nedbat/coveragepy/issues/797 .. _changes_50a4: ``` ### 5.0a4 ``` ---------------------------- - You can specify the command line to run your program with the ``[run] command_line`` configuration setting, as requested in `issue 695`_. - Coverage will create directories as needed for the data file if they don&#39;t exist, closing `issue 721`_. - The ``coverage run`` command has always adjusted the first entry in sys.path, to properly emulate how Python runs your program. Now this adjustment is skipped if sys.path[0] is already different than Python&#39;s default. This fixes `issue 715`_. - Improvements to context support: - The &quot;no such table: meta&quot; error is fixed.: `issue 716`_. - Combining data files is now much faster. - Python 3.8 (as of today!) passes all tests. .. _issue 695: https://github.com/nedbat/coveragepy/issues/695 .. _issue 715: https://github.com/nedbat/coveragepy/issues/715 .. _issue 716: https://github.com/nedbat/coveragepy/issues/716 .. _issue 721: https://github.com/nedbat/coveragepy/issues/721 .. _changes_50a3: ``` ### 5.0a3 ``` ---------------------------- - Context support: static contexts let you specify a label for a coverage run, which is recorded in the data, and retained when you combine files. See :ref:`contexts` for more information. - Dynamic contexts: specifying ``[run] dynamic_context = test_function`` in the config file will record the test function name as a dynamic context during execution. This is the core of &quot;Who Tests What&quot; (`issue 170`_). Things to note: - There is no reporting support yet. Use SQLite to query the .coverage file for information. Ideas are welcome about how reporting could be extended to use this data. - There&#39;s a noticeable slow-down before any test is run. - Data files will now be roughly N times larger, where N is the number of tests you have. Combining data files is therefore also N times slower. - No other values for ``dynamic_context`` are recognized yet. Let me know what else would be useful. I&#39;d like to use a pytest plugin to get better information directly from pytest, for example. .. _issue 170: https://github.com/nedbat/coveragepy/issues/170 - Environment variable substitution in configuration files now supports two syntaxes for controlling the behavior of undefined variables: if ``VARNAME`` is not defined, ``${VARNAME?}`` will raise an error, and ``${VARNAME-default value}`` will use &quot;default value&quot;. - Partial support for Python 3.8, which has not yet released an alpha. Fixes `issue 707`_ and `issue 714`_. .. _issue 707: https://github.com/nedbat/coveragepy/issues/707 .. _issue 714: https://github.com/nedbat/coveragepy/issues/714 .. _changes_50a2: ``` ### 5.0a2 ``` ---------------------------- - Coverage&#39;s data storage has changed. In version 4.x, .coverage files were basically JSON. Now, they are SQLite databases. This means the data file can be created earlier than it used to. A large amount of code was refactored to support this change. - Because the data file is created differently than previous releases, you may need ``parallel=true`` where you didn&#39;t before. - The old data format is still available (for now) by setting the environment variable COVERAGE_STORAGE=json. Please tell me if you think you need to keep the JSON format. - The database schema is guaranteed to change in the future, to support new features. I&#39;m looking for opinions about making the schema part of the public API to coverage.py or not. - Development moved from `Bitbucket`_ to `GitHub`_. - HTML files no longer have trailing and extra whitespace. - The sort order in the HTML report is stored in local storage rather than cookies, closing `issue 611`_. Thanks, Federico Bond. - pickle2json, for converting v3 data files to v4 data files, has been removed. .. _Bitbucket: https://bitbucket.org/ned/coveragepy .. _GitHub: https://github.com/nedbat/coveragepy .. _issue 611: https://github.com/nedbat/coveragepy/issues/611 .. _changes_50a1: ``` ### 5.0a1 ``` ---------------------------- - Coverage.py no longer supports Python 2.6 or 3.3. - The location of the configuration file can now be specified with a ``COVERAGE_RCFILE`` environment variable, as requested in `issue 650`_. - Namespace packages are supported on Python 3.7, where they used to cause TypeErrors about path being None. Fixes `issue 700`_. - A new warning (``already-imported``) is issued if measurable files have already been imported before coverage.py started measurement. See :ref:`cmd_warnings` for more information. - Running coverage many times for small runs in a single process should be faster, closing `issue 625`_. Thanks, David MacIver. - Large HTML report pages load faster. Thanks, Pankaj Pandey. .. _issue 625: https://bitbucket.org/ned/coveragepy/issues/625/lstat-dominates-in-the-case-of-small .. _issue 650: https://bitbucket.org/ned/coveragepy/issues/650/allow-setting-configuration-file-location .. _issue 700: https://github.com/nedbat/coveragepy/issues/700 .. _changes_454: ``` </details> <details> <summary>Links</summary> - PyPI: https://pypi.org/project/coverage - Changelog: https://pyup.io/changelogs/coverage/ - Repo: https://github.com/nedbat/coveragepy </details> ### Update [pytest](https://pypi.org/project/pytest) from **5.2.0** to **5.3.5**. *The bot wasn't able to find a changelog for this release. [Got an idea?](https://github.com/pyupio/changelogs/issues/new)* <details> <summary>Links</summary> - PyPI: https://pypi.org/project/pytest - Homepage: https://docs.pytest.org/en/latest/ </details> ### Update [pytest-cov](https://pypi.org/project/pytest-cov) from **2.7.1** to **2.8.1**. <details> <summary>Changelog</summary> ### 2.8.1 ``` ------------------ * Fixed `348 &lt;https://github.com/pytest-dev/pytest-cov/issues/348&gt;`_ - regression when only certain reports (html or xml) are used then ``--cov-fail-under`` always fails. ``` ### 2.8.0 ``` ------------------ * Fixed ``RecursionError`` that can occur when using `cleanup_on_signal &lt;https://pytest-cov.readthedocs.io/en/latest/subprocess-support.htmlif-you-got-custom-signal-handling&gt;`__ or `cleanup_on_sigterm &lt;https://pytest-cov.readthedocs.io/en/latest/subprocess-support.htmlif-you-got-custom-signal-handling&gt;`__. See: `294 &lt;https://github.com/pytest-dev/pytest-cov/issues/294&gt;`_. The 2.7.x releases of pytest-cov should be considered broken regarding aforementioned cleanup API. * Added compatibility with future xdist release that deprecates some internals (match pytest-xdist master/worker terminology). Contributed by Thomas Grainger in `321 &lt;https://github.com/pytest-dev/pytest-cov/pull/321&gt;`_ * Fixed breakage that occurs when multiple reporting options are used. Contributed by Thomas Grainger in `338 &lt;https://github.com/pytest-dev/pytest-cov/pull/338&gt;`_. * Changed internals to use a stub instead of ``os.devnull``. Contributed by Thomas Grainger in `332 &lt;https://github.com/pytest-dev/pytest-cov/pull/332&gt;`_. * Added support for Coverage 5.0. Contributed by Ned Batchelder in `319 &lt;https://github.com/pytest-dev/pytest-cov/pull/319&gt;`_. * Added support for float values in ``--cov-fail-under``. Contributed by Martín Gaitán in `311 &lt;https://github.com/pytest-dev/pytest-cov/pull/311&gt;`_. * Various documentation fixes. Contributed by Juanjo Bazán, Andrew Murray and Albert Tugushev in `298 &lt;https://github.com/pytest-dev/pytest-cov/pull/298&gt;`_, `299 &lt;https://github.com/pytest-dev/pytest-cov/pull/299&gt;`_ and `307 &lt;https://github.com/pytest-dev/pytest-cov/pull/307&gt;`_. * Various testing improvements. Contributed by Ned Batchelder, Daniel Hahler, Ionel Cristian Mărieș and Hugo van Kemenade in `313 &lt;https://github.com/pytest-dev/pytest-cov/pull/313&gt;`_, `314 &lt;https://github.com/pytest-dev/pytest-cov/pull/314&gt;`_, `315 &lt;https://github.com/pytest-dev/pytest-cov/pull/315&gt;`_, `316 &lt;https://github.com/pytest-dev/pytest-cov/pull/316&gt;`_, `325 &lt;https://github.com/pytest-dev/pytest-cov/pull/325&gt;`_, `326 &lt;https://github.com/pytest-dev/pytest-cov/pull/326&gt;`_, `334 &lt;https://github.com/pytest-dev/pytest-cov/pull/334&gt;`_ and `335 &lt;https://github.com/pytest-dev/pytest-cov/pull/335&gt;`_. * Added the ``--cov-context`` CLI options that enables coverage contexts. Only works with coverage 5.0+. Contributed by Ned Batchelder in `345 &lt;https://github.com/pytest-dev/pytest-cov/pull/345&gt;`_. ``` </details> <details> <summary>Links</summary> - PyPI: https://pypi.org/project/pytest-cov - Changelog: https://pyup.io/changelogs/pytest-cov/ - Repo: https://github.com/pytest-dev/pytest-cov </details> ### Update [six](https://pypi.org/project/six) from **1.12.0** to **1.14.0**. <details> <summary>Changelog</summary> ### 1.14.0 ``` ------ - Issue 288, pull request 289: Add `six.assertNotRegex`. - Issue 317: `six.moves._dummy_thread` now points to the `_thread` module on Python 3.9+. Python 3.7 and later requires threading and deprecated the `_dummy_thread` module. - Issue 308, pull request 314: Remove support for Python 2.6 and Python 3.2. - Issue 250, issue 165, pull request 251: `six.wraps` now ignores missing attributes. This follows the Python 3.2+ standard library behavior. ``` ### 1.13.0 ``` ------ - Issue 298, pull request 299: Add `six.moves.dbm_ndbm`. - Issue 155: Add `six.moves.collections_abc`, which aliases the `collections` module on Python 2-3.2 and the `collections.abc` on Python 3.3 and greater. - Pull request 304: Re-add distutils fallback in `setup.py`. - Pull request 305: On Python 3.7, `with_metaclass` supports classes using PEP 560 features. ``` </details> <details> <summary>Links</summary> - PyPI: https://pypi.org/project/six - Changelog: https://pyup.io/changelogs/six/ - Repo: https://github.com/benjaminp/six </details> ### Update [wcwidth](https://pypi.org/project/wcwidth) from **0.1.7** to **0.1.8**. <details> <summary>Changelog</summary> </details> <details> <summary>Links</summary> - PyPI: https://pypi.org/project/wcwidth - Changelog: https://pyup.io/changelogs/wcwidth/ - Repo: https://github.com/jquast/wcwidth </details> ### Update [Werkzeug](https://pypi.org/project/Werkzeug) from **0.15.4** to **0.16.1**. <details> <summary>Changelog</summary> ### 0.16.1 ``` -------------- Released 2020-01-27 - Fix import location in deprecation messages for subpackages. :issue:`1663` - Fix an SSL error on Python 3.5 when the dev server responds with no content. :issue:`1659` ``` ### 0.16.0 ``` -------------- Released 2019-09-19 - Deprecate most top-level attributes provided by the ``werkzeug`` module in favor of direct imports. The deprecated imports will be removed in version 1.0. For example, instead of ``import werkzeug; werkzeug.url_quote``, do ``from werkzeug.urls import url_quote``. A deprecation warning will show the correct import to use. ``werkzeug.exceptions`` and ``werkzeug.routing`` should also be imported instead of accessed, but for technical reasons can&#39;t show a warning. :issue:`2`, :pr:`1640` ``` ### 0.15.6 ``` -------------- Released 2019-09-04 - Work around a bug in pip that caused the reloader to fail on Windows when the script was an entry point. This fixes the issue with Flask&#39;s `flask run` command failing with &quot;No module named Scripts\flask&quot;. :issue:`1614` - ``ProxyFix`` trusts the ``X-Forwarded-Proto`` header by default. :issue:`1630` - The deprecated ``num_proxies`` argument to ``ProxyFix`` sets ``x_for``, ``x_proto``, and ``x_host`` to match 0.14 behavior. This is intended to make intermediate upgrades less disruptive, but the argument will still be removed in 1.0. :issue:`1630` ``` ### 0.15.5 ``` -------------- Released 2019-07-17 - Fix a ``TypeError`` due to changes to ``ast.Module`` in Python 3.8. :issue:`1551` - Fix a C assertion failure in debug builds of some Python 2.7 releases. :issue:`1553` - :class:`~exceptions.BadRequestKeyError` adds the ``KeyError`` message to the description if ``e.show_exception`` is set to ``True``. This is a more secure default than the original 0.15.0 behavior and makes it easier to control without losing information. :pr:`1592` - Upgrade the debugger to jQuery 3.4.1. :issue:`1581` - Work around an issue in some external debuggers that caused the reloader to fail. :issue:`1607` - Work around an issue where the reloader couldn&#39;t introspect a setuptools script installed as an egg. :issue:`1600` - The reloader will use ``sys.executable`` even if the script is marked executable, reverting a behavior intended for NixOS introduced in 0.15. The reloader should no longer cause ``OSError: [Errno 8] Exec format error``. :issue:`1482`, :issue:`1580` - ``SharedDataMiddleware`` safely handles paths with Windows drive names. :issue:`1589` ``` </details> <details> <summary>Links</summary> - PyPI: https://pypi.org/project/werkzeug - Changelog: https://pyup.io/changelogs/werkzeug/ - Homepage: https://palletsprojects.com/p/werkzeug/ </details> ### Update [zipp](https://pypi.org/project/zipp) from **0.5.1** to **2.1.0**. <details> <summary>Changelog</summary> ### 2.1.0 ``` ====== 32: Merge with v1.1.0. ``` ### 2.0.1 ``` ====== 30: Corrected version inference (from jaraco/skeleton12). ``` ### 2.0.0 ``` ====== Require Python 3.6 or later. ``` ### 1.1.0 ``` ====== 32: For read-only zip files, complexity of ``.exists`` and ``joinpath`` is now constant time instead of ``O(n)``, preventing quadratic time in common use-cases and rendering large zip files unusable for Path. Big thanks to Benjy Weinberger for the bug report and contributed fix (33). ``` ### 1.0.0 ``` ====== Re-release of 0.6 to correspond with release as found in Python 3.8. ``` ### 0.6.0 ``` ====== 12: When adding implicit dirs, ensure that ancestral directories are added and that duplicates are excluded. The library now relies on `more_itertools &lt;https://pypi.org/project/more_itertools&gt;`_. ``` ### 0.5.2 ``` ====== 7: Parent of a directory now actually returns the parent. ``` </details> <details> <summary>Links</summary> - PyPI: https://pypi.org/project/zipp - Changelog: https://pyup.io/changelogs/zipp/ - Repo: https://github.com/jaraco/zipp </details> --- <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:27 +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#168
No description provided.