Template for a rest app with flask, flask-rest and more...

Overview

Flask REST Template

Code Health Build Status Coverage Status

About the project (some comments):

The ideia behind the project is to create an useful and simple template for an rest app . Besides the good intentions, I tried to follow some ideas that I've learned. (see "inspirations" item).

I also tried to create useful docstrings and helpers functions. However, I did not create (yet) a documentation based on docstring (e.g. using sphinx), what [IMO] could give an idea about write docs.

Instead to use the default (from stdlib) unittest module, I prefer to use pytest. I hope it can be useful and nice.

Python version

Python 3.4.x

The module users

This module is a complete CRUD as an example of structure to facilitate a demonstration about write tests (unit and integration). In this mock, I used passlib to generate hashs, but just as an example...

Flask extensions and other components

Main requirements

  • Flask-MongoEngine
  • Flask-JWT
  • Flask-Restful
  • uWSGI

Testing requirements

  • Pytest
  • pytest-cov
  • pylama

Alternative to MongoEngine + MongoDB

It's a possible issue/to-do. Create a branch using something like sqlalchemy + postgres...

How to collaborate

There is a lot of things to do:

  • Improving tests and coverage
  • Updating the use of third party libs
  • Improving this README.md
  • Reporting an issue (typo, RFC, other kind of mistake/error)
  • Adding a python2 support ( I did not verify it yet)
  • and etc

About the license:

It's a public domain project. =]

About the inspirations:

  • Ideas and answers >> #pocoo IRC channel;
  • cookiecutter-flask;
  • Flask Snippets;
  • Flask-restful-example;
  • What the Flask a tutorial in portuguese by Bruno Rocha
  • Flaskbook by Miguel Grinberg
  • Some questions in Stack Overflow or tweets that I don't have a link. =P
Comments
  • cross - domain problem

    cross - domain problem

    I want to ask how this project solves the cross - domain problem, why I haven't seen a specific solution?Have you taken into account the cross domain problem?

    opened by bay1 1
  • TODO for th version 0.0.1

    TODO for th version 0.0.1

    • [x] - Finish the CRUD and tests in the blueprint 'users'
    • [x] - Add files to deploy on Heroku
    • [x] - Create an instance to test the project on Heroku
    • [x] - Update the README.md
    • [x] - Close the release 0.0.1
    enhancement 
    opened by alexandre 1
  • Add a CRUD for users

    Add a CRUD for users

    Something really small/simple,but cool to start another issues...

    • Create an user -> username + password ;
    • Get an user by id or username ;
    • Delete an user by id or username ;and
    • Update an user;
    opened by alexandre 1
  • Create a portuguese README.md

    Create a portuguese README.md

    I already have my notes. I need just commit it on this repository. This notes are a good kickoff to discuse about this templates, IMO.

    As minhas anotações inicais já estão prontas. Eu preciso apenas passar do caderno para o repositório...É um bom ponto de partida para descutir as decisões desses templates.

    Ao menos essas anotações eu gostaria de compartilhar em português.

    [ ]'s

    enhancement 
    opened by alexandre 1
  • docs: Fix a few typos

    docs: Fix a few typos

    There are small typos in:

    • app/config/init.py
    • app/helpers.py
    • app/users/models.py
    • tests/integration/init.py
    • tests/mocks/users.py

    Fixes:

    • Should read responsible rather than responsable.
    • Should read status rather than staus.
    • Should read response rather than reponse.
    • Should read representation rather than representantion.
    • Should read create rather than createa.

    Semi-automated pull request generated by https://github.com/timgates42/meticulous/blob/master/docs/NOTE.md

    opened by timgates42 0
  • Initial Update

    Initial Update

    This is my first visit to this fine repo so I have bundled all updates in a single pull request to make things easier for you to merge.

    Close this pull request and delete the branch if you want me to start with single pull requests right away

    Here's the executive summary:

    Updates

    | Name | used | latest | pypi | | --- | --- | --- | --- | | WTForms | 2.0.2 | 2.1 | pypi | | Werkzeug | 0.10.4 | 0.11.9 | pypi | | mongoengine | 0.9.0 | 0.10.6 | pypi | | six | 1.9.0 | 1.10.0 | pypi | | Jinja2 | 2.7.3 | 2.8 | pypi | | pytz | 2015.2 | 2016.6.1 | pypi | | pytest | 2.7.0 | 2.9.2 | pypi | | coveralls | 0.5 | 1.1 | pypi | | uWSGI | 2.0.10 | 2.0.13.1 | pypi | | pymongo | 2.7.2 | 3.3.0 | pypi | | flask-mongoengine | 0.7.1 | 0.7.5 | pypi | | Flask-RESTful | 0.3.2 | 0.3.5 | pypi | | Flask | 0.10.1 | 0.11.1 | pypi | | coverage | 3.7.1 | 4.1 | pypi | | Flask-WTF | 0.11 | 0.12 | pypi | | aniso8601 | 0.92 | 1.1.0 | pypi | | py | 1.4.26 | 1.4.31 | pypi | | pylama | 6.3.1 | 7.0.9 | pypi | | passlib | 1.6.2 | 1.6.5 | pypi | | Flask-JWT | 0.2.0 | 0.3.2 | pypi | | pytest-cov | 1.8.1 | 2.3.0 | pypi |

    Changelogs

    Jinja2 2.7.3 -> 2.8

    2.8


    (codename Replacement, released on July 26th 2015)

    • Added target parameter to urlize function.
    • Added support for followsymlinks to the file system loader.
    • The truncate filter now counts the length.
    • Added equalto filter that helps with select filters.
    • Changed cache keys to use absolute file names if available instead of load names.
    • Fixed loop length calculation for some iterators.
    • Changed how Jinja2 enforces strings to be native strings in Python 2 to work when people break their default encoding.
    • Added :func:make_logging_undefined which returns an undefined object that logs failures into a logger.
    • If unmarshalling of cached data fails the template will be reloaded now.
    • Implemented a block set tag.
    • Default cache size was incrased to 400 from a low 50.
    • Fixed is number test to accept long integers in all Python versions.
    • Changed is number to accept Decimal as a number.
    • Added a check for default arguments followed by non-default arguments. This change makes {% macro m(x, y=1, z) %}...{% endmacro %} a syntax error. The previous behavior for this code was broken anyway (resulting in the default value being applied to y).
    • Add ability to use custom subclasses of jinja2.compiler.CodeGenerator and jinja2.runtime.Context by adding two new attributes to the environment (code_generator_class and context_class) (pull request 404).
    • added support for context/environment/evalctx decorator functions on the finalize callback of the environment.
    • escape query strings for urlencode properly. Previously slashes were not escaped in that place.
    • Add 'base' parameter to 'int' filter.

    pytest 2.7.0 -> 2.9.2

    2.9.2.dev1

    Bug Fixes

    • fix 510: skip tests where one parameterize dimension was empty thanks Alex Stapleton for the Report and RonnyPfannschmidt for the PR
    • Fix Xfail does not work with condition keyword argument. Thanks astraw38_ for reporting the issue (1496) and tomviner for PR the (1524_).
    • Fix win32 path issue when puttinging custom config file with absolute path in pytest.main("-c your_absolute_path").
    • Fix maximum recursion depth detection when raised error class is not aware of unicode/encoded bytes. Thanks prusse-martin_ for the PR (1506_).
    • Fix pytest.mark.skip mark when used in strict mode. Thanks pquentin_ for the PR and RonnyPfannschmidt_ for showing how to fix the bug.
    • Minor improvements and fixes to the documentation. Thanks omarkohl_ for the PR.
    • Fix --fixtures to show all fixture definitions as opposed to just one per fixture name. Thanks to hackebrot_ for the PR.

    .. _510: https://github.com/pytest-dev/pytest/issues/510 .. _1506: https://github.com/pytest-dev/pytest/pull/1506 .. _1496: https://github.com/pytest-dev/pytest/issue/1496 .. _1524: https://github.com/pytest-dev/pytest/issue/1524

    .. _prusse-martin: https://github.com/prusse-martin .. _astraw38: https://github.com/astraw38

    2.9.1

    Bug Fixes

    • Improve error message when a plugin fails to load. Thanks nicoddemus_ for the PR.
    • Fix (1178 <https://github.com/pytest-dev/pytest/issues/1178>): pytest.fail with non-ascii characters raises an internal pytest error. Thanks nicoddemus for the PR.
    • Fix (469): junit parses report.nodeid incorrectly, when params IDs contain ::. Thanks tomviner for the PR (1431_).
    • Fix (578 <https://github.com/pytest-dev/pytest/issues/578>): SyntaxErrors containing non-ascii lines at the point of failure generated an internal py.test error. Thanks asottile for the report and nicoddemus_ for the PR.
    • Fix (1437_): When passing in a bytestring regex pattern to parameterize attempt to decode it as utf-8 ignoring errors.
    • Fix (649_): parametrized test nodes cannot be specified to run on the command line.

    .. _1437: https://github.com/pytest-dev/pytest/issues/1437 .. _469: https://github.com/pytest-dev/pytest/issues/469 .. _1431: https://github.com/pytest-dev/pytest/pull/1431 .. _649: https://github.com/pytest-dev/pytest/issues/649

    .. _asottile: https://github.com/asottile

    2.9.0

    New Features

    • New pytest.mark.skip mark, which unconditionally skips marked tests. Thanks MichaelAquilina_ for the complete PR (1040_).
    • --doctest-glob may now be passed multiple times in the command-line. Thanks jab_ and nicoddemus_ for the PR.
    • New -rp and -rP reporting options give the summary and full output of passing tests, respectively. Thanks to codewarrior0_ for the PR.
    • pytest.mark.xfail now has a strict option, which makes XPASS tests to fail the test suite (defaulting to False). There's also a xfail_strict ini option that can be used to configure it project-wise. Thanks rabbbit_ for the request and nicoddemus_ for the PR (1355_).
    • Parser.addini now supports options of type bool. Thanks nicoddemus_ for the PR.
    • New ALLOW_BYTES doctest option. This strips b prefixes from byte strings in doctest output (similar to ALLOW_UNICODE). Thanks jaraco_ for the request and nicoddemus_ for the PR (1287_).
    • Give a hint on KeyboardInterrupt to use the --fulltrace option to show the errors. Fixes 1366. Thanks to hpk42 for the report and RonnyPfannschmidt_ for the PR.
    • Catch IndexError exceptions when getting exception source location. Fixes a pytest internal error for dynamically generated code (fixtures and tests) where source lines are fake by intention.

    Changes

    • Important: py.code <https://pylib.readthedocs.io/en/latest/code.html>_ has been merged into the pytest repository as pytest._code. This decision was made because py.code had very few uses outside pytest and the fact that it was in a different repository made it difficult to fix bugs on its code in a timely manner. The team hopes with this to be able to better refactor out and improve that code. This change shouldn't affect users, but it is useful to let users aware if they encounter any strange behavior.

      Keep in mind that the code for pytest._code is private and experimental, so you definitely should not import it explicitly!

      Please note that the original py.code is still available in pylib <https://pylib.readthedocs.io>_.

    • pytest_enter_pdb now optionally receives the pytest config object. Thanks nicoddemus_ for the PR.

    • Removed code and documentation for Python 2.5 or lower versions, including removal of the obsolete _pytest.assertion.oldinterpret module. Thanks nicoddemus_ for the PR (1226_).

    • Comparisons now always show up in full when CI or BUILD_NUMBER is found in the environment, even when -vv isn't used. Thanks The-Compiler_ for the PR.

    • --lf and --ff now support long names: --last-failed and --failed-first respectively. Thanks MichaelAquilina_ for the PR.

    • Added expected exceptions to pytest.raises fail message.

    • Collection only displays progress ("collecting X items") when in a terminal. This avoids cluttering the output when using --color=yes to obtain colors in CI integrations systems (1397_).

    Bug Fixes

    • The -s and -c options should now work under xdist; Config.fromdictargs now represents its input much more faithfully. Thanks to bukzor_ for the complete PR (680_).
    • Fix (1290): support Python 3.5's ````operator in assertion rewriting. ThanksShinkenjoe for report with test case and tomviner_ for the PR.
    • Fix formatting utf-8 explanation messages (1379). Thanks biern for the PR.
    • Fix traceback style docs_ to describe all of the available options (auto/long/short/line/native/no), with auto being the default since v2.6. Thanks hackebrot_ for the PR.
    • Fix (1422_): junit record_xml_property doesn't allow multiple records with same name.

    .. _traceback style docs: https://pytest.org/latest/usage.htmlmodifying-python-traceback-printing

    .. _1422: https://github.com/pytest-dev/pytest/issues/1422 .. _1379: https://github.com/pytest-dev/pytest/issues/1379 .. _1366: https://github.com/pytest-dev/pytest/issues/1366 .. _1040: https://github.com/pytest-dev/pytest/pull/1040 .. _680: https://github.com/pytest-dev/pytest/issues/680 .. _1287: https://github.com/pytest-dev/pytest/pull/1287 .. _1226: https://github.com/pytest-dev/pytest/pull/1226 .. _1290: https://github.com/pytest-dev/pytest/pull/1290 .. _1355: https://github.com/pytest-dev/pytest/pull/1355 .. _1397: https://github.com/pytest-dev/pytest/issues/1397 .. _biern: https://github.com/biern .. _MichaelAquilina: https://github.com/MichaelAquilina .. _bukzor: https://github.com/bukzor .. _hpk42: https://github.com/hpk42 .. _nicoddemus: https://github.com/nicoddemus .. _jab: https://github.com/jab .. _codewarrior0: https://github.com/codewarrior0 .. _jaraco: https://github.com/jaraco .. _The-Compiler: https://github.com/The-Compiler .. _Shinkenjoe: https://github.com/Shinkenjoe .. _tomviner: https://github.com/tomviner .. _RonnyPfannschmidt: https://github.com/RonnyPfannschmidt .. _rabbbit: https://github.com/rabbbit .. _hackebrot: https://github.com/hackebrot .. _omarkohl: https://github.com/omarkohl .. _pquentin: https://github.com/pquentin

    2.8.7

    • fix 1338: use predictable object resolution for monkeypatch

    2.8.6

    • fix 1259: allow for double nodeids in junitxml, this was a regression failing plugins combinations like pytest-pep8 + pytest-flakes
    • Workaround for exception that occurs in pyreadline when using --pdb with standard I/O capture enabled. Thanks Erik M. Bray for the PR.
    • fix 900: Better error message in case the target of a monkeypatch call raises an ImportError.
    • fix 1292: monkeypatch calls (setattr, setenv, etc.) are now O(1). Thanks David R. MacIver for the report and Bruno Oliveira for the PR.
    • fix 1223: captured stdout and stderr are now properly displayed before entering pdb when --pdb is used instead of being thrown away. Thanks Cal Leeming for the PR.
    • fix 1305: pytest warnings emitted during pytest_terminal_summary are now properly displayed. Thanks Ionel Maries Cristian for the report and Bruno Oliveira for the PR.
    • fix 628: fixed internal UnicodeDecodeError when doctests contain unicode. Thanks Jason R. Coombs for the report and Bruno Oliveira for the PR.
    • fix 1334: Add captured stdout to jUnit XML report on setup error. Thanks Georgy Dyuldin for the PR.

    2.8.5

    • fix 1243: fixed issue where class attributes injected during collection could break pytest. PR by Alexei Kozlenok, thanks Ronny Pfannschmidt and Bruno Oliveira for the review and help.
    • fix 1074: precompute junitxml chunks instead of storing the whole tree in objects Thanks Bruno Oliveira for the report and Ronny Pfannschmidt for the PR
    • fix 1238: fix pytest.deprecated_call() receiving multiple arguments (Regression introduced in 2.8.4). Thanks Alex Gaynor for the report and Bruno Oliveira for the PR.

    2.8.4

    • fix 1190: deprecated_call() now works when the deprecated function has been already called by another test in the same module. Thanks Mikhail Chernykh for the report and Bruno Oliveira for the PR.
    • fix 1198: --pastebin option now works on Python 3. Thanks Mehdy Khoshnoody for the PR.
    • fix 1219: --pastebin now works correctly when captured output contains non-ascii characters. Thanks Bruno Oliveira for the PR.
    • fix 1204: another error when collecting with a nasty getattr(). Thanks Florian Bruhin for the PR.
    • fix the summary printed when no tests did run. Thanks Florian Bruhin for the PR.
    • fix 1185 - ensure MANIFEST.in exactly matches what should go to a sdist
    • a number of documentation modernizations wrt good practices. Thanks Bruno Oliveira for the PR.

    2.8.3

    • fix 1169: add name attribute to testcases in TestCaseFunction to support the unittest.skip decorator on functions and methods. Thanks Lee Kamentsky for the PR.
    • fix 1035: collecting tests if test module level obj has getattr(). Thanks Suor for the report and Bruno Oliveira / Tom Viner for the PR.
    • fix 331: don't collect tests if their failure cannot be reported correctly e.g. they are a callable instance of a class.
    • fix 1133: fixed internal error when filtering tracebacks where one entry belongs to a file which is no longer available. Thanks Bruno Oliveira for the PR.
    • enhancement made to highlight in red the name of the failing tests so they stand out in the output. Thanks Gabriel Reis for the PR.
    • add more talks to the documentation
    • extend documentation on the --ignore cli option
    • use pytest-runner for setuptools integration
    • minor fixes for interaction with OS X El Capitan system integrity protection (thanks Florian)

    2.8.2

    • fix 1085: proper handling of encoding errors when passing encoded byte strings to pytest.parametrize in Python 2. Thanks Themanwithoutaplan for the report and Bruno Oliveira for the PR.
    • fix 1087: handling SystemError when passing empty byte strings to pytest.parametrize in Python 3. Thanks Paul Kehrer for the report and Bruno Oliveira for the PR.
    • fix 995: fixed internal error when filtering tracebacks where one entry was generated by an exec() statement. Thanks Daniel Hahler, Ashley C Straw, Philippe Gauthier and Pavel Savchenko for contributing and Bruno Oliveira for the PR.
    • fix 1100 and 1057: errors when using autouse fixtures and doctest modules. Thanks Sergey B Kirpichev and Vital Kudzelka for contributing and Bruno Oliveira for the PR.

    2.8.1

    • fix 1034: Add missing nodeid on pytest_logwarning call in addhook. Thanks Simon Gomizelj for the PR.
    • 'deprecated_call' is now only satisfied with a DeprecationWarning or PendingDeprecationWarning. Before 2.8.0, it accepted any warning, and 2.8.0 made it accept only DeprecationWarning (but not PendingDeprecationWarning). Thanks Alex Gaynor for the issue and Eric Hunsberger for the PR.
    • fix issue 1073: avoid calling getattr on potential plugin objects. This fixes an incompatibility with pytest-django. Thanks Andreas Pelme, Bruno Oliveira and Ronny Pfannschmidt for contributing and Holger Krekel for the fix.
    • Fix issue 704: handle versionconflict during plugin loading more gracefully. Thanks Bruno Oliveira for the PR.
    • Fix issue 1064: ""--junitxml" regression when used with the "pytest-xdist" plugin, with test reports being assigned to the wrong tests. Thanks Daniel Grunwald for the report and Bruno Oliveira for the PR.
    • (experimental) adapt more SEMVER style versioning and change meaning of master branch in git repo: "master" branch now keeps the bugfixes, changes aimed for micro releases. "features" branch will only be be released with minor or major pytest releases.
    • Fix issue 766 by removing documentation references to distutils. Thanks Russel Winder.
    • Fix issue 1030: now byte-strings are escaped to produce item node ids to make them always serializable. Thanks Andy Freeland for the report and Bruno Oliveira for the PR.
    • Python 2: if unicode parametrized values are convertible to ascii, their ascii representation is used for the node id.
    • Fix issue 411: Add eq method to assertion comparison example. Thanks Ben Webb.
    • Fix issue 653: deprecated_call can be used as context manager.
    • fix issue 877: properly handle assertion explanations with non-ascii repr Thanks Mathieu Agopian for the report and Ronny Pfannschmidt for the PR.
    • fix issue 1029: transform errors when writing cache values into pytest-warnings

    2.8.0

    • new --lf and -ff options to run only the last failing tests or "failing tests first" from the last run. This functionality is provided through porting the formerly external pytest-cache plugin into pytest core. BACKWARD INCOMPAT: if you used pytest-cache's functionality to persist data between test runs be aware that we don't serialize sets anymore. Thanks Ronny Pfannschmidt for most of the merging work.

    • "-r" option now accepts "a" to include all possible reports, similar to passing "fEsxXw" explicitly (isse960). Thanks Abhijeet Kasurde for the PR.

    • avoid python3.5 deprecation warnings by introducing version specific inspection helpers, thanks Michael Droettboom.

    • fix issue562: nose.tools.istest now fully respected.

    • fix issue934: when string comparison fails and a diff is too large to display without passing -vv, still show a few lines of the diff. Thanks Florian Bruhin for the report and Bruno Oliveira for the PR.

    • fix issue736: Fix a bug where fixture params would be discarded when combined with parametrization markers. Thanks to Markus Unterwaditzer for the PR.

    • fix issue710: introduce ALLOW_UNICODE doctest option: when enabled, the u prefix is stripped from unicode strings in expected doctest output. This allows doctests which use unicode to run in Python 2 and 3 unchanged. Thanks Jason R. Coombs for the report and Bruno Oliveira for the PR.

    • parametrize now also generates meaningful test IDs for enum, regex and class objects (as opposed to class instances). Thanks to Florian Bruhin for the PR.

    • Add 'warns' to assert that warnings are thrown (like 'raises'). Thanks to Eric Hunsberger for the PR.

    • Fix issue683: Do not apply an already applied mark. Thanks ojake for the PR.

    • Deal with capturing failures better so fewer exceptions get lost to /dev/null. Thanks David Szotten for the PR.

    • fix issue730: deprecate and warn about the --genscript option. Thanks Ronny Pfannschmidt for the report and Christian Pommranz for the PR.

    • fix issue751: multiple parametrize with ids bug if it parametrizes class with two or more test methods. Thanks Sergey Chipiga for reporting and Jan Bednarik for PR.

    • fix issue82: avoid loading conftest files from setup.cfg/pytest.ini/tox.ini files and upwards by default (--confcutdir can still be set to override this). Thanks Bruno Oliveira for the PR.

    • fix issue768: docstrings found in python modules were not setting up session fixtures. Thanks Jason R. Coombs for reporting and Bruno Oliveira for the PR.

    • added tmpdir_factory, a session-scoped fixture that can be used to create directories under the base temporary directory. Previously this object was installed as a _tmpdirhandler attribute of the config object, but now it is part of the official API and using config._tmpdirhandler is deprecated. Thanks Bruno Oliveira for the PR.

    • fix issue808: pytest's internal assertion rewrite hook now implements the optional PEP302 get_data API so tests can access data files next to them. Thanks xmo-odoo for request and example and Bruno Oliveira for the PR.

    • rootdir and inifile are now displayed during usage errors to help users diagnose problems such as unexpected ini files which add unknown options being picked up by pytest. Thanks to Pavel Savchenko for bringing the problem to attention in 821 and Bruno Oliveira for the PR.

    • Summary bar now is colored yellow for warning situations such as: all tests either were skipped or xpass/xfailed, or no tests were run at all (this is a partial fix for issue500).

    • fix issue812: pytest now exits with status code 5 in situations where no tests were run at all, such as the directory given in the command line does not contain any tests or as result of a command line option filters all out all tests (-k for example). Thanks Eric Siegerman (issue812) and Bruno Oliveira for the PR.

    • Summary bar now is colored yellow for warning situations such as: all tests either were skipped or xpass/xfailed, or no tests were run at all (related to issue500). Thanks Eric Siegerman.

    • New testpaths ini option: list of directories to search for tests when executing pytest from the root directory. This can be used to speed up test collection when a project has well specified directories for tests, being usually more practical than configuring norecursedirs for all directories that do not contain tests. Thanks to Adrian for idea (694) and Bruno Oliveira for the PR.

    • fix issue713: JUnit XML reports for doctest failures. Thanks Punyashloka Biswal.

    • fix issue970: internal pytest warnings now appear as "pytest-warnings" in the terminal instead of "warnings", so it is clear for users that those warnings are from pytest and not from the builtin "warnings" module. Thanks Bruno Oliveira.

    • Include setup and teardown in junitxml test durations. Thanks Janne Vanhala.

    • fix issue735: assertion failures on debug versions of Python 3.4+

    • new option --import-mode to allow to change test module importing behaviour to append to sys.path instead of prepending. This better allows to run test modules against installated versions of a package even if the package under test has the same import root. In this example::

       testing/__init__.py
       testing/test_pkg_under_test.py
       pkg_under_test/
      

      the tests will run against the installed version of pkg_under_test when --import-mode=append is used whereas by default they would always pick up the local version. Thanks Holger Krekel.

    • pytester: add method TmpTestdir.delete_loaded_modules(), and call it from inline_run() to allow temporary modules to be reloaded. Thanks Eduardo Schettino.

    • internally refactor pluginmanager API and code so that there is a clear distinction between a pytest-agnostic rather simple pluginmanager and the PytestPluginManager which adds a lot of behaviour, among it handling of the local conftest files. In terms of documented methods this is a backward compatible change but it might still break 3rd party plugins which relied on details like especially the pluginmanager.add_shutdown() API. Thanks Holger Krekel.

    • pluginmanagement: introduce pytest.hookimpl and pytest.hookspec decorators for setting impl/spec specific parameters. This substitutes the previous now deprecated use of pytest.mark which is meant to contain markers for test functions only.

    • write/refine docs for "writing plugins" which now have their own page and are separate from the "using/installing plugins`` page.

    • fix issue732: properly unregister plugins from any hook calling sites allowing to have temporary plugins during test execution.

    • deprecate and warn about __multicall__ argument in hook implementations. Use the hookwrapper mechanism instead already introduced with pytest-2.7.

    • speed up pytest's own test suite considerably by using inprocess tests by default (testrun can be modified with --runpytest=subprocess to create subprocesses in many places instead). The main APIs to run pytest in a test is "runpytest()" or "runpytest_subprocess" and "runpytest_inprocess" if you need a particular way of running the test. In all cases you get back a RunResult but the inprocess one will also have a "reprec" attribute with the recorded events/reports.

    • fix monkeypatch.setattr("x.y", raising=False) to actually not raise if "y" is not a pre-existing attribute. Thanks Florian Bruhin.

    • fix issue741: make running output from testdir.run copy/pasteable Thanks Bruno Oliveira.

    • add a new --noconftest argument which ignores all conftest.py files.

    • add file and line attributes to JUnit-XML output.

    • fix issue890: changed extension of all documentation files from txt to rst. Thanks to Abhijeet for the PR.

    • fix issue714: add ability to apply indirect=True parameter on particular argnames. Thanks Elizaveta239.

    • fix issue890: changed extension of all documentation files from txt to rst. Thanks to Abhijeet for the PR.

    • fix issue957: " doctest: SKIP" option will now register doctests as SKIPPED rather than PASSED. Thanks Thomas Grainger for the report and Bruno Oliveira for the PR.

    • issue951: add new record_xml_property fixture, that supports logging additional information on xml output. Thanks David Diaz for the PR.

    • issue949: paths after normal options (for example -s, -v, etc) are now properly used to discover rootdir and ini files. Thanks Peter Lauri for the report and Bruno Oliveira for the PR.

    2.7.3

    • Allow 'dev', 'rc', or other non-integer version strings in importorskip. Thanks to Eric Hunsberger for the PR.
    • fix issue856: consider --color parameter in all outputs (for example --fixtures). Thanks Barney Gale for the report and Bruno Oliveira for the PR.
    • fix issue855: passing str objects as plugins argument to pytest.main is now interpreted as a module name to be imported and registered as a plugin, instead of silently having no effect. Thanks xmo-odoo for the report and Bruno Oliveira for the PR.
    • fix issue744: fix for ast.Call changes in Python 3.5+. Thanks Guido van Rossum, Matthias Bussonnier, Stefan Zimmermann and Thomas Kluyver.
    • fix issue842: applying markers in classes no longer propagate this markers to superclasses which also have markers. Thanks xmo-odoo for the report and Bruno Oliveira for the PR.
    • preserve warning functions after call to pytest.deprecated_call. Thanks Pieter Mulder for PR.
    • fix issue854: autouse yield_fixtures defined as class members of unittest.TestCase subclasses now work as expected. Thannks xmo-odoo for the report and Bruno Oliveira for the PR.
    • fix issue833: --fixtures now shows all fixtures of collected test files, instead of just the fixtures declared on the first one. Thanks Florian Bruhin for reporting and Bruno Oliveira for the PR.
    • fix issue863: skipped tests now report the correct reason when a skip/xfail condition is met when using multiple markers. Thanks Raphael Pierzina for reporting and Bruno Oliveira for the PR.
    • optimized tmpdir fixture initialization, which should make test sessions faster (specially when using pytest-xdist). The only visible effect is that now pytest uses a subdirectory in the $TEMP directory for all directories created by this fixture (defaults to $TEMP/pytest-$USER). Thanks Bruno Oliveira for the PR.

    2.7.2

    • fix issue767: pytest.raises value attribute does not contain the exception instance on Python 2.6. Thanks Eric Siegerman for providing the test case and Bruno Oliveira for PR.
    • Automatically create directory for junitxml and results log. Thanks Aron Curzon.
    • fix issue713: JUnit XML reports for doctest failures. Thanks Punyashloka Biswal.
    • fix issue735: assertion failures on debug versions of Python 3.4+ Thanks Benjamin Peterson.
    • fix issue114: skipif marker reports to internal skipping plugin; Thanks Floris Bruynooghe for reporting and Bruno Oliveira for the PR.
    • fix issue748: unittest.SkipTest reports to internal pytest unittest plugin. Thanks Thomas De Schampheleire for reporting and Bruno Oliveira for the PR.
    • fix issue718: failed to create representation of sets containing unsortable elements in python 2. Thanks Edison Gustavo Muenz.
    • fix issue756, fix issue752 (and similar issues): depend on py-1.4.29 which has a refined algorithm for traceback generation.

    2.7.1

    • fix issue731: do not get confused by the braces which may be present and unbalanced in an object's repr while collapsing False explanations. Thanks Carl Meyer for the report and test case.
    • fix issue553: properly handling inspect.getsourcelines failures in FixtureLookupError which would lead to to an internal error, obfuscating the original problem. Thanks talljosh for initial diagnose/patch and Bruno Oliveira for final patch.
    • fix issue660: properly report scope-mismatch-access errors independently from ordering of fixture arguments. Also avoid the pytest internal traceback which does not provide information to the user. Thanks Holger Krekel.
    • streamlined and documented release process. Also all versions (in setup.py and documentation generation) are now read from _pytest/init.py. Thanks Holger Krekel.
    • fixed docs to remove the notion that yield-fixtures are experimental. They are here to stay :) Thanks Bruno Oliveira.
    • Support building wheels by using environment markers for the requirements. Thanks Ionel Maries Cristian.
    • fixed regression to 2.6.4 which surfaced e.g. in lost stdout capture printing when tests raised SystemExit. Thanks Holger Krekel.
    • reintroduced _pytest fixture of the pytester plugin which is used at least by pytest-xdist.

    coveralls 0.5 -> 1.1

    1.1

    * Suupport for Circle CI
    
    
    
    ### 1.0
    
    
    • Official coverage 4.0 support

    1.0b1

    * Coverage 4 beta support
    * Codeship experimetal support (CI_BRANCH env variable)
    * Drop python 3.2 support (as coverage 4 does not support it)
    * Repo token usage is deprecated (but still supported) in favor of env variable.
    * Error reporting is improved, exist status codes added
    
    
    
    ### 1.0a2
    
    
    • Fix latest alpha coverage.py support
    • Remove erroneous warning message when writing output to a file

    1.0a1

    * **Backwards incompatible**: make pyyaml optional. If you're using .coveralls.yml, make sure to install coveralls[yaml]
    * Coverage 4 alpha support
    * Allow debug and output options to work without repo_token
    * Fix merge command for python 3.X
    
    
    
    
    
    
    

    pymongo 2.7.2 -> 3.3.0

    3.3

    • C extensions support on big endian systems.
    • Kerberos authentication support on Windows using WinKerberos <https://pypi.python.org/pypi/winkerberos>_.
    • A new ssl_clrfile option to support certificate revocation lists.
    • A new ssl_pem_passphrase option to support encrypted key files.
    • Support for publishing server discovery and monitoring events. See :mod:~pymongo.monitoring for details.
    • New connection pool options minPoolSize and maxIdleTimeMS.
    • New heartbeatFrequencyMS option controls the rate at which background monitoring threads re-check servers. Default is once every 10 seconds.

    .. warning:: PyMongo 3.3 drops support for MongoDB versions older than 2.4. It also drops support for python 3.2 (pypy3 continues to be supported).

    Issues Resolved ...............

    See the PyMongo 3.3 release notes in JIRA_ for the list of resolved issues in this release.

    .. _PyMongo 3.3 release notes in JIRA: https://jira.mongodb.org/browse/PYTHON/fixforversion/16005

    3.2.2

    a fix for using the connect option in the MongoDB URI and support for setting the batch size for a query to 1 when using MongoDB 3.2+.

    Issues Resolved ...............

    See the PyMongo 3.2.2 release notes in JIRA_ for the list of resolved issues in this release.

    .. _PyMongo 3.2.2 release notes in JIRA: https://jira.mongodb.org/browse/PYTHON/fixforversion/16538

    3.2.1

    running the mapreduce command twice when calling the :meth:~pymongo.collection.Collection.inline_map_reduce method and a :exc:TypeError being raised when calling :meth:~gridfs.GridFSBucket.download_to_stream. This release also improves error messaging around BSON decoding.

    Issues Resolved ...............

    See the PyMongo 3.2.1 release notes in JIRA_ for the list of resolved issues in this release.

    .. _PyMongo 3.2.1 release notes in JIRA: https://jira.mongodb.org/browse/PYTHON/fixforversion/16312

    3.2


    Version 3.2 implements the new server features introduced in MongoDB 3.2.

    Highlights include:

    • Full support for MongoDB 3.2 including:
      • Support for :class:~pymongo.read_concern.ReadConcern
      • :class:~pymongo.write_concern.WriteConcern is now applied to :meth:~pymongo.collection.Collection.find_one_and_replace, :meth:~pymongo.collection.Collection.find_one_and_update, and :meth:~pymongo.collection.Collection.find_one_and_delete.
      • Support for the new bypassDocumentValidation option in write helpers.
    • Support for reading and writing raw BSON with :class:~bson.raw_bson.RawBSONDocument

    .. note:: Certain :class:~pymongo.mongo_client.MongoClient properties now block until a connection is established or raise :exc:~pymongo.errors.ServerSelectionTimeoutError if no server is available. See :class:~pymongo.mongo_client.MongoClient for details.

    3.1.1

    regression in error handling for oversize command documents and interrupt handling issues in the C extensions.

    Issues Resolved ...............

    See the PyMongo 3.1.1 release notes in JIRA_ for the list of resolved issues in this release.

    .. _PyMongo 3.1.1 release notes in JIRA: https://jira.mongodb.org/browse/PYTHON/fixforversion/16211

    3.1

    of 3.0.3.

    Highlights include:

    • Command monitoring support. See :mod:~pymongo.monitoring for details.
    • Configurable error handling for :exc:UnicodeDecodeError. See the unicode_decode_error_handler option of :class:~bson.codec_options.CodecOptions.
    • Optional automatic timezone conversion when decoding BSON datetime. See the tzinfo option of :class:~bson.codec_options.CodecOptions.
    • An implementation of :class:~gridfs.GridFSBucket from the new GridFS spec.
    • Compliance with the new Connection String spec.
    • Reduced idle CPU usage in Python 2.

    Changes in internal classes ...........................

    The private PeriodicExecutor class no longer takes a condition_class option, and the private thread_util.Event class is removed.

    Issues Resolved ...............

    See the PyMongo 3.1 release notes in JIRA_ for the list of resolved issues in this release.

    .. _PyMongo 3.1 release notes in JIRA: https://jira.mongodb.org/browse/PYTHON/fixforversion/14796

    3.0.3

    feature breaking bug in the GSSAPI implementation.

    Issues Resolved ...............

    See the PyMongo 3.0.3 release notes in JIRA_ for the list of resolved issues in this release.

    .. _PyMongo 3.0.3 release notes in JIRA: https://jira.mongodb.org/browse/PYTHON/fixforversion/15528

    3.0.2

    importantly a bug that could route operations to replica set members that are not in primary or secondary state when using :class:~pymongo.read_preferences.PrimaryPreferred or :class:~pymongo.read_preferences.Nearest. It is a recommended upgrade for all users of PyMongo 3.0.x.

    Issues Resolved ...............

    See the PyMongo 3.0.2 release notes in JIRA_ for the list of resolved issues in this release.

    .. _PyMongo 3.0.2 release notes in JIRA: https://jira.mongodb.org/browse/PYTHON/fixforversion/15430

    3.0.1

    importantly a bug in GridFS.delete that could prevent file chunks from actually being deleted.

    Issues Resolved ...............

    See the PyMongo 3.0.1 release notes in JIRA_ for the list of resolved issues in this release.

    .. _PyMongo 3.0.1 release notes in JIRA: https://jira.mongodb.org/browse/PYTHON/fixforversion/15322

    3.0


    PyMongo 3.0 is a partial rewrite of PyMongo bringing a large number of improvements:

    • A unified client class. MongoClient is the one and only client class for connecting to a standalone mongod, replica set, or sharded cluster. Migrating from a standalone, to a replica set, to a sharded cluster can be accomplished with only a simple URI change.
    • MongoClient is much more responsive to configuration changes in your MongoDB deployment. All connected servers are monitored in a non-blocking manner. Slow to respond or down servers no longer block server discovery, reducing application startup time and time to respond to new or reconfigured servers and replica set failovers.
    • A unified CRUD API. All official MongoDB drivers now implement a standard CRUD API allowing polyglot developers to move from language to language with ease.
    • Single source support for Python 2.x and 3.x. PyMongo no longer relies on 2to3 to support Python 3.
    • A rewritten pure Python BSON implementation, improving performance with pypy and cpython deployments without support for C extensions.
    • Better support for greenlet based async frameworks including eventlet.
    • Immutable client, database, and collection classes, avoiding a host of thread safety issues in client applications.

    PyMongo 3.0 brings a large number of API changes. Be sure to read the changes listed below before upgrading from PyMongo 2.x.

    .. warning:: PyMongo no longer supports Python 2.4, 2.5, or 3.1. If you must use PyMongo with these versions of Python the 2.x branch of PyMongo will be minimally supported for some time.

    SONManipulator changes ......................

    The :class:~pymongo.son_manipulator.SONManipulator API has limitations as a technique for transforming your data. Instead, it is more flexible and straightforward to transform outgoing documents in your own code before passing them to PyMongo, and transform incoming documents after receiving them from PyMongo.

    Thus the :meth:~pymongo.database.Database.add_son_manipulator method is deprecated. PyMongo 3's new CRUD API does not apply SON manipulators to documents passed to :meth:~pymongo.collection.Collection.bulk_write, :meth:~pymongo.collection.Collection.insert_one, :meth:~pymongo.collection.Collection.insert_many, :meth:~pymongo.collection.Collection.update_one, or :meth:~pymongo.collection.Collection.update_many. SON manipulators are not applied to documents returned by the new methods :meth:~pymongo.collection.Collection.find_one_and_delete, :meth:~pymongo.collection.Collection.find_one_and_replace, and :meth:~pymongo.collection.Collection.find_one_and_update.

    SSL/TLS changes ...............

    When ssl is True the ssl_cert_reqs option now defaults to :attr:ssl.CERT_REQUIRED if not provided. PyMongo will attempt to load OS provided CA certificates to verify the server, raising :exc:~pymongo.errors.ConfigurationError if it cannot.

    Gevent Support ..............

    In previous versions, PyMongo supported Gevent in two modes: you could call gevent.monkey.patch_socket() and pass use_greenlets=True to :class:~pymongo.mongo_client.MongoClient, or you could simply call gevent.monkey.patch_all() and omit the use_greenlets argument.

    In PyMongo 3.0, the use_greenlets option is gone. To use PyMongo with Gevent simply call gevent.monkey.patch_all().

    For more information, see :doc:PyMongo's Gevent documentation <examples/gevent>.

    :class:~pymongo.mongo_client.MongoClient changes ..................................................

    :class:~pymongo.mongo_client.MongoClient is now the one and only client class for a standalone server, mongos, or replica set. It includes the functionality that had been split into MongoReplicaSetClient: it can connect to a replica set, discover all its members, and monitor the set for stepdowns, elections, and reconfigs. :class:~pymongo.mongo_client.MongoClient now also supports the full :class:~pymongo.read_preferences.ReadPreference API.

    The obsolete classes MasterSlaveConnection, Connection, and ReplicaSetConnection are removed.

    The :class:~pymongo.mongo_client.MongoClient constructor no longer blocks while connecting to the server or servers, and it no longer raises :class:~pymongo.errors.ConnectionFailure if they are unavailable, nor :class:~pymongo.errors.ConfigurationError if the user's credentials are wrong. Instead, the constructor returns immediately and launches the connection process on background threads. The connect option is added to control whether these threads are started immediately, or when the client is first used.

    Therefore the alive method is removed since it no longer provides meaningful information; even if the client is disconnected, it may discover a server in time to fulfill the next operation.

    In PyMongo 2.x, :class:~pymongo.mongo_client.MongoClient accepted a list of standalone MongoDB servers and used the first it could connect to::

    MongoClient(['host1.com:27017', 'host2.com:27017'])

    A list of multiple standalones is no longer supported; if multiple servers are listed they must be members of the same replica set, or mongoses in the same sharded cluster.

    The behavior for a list of mongoses is changed from "high availability" to "load balancing". Before, the client connected to the lowest-latency mongos in the list, and used it until a network error prompted it to re-evaluate all mongoses' latencies and reconnect to one of them. In PyMongo 3, the client monitors its network latency to all the mongoses continuously, and distributes operations evenly among those with the lowest latency. See :ref:mongos-load-balancing for more information.

    The client methods start_request, in_request, and end_request are removed, and so is the auto_start_request option. Requests were designed to make read-your-writes consistency more likely with the w=0 write concern. Additionally, a thread in a request used the same member for all secondary reads in a replica set. To ensure read-your-writes consistency in PyMongo 3.0, do not override the default write concern with w=0, and do not override the default :ref:read preference <secondary-reads> of PRIMARY.

    Support for the slaveOk (or slave_okay), safe, and network_timeout options has been removed. Use :attr:~pymongo.read_preferences.ReadPreference.SECONDARY_PREFERRED instead of slave_okay. Accept the default write concern, acknowledged writes, instead of setting safe=True. Use socketTimeoutMS in place of network_timeout (note that network_timeout was in seconds, where as socketTimeoutMS is milliseconds).

    The max_pool_size option has been removed. It is replaced by the maxPoolSize MongoDB URI option. maxPoolSize is now a supported URI option in PyMongo and can be passed as a keyword argument.

    The copy_database method is removed, see the :doc:copy_database examples </examples/copydb> for alternatives.

    The disconnect method is removed. Use :meth:~pymongo.mongo_client.MongoClient.close instead.

    The get_document_class method is removed. Use :attr:~pymongo.mongo_client.MongoClient.codec_options instead.

    The get_lasterror_options, set_lasterror_options, and unset_lasterror_options methods are removed. Write concern options can be passed to :class:~pymongo.mongo_client.MongoClient as keyword arguments or MongoDB URI options.

    The :meth:~pymongo.mongo_client.MongoClient.get_database method is added for getting a Database instance with its options configured differently than the MongoClient's.

    The following read-only attributes have been added:

    • :attr:~pymongo.mongo_client.MongoClient.codec_options

    The following attributes are now read-only:

    • :attr:~pymongo.mongo_client.MongoClient.read_preference
    • :attr:~pymongo.mongo_client.MongoClient.write_concern

    The following attributes have been removed:

    • :attr:~pymongo.mongo_client.MongoClient.document_class (use :attr:~pymongo.mongo_client.MongoClient.codec_options instead)
    • :attr:~pymongo.mongo_client.MongoClient.host (use :attr:~pymongo.mongo_client.MongoClient.address instead)
    • :attr:~pymongo.mongo_client.MongoClient.min_wire_version
    • :attr:~pymongo.mongo_client.MongoClient.max_wire_version
    • :attr:~pymongo.mongo_client.MongoClient.port (use :attr:~pymongo.mongo_client.MongoClient.address instead)
    • :attr:~pymongo.mongo_client.MongoClient.safe (use :attr:~pymongo.mongo_client.MongoClient.write_concern instead)
    • :attr:~pymongo.mongo_client.MongoClient.slave_okay (use :attr:~pymongo.mongo_client.MongoClient.read_preference instead)
    • :attr:~pymongo.mongo_client.MongoClient.tag_sets (use :attr:~pymongo.mongo_client.MongoClient.read_preference instead)
    • :attr:~pymongo.mongo_client.MongoClient.tz_aware (use :attr:~pymongo.mongo_client.MongoClient.codec_options instead)

    The following attributes have been renamed:

    • :attr:~pymongo.mongo_client.MongoClient.secondary_acceptable_latency_ms is now :attr:~pymongo.mongo_client.MongoClient.local_threshold_ms and is now read-only.

    :class:~pymongo.cursor.Cursor changes .......................................

    The conn_id property is renamed to :attr:~pymongo.cursor.Cursor.address.

    Cursor management changes .........................

    :class:~pymongo.cursor_manager.CursorManager and :meth:~pymongo.mongo_client.MongoClient.set_cursor_manager are no longer deprecated. If you subclass :class:~pymongo.cursor_manager.CursorManager your implementation of :meth:~pymongo.cursor_manager.CursorManager.close must now take a second parameter, address. The BatchCursorManager class is removed.

    The second parameter to :meth:~pymongo.mongo_client.MongoClient.close_cursor is renamed from _conn_id to address. :meth:~pymongo.mongo_client.MongoClient.kill_cursors now accepts an address parameter.

    :class:~pymongo.database.Database changes ...........................................

    The connection property is renamed to :attr:~pymongo.database.Database.client.

    The following read-only attributes have been added:

    • :attr:~pymongo.database.Database.codec_options

    The following attributes are now read-only:

    • :attr:~pymongo.database.Database.read_preference
    • :attr:~pymongo.database.Database.write_concern

    Use :meth:~pymongo.mongo_client.MongoClient.get_database for getting a Database instance with its options configured differently than the MongoClient's.

    The following attributes have been removed:

    • :attr:~pymongo.database.Database.safe
    • :attr:~pymongo.database.Database.secondary_acceptable_latency_ms
    • :attr:~pymongo.database.Database.slave_okay
    • :attr:~pymongo.database.Database.tag_sets

    The following methods have been added:

    • :meth:~pymongo.database.Database.get_collection

    The following methods have been changed:

    • :meth:~pymongo.database.Database.command. Support for as_class, uuid_subtype, tag_sets, and secondary_acceptable_latency_ms have been removed. You can instead pass an instance of :class:~bson.codec_options.CodecOptions as codec_options and an instance of a read preference class from :mod:~pymongo.read_preferences as read_preference. The fields and compile_re options are also removed. The fields options was undocumented and never really worked. Regular expressions are always decoded to :class:~bson.regex.Regex.

    The following methods have been deprecated:

    • :meth:~pymongo.database.Database.add_son_manipulator

    The following methods have been removed:

    The get_lasterror_options, set_lasterror_options, and unset_lasterror_options methods have been removed. Use :class:~pymongo.write_concern.WriteConcern with :meth:~pymongo.mongo_client.MongoClient.get_database instead.

    :class:~pymongo.collection.Collection changes ...............................................

    The following read-only attributes have been added:

    • :attr:~pymongo.collection.Collection.codec_options

    The following attributes are now read-only:

    • :attr:~pymongo.collection.Collection.read_preference
    • :attr:~pymongo.collection.Collection.write_concern

    Use :meth:~pymongo.database.Database.get_collection or :meth:~pymongo.collection.Collection.with_options for getting a Collection instance with its options configured differently than the Database's.

    The following attributes have been removed:

    • :attr:~pymongo.collection.Collection.safe
    • :attr:~pymongo.collection.Collection.secondary_acceptable_latency_ms
    • :attr:~pymongo.collection.Collection.slave_okay
    • :attr:~pymongo.collection.Collection.tag_sets

    The following methods have been added:

    • :meth:~pymongo.collection.Collection.bulk_write
    • :meth:~pymongo.collection.Collection.insert_one
    • :meth:~pymongo.collection.Collection.insert_many
    • :meth:~pymongo.collection.Collection.update_one
    • :meth:~pymongo.collection.Collection.update_many
    • :meth:~pymongo.collection.Collection.replace_one
    • :meth:~pymongo.collection.Collection.delete_one
    • :meth:~pymongo.collection.Collection.delete_many
    • :meth:~pymongo.collection.Collection.find_one_and_delete
    • :meth:~pymongo.collection.Collection.find_one_and_replace
    • :meth:~pymongo.collection.Collection.find_one_and_update
    • :meth:~pymongo.collection.Collection.with_options
    • :meth:~pymongo.collection.Collection.create_indexes
    • :meth:~pymongo.collection.Collection.list_indexes

    The following methods have changed:

    • :meth:~pymongo.collection.Collection.aggregate now always returns an instance of :class:~pymongo.command_cursor.CommandCursor. See the documentation for all options.
    • :meth:~pymongo.collection.Collection.count now optionally takes a filter argument, as well as other options supported by the count command.
    • :meth:~pymongo.collection.Collection.distinct now optionally takes a filter argument.
    • :meth:~pymongo.collection.Collection.create_index no longer caches indexes, therefore the cache_for parameter has been removed. It also no longer supports the bucket_size and drop_dups aliases for bucketSize and dropDups.

    The following methods are deprecated:

    • :meth:~pymongo.collection.Collection.save
    • :meth:~pymongo.collection.Collection.insert
    • :meth:~pymongo.collection.Collection.update
    • :meth:~pymongo.collection.Collection.remove
    • :meth:~pymongo.collection.Collection.find_and_modify
    • :meth:~pymongo.collection.Collection.ensure_index

    The following methods have been removed:

    The get_lasterror_options, set_lasterror_options, and unset_lasterror_options methods have been removed. Use :class:~pymongo.write_concern.WriteConcern with :meth:~pymongo.collection.Collection.with_options instead.

    Changes to :meth:~pymongo.collection.Collection.find and :meth:~pymongo.collection.Collection.find_one

    
    The following find/find_one options have been renamed:
    
    These renames only affect your code if you passed these as keyword arguments,
    like find(fields=['fieldname']). If you passed only positional parameters these
    changes are not significant for your application.
    
    - spec -> filter
    - fields -> projection
    - partial -> allow_partial_results
    
    The following find/find_one options have been added:
    
    - cursor_type (see :class:`~pymongo.cursor.CursorType` for values)
    - oplog_replay
    - modifiers
    
    The following find/find_one options have been removed:
    
    - network_timeout (use :meth:`~pymongo.cursor.Cursor.max_time_ms` instead)
    - slave_okay (use one of the read preference classes from
     :mod:`~pymongo.read_preferences` and
     :meth:`~pymongo.collection.Collection.with_options` instead)
    - read_preference (use :meth:`~pymongo.collection.Collection.with_options`
     instead)
    - tag_sets (use one of the read preference classes from
     :mod:`~pymongo.read_preferences` and
     :meth:`~pymongo.collection.Collection.with_options` instead)
    - secondary_acceptable_latency_ms (use the `localThresholdMS` URI option
     instead)
    - max_scan (use the new `modifiers` option instead)
    - snapshot (use the new `modifiers` option instead)
    - tailable (use the new `cursor_type` option instead)
    - await_data (use the new `cursor_type` option instead)
    - exhaust (use the new `cursor_type` option instead)
    - as_class (use :meth:`~pymongo.collection.Collection.with_options` with
     :class:`~bson.codec_options.CodecOptions` instead)
    - compile_re (BSON regular expressions are always decoded to
     :class:`~bson.regex.Regex`)
    
    The following find/find_one options are deprecated:
    
    - manipulate
    
    The following renames need special handling.
    
    - timeout -> no_cursor_timeout -
     The default for `timeout` was True. The default for `no_cursor_timeout` is
     False. If you were previously passing False for `timeout` you must pass
     **True** for `no_cursor_timeout` to keep the previous behavior.
    
    :mod:`~pymongo.errors` changes
    ..............................
    
    The exception classes ``UnsupportedOption`` and ``TimeoutError`` are deleted.
    
    :mod:`~gridfs` changes
    ......................
    
    Since PyMongo 1.6, methods ``open`` and ``close`` of :class:`~gridfs.GridFS`
    raised an ``UnsupportedAPI`` exception, as did the entire ``GridFile`` class.
    The unsupported methods, the class, and the exception are all deleted.
    
    :mod:`~bson` changes
    ....................
    
    The `compile_re` option is removed from all methods
    that accepted it in :mod:`~bson` and :mod:`~bson.json_util`. Additionally, it
    is removed from :meth:`~pymongo.collection.Collection.find`,
    :meth:`~pymongo.collection.Collection.find_one`,
    :meth:`~pymongo.collection.Collection.aggregate`,
    :meth:`~pymongo.database.Database.command`, and so on.
    PyMongo now always represents BSON regular expressions as
    :class:`~bson.regex.Regex` objects. This prevents errors for incompatible
    patterns, see `PYTHON-500`_. Use :meth:`~bson.regex.Regex.try_compile` to
    attempt to convert from a BSON regular expression to a Python regular
    expression object.
    
    PyMongo now decodes the int64 BSON type to :class:`~bson.int64.Int64`, a
    trivial wrapper around long (in python 2.x) or int (in python 3.x). This
    allows BSON int64 to be round tripped without losing type information in
    python 3. Note that if you store a python long (or a python int larger than
    4 bytes) it will be returned from PyMongo as :class:`~bson.int64.Int64`.
    
    The `as_class`, `tz_aware`, and `uuid_subtype` options are removed from all
    BSON encoding and decoding methods. Use
    :class:`~bson.codec_options.CodecOptions` to configure these options. The
    APIs affected are:
    
    - :func:`~bson.decode_all`
    - :func:`~bson.decode_iter`
    - :func:`~bson.decode_file_iter`
    - :meth:`~bson.BSON.encode`
    - :meth:`~bson.BSON.decode`
    
    This is a breaking change for any application that uses the BSON API directly
    and changes any of the named parameter defaults. No changes are required for
    applications that use the default values for these options. The behavior
    remains the same.
    
    .. _PYTHON-500: https://jira.mongodb.org/browse/PYTHON-500
    
    Issues Resolved
    ...............
    
    See the `PyMongo 3.0 release notes in JIRA`_ for the list of resolved issues
    in this release.
    
    .. _PyMongo 3.0 release notes in JIRA: https://jira.mongodb.org/browse/PYTHON/fixforversion/12501
    
    
    
    ### 2.9.3
    
    thread safety issues in :meth:`~pymongo.collection.Collection.ensure_index`,
    :meth:`~pymongo.collection.Collection.drop_index`, and
    :meth:`~pymongo.collection.Collection.drop_indexes`.
    
    Issues Resolved
    ...............
    
    See the `PyMongo 2.9.3 release notes in JIRA`_ for the list of resolved issues
    in this release.
    
    .. _PyMongo 2.9.3 release notes in JIRA: https://jira.mongodb.org/browse/PYTHON/fixforversion/16539
    
    
    
    ### 2.9.2
    
    improves an error message when decoding BSON as well as fixes a couple other
    issues including :meth:`~pymongo.collection.Collection.aggregate` ignoring
    :attr:`~pymongo.collection.Collection.codec_options` and
    :meth:`~pymongo.database.Database.command` raising a superfluous
    `DeprecationWarning`.
    
    Issues Resolved
    ...............
    
    See the `PyMongo 2.9.2 release notes in JIRA`_ for the list of resolved issues
    in this release.
    
    .. _PyMongo 2.9.2 release notes in JIRA: https://jira.mongodb.org/browse/PYTHON/fixforversion/16303
    
    
    
    ### 2.9.1
    
    adapts a test case for a behavior change in MongoDB 3.2.
    
    Issues Resolved
    ...............
    
    See the `PyMongo 2.9.1 release notes in JIRA`_ for the list of resolved issues
    in this release.
    
    .. _PyMongo 2.9.1 release notes in JIRA: https://jira.mongodb.org/browse/PYTHON/fixforversion/16208
    
    
    
    ### 2.9
    
    from PyMongo 3.0 have been backported in a backward compatible way, allowing
    applications to be written against PyMongo >= 2.9, rather then PyMongo 2.x or
    PyMongo 3.x. See the :doc:`/migrate-to-pymongo3` for detailed examples.
    
    .. note:: There are a number of new deprecations in this release for features
     that were removed in PyMongo 3.0.
    
     :class:`~pymongo.mongo_client.MongoClient`:
       - :attr:`~pymongo.mongo_client.MongoClient.host`
       - :attr:`~pymongo.mongo_client.MongoClient.port`
       - :attr:`~pymongo.mongo_client.MongoClient.use_greenlets`
       - :attr:`~pymongo.mongo_client.MongoClient.document_class`
       - :attr:`~pymongo.mongo_client.MongoClient.tz_aware`
       - :attr:`~pymongo.mongo_client.MongoClient.secondary_acceptable_latency_ms`
       - :attr:`~pymongo.mongo_client.MongoClient.tag_sets`
       - :attr:`~pymongo.mongo_client.MongoClient.uuid_subtype`
       - :meth:`~pymongo.mongo_client.MongoClient.disconnect`
       - :meth:`~pymongo.mongo_client.MongoClient.alive`
    
     :class:`~pymongo.mongo_replica_set_client.MongoReplicaSetClient`:
       - :attr:`~pymongo.mongo_replica_set_client.MongoReplicaSetClient.use_greenlets`
       - :attr:`~pymongo.mongo_replica_set_client.MongoReplicaSetClient.document_class`
       - :attr:`~pymongo.mongo_replica_set_client.MongoReplicaSetClient.tz_aware`
       - :attr:`~pymongo.mongo_replica_set_client.MongoReplicaSetClient.secondary_acceptable_latency_ms`
       - :attr:`~pymongo.mongo_replica_set_client.MongoReplicaSetClient.tag_sets`
       - :attr:`~pymongo.mongo_replica_set_client.MongoReplicaSetClient.uuid_subtype`
       - :meth:`~pymongo.mongo_replica_set_client.MongoReplicaSetClient.alive`
    
     :class:`~pymongo.database.Database`:
       - :attr:`~pymongo.database.Database.secondary_acceptable_latency_ms`
       - :attr:`~pymongo.database.Database.tag_sets`
       - :attr:`~pymongo.database.Database.uuid_subtype`
    
     :class:`~pymongo.collection.Collection`:
       - :attr:`~pymongo.collection.Collection.secondary_acceptable_latency_ms`
       - :attr:`~pymongo.collection.Collection.tag_sets`
       - :attr:`~pymongo.collection.Collection.uuid_subtype`
    
    .. warning::
     In previous versions of PyMongo, changing the value of
     :attr:`~pymongo.mongo_client.MongoClient.document_class` changed
     the behavior of all existing instances of
     :class:`~pymongo.collection.Collection`::
    
       >>> coll = client.test.test
       >>> coll.find_one()
       {u'_id': ObjectId('5579dc7cfba5220cc14d9a18')}
       >>> from bson.son import SON
       >>> client.document_class = SON
       >>> coll.find_one()
       SON([(u'_id', ObjectId('5579dc7cfba5220cc14d9a18'))])
    
     The document_class setting is now configurable at the client,
     database, collection, and per-operation level. This required breaking
     the existing behavior. To change the document class per operation in a
     forward compatible way use
     :meth:`~pymongo.collection.Collection.with_options`::
    
       >>> coll.find_one()
       {u'_id': ObjectId('5579dc7cfba5220cc14d9a18')}
       >>> from bson.codec_options import CodecOptions
       >>> coll.with_options(CodecOptions(SON)).find_one()
       SON([(u'_id', ObjectId('5579dc7cfba5220cc14d9a18'))])
    
    Issues Resolved
    ...............
    
    See the `PyMongo 2.9 release notes in JIRA`_ for the list of resolved issues
    in this release.
    
    .. _PyMongo 2.9 release notes in JIRA: https://jira.mongodb.org/browse/PYTHON/fixforversion/14795
    
    
    
    ### 2.8.1
    
    2.8. It is a recommended upgrade for all users of PyMongo 2.x.
    
    Issues Resolved
    ...............
    
    See the `PyMongo 2.8.1 release notes in JIRA`_ for the list of resolved issues
    in this release.
    
    .. _PyMongo 2.8.1 release notes in JIRA: https://jira.mongodb.org/browse/PYTHON/fixforversion/15324
    
    
    
    ### 2.8
    
    fixes a number of bugs.
    
    Special thanks to Don Mitchell, Ximing, Can Zhang, Sergey Azovskov, and Heewa
    Barfchin for their contributions to this release.
    
    Highlights include:
    
    - Support for the SCRAM-SHA-1 authentication mechanism (new in MongoDB 3.0).
    - JSON decoder support for the new $numberLong and $undefined types.
    - JSON decoder support for the $date type as an ISO-8601 string.
    - Support passing an index name to :meth:`~pymongo.cursor.Cursor.hint`.
    - The :meth:`~pymongo.cursor.Cursor.count` method will use a hint if one
     has been provided through :meth:`~pymongo.cursor.Cursor.hint`.
    - A new socketKeepAlive option for the connection pool.
    - New generator based BSON decode functions, :func:`~bson.decode_iter`
     and :func:`~bson.decode_file_iter`.
    - Internal changes to support alternative storage engines like wiredtiger.
    
    .. note:: There are a number of deprecations in this release for features that
     will be removed in PyMongo 3.0. These include:
    
     - :meth:`~pymongo.mongo_client.MongoClient.start_request`
     - :meth:`~pymongo.mongo_client.MongoClient.in_request`
     - :meth:`~pymongo.mongo_client.MongoClient.end_request`
     - :meth:`~pymongo.mongo_client.MongoClient.copy_database`
     - :meth:`~pymongo.database.Database.error`
     - :meth:`~pymongo.database.Database.last_status`
     - :meth:`~pymongo.database.Database.previous_error`
     - :meth:`~pymongo.database.Database.reset_error_history`
     - :class:`~pymongo.master_slave_connection.MasterSlaveConnection`
    
     The JSON format for :class:`~bson.timestamp.Timestamp` has changed from
     '{"t": <int>, "i": <int>}' to '{"$timestamp": {"t": <int>, "i": <int>}}'.
     This new format will be decoded to an instance of
     :class:`~bson.timestamp.Timestamp`. The old format will continue to be
     decoded to a python dict as before. Encoding to the old format is no
     longer supported as it was never correct and loses type information.
    
    Issues Resolved
    ...............
    
    See the `PyMongo 2.8 release notes in JIRA`_ for the list of resolved issues
    in this release.
    
    .. _PyMongo 2.8 release notes in JIRA: https://jira.mongodb.org/browse/PYTHON/fixforversion/14223
    
    
    
    
    
    
    

    Flask-RESTful 0.3.2 -> 0.3.5

    0.3.5


    Released December 9, 2015

    • Add nullable option to request parser to allow/disallow null values for arguments (538)
    • Use Flask's exception log method in handle_error(e) method instead of directly logging the exception notice. (496)
    • Argument.help now allows more flexible message formatting using the {error_msg} string interpolation token. (518)
    • Prevent representation from being chosen at random when Accept: */* (524)
    • Headers from HTTPExceptions are now returned in the response instead of being discarded (523)
    • Marshalling now checks for a __marshallable__ method first before defaulting back to __getitem__ ()
    • Flask 1.0 compatability fixes (506)

    0.3.4


    Released July 20, 2015

    • Fixed issue where abort() and raise Exception were not equivalent (205)
    • Fixed RequestParser settings not being copied properly (483)
    • Add ability to configure json serializer settings from application config (458)
    • Project metadata, tests, and examples are now included in source distributions (475)
    • Various documentation improvements

    0.3.3


    Released May 22, 2015

    • Disable challenge on 401 by default (THIS IS A BREAKING CHANGE, albeit a very small one with behavior that probably no one depended upon. You can easily change this back to the old way).
    • Doc fixes (404, 406, 436, misc. other commits)
    • Fix truncation of microseconds in iso8601 datetime output (368)
    • null arguments from JSON no longer cast to string (390)
    • Made list fields work with classes (409)
    • Fix url_for() when used with Blueprints (410)
    • Add CORS "Access-Control-Expose-Headers" support (412)
    • Fix class references in RequestParser (414)
    • Allow any callables to be used as lazy attributes (417)
    • Fix references to flask.ext.* (420)
    • Trim support with fixes (428)
    • Added ability to pass-in parameters into Resource constructors (444)
    • Fix custom type docs on "Intermediate usage" and docstring (434)
    • Fixed problem with RequestParser.copy (435)
    • Feature/error bundling (431)
    • Explicitly check the class type for propagate_exceptions (445)
    • Remove min. year limit 1900 in inputs.date (446)

    Flask 0.10.1 -> 0.11.1

    0.11.1


    Bugfix release, released on June 7th 2016.

    • Fixed a bug that prevented FLASK_APP=foobar/__init__.py from working. See pull request 1872.

    0.11


    Released on May 29th 2016, codename Absinthe.

    • Added support to serializing top-level arrays to :func:flask.jsonify. This introduces a security risk in ancient browsers. See :ref:json-security for details.
    • Added before_render_template signal.
    • Added **kwargs to :meth:flask.Test.test_client to support passing additional keyword arguments to the constructor of :attr:flask.Flask.test_client_class.
    • Added SESSION_REFRESH_EACH_REQUEST config key that controls the set-cookie behavior. If set to True a permanent session will be refreshed each request and get their lifetime extended, if set to False it will only be modified if the session actually modifies. Non permanent sessions are not affected by this and will always expire if the browser window closes.
    • Made Flask support custom JSON mimetypes for incoming data.
    • Added support for returning tuples in the form (response, headers) from a view function.
    • Added :meth:flask.Config.from_json.
    • Added :attr:flask.Flask.config_class.
    • Added :meth:flask.Config.get_namespace.
    • Templates are no longer automatically reloaded outside of debug mode. This can be configured with the new TEMPLATES_AUTO_RELOAD config key.
    • Added a workaround for a limitation in Python 3.3's namespace loader.
    • Added support for explicit root paths when using Python 3.3's namespace packages.
    • Added :command:flask and the flask.cli module to start the local debug server through the click CLI system. This is recommended over the old flask.run() method as it works faster and more reliable due to a different design and also replaces Flask-Script.
    • Error handlers that match specific classes are now checked first, thereby allowing catching exceptions that are subclasses of HTTP exceptions (in werkzeug.exceptions). This makes it possible for an extension author to create exceptions that will by default result in the HTTP error of their choosing, but may be caught with a custom error handler if desired.
    • Added :meth:flask.Config.from_mapping.
    • Flask will now log by default even if debug is disabled. The log format is now hardcoded but the default log handling can be disabled through the LOGGER_HANDLER_POLICY configuration key.
    • Removed deprecated module functionality.
    • Added the EXPLAIN_TEMPLATE_LOADING config flag which when enabled will instruct Flask to explain how it locates templates. This should help users debug when the wrong templates are loaded.
    • Enforce blueprint handling in the order they were registered for template loading.
    • Ported test suite to py.test.
    • Deprecated request.json in favour of request.get_json().
    • Add "pretty" and "compressed" separators definitions in jsonify() method. Reduces JSON response size when JSONIFY_PRETTYPRINT_REGULAR=False by removing unnecessary white space included by default after separators.
    • JSON responses are now terminated with a newline character, because it is a convention that UNIX text files end with a newline and some clients don't deal well when this newline is missing. See https://github.com/pallets/flask/pull/1262 -- this came up originally as a part of https://github.com/kennethreitz/httpbin/issues/168
    • The automatically provided OPTIONS method is now correctly disabled if the user registered an overriding rule with the lowercase-version options (issue 1288).
    • flask.json.jsonify now supports the datetime.date type (pull request 1326).
    • Don't leak exception info of already catched exceptions to context teardown handlers (pull request 1393).
    • Allow custom Jinja environment subclasses (pull request 1422).
    • flask.g now has pop() and setdefault methods.
    • Turn on autoescape for flask.templating.render_template_string by default (pull request 1515).
    • flask.ext is now deprecated (pull request 1484).
    • send_from_directory now raises BadRequest if the filename is invalid on the server OS (pull request 1763).
    • Added the JSONIFY_MIMETYPE configuration variable (pull request 1728).
    • Exceptions during teardown handling will no longer leave bad application contexts lingering around.

    0.10.2


    (bugfix release, release date to be announced)

    • Fixed broken test_appcontext_signals() test case.
    • Raise an :exc:AttributeError in :func:flask.helpers.find_package with a useful message explaining why it is raised when a PEP 302 import hook is used without an is_package() method.
    • Fixed an issue causing exceptions raised before entering a request or app context to be passed to teardown handlers.
    • Fixed an issue with query parameters getting removed from requests in the test client when absolute URLs were requested.
    • Made before_first_request into a decorator as intended.
    • Fixed an etags bug when sending a file streams with a name.
    • Fixed send_from_directory not expanding to the application root path correctly.
    • Changed logic of before first request handlers to flip the flag after invoking. This will allow some uses that are potentially dangerous but should probably be permitted.
    • Fixed Python 3 bug when a handler from app.url_build_error_handlers reraises the BuildError.

    coverage 3.7.1 -> 4.1

    4.1


    • The internal attribute Reporter.file_reporters was removed in 4.1b3. It should have come has no surprise that there were third-party tools out there using that attribute. It has been restored, but with a deprecation warning.

    4.1b3


    • When running your program, execution can jump from an except X: line to some other line when an exception other than X happens. This jump is no longer considered a branch when measuring branch coverage.
    • When measuring branch coverage, yield statements that were never resumed were incorrectly marked as missing, as reported in issue 440_. This is now fixed.
    • During branch coverage of single-line callables like lambdas and generator expressions, coverage.py can now distinguish between them never being called, or being called but not completed. Fixes issue 90, issue 460 and issue 475_.
    • The HTML report now has a map of the file along the rightmost edge of the page, giving an overview of where the missed lines are. Thanks, Dmitry Shishov.
    • The HTML report now uses different monospaced fonts, favoring Consolas over Courier. Along the way, issue 472_ about not properly handling one-space indents was fixed. The index page also has slightly different styling, to try to make the clickable detail pages more apparent.
    • Missing branches reported with coverage report -m will now say ->exit for missed branches to the exit of a function, rather than a negative number. Fixes issue 469_.
    • coverage --help and coverage --version now mention which tracer is installed, to help diagnose problems. The docs mention which features need the C extension. (issue 479_)
    • Officially support PyPy 5.1, which required no changes, just updates to the docs.
    • The Coverage.report function had two parameters with non-None defaults, which have been changed. show_missing used to default to True, but now defaults to None. If you had been calling Coverage.report without specifying show_missing, you'll need to explicitly set it to True to keep the same behavior. skip_covered used to default to False. It is now None, which doesn't change the behavior. This fixes issue 485_.
    • It's never been possible to pass a namespace module to one of the analysis functions, but now at least we raise a more specific error message, rather than getting confused. (issue 456_)
    • The coverage.process_startup function now returns the Coverage instance it creates, as suggested in issue 481_.
    • Make a small tweak to how we compare threads, to avoid buggy custom comparison code in thread classes. (issue 245_)

    .. _issue 90: https://bitbucket.org/ned/coveragepy/issues/90/lambda-expression-confuses-branch .. _issue 245: https://bitbucket.org/ned/coveragepy/issues/245/change-solution-for-issue-164 .. _issue 440: https://bitbucket.org/ned/coveragepy/issues/440/yielded-twisted-failure-marked-as-missed .. _issue 456: https://bitbucket.org/ned/coveragepy/issues/456/coverage-breaks-with-implicit-namespaces .. _issue 460: https://bitbucket.org/ned/coveragepy/issues/460/confusing-html-report-for-certain-partial .. _issue 469: https://bitbucket.org/ned/coveragepy/issues/469/strange-1-line-number-in-branch-coverage .. _issue 472: https://bitbucket.org/ned/coveragepy/issues/472/html-report-indents-incorrectly-for-one .. _issue 475: https://bitbucket.org/ned/coveragepy/issues/475/generator-expression-is-marked-as-not .. _issue 479: https://bitbucket.org/ned/coveragepy/issues/479/clarify-the-need-for-the-c-extension .. _issue 481: https://bitbucket.org/ned/coveragepy/issues/481/asyncioprocesspoolexecutor-tracing-not .. _issue 485: https://bitbucket.org/ned/coveragepy/issues/485/coveragereport-ignores-show_missing-and

    4.1b2


    • Problems with the new branch measurement in 4.1 beta 1 were fixed:
      • Class docstrings were considered executable. Now they no longer are.
      • yield from and await were considered returns from functions, since they could tranfer control to the caller. This produced unhelpful "missing branch" reports in a number of circumstances. Now they no longer are considered returns.
      • In unusual situations, a missing branch to a negative number was reported. This has been fixed, closing issue 466_.
    • The XML report now produces correct package names for modules found in directories specified with source=. Fixes issue 465_.
    • coverage report won't produce trailing whitespace.

    .. _issue 465: https://bitbucket.org/ned/coveragepy/issues/465/coveragexml-produces-package-names-with-an .. _issue 466: https://bitbucket.org/ned/coveragepy/issues/466/impossible-missed-branch-to-a-negative

    4.1b1


    • Branch analysis has been rewritten: it used to be based on bytecode, but now uses AST analysis. This has changed a number of things:
      • More code paths are now considered runnable, especially in try/except structures. This may mean that coverage.py will identify more code paths as uncovered. This could either raise or lower your overall coverage number.
      • Python 3.5's async and await keywords are properly supported, fixing issue 434_.
      • Some long-standing branch coverage bugs were fixed:
        • issue 129_: functions with only a docstring for a body would incorrectly report a missing branch on the def line.
      • issue 212_: code in an except block could be incorrectly marked as a missing branch.
      • issue 146_: context managers (with statements) in a loop or try block could confuse the branch measurement, reporting incorrect partial branches.
      • issue 422_: in Python 3.5, an actual partial branch could be marked as complete.
    • Pragmas to disable coverage measurement can now be used on decorator lines, and they will apply to the entire function or class being decorated. This implements the feature requested in issue 131_.
    • Multiprocessing support is now available on Windows. Thanks, Rodrigue Cloutier.
    • Files with two encoding declarations are properly supported, fixing issue 453_. Thanks, Max Linke.
    • Non-ascii characters in regexes in the configuration file worked in 3.7, but stopped working in 4.0. Now they work again, closing issue 455_.
    • Form-feed characters would prevent accurate determination of the beginning of statements in the rest of the file. This is now fixed, closing issue 461_.

    .. _issue 129: https://bitbucket.org/ned/coveragepy/issues/129/misleading-branch-coverage-of-empty .. _issue 131: https://bitbucket.org/ned/coveragepy/issues/131/pragma-on-a-decorator-line-should-affect .. _issue 146: https://bitbucket.org/ned/coveragepy/issues/146/context-managers-confuse-branch-coverage .. _issue 212: https://bitbucket.org/ned/coveragepy/issues/212/coverage-erroneously-reports-partial .. _issue 422: https://bitbucket.org/ned/coveragepy/issues/422/python35-partial-branch-marked-as-fully .. _issue 434: https://bitbucket.org/ned/coveragepy/issues/434/indexerror-in-python-35 .. _issue 453: https://bitbucket.org/ned/coveragepy/issues/453/source-code-encoding-can-only-be-specified .. _issue 455: https://bitbucket.org/ned/coveragepy/issues/455/unusual-exclusions-stopped-working-in .. _issue 461: https://bitbucket.org/ned/coveragepy/issues/461/multiline-asserts-need-too-many-pragma

    4.0.3


    • Fixed a mysterious problem that manifested in different ways: sometimes hanging the process (issue 420), sometimes making database connections fail (issue 445).
    • The XML report now has correct <source> elements when using a --source= option somewhere besides the current directory. This fixes issue 439_. Thanks, Arcady Ivanov.
    • Fixed an unusual edge case of detecting source encodings, described in issue 443_.
    • Help messages that mention the command to use now properly use the actual command name, which might be different than "coverage". Thanks to Ben Finney, this closes issue 438_.

    .. _issue 420: https://bitbucket.org/ned/coveragepy/issues/420/coverage-40-hangs-indefinitely-on-python27 .. _issue 438: https://bitbucket.org/ned/coveragepy/issues/438/parameterise-coverage-command-name .. _issue 439: https://bitbucket.org/ned/coveragepy/issues/439/incorrect-cobertura-file-sources-generated .. _issue 443: https://bitbucket.org/ned/coveragepy/issues/443/coverage-gets-confused-when-encoding .. _issue 445: https://bitbucket.org/ned/coveragepy/issues/445/django-app-cannot-connect-to-cassandra

    4.0.2


    • More work on supporting unusually encoded source. Fixed issue 431_.
    • Files or directories with non-ASCII characters are now handled properly, fixing issue 432_.
    • Setting a trace function with sys.settrace was broken by a change in 4.0.1, as reported in issue 436_. This is now fixed.
    • Officially support PyPy 4.0, which required no changes, just updates to the docs.

    .. _issue 431: https://bitbucket.org/ned/coveragepy/issues/431/couldnt-parse-python-file-with-cp1252 .. _issue 432: https://bitbucket.org/ned/coveragepy/issues/432/path-with-unicode-characters-various .. _issue 436: https://bitbucket.org/ned/coveragepy/issues/436/disabled-coverage-ctracer-may-rise-from

    4.0.1


    • When combining data files, unreadable files will now generate a warning instead of failing the command. This is more in line with the older coverage.py v3.7.1 behavior, which silently ignored unreadable files. Prompted by issue 418_.
    • The --skip-covered option would skip reporting on 100% covered files, but also skipped them when calculating total coverage. This was wrong, it should only remove lines from the report, not change the final answer. This is now fixed, closing issue 423_.
    • In 4.0, the data file recorded a summary of the system on which it was run. Combined data files would keep all of those summaries. This could lead to enormous data files consisting of mostly repetitive useless information. That summary is now gone, fixing issue 415_. If you want summary information, get in touch, and we'll figure out a better way to do it.
    • Test suites that mocked os.path.exists would experience strange failures, due to coverage.py using their mock inadvertently. This is now fixed, closing issue 416_.
    • Importing a __init__ module explicitly would lead to an error: AttributeError: 'module' object has no attribute '__path__', as reported in issue 410_. This is now fixed.
    • Code that uses sys.settrace(sys.gettrace()) used to incur a more than 2x speed penalty. Now there's no penalty at all. Fixes issue 397_.
    • Pyexpat C code will no longer be recorded as a source file, fixing issue 419_.
    • The source kit now contains all of the files needed to have a complete source tree, re-fixing issue 137_ and closing issue 281_.

    .. _issue 281: https://bitbucket.org/ned/coveragepy/issues/281/supply-scripts-for-testing-in-the .. _issue 397: https://bitbucket.org/ned/coveragepy/issues/397/stopping-and-resuming-coverage-with .. _issue 410: https://bitbucket.org/ned/coveragepy/issues/410/attributeerror-module-object-has-no .. _issue 415: https://bitbucket.org/ned/coveragepy/issues/415/repeated-coveragedataupdates-cause .. _issue 416: https://bitbucket.org/ned/coveragepy/issues/416/mocking-ospathexists-causes-failures .. _issue 418: https://bitbucket.org/ned/coveragepy/issues/418/json-parse-error .. _issue 419: https://bitbucket.org/ned/coveragepy/issues/419/nosource-no-source-for-code-path-to-c .. _issue 423: https://bitbucket.org/ned/coveragepy/issues/423/skip_covered-changes-reported-total

    4.0


    4.0b3


    • Reporting on an unmeasured file would fail with a traceback. This is now fixed, closing issue 403_.
    • The Jenkins ShiningPanda plugin looks for an obsolete file name to find the HTML reports to publish, so it was failing under coverage.py 4.0. Now we create that file if we are running under Jenkins, to keep things working smoothly. issue 404_.
    • Kits used to include tests and docs, but didn't install them anywhere, or provide all of the supporting tools to make them useful. Kits no longer include tests and docs. If you were using them from the older packages, get in touch and help me understand how.

    .. _issue 403: https://bitbucket.org/ned/coveragepy/issues/403/hasherupdate-fails-with-typeerror-nonetype .. _issue 404: https://bitbucket.org/ned/coveragepy/issues/404/shiningpanda-jenkins-plugin-cant-find-html

    4.0b2


    • 4.0b1 broke --append creating new data files. This is now fixed, closing issue 392_.
    • py.test --cov can write empty data, then touch files due to --source, which made coverage.py mistakenly force the data file to record lines instead of arcs. This would lead to a "Can't combine line data with arc data" error message. This is now fixed, and changed some method names in the CoverageData interface. Fixes issue 399_.
    • CoverageData.read_fileobj and CoverageData.write_fileobj replace the .read and .write methods, and are now properly inverses of each other.
    • When using report --skip-covered, a message will now be included in the report output indicating how many files were skipped, and if all files are skipped, coverage.py won't accidentally scold you for having no data to report. Thanks, Krystian Kichewko.
    • A new conversion utility has been added: python -m coverage.pickle2json will convert v3.x pickle data files to v4.x JSON data files. Thanks, Alexander Todorov. Closes issue 395_.
    • A new version identifier is available, coverage.version_info, a plain tuple of values similar to sys.version_info_.

    .. _issue 392: https://bitbucket.org/ned/coveragepy/issues/392/run-append-doesnt-create-coverage-file .. _issue 395: https://bitbucket.org/ned/coveragepy/issues/395/rfe-read-pickled-files-as-well-for .. _issue 399: https://bitbucket.org/ned/coveragepy/issues/399/coverageexception-cant-combine-line-data .. _sys.version_info: https://docs.python.org/3/library/sys.htmlsys.version_info

    4.0b1


    • Coverage.py is now licensed under the Apache 2.0 license. See NOTICE.txt for details. Closes issue 313_.
    • The data storage has been completely revamped. The data file is now JSON-based instead of a pickle, closing issue 236_. The CoverageData class is now a public supported documented API to the data file.
    • A new configuration option, [run] note, lets you set a note that will be stored in the runs section of the data file. You can use this to annotate the data file with any information you like.
    • Unrecognized configuration options will now print an error message and stop coverage.py. This should help prevent configuration mistakes from passing silently. Finishes issue 386_.
    • In parallel mode, coverage erase will now delete all of the data files, fixing issue 262_.
    • Coverage.py now accepts a directory name for coverage run and will run a __main__.py found there, just like Python will. Fixes issue 252_. Thanks, Dmitry Trofimov.
    • The XML report now includes a missing-branches attribute. Thanks, Steve Peak. This is not a part of the Cobertura DTD, so the XML report no longer references the DTD.
    • Missing branches in the HTML report now have a bit more information in the right-hand annotations. Hopefully this will make their meaning clearer.
    • All the reporting functions now behave the same if no data had been collected, exiting with a status code of 1. Fixed fail_under to be applied even when the report is empty. Thanks, Ionel Cristian Mărieș.
    • Plugins are now initialized differently. Instead of looking for a class called Plugin, coverage.py looks for a function called coverage_init.
    • A file-tracing plugin can now ask to have built-in Python reporting by returning "python" from its file_reporter() method.
    • Code that was executed with exec would be mis-attributed to the file that called it. This is now fixed, closing issue 380_.
    • The ability to use item access on Coverage.config (introduced in 4.0a2) has been changed to a more explicit Coverage.get_option and Coverage.set_option API.
    • The Coverage.use_cache method is no longer supported.
    • The private method Coverage._harvest_data is now called Coverage.get_data, and returns the CoverageData containing the collected data.
    • The project is consistently referred to as "coverage.py" throughout the code and the documentation, closing issue 275_.
    • Combining data files with an explicit configuration file was broken in 4.0a6, but now works again, closing issue 385_.
    • coverage combine now accepts files as well as directories.
    • The speed is back to 3.7.1 levels, after having slowed down due to plugin support, finishing up issue 387_.

    .. _issue 236: https://bitbucket.org/ned/coveragepy/issues/236/pickles-are-bad-and-you-should-feel-bad .. _issue 252: https://bitbucket.org/ned/coveragepy/issues/252/coverage-wont-run-a-program-with .. _issue 262: https://bitbucket.org/ned/coveragepy/issues/262/when-parallel-true-erase-should-erase-all .. _issue 275: https://bitbucket.org/ned/coveragepy/issues/275/refer-consistently-to-project-as-coverage .. _issue 313: https://bitbucket.org/ned/coveragepy/issues/313/add-license-file-containing-2-3-or-4 .. _issue 380: https://bitbucket.org/ned/coveragepy/issues/380/code-executed-by-exec-excluded-from .. _issue 385: https://bitbucket.org/ned/coveragepy/issues/385/coverage-combine-doesnt-work-with-rcfile .. _issue 386: https://bitbucket.org/ned/coveragepy/issues/386/error-on-unrecognised-configuration .. _issue 387: https://bitbucket.org/ned/coveragepy/issues/387/performance-degradation-from-371-to-40

    .. 40 issues closed in 4.0 below here

    4.0a6


    • Python 3.5b2 and PyPy 2.6.0 are supported.
    • The original module-level function interface to coverage.py is no longer supported. You must now create a coverage.Coverage object, and use methods on it.
    • The coverage combine command now accepts any number of directories as arguments, and will combine all the data files from those directories. This means you don't have to copy the files to one directory before combining. Thanks, Christine Lytwynec. Finishes issue 354_.
    • Branch coverage couldn't properly handle certain extremely long files. This is now fixed (issue 359_).
    • Branch coverage didn't understand yield statements properly. Mickie Betz persisted in pursuing this despite Ned's pessimism. Fixes issue 308_ and issue 324_.
    • The COVERAGE_DEBUG environment variable can be used to set the [run] debug configuration option to control what internal operations are logged.
    • HTML reports were truncated at formfeed characters. This is now fixed (issue 360). It's always fun when the problem is due to a bug in the Python standard library <http://bugs.python.org/issue19035>.
    • Files with incorrect encoding declaration comments are no longer ignored by the reporting commands, fixing issue 351_.
    • HTML reports now include a timestamp in the footer, closing issue 299_. Thanks, Conrad Ho.
    • HTML reports now begrudgingly use double-quotes rather than single quotes, because there are "software engineers" out there writing tools that read HTML and somehow have no idea that single quotes exist. Capitulates to the absurd issue 361_. Thanks, Jon Chappell.
    • The coverage annotate command now handles non-ASCII characters properly, closing issue 363_. Thanks, Leonardo Pistone.
    • Drive letters on Windows were not normalized correctly, now they are. Thanks, Ionel Cristian Mărieș.
    • Plugin support had some bugs fixed, closing issue 374_ and issue 375_. Thanks, Stefan Behnel.

    .. _issue 299: https://bitbucket.org/ned/coveragepy/issue/299/inserted-created-on-yyyy-mm-dd-hh-mm-in .. _issue 308: https://bitbucket.org/ned/coveragepy/issue/308/yield-lambda-branch-coverage .. _issue 324: https://bitbucket.org/ned/coveragepy/issue/324/yield-in-loop-confuses-branch-coverage .. _issue 351: https://bitbucket.org/ned/coveragepy/issue/351/files-with-incorrect-encoding-are-ignored .. _issue 354: https://bitbucket.org/ned/coveragepy/issue/354/coverage-combine-should-take-a-list-of .. _issue 359: https://bitbucket.org/ned/coveragepy/issue/359/xml-report-chunk-error .. _issue 360: https://bitbucket.org/ned/coveragepy/issue/360/html-reports-get-confused-by-l-in-the-code .. _issue 361: https://bitbucket.org/ned/coveragepy/issue/361/use-double-quotes-in-html-output-to .. _issue 363: https://bitbucket.org/ned/coveragepy/issue/363/annotate-command-hits-unicode-happy-fun .. _issue 374: https://bitbucket.org/ned/coveragepy/issue/374/c-tracer-lookups-fail-in .. _issue 375: https://bitbucket.org/ned/coveragepy/issue/375/ctracer_handle_return-reads-byte-code

    4.0a5


    • Plugin support is now implemented in the C tracer instead of the Python tracer. This greatly improves the speed of tracing projects using plugins.
    • Coverage.py now always adds the current directory to sys.path, so that plugins can import files in the current directory (issue 358_).
    • If the config_file argument to the Coverage constructor is specified as ".coveragerc", it is treated as if it were True. This means setup.cfg is also examined, and a missing file is not considered an error (issue 357_).
    • Wildly experimental: support for measuring processes started by the multiprocessing module. To use, set --concurrency=multiprocessing, either on the command line or in the .coveragerc file (issue 117_). Thanks, Eduardo Schettino. Currently, this does not work on Windows.
    • A new warning is possible, if a desired file isn't measured because it was imported before coverage.py was started (issue 353_).
    • The coverage.process_startup function now will start coverage measurement only once, no matter how many times it is called. This fixes problems due to unusual virtualenv configurations (issue 340_).
    • Added 3.5.0a1 to the list of supported CPython versions.

    .. _issue 117: https://bitbucket.org/ned/coveragepy/issue/117/enable-coverage-measurement-of-code-run-by .. _issue 340: https://bitbucket.org/ned/coveragepy/issue/340/keyerror-subpy .. _issue 353: https://bitbucket.org/ned/coveragepy/issue/353/40a3-introduces-an-unexpected-third-case .. _issue 357: https://bitbucket.org/ned/coveragepy/issue/357/behavior-changed-when-coveragerc-is .. _issue 358: https://bitbucket.org/ned/coveragepy/issue/358/all-coverage-commands-should-adjust

    4.0a4


    • Plugins can now provide sys_info for debugging output.
    • Started plugins documentation.
    • Prepared to move the docs to readthedocs.org.

    4.0a3


    • Reports now use file names with extensions. Previously, a report would describe a/b/c.py as "a/b/c". Now it is shown as "a/b/c.py". This allows for better support of non-Python files, and also fixed issue 69_.
    • The XML report now reports each directory as a package again. This was a bad regression, I apologize. This was reported in issue 235_, which is now fixed.
    • A new configuration option for the XML report: [xml] package_depth controls which directories are identified as packages in the report. Directories deeper than this depth are not reported as packages. The default is that all directories are reported as packages. Thanks, Lex Berezhny.
    • When looking for the source for a frame, check if the file exists. On Windows, .pyw files are no longer recorded as .py files. Along the way, this fixed issue 290_.
    • Empty files are now reported as 100% covered in the XML report, not 0% covered (issue 345_).
    • Regexes in the configuration file are now compiled as soon as they are read, to provide error messages earlier (issue 349_).

    .. _issue 69: https://bitbucket.org/ned/coveragepy/issue/69/coverage-html-overwrite-files-that-doesnt .. _issue 235: https://bitbucket.org/ned/coveragepy/issue/235/package-name-is-missing-in-xml-report .. _issue 290: https://bitbucket.org/ned/coveragepy/issue/290/running-programmatically-with-pyw-files .. _issue 345: https://bitbucket.org/ned/coveragepy/issue/345/xml-reports-line-rate-0-for-empty-files .. _issue 349: https://bitbucket.org/ned/coveragepy/issue/349/bad-regex-in-config-should-get-an-earlier

    4.0a2


    • Officially support PyPy 2.4, and PyPy3 2.4. Drop support for CPython 3.2 and older versions of PyPy. The code won't work on CPython 3.2. It will probably still work on older versions of PyPy, but I'm not testing against them.
    • Plugins!
    • The original command line switches (-x to run a program, etc) are no longer supported.
    • A new option: coverage report --skip-covered will reduce the number of files reported by skipping files with 100% coverage. Thanks, Krystian Kichewko. This means that empty __init__.py files will be skipped, since they are 100% covered, closing issue 315_.
    • You can now specify the --fail-under option in the .coveragerc file as the [report] fail_under option. This closes issue 314_.
    • The COVERAGE_OPTIONS environment variable is no longer supported. It was a hack for --timid before configuration files were available.
    • The HTML report now has filtering. Type text into the Filter box on the index page, and only modules with that text in the name will be shown. Thanks, Danny Allen.
    • The textual report and the HTML report used to report partial branches differently for no good reason. Now the text report's "missing branches" column is a "partial branches" column so that both reports show the same numbers. This closes issue 342_.
    • If you specify a --rcfile that cannot be read, you will get an error message. Fixes issue 343_.
    • The --debug switch can now be used on any command.
    • You can now programmatically adjust the configuration of coverage.py by setting items on Coverage.config after construction.
    • A module run with -m can be used as the argument to --source, fixing issue 328_. Thanks, Buck Evan.
    • The regex for matching exclusion pragmas has been fixed to allow more kinds of whitespace, fixing issue 334_.
    • Made some PyPy-specific tweaks to improve speed under PyPy. Thanks, Alex Gaynor.
    • In some cases, with a source file missing a final newline, coverage.py would count statements incorrectly. This is now fixed, closing issue 293_.
    • The status.dat file that HTML reports use to avoid re-creating files that haven't changed is now a JSON file instead of a pickle file. This obviates issue 287_ and issue 237_.

    .. _issue 237: https://bitbucket.org/ned/coveragepy/issue/237/htmlcov-with-corrupt-statusdat .. _issue 287: https://bitbucket.org/ned/coveragepy/issue/287/htmlpy-doesnt-specify-pickle-protocol .. _issue 293: https://bitbucket.org/ned/coveragepy/issue/293/number-of-statement-detection-wrong-if-no .. _issue 314: https://bitbucket.org/ned/coveragepy/issue/314/fail_under-param-not-working-in-coveragerc .. _issue 315: https://bitbucket.org/ned/coveragepy/issue/315/option-to-omit-empty-files-eg-__init__py .. _issue 328: https://bitbucket.org/ned/coveragepy/issue/328/misbehavior-in-run-source .. _issue 334: https://bitbucket.org/ned/coveragepy/issue/334/pragma-not-recognized-if-tab-character .. _issue 342: https://bitbucket.org/ned/coveragepy/issue/342/console-and-html-coverage-reports-differ .. _issue 343: https://bitbucket.org/ned/coveragepy/issue/343/an-explicitly-named-non-existent-config

    4.0a1


    • Python versions supported are now CPython 2.6, 2.7, 3.2, 3.3, and 3.4, and PyPy 2.2.
    • Gevent, eventlet, and greenlet are now supported, closing issue 149_. The concurrency setting specifies the concurrency library in use. Huge thanks to Peter Portante for initial implementation, and to Joe Jevnik for the final insight that completed the work.
    • Options are now also read from a setup.cfg file, if any. Sections are prefixed with "coverage:", so the [run] options will be read from the [coverage:run] section of setup.cfg. Finishes issue 304_.
    • The report -m command can now show missing branches when reporting on branch coverage. Thanks, Steve Leonard. Closes issue 230_.
    • The XML report now contains a <source> element, fixing issue 94_. Thanks Stan Hu.
    • The class defined in the coverage module is now called Coverage instead of coverage, though the old name still works, for backward compatibility.
    • The fail-under value is now rounded the same as reported results, preventing paradoxical results, fixing issue 284_.
    • The XML report will now create the output directory if need be, fixing issue 285_. Thanks, Chris Rose.
    • HTML reports no longer raise UnicodeDecodeError if a Python file has undecodable characters, fixing issue 303_ and issue 331_.
    • The annotate command will now annotate all files, not just ones relative to the current directory, fixing issue 57_.
    • The coverage module no longer causes deprecation warnings on Python 3.4 by importing the imp module, fixing issue 305_.
    • Encoding declarations in source files are only considered if they are truly comments. Thanks, Anthony Sottile.

    .. _issue 57: https://bitbucket.org/ned/coveragepy/issue/57/annotate-command-fails-to-annotate-many .. _issue 94: https://bitbucket.org/ned/coveragepy/issue/94/coverage-xml-doesnt-produce-sources .. _issue 149: https://bitbucket.org/ned/coveragepy/issue/149/coverage-gevent-looks-broken .. _issue 230: https://bitbucket.org/ned/coveragepy/issue/230/show-line-no-for-missing-branches-in .. _issue 284: https://bitbucket.org/ned/coveragepy/issue/284/fail-under-should-show-more-precision .. _issue 285: https://bitbucket.org/ned/coveragepy/issue/285/xml-report-fails-if-output-file-directory .. _issue 303: https://bitbucket.org/ned/coveragepy/issue/303/unicodedecodeerror .. _issue 304: https://bitbucket.org/ned/coveragepy/issue/304/attempt-to-get-configuration-from-setupcfg .. _issue 305: https://bitbucket.org/ned/coveragepy/issue/305/pendingdeprecationwarning-the-imp-module .. _issue 331: https://bitbucket.org/ned/coveragepy/issue/331/failure-of-encoding-detection-on-python2

    Flask-JWT 0.2.0 -> 0.3.2

    0.3.2


    Released November 3rd 2015

    • Fixed an Authorization header conditional bug

    0.3.1


    Released October 26th 2015

    • Fix a bug with auth_request_handler
    • Deprecate auth_request_handler

    0.3.0


    Released October 15th 2015

    .. note:: This release includes many breaking changes

    • Fix major implementation issue with encoding/decoding tokens
    • Changed new configuration options to align with PyJWT
    • Changed current_user to current_identity

    pytest-cov 1.8.1 -> 2.3.0

    2.3.0


    • Add support for specifying output location for html, xml, and annotate report. Contributed by Patrick Lannigan in PR113 &lt;https://github.com/pytest-dev/pytest-cov/pull/113&gt;_.
    • Fix bug hiding test failure when cov-fail-under failed.
    • For coverage >= 4.0, match the default behaviour of coverage report and error if coverage fails to find the source instead of just printing a warning. Contributed by David Szotten in PR116 &lt;https://github.com/pytest-dev/pytest-cov/pull/116&gt;_.
    • Fixed bug occurred when bare --cov parameter was used with xdist. Contributed by Michael Elovskikh in PR120 &lt;https://github.com/pytest-dev/pytest-cov/pull/120&gt;_.
    • Add support for skip_covered and added --cov-report=term-skip-covered command line options. Contributed by Saurabh Kumar in PR115 &lt;https://github.com/pytest-dev/pytest-cov/pull/115&gt;_.

    2.2.1


    • Fixed incorrect merging of coverage data when xdist was used and coverage was &gt;= 4.0.

    2.2.0


    • Added support for changing working directory in tests. Previously changing working directory would disable coverage measurements in suprocesses.
    • Fixed broken handling for --cov-report=annotate.

    2.1.0


    • Added support for coverage 4.0b2.
    • Added the --cov-append command line options. Contributed by Christian Ledermann in PR80 &lt;https://github.com/pytest-dev/pytest-cov/pull/80&gt;_.

    2.0.0


    • Added --cov-fail-under, akin to the new fail_under option in coverage-4.0 (automatically activated if there's a [report] fail_under = ... in .coveragerc).
    • Changed --cov-report=term to automatically upgrade to --cov-report=term-missing if there's [run] show_missing = True in .coveragerc.
    • Changed --cov so it can be used with no path argument (in wich case the source settings from .coveragerc will be used instead).
    • Fixed .pth installation to work in all cases (install, easy_install, wheels, develop etc).
    • Fixed .pth uninstallation to work for wheel installs.
    • Support for coverage 4.0.
    • Data file suffixing changed to use coverage's data_suffix=True option (instead of the custom suffixing).
    • Avoid warning about missing coverage data (just like coverage.control.process_startup).
    • Fixed a race condition when running with xdist (all the workers tried to combine the files). It's possible that this issue is not present in pytest-cov 1.8.X.

    1.8.2


    • N/A

    Once you have closed this pull request, I'll create seperate pull requests for every update as soon as I find them.

    That's it for now!

    Happy merging! 🤖

    opened by pyup-bot 0
Releases(v0.0.2)
Owner
null
Pf-flask-rest-com - Flask REST API Common Implementation by Problem Fighter Library

In the name of God, the Most Gracious, the Most Merciful. PF-Flask-Rest-Com Docu

Problem Fighter 3 Jan 15, 2022
flask-apispec MIT flask-apispec (🥉24 · ⭐ 520) - Build and document REST APIs with Flask and apispec. MIT

flask-apispec flask-apispec is a lightweight tool for building REST APIs in Flask. flask-apispec uses webargs for request parsing, marshmallow for res

Joshua Carp 617 Dec 30, 2022
A Flask app template with integrated SQLAlchemy, authentication, and Bootstrap frontend

Flask-Bootstrap Flask-Bootstrap is an Flask app template for users to clone and customize as desired, as opposed to a Flask extension that you can ins

Eric S. Bullington 204 Dec 26, 2022
Flask-Starter is a boilerplate starter template designed to help you quickstart your Flask web application development.

Flask-Starter Flask-Starter is a boilerplate starter template designed to help you quickstart your Flask web application development. It has all the r

Kundan Singh 259 Dec 26, 2022
Flask-Rebar combines flask, marshmallow, and swagger for robust REST services.

Flask-Rebar Flask-Rebar combines flask, marshmallow, and swagger for robust REST services. Features Request and Response Validation - Flask-Rebar reli

PlanGrid 223 Dec 19, 2022
Brandnew-flask is a CLI tool used to generate a powerful and mordern flask-app that supports the production environment.

Brandnew-flask is still in the initial stage and needs to be updated and improved continuously. Everyone is welcome to maintain and improve this CLI.

brandonye 4 Jul 17, 2022
Flask-app scaffold, generate flask restful backend

Flask-app scaffold, generate flask restful backend

jacksmile 1 Nov 24, 2021
A flask template with Bootstrap 4, asset bundling+minification with webpack, starter templates, and registration/authentication. For use with cookiecutter.

cookiecutter-flask A Flask template for cookiecutter. (Supports Python ≥ 3.6) See this repo for an example project generated from the most recent vers

null 4.3k Dec 29, 2022
Flask starter template for better structuring.

Flask Starter app Flask starter template for better structuring. use the starter plate step 1 : cloning this repo through git clone the repo git clone

Tirtharaj Sinha 1 Jul 26, 2022
A template themes for phyton flask website

Flask Phyton Web template A template themes for phyton flask website

Mesin Kasir 2 Nov 29, 2021
A template for Flask APIs.

FlaskAPITempate A template for a Flask API. Why tho? I just wanted an easy way to create a Flask API. How to setup First, use the template. You can do

TechStudent10 1 Dec 28, 2021
Boilerplate template formwork for a Python Flask application with Mysql,Build dynamic websites rapidly.

Overview English | 简体中文 How to Build dynamic web rapidly? We choose Formwork-Flask. Formwork is a highly packaged Flask Demo. It's intergrates various

aswallz 81 May 16, 2022
Learn REST API with Flask, Mysql and Docker

Learn REST API with Flask, Mysql and Docker A project for you to learn to work a flask REST api with docker and the mysql database manager! Table of C

Aldo Matus 0 Jul 31, 2021
REST API with Flask and SQLAlchemy. I would rather not use it anymore.

Flask REST API Python 3.9.7 The Flask experience, without data persistence :D First, to install all dependencies: python -m pip install -r requirement

Luis Quiñones Requelme 1 Dec 15, 2021
REST API with mongoDB and Flask.

Flask REST API with mongoDB py 3.10 First, to install all dependencies: python -m pip install -r requirements.txt Second, into the ./src/ folder, cop

Luis Quiñones Requelme 3 Mar 5, 2022
Lux Academy & Data Science East Africa Python Boot Camp, Building and Deploying Flask Application Using Docker Demo App.

Flask and Docker Application Demo A Docker image is a read-only, inert template that comes with instructions for deploying containers. In Docker, ever

Harun Mbaabu Mwenda 11 Oct 29, 2022
Making a simple app using React, Flask and MySQL.

Samys-Cookbook Making a simple app using React and Flask. What This will be a simple site to host my recipes. It will have a react front-end, a flask

Samridh Anand Paatni 1 Jul 7, 2022
This is a small notes web app, with python and flask microframework. Using sqlite3

Python Notes App. This is a small web application maked with flask-python for add notes easily and quickly. Dependencies. You can create a virtual env

Eduard 1 Dec 26, 2021