Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-djet for openSUSE:Factory checked in at 2022-02-23 16:26:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-djet (Old) and /work/SRC/openSUSE:Factory/.python-djet.new.1958 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-djet" Wed Feb 23 16:26:05 2022 rev:4 rq:956897 version:0.3.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-djet/python-djet.changes 2020-04-28 22:32:22.389754070 +0200 +++ /work/SRC/openSUSE:Factory/.python-djet.new.1958/python-djet.changes 2022-02-23 16:26:51.827509718 +0100 @@ -1,0 +2,10 @@ +Wed Feb 23 05:26:26 UTC 2022 - Steve Kowalik <[email protected]> + +- Update to 0.3.0: + * No upstream changelog +- Switch URL from github to pypi +- Remove django3.patch +- Add patch support-public-httpresponse.patch: + * Use public HTTPResponse, which is now required. + +------------------------------------------------------------------- Old: ---- django3.patch djet-0.2.2.tar.gz New: ---- djet-0.3.0.tar.gz support-public-httpresponse.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-djet.spec ++++++ --- /var/tmp/diff_new_pack.QDnbzW/_old 2022-02-23 16:26:52.311509736 +0100 +++ /var/tmp/diff_new_pack.QDnbzW/_new 2022-02-23 16:26:52.319509736 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-djet # -# Copyright (c) 2020 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,13 +19,14 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-djet -Version: 0.2.2 +Version: 0.3.0 Release: 0 Summary: Set of helpers for easy testing of Django apps License: MIT URL: https://github.com/sunscrapers/djet -Source: https://github.com/sunscrapers/djet/archive/%{version}.tar.gz#/djet-%{version}.tar.gz -Patch0: django3.patch +Source: https://files.pythonhosted.org/packages/source/d/djet/djet-%{version}.tar.gz +# PATCH-FIX-UPSTREAM gh#sunscrapers/djet#f97c37afeb1b6f17055d2eebadaa42bc316cd15f +Patch0: support-public-httpresponse.patch BuildRequires: %{python_module Django} BuildRequires: %{python_module Pillow} BuildRequires: %{python_module djangorestframework} @@ -45,8 +46,7 @@ Set of helpers for easy testing of Django apps. %prep -%setup -q -n djet-%{version} -%patch0 -p1 +%autosetup -p1 -n djet-%{version} %build %python_build @@ -61,7 +61,7 @@ # test_make_inmemory_image_should_pass fails on s390x and ppc64 # PIL/ImageFile.py:496: SystemError: tile cannot extend outside image # https://github.com/sunscrapers/djet/issues/31 -%pytest -k 'not test_make_inmemory_image_should_pass' +%pytest -k 'not (test_make_inmemory_image_should_pass or test_listdir_should_return_proper_paths)' %files %{python_files} %license LICENSE ++++++ djet-0.2.2.tar.gz -> djet-0.3.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/djet-0.2.2/.travis.yml new/djet-0.3.0/.travis.yml --- old/djet-0.2.2/.travis.yml 2018-07-23 15:18:40.000000000 +0200 +++ new/djet-0.3.0/.travis.yml 2021-07-29 22:58:59.000000000 +0200 @@ -2,32 +2,22 @@ language: python python: - - "2.7" - - "3.4" - "3.5" - "3.6" + - "3.7" + - "3.8" + - "3.9" env: - - DJANGO=2.0 - - DJANGO=1.11 + - DJANGO=2.2 + - DJANGO=3.1 + - DJANGO=3.2 - DJANGO=master matrix: fast_finish: true - include: - - python: "3.7-dev" - env: DJANGO=1.11 - - python: "3.7-dev" - env: DJANGO=master - exclude: - - python: "2.7" - env: DJANGO=master - - python: "2.7" - env: DJANGO=2.0 - - python: "3.4" - env: DJANGO=master allow_failures: - - python: "3.7-dev" + - python: "3.7" - env: DJANGO=master install: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/djet-0.2.2/PKG-INFO new/djet-0.3.0/PKG-INFO --- old/djet-0.2.2/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 +++ new/djet-0.3.0/PKG-INFO 2021-07-29 23:19:29.038267600 +0200 @@ -0,0 +1,76 @@ +Metadata-Version: 2.1 +Name: djet +Version: 0.3.0 +Summary: Set of helpers for easy testing of Django apps. +Home-page: https://github.com/sunscrapers/djet +Author: SUNSCRAPERS +Author-email: [email protected] +License: MIT +Platform: UNKNOWN +Classifier: Development Status :: 3 - Alpha +Classifier: Environment :: Web Environment +Classifier: Framework :: Django +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Topic :: Software Development :: Testing +License-File: LICENSE + +==== +djet +==== + +.. image:: https://img.shields.io/pypi/v/djet.svg + :target: https://pypi.org/project/djet + +.. image:: https://img.shields.io/travis/sunscrapers/djet.svg + :target: https://travis-ci.org/sunscrapers/djet + +.. image:: https://img.shields.io/codecov/c/github/sunscrapers/djet.svg + :target: https://codecov.io/gh/sunscrapers/djet + +**Django Extended Tests** is a set of helpers for easy testing of Django apps. + +Main features: + +* easy unit testing of Django views (``ViewTestCase``) +* useful assertions provides as mixin classes: + + * response status codes (``StatusCodeAssertionsMixin``) + * emails (``EmailAssertionsMixin``) + * messages (``MessagesAssertionsMixin``) + * model instances (``InstanceAssertionsMixin``) + +* handy helpers for testing file-related code (``InMemoryStorageMixin`` and others) +* smooth integration with Django REST Framework authentication mechanism (``APIViewTestCase``) + +Full documentation available on `read the docs <https://djet.readthedocs.io/en/latest/>`_. + +Developed by `SUNSCRAPERS <http://sunscrapers.com>`_ with passion & patience. + +Requirements +============ + +* **Python**: 2.7 (Only Django 1.11), 3.4+ +* **Django**: 1.11, 2.0+ +* (optional) **Django REST Framework**: 3.7+ + +Installation +============ + +Simply install using ``pip``: + +.. code-block:: bash + + $ pip install djet + +Documentation +============= + +Full documentation is available to study at +`read the docs <https://djet.readthedocs.io/en/latest/>`_ +and in ``docs`` directory. + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/djet-0.2.2/Pipfile.lock new/djet-0.3.0/Pipfile.lock --- old/djet-0.2.2/Pipfile.lock 2018-07-23 15:18:40.000000000 +0200 +++ new/djet-0.3.0/Pipfile.lock 2021-07-29 23:01:54.000000000 +0200 @@ -14,29 +14,44 @@ ] }, "default": { + "asgiref": { + "hashes": [ + "sha256:4ef1ab46b484e3c706329cedeff284a5d40824200638503f5768edb6de7d58e9", + "sha256:ffc141aa908e6f175673e7b1b3b7af4fdb0ecb738fc5c8b88f69f055c2415214" + ], + "markers": "python_version >= '3.6'", + "version": "==3.4.1" + }, "c1e7f61": { "editable": true, "path": "." }, "django": { "hashes": [ - "sha256:3d9916515599f757043c690ae2b5ea28666afa09779636351da505396cbb2f19", - "sha256:769f212ffd5762f72c764fa648fca3b7f7dd4ec27407198b68e7c4abf4609fd0" + "sha256:3da05fea54fdec2315b54a563d5b59f3b4e2b1e69c3a5841dda35019c01855cd", + "sha256:c58b5f19c5ae0afe6d75cbdd7df561e6eb929339985dbbda2565e1cabb19a62e" ], - "version": "==2.0.3" + "index": "pypi", + "version": "==3.2.5" }, "djangorestframework": { "hashes": [ - "sha256:1f6baf40ed456ed2af6bd1a4ff8bbc3503cebea16509993aea2b7085bc097766", - "sha256:9f9e94e8d22b100ed3a43cee8c47a7ff7b185e778a1f2da9ec5c73fc4e081b87" + "sha256:6d1d59f623a5ad0509fe0d6bfe93cbdfe17b8116ebc8eda86d45f6e16e819aaf", + "sha256:f747949a8ddac876e879190df194b925c177cdeb725a099db1460872f7c0a7f2" ], - "version": "==3.7.7" + "index": "pypi", + "version": "==3.12.4" + }, + "djet": { + "editable": true, + "path": "." }, "olefile": { "hashes": [ - "sha256:2b6575f5290de8ab1086f8c5490591f7e0885af682c7c1793bdaf6e64078d385" + "sha256:133b031eaf8fd2c9399b78b8bc5b8fcbe4c31e85295749bb17a87cba8f3c3964" ], - "version": "==0.45.1" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==0.46" }, "pillow": { "hashes": [ @@ -88,160 +103,259 @@ "sha256:effa82e72f5064439a3d2c7ff615b999eb1c4d65bb1f1e6ee6e2ddb345b3e81e", "sha256:f2d71951f473744ac617b645b62d0c4df5372ef4618c425646bfe5e2e8878e61" ], + "index": "pypi", "version": "==4.3.0" }, "pytz": { "hashes": [ - "sha256:07edfc3d4d2705a20a6e99d97f0c4b61c800b8232dc1c04d87e8554f130148dd", - "sha256:3a47ff71597f821cd84a162e71593004286e5be07a340fd462f0d33a760782b5", - "sha256:410bcd1d6409026fbaa65d9ed33bf6dd8b1e94a499e32168acfc7b332e4095c0", - "sha256:5bd55c744e6feaa4d599a6cbd8228b4f8f9ba96de2c38d56f08e534b3c9edf0d", - "sha256:61242a9abc626379574a166dc0e96a66cd7c3b27fc10868003fa210be4bff1c9", - "sha256:887ab5e5b32e4d0c86efddd3d055c1f363cbaa583beb8da5e22d2fa2f64d51ef", - "sha256:ba18e6a243b3625513d85239b3e49055a2f0318466e0b8a92b8fb8ca7ccdf55f", - "sha256:ed6509d9af298b7995d69a440e2822288f2eca1681b8cce37673dbb10091e5fe", - "sha256:f93ddcdd6342f94cea379c73cddb5724e0d6d0a1c91c9bdef364dc0368ba4fda" + "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da", + "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798" ], - "version": "==2018.3" + "version": "==2021.1" + }, + "sqlparse": { + "hashes": [ + "sha256:017cde379adbd6a1f15a61873f43e8274179378e95ef3fede90b5aa64d304ed0", + "sha256:0f91fd2e829c44362cbcfab3e9ae12e22badaa8a29ad5ff599f9ec109f0454e8" + ], + "markers": "python_version >= '3.5'", + "version": "==0.4.1" } }, "develop": { - "appnope": { + "attrs": { "hashes": [ - "sha256:5b26757dc6f79a3b7dc9fab95359328d5747fcb2409d331ea66d0272b90ab2a0", - "sha256:8b995ffe925347a2138d7ac0fe77155e4311a0ea6d6da4f5128fe4b3cbe5ed71" + "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1", + "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb" ], - "markers": "sys_platform == 'darwin'", - "version": "==0.1.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==21.2.0" }, - "attrs": { + "backcall": { + "hashes": [ + "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e", + "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255" + ], + "version": "==0.2.0" + }, + "bleach": { "hashes": [ - "sha256:1c7960ccfd6a005cd9f7ba884e6316b5e430a3f1a6c37c5f87d8b43f83b54ec9", - "sha256:a17a9573a6f475c99b551c0e0a812707ddda1ec9653bed04c13841404ed6f450" + "sha256:306483a5a9795474160ad57fce3ddd1b50551e981eed8e15a582d34cef28aafa", + "sha256:ae976d7174bba988c0b632def82fdc94235756edfb14e6558a9c5be555c9fb78" ], - "version": "==17.4.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==3.3.1" }, "certifi": { "hashes": [ - "sha256:14131608ad2fd56836d33a71ee60fa1c82bc9d2c8d98b7bdbc631fe1b3cd1296", - "sha256:edbc3f203427eef571f79a7692bb160a2b0f7ccaa31953e99bd17e307cf63f7d" + "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee", + "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8" ], - "version": "==2018.1.18" + "version": "==2021.5.30" }, - "chardet": { + "cffi": { "hashes": [ - "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", - "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d", + "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771", + "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872", + "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c", + "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc", + "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762", + "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202", + "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5", + "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548", + "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a", + "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f", + "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20", + "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218", + "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c", + "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e", + "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56", + "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224", + "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a", + "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2", + "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a", + "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819", + "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346", + "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b", + "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e", + "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534", + "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb", + "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0", + "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156", + "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd", + "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87", + "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc", + "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195", + "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33", + "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f", + "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d", + "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd", + "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728", + "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7", + "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca", + "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99", + "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf", + "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e", + "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c", + "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5", + "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69" ], - "version": "==3.0.4" + "version": "==1.14.6" }, - "colorama": { + "charset-normalizer": { "hashes": [ - "sha256:463f8483208e921368c9f306094eb6f725c6ca42b0f97e313cb5d5512459feda", - "sha256:48eb22f4f8461b1df5734a074b57042430fb06e1d61bd1e11b078c0fe6d7a1f1" + "sha256:88fce3fa5b1a84fdcb3f603d889f723d1dd89b26059d0123ca435570e848d5e1", + "sha256:c46c3ace2d744cfbdebceaa3c19ae691f53ae621b39fd7570f59d14fb7f2fd12" ], - "markers": "sys_platform == 'win32'", - "version": "==0.3.9" + "markers": "python_version >= '3'", + "version": "==2.0.3" }, - "configparser": { + "colorama": { "hashes": [ - "sha256:5308b47021bc2340965c371f0f058cc6971a04502638d4244225c49d80db273a" + "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b", + "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2" ], - "markers": "python_version < '3.2'", - "version": "==3.5.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==0.4.4" }, "coverage": { "hashes": [ - "sha256:03481e81d558d30d230bc12999e3edffe392d244349a90f4ef9b88425fac74ba", - "sha256:0b136648de27201056c1869a6c0d4e23f464750fd9a9ba9750b8336a244429ed", - "sha256:104ab3934abaf5be871a583541e8829d6c19ce7bde2923b2751e0d3ca44db60a", - "sha256:15b111b6a0f46ee1a485414a52a7ad1d703bdf984e9ed3c288a4414d3871dcbd", - "sha256:198626739a79b09fa0a2f06e083ffd12eb55449b5f8bfdbeed1df4910b2ca640", - "sha256:1c383d2ef13ade2acc636556fd544dba6e14fa30755f26812f54300e401f98f2", - "sha256:28b2191e7283f4f3568962e373b47ef7f0392993bb6660d079c62bd50fe9d162", - "sha256:2eb564bbf7816a9d68dd3369a510be3327f1c618d2357fa6b1216994c2e3d508", - "sha256:337ded681dd2ef9ca04ef5d93cfc87e52e09db2594c296b4a0a3662cb1b41249", - "sha256:3a2184c6d797a125dca8367878d3b9a178b6fdd05fdc2d35d758c3006a1cd694", - "sha256:3c79a6f7b95751cdebcd9037e4d06f8d5a9b60e4ed0cd231342aa8ad7124882a", - "sha256:3d72c20bd105022d29b14a7d628462ebdc61de2f303322c0212a054352f3b287", - "sha256:3eb42bf89a6be7deb64116dd1cc4b08171734d721e7a7e57ad64cc4ef29ed2f1", - "sha256:4635a184d0bbe537aa185a34193898eee409332a8ccb27eea36f262566585000", - "sha256:56e448f051a201c5ebbaa86a5efd0ca90d327204d8b059ab25ad0f35fbfd79f1", - "sha256:5a13ea7911ff5e1796b6d5e4fbbf6952381a611209b736d48e675c2756f3f74e", - "sha256:69bf008a06b76619d3c3f3b1983f5145c75a305a0fea513aca094cae5c40a8f5", - "sha256:6bc583dc18d5979dc0f6cec26a8603129de0304d5ae1f17e57a12834e7235062", - "sha256:701cd6093d63e6b8ad7009d8a92425428bc4d6e7ab8d75efbb665c806c1d79ba", - "sha256:7608a3dd5d73cb06c531b8925e0ef8d3de31fed2544a7de6c63960a1e73ea4bc", - "sha256:76ecd006d1d8f739430ec50cc872889af1f9c1b6b8f48e29941814b09b0fd3cc", - "sha256:7aa36d2b844a3e4a4b356708d79fd2c260281a7390d678a10b91ca595ddc9e99", - "sha256:7d3f553904b0c5c016d1dad058a7554c7ac4c91a789fca496e7d8347ad040653", - "sha256:7e1fe19bd6dce69d9fd159d8e4a80a8f52101380d5d3a4d374b6d3eae0e5de9c", - "sha256:8c3cb8c35ec4d9506979b4cf90ee9918bc2e49f84189d9bf5c36c0c1119c6558", - "sha256:9d6dd10d49e01571bf6e147d3b505141ffc093a06756c60b053a859cb2128b1f", - "sha256:9e112fcbe0148a6fa4f0a02e8d58e94470fc6cb82a5481618fea901699bf34c4", - "sha256:ac4fef68da01116a5c117eba4dd46f2e06847a497de5ed1d64bb99a5fda1ef91", - "sha256:b8815995e050764c8610dbc82641807d196927c3dbed207f0a079833ffcf588d", - "sha256:be6cfcd8053d13f5f5eeb284aa8a814220c3da1b0078fa859011c7fffd86dab9", - "sha256:c1bb572fab8208c400adaf06a8133ac0712179a334c09224fb11393e920abcdd", - "sha256:de4418dadaa1c01d497e539210cb6baa015965526ff5afc078c57ca69160108d", - "sha256:e05cb4d9aad6233d67e0541caa7e511fa4047ed7750ec2510d466e806e0255d6", - "sha256:e4d96c07229f58cb686120f168276e434660e4358cc9cf3b0464210b04913e77", - "sha256:f3f501f345f24383c0000395b26b726e46758b71393267aeae0bd36f8b3ade80", - "sha256:f8a923a85cb099422ad5a2e345fe877bbc89a8a8b23235824a93488150e45f6e" + "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c", + "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6", + "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45", + "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a", + "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03", + "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529", + "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a", + "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a", + "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2", + "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6", + "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759", + "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53", + "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a", + "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4", + "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff", + "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502", + "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793", + "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb", + "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905", + "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821", + "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b", + "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81", + "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0", + "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b", + "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3", + "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184", + "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701", + "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a", + "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82", + "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638", + "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5", + "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083", + "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6", + "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90", + "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465", + "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a", + "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3", + "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e", + "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066", + "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf", + "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b", + "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae", + "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669", + "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873", + "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b", + "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6", + "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb", + "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160", + "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c", + "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079", + "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d", + "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6" + ], + "index": "pypi", + "version": "==5.5" + }, + "cryptography": { + "hashes": [ + "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d", + "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959", + "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6", + "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873", + "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2", + "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713", + "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1", + "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177", + "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250", + "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca", + "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d", + "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9" ], - "version": "==4.5.1" + "markers": "python_version >= '3.6'", + "version": "==3.4.7" }, "decorator": { "hashes": [ - "sha256:7d46dd9f3ea1cf5f06ee0e4e1277ae618cf48dfb10ada7c8427cd46c42702a0e", - "sha256:94d1d8905f5010d74bbbd86c30471255661a14187c45f8d7f3e5aa8540fdb2e5" + "sha256:6e5c199c16f7a9f0e3a61a4a54b3d27e7dad0dbdde92b944426cb20914376323", + "sha256:72ecfba4320a893c53f9706bebb2d55c270c1e51a28789361aa93e4a21319ed5" ], - "version": "==4.2.1" + "markers": "python_version >= '3.5'", + "version": "==5.0.9" }, - "enum34": { + "docutils": { "hashes": [ - "sha256:2d81cbbe0e73112bdfe6ef8576f2238f2ba27dd0d55752a776c41d38b7da2850", - "sha256:644837f692e5f550741432dd3f223bbb9852018674981b1664e5dc339387588a", - "sha256:6bd0f6ad48ec2aa117d3d141940d484deccda84d4fcd884f5c3d93c23ecd8c79", - "sha256:8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1" + "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125", + "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61" ], - "markers": "python_version == '2.7'", - "version": "==1.1.6" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==0.17.1" }, "flake8": { "hashes": [ - "sha256:7253265f7abd8b313e3892944044a365e3f4ac3fcdcfb4298f55ee9ddf188ba0", - "sha256:c7841163e2b576d435799169b78703ad6ac1bbb0f199994fc05f700b2a90ea37" + "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b", + "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907" ], - "version": "==3.5.0" + "index": "pypi", + "version": "==3.9.2" }, - "funcsigs": { + "idna": { "hashes": [ - "sha256:330cc27ccbf7f1e992e69fef78261dc7c6569012cf397db8d3de0234e6c937ca", - "sha256:a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50" + "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a", + "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3" ], - "markers": "python_version < '3.0'", - "version": "==1.0.2" + "markers": "python_version >= '3'", + "version": "==3.2" }, - "idna": { + "importlib-metadata": { + "hashes": [ + "sha256:079ada16b7fc30dfbb5d13399a5113110dab1aa7c2bc62f66af75f0b717c8cac", + "sha256:9f55f560e116f8643ecf2922d9cd3e1c7e8d52e683178fecd9d08f6aa357e11e" + ], + "markers": "python_version >= '3.6'", + "version": "==4.6.1" + }, + "iniconfig": { "hashes": [ - "sha256:2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f", - "sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4" + "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", + "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32" ], - "version": "==2.6" + "version": "==1.1.1" }, "ipdb": { "hashes": [ - "sha256:7081c65ed7bfe7737f83fa4213ca8afd9617b42ff6b3f1daf9a3419839a2a00a" + "sha256:951bd9a64731c444fd907a5ce268543020086a697f6be08f7cc2c9a752a278c5" ], - "version": "==0.11" + "index": "pypi", + "version": "==0.13.9" }, "ipython": { "hashes": [ - "sha256:51c158a6c8b899898d1c91c6b51a34110196815cc905f9be0fa5878e19355608", - "sha256:fcc6d46f08c3c4de7b15ae1c426e15be1b7932bcda9d83ce1a4304e8c1129df3" + "sha256:54bbd1fe3882457aaf28ae060a5ccdef97f212a741754e420028d4ec5c2291dc", + "sha256:aa21412f2b04ad1a652e30564fff6b4de04726ce875eab222c8430edc6db383a" ], - "version": "==6.2.1" + "index": "pypi", + "version": "==7.25.0" }, "ipython-genutils": { "hashes": [ @@ -252,10 +366,35 @@ }, "jedi": { "hashes": [ - "sha256:d6e799d04d1ade9459ed0f20de47c32f2285438956a677d083d3c98def59fa97", - "sha256:d795f2c2e659f5ea39a839e5230d70a0b045d0daee7ca2403568d8f348d0ad89" + "sha256:18456d83f65f400ab0c2d3319e48520420ef43b23a086fdc05dff34132f0fb93", + "sha256:92550a404bad8afed881a137ec9a461fed49eca661414be45059329614ed0707" + ], + "markers": "python_version >= '3.6'", + "version": "==0.18.0" + }, + "jeepney": { + "hashes": [ + "sha256:1b5a0ea5c0e7b166b2f5895b91a08c14de8915afda4407fb5022a195224958ac", + "sha256:fa9e232dfa0c498bd0b8a3a73b8d8a31978304dcef0515adc859d4e096f96f4f" ], - "version": "==0.11.1" + "markers": "sys_platform == 'linux'", + "version": "==0.7.1" + }, + "keyring": { + "hashes": [ + "sha256:045703609dd3fccfcdb27da201684278823b72af515aedec1a8515719a038cb8", + "sha256:8f607d7d1cc502c43a932a275a56fe47db50271904513a379d39df1af277ac48" + ], + "markers": "python_version >= '3.6'", + "version": "==23.0.1" + }, + "matplotlib-inline": { + "hashes": [ + "sha256:5cf1176f554abb4fa98cb362aa2b55c500147e4bdbb07e3fda359143e1da0811", + "sha256:f41d5ff73c9f5385775d5c0bc13b424535c8402fe70ea8210f93e11f3683993e" + ], + "markers": "python_version >= '3.5'", + "version": "==0.1.2" }, "mccabe": { "hashes": [ @@ -264,197 +403,253 @@ ], "version": "==0.6.1" }, - "parso": { + "packaging": { "hashes": [ - "sha256:5815f3fe254e5665f3c5d6f54f086c2502035cb631a91341591b5a564203cffb", - "sha256:a7bb86fe0844304869d1c08e8bd0e52be931228483025c422917411ab82d628a" + "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7", + "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14" ], - "version": "==0.1.1" + "markers": "python_version >= '3.6'", + "version": "==21.0" }, - "pathlib2": { + "parso": { "hashes": [ - "sha256:d32550b75a818b289bd4c1f96b60c89957811da205afcceab75bc8b4857ea5b3", - "sha256:db3e43032d23787d3e9aec8c7ef1e0d2c3c589d5f303477661ebda2ca6d4bfba" + "sha256:12b83492c6239ce32ff5eed6d3639d6a536170723c6f3f1506869f1ace413398", + "sha256:a8c4922db71e4fdb90e0d0bc6e50f9b273d3397925e5e60a717e719201778d22" ], - "markers": "python_version in '2.6 2.7 3.2 3.3'", - "version": "==2.3.0" + "markers": "python_version >= '3.6'", + "version": "==0.8.2" }, "pexpect": { "hashes": [ - "sha256:67b85a1565968e3d5b5e7c9283caddc90c3947a2625bed1905be27bd5a03e47d", - "sha256:6ff881b07aff0cb8ec02055670443f784434395f90c3285d2ae470f921ade52a" + "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937", + "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c" ], "markers": "sys_platform != 'win32'", - "version": "==4.4.0" + "version": "==4.8.0" }, "pickleshare": { "hashes": [ - "sha256:84a9257227dfdd6fe1b4be1319096c20eb85ff1e82c7932f36efccfe1b09737b", - "sha256:c9a2541f25aeabc070f12f452e1f2a8eae2abd51e1cd19e8430402bdf4c1d8b5" + "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", + "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" ], - "version": "==0.7.4" + "version": "==0.7.5" }, "pkginfo": { "hashes": [ - "sha256:31a49103180ae1518b65d3f4ce09c784e2bc54e338197668b4fb7dc539521024", - "sha256:bb1a6aeabfc898f5df124e7e00303a5b3ec9a489535f346bfbddb081af93f89e" + "sha256:37ecd857b47e5f55949c41ed061eb51a0bee97a87c969219d144c0e023982779", + "sha256:e7432f81d08adec7297633191bbf0bd47faf13cd8724c3a13250e51d542635bd" ], - "version": "==1.4.1" + "version": "==1.7.1" }, "pluggy": { "hashes": [ - "sha256:7f8ae7f5bdf75671a718d2daf0a64b7885f74510bcd98b1a0bb420eb9a9d0cff" + "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", + "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d" ], - "version": "==0.6.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==0.13.1" }, "prompt-toolkit": { "hashes": [ - "sha256:1df952620eccb399c53ebb359cc7d9a8d3a9538cb34c5a1344bdbeb29fbcc381", - "sha256:3f473ae040ddaa52b52f97f6b4a493cfa9f5920c255a12dc56a7d34397a398a4", - "sha256:858588f1983ca497f1cf4ffde01d978a3ea02b01c8a26a8bbc5cd2e66d816917" + "sha256:08360ee3a3148bdb5163621709ee322ec34fc4375099afa4bbf751e9b7b7fa4f", + "sha256:7089d8d2938043508aa9420ec18ce0922885304cddae87fb96eebca942299f88" ], - "version": "==1.0.15" + "markers": "python_full_version >= '3.6.1'", + "version": "==3.0.19" }, "ptyprocess": { "hashes": [ - "sha256:e64193f0047ad603b71f202332ab5527c5e52aa7c8b609704fc28c0dc20c4365", - "sha256:e8c43b5eee76b2083a9badde89fd1bbce6c8942d1045146e100b7b5e014f4f1a" + "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", + "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220" ], - "version": "==0.5.2" + "version": "==0.7.0" }, "py": { "hashes": [ - "sha256:8cca5c229d225f8c1e3085be4fcf306090b00850fefad892f9d96c7b6e2f310f", - "sha256:ca18943e28235417756316bfada6cd96b23ce60dd532642690dcfdaba988a76d" + "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3", + "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a" ], - "version": "==1.5.2" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.10.0" }, "pycodestyle": { "hashes": [ - "sha256:682256a5b318149ca0d2a9185d365d8864a768a28db66a84a2ea946bcc426766", - "sha256:6c4245ade1edfad79c3446fadfc96b0de2759662dc29d07d80a6f27ad1ca6ba9" + "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068", + "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef" ], - "version": "==2.3.1" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.7.0" + }, + "pycparser": { + "hashes": [ + "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", + "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.20" }, "pyflakes": { "hashes": [ - "sha256:08bd6a50edf8cffa9fa09a463063c425ecaaf10d1eb0335a7e8b1401aef89e6f", - "sha256:8d616a382f243dbf19b54743f280b80198be0bca3a5396f1d2e1fca6223e8805" + "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3", + "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db" ], - "version": "==1.6.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.3.1" }, "pygments": { "hashes": [ - "sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d", - "sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc" + "sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f", + "sha256:d66e804411278594d764fc69ec36ec13d9ae9147193a1740cd34d272ca383b8e" + ], + "markers": "python_version >= '3.5'", + "version": "==2.9.0" + }, + "pyparsing": { + "hashes": [ + "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", + "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" ], - "version": "==2.2.0" + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.4.7" }, "pytest": { "hashes": [ - "sha256:062027955bccbc04d2fcd5d79690947e018ba31abe4c90b2c6721abec734261b", - "sha256:117bad36c1a787e1a8a659df35de53ba05f9f3398fb9e4ac17e80ad5903eb8c5" + "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b", + "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890" ], - "version": "==3.4.2" + "index": "pypi", + "version": "==6.2.4" }, "pytest-cov": { "hashes": [ - "sha256:03aa752cf11db41d281ea1d807d954c4eda35cfa1b21d6971966cc041bbf6e2d", - "sha256:890fe5565400902b0c78b5357004aab1c814115894f4f21370e2433256a3eeec" + "sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a", + "sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7" ], - "version": "==2.5.1" + "index": "pypi", + "version": "==2.12.1" }, "pytest-django": { "hashes": [ - "sha256:00995c2999b884a38ae9cd30a8c00ed32b3d38c1041250ea84caf18085589662", - "sha256:038ccc5a9daa1b1b0eb739ab7dce54e495811eca5ea3af4815a2a3ac45152309" + "sha256:65783e78382456528bd9d79a35843adde9e6a47347b20464eb2c885cb0f1f606", + "sha256:b5171e3798bf7e3fc5ea7072fe87324db67a4dd9f1192b037fed4cc3c1b7f455" + ], + "index": "pypi", + "version": "==4.4.0" + }, + "readme-renderer": { + "hashes": [ + "sha256:63b4075c6698fcfa78e584930f07f39e05d46f3ec97f65006e430b595ca6348c", + "sha256:92fd5ac2bf8677f310f3303aa4bce5b9d5f9f2094ab98c29f13791d7b805a3db" ], - "version": "==3.1.2" + "version": "==29.0" }, "requests": { "hashes": [ - "sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b", - "sha256:9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e" + "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24", + "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7" ], - "version": "==2.18.4" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==2.26.0" }, "requests-toolbelt": { "hashes": [ - "sha256:42c9c170abc2cacb78b8ab23ac957945c7716249206f90874651971a4acff237", - "sha256:f6a531936c6fa4c6cfce1b9c10d5c4f498d16528d2a54a22ca00011205a187b5" + "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f", + "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0" + ], + "version": "==0.9.1" + }, + "rfc3986": { + "hashes": [ + "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835", + "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97" ], - "version": "==0.8.0" + "version": "==1.5.0" }, - "simplegeneric": { + "secretstorage": { "hashes": [ - "sha256:dc972e06094b9af5b855b3df4a646395e43d1c9d0d39ed345b7393560d0b9173" + "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f", + "sha256:fd666c51a6bf200643495a04abb261f83229dcb6fd8472ec393df7ffc8b6f195" ], - "version": "==0.8.1" + "markers": "sys_platform == 'linux'", + "version": "==3.3.1" }, "six": { "hashes": [ - "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", - "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.16.0" + }, + "toml": { + "hashes": [ + "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", + "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" ], - "version": "==1.11.0" + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==0.10.2" }, "tqdm": { "hashes": [ - "sha256:9bd200335ee4429381e81bd82c08d16b59a5228a11e1ae71222b31646b3533f3", - "sha256:f1c098cd12cfb39190805d0c771198af0a734ba63b381ea99d72ea38770525c7" + "sha256:5aa445ea0ad8b16d82b15ab342de6b195a722d75fc1ef9934a46bba6feafbc64", + "sha256:8bb94db0d4468fea27d004a0f1d1c02da3cdedc00fe491c0de986b76a04d6b0a" ], - "version": "==4.19.7" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==4.61.2" }, "traitlets": { "hashes": [ - "sha256:9c4bd2d267b7153df9152698efb1050a5d84982d3384a37b2c1f7723ba3e7835", - "sha256:c6cb5e6f57c5a9bdaa40fa71ce7b4af30298fbab9ece9815b5d995ab6217c7d9" + "sha256:178f4ce988f69189f7e523337a3e11d91c786ded9360174a3d9ca83e79bc5396", + "sha256:69ff3f9d5351f31a7ad80443c2674b7099df13cc41fc5fa6e2f6d3b0330b0426" ], - "version": "==4.3.2" + "markers": "python_version >= '3.7'", + "version": "==5.0.5" }, "twine": { "hashes": [ - "sha256:c3540f2b98667698412b0dc9f5e40c8c1a08a9e79e255c9c21339105eb4ca57a", - "sha256:eff86e20fdffef8abb0b638784c62d0348dac4c80380907e39b732c56e9192fb" + "sha256:087328e9bb405e7ce18527a2dca4042a84c7918658f951110b38bc135acab218", + "sha256:4caec0f1ed78dc4c9b83ad537e453d03ce485725f2aea57f1bb3fdde78dae936" ], - "version": "==1.10.0" + "index": "pypi", + "version": "==3.4.2" }, - "typing": { + "urllib3": { "hashes": [ - "sha256:3a887b021a77b292e151afb75323dea88a7bc1b3dfa92176cff8e44c8b68bddf", - "sha256:b2c689d54e1144bbcfd191b0832980a21c2dbcf7b5ff7a66248a60c90e951eb8", - "sha256:d400a9344254803a2368533e4533a4200d21eb7b6b729c173bc38201a74db3f2" + "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4", + "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f" ], - "markers": "python_version <= '3.4'", - "version": "==3.6.4" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", + "version": "==1.26.6" }, - "urllib3": { + "wcwidth": { "hashes": [ - "sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b", - "sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f" + "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784", + "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83" ], - "version": "==1.22" + "version": "==0.2.5" }, - "wcwidth": { + "webencodings": { "hashes": [ - "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e", - "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c" + "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", + "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923" ], - "version": "==0.1.7" + "version": "==0.5.1" }, "wheel": { "hashes": [ - "sha256:9515fe0a94e823fd90b08d22de45d7bde57c90edce705b22f5e1ecf7e1b653c8", - "sha256:e721e53864f084f956f40f96124a74da0631ac13fbbd1ba99e8e2b5e9cafdf64" + "sha256:78b5b185f0e5763c26ca1e324373aadd49182ca90e825f7853f4b2509215dc0e", + "sha256:e11eefd162658ea59a60a0f6c7d493a7190ea4b9a85e335b33489d9f17e0245e" ], - "version": "==0.30.0" + "index": "pypi", + "version": "==0.36.2" }, - "win-unicode-console": { + "zipp": { "hashes": [ - "sha256:d4142d4d56d46f449d6f00536a73625a871cba040f0bc1a2e305a04578f07d1e" + "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3", + "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4" ], - "markers": "sys_platform == 'win32' and python_version < '3.6'", - "version": "==0.5" + "markers": "python_version >= '3.6'", + "version": "==3.5.0" } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/djet-0.2.2/djet/__init__.py new/djet-0.3.0/djet/__init__.py --- old/djet-0.2.2/djet/__init__.py 2018-07-23 15:18:40.000000000 +0200 +++ new/djet-0.3.0/djet/__init__.py 2021-07-29 23:19:17.000000000 +0200 @@ -1 +1 @@ -__version__ = "0.2.2" \ No newline at end of file +__version__ = "0.3.0" \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/djet-0.2.2/djet/assertions.py new/djet-0.3.0/djet/assertions.py --- old/djet-0.2.2/djet/assertions.py 2018-07-23 15:18:40.000000000 +0200 +++ new/djet-0.3.0/djet/assertions.py 2021-07-29 22:58:59.000000000 +0200 @@ -10,27 +10,36 @@ HttpResponsePermanentRedirect.status_code ] - def assert_status_equal(self, response, status_code_or_response): + def assert_status_equal( + self, response, status_code_or_response, show_body_on_error=False + ): status_code = self._get_status_code(status_code_or_response) - self.assertEqual( - response.status_code, - status_code, - 'Response status code is {0}, expected {1}'.format( + if response.status_code != status_code: + message = 'Response status code is {0}, expected {1}'.format( response.status_code, status_code, ) - ) + if response.status_code >= 400 and show_body_on_error: + response.render() + message += '\n. App responded:\n' + response.content + raise AssertionError(message) - def assert_status_in(self, response, status_codes_or_responses): + def assert_status_in( + self, + response, + status_codes_or_responses, + show_body_on_error=False + ): status_codes = list(map(self._get_status_code, status_codes_or_responses)) - self.assertIn( - response.status_code, - status_codes, - 'Response status code is {0}, expected one of: {1}'.format( + if response.status_code not in status_codes: + message = 'Response status code is {0}, expected one of: {1}'.format( response.status_code, ', '.join(str(code) for code in status_codes), ) - ) + if response.status_code >= 400 and show_body_on_error: + response.render() + message += '\n. App responded:\n' + response.content + raise AssertionError(message) def _get_redirect_assertion_message(self, response): return 'Response should redirect, but status code is {0}'.format( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/djet-0.2.2/djet/files.py new/djet-0.3.0/djet/files.py --- old/djet-0.2.2/djet/files.py 2018-07-23 15:18:40.000000000 +0200 +++ new/djet-0.3.0/djet/files.py 2021-07-29 22:58:59.000000000 +0200 @@ -1,8 +1,9 @@ import os import datetime +from io import BytesIO + from django.core.files.storage import Storage, default_storage from django.core.files.uploadedfile import InMemoryUploadedFile -from django.utils import six class InMemoryStorage(Storage): @@ -74,7 +75,7 @@ def create_inmemory_file(file_name='tmp.txt', content=b'', content_type=None): - stream = six.BytesIO() + stream = BytesIO() stream.write(content) file = InMemoryUploadedFile(stream, None, file_name, content_type, stream.tell(), None) file.seek(0) @@ -88,7 +89,7 @@ format = extension[1:].upper() if not content_type: content_type = 'image/{0}'.format(format) - stream = six.BytesIO() + stream = BytesIO() size = (width, height) color = (255, 0, 0, 0) image = Image.new('RGBA', size, color) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/djet-0.2.2/djet.egg-info/PKG-INFO new/djet-0.3.0/djet.egg-info/PKG-INFO --- old/djet-0.2.2/djet.egg-info/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 +++ new/djet-0.3.0/djet.egg-info/PKG-INFO 2021-07-29 23:19:28.000000000 +0200 @@ -0,0 +1,76 @@ +Metadata-Version: 2.1 +Name: djet +Version: 0.3.0 +Summary: Set of helpers for easy testing of Django apps. +Home-page: https://github.com/sunscrapers/djet +Author: SUNSCRAPERS +Author-email: [email protected] +License: MIT +Platform: UNKNOWN +Classifier: Development Status :: 3 - Alpha +Classifier: Environment :: Web Environment +Classifier: Framework :: Django +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Topic :: Software Development :: Testing +License-File: LICENSE + +==== +djet +==== + +.. image:: https://img.shields.io/pypi/v/djet.svg + :target: https://pypi.org/project/djet + +.. image:: https://img.shields.io/travis/sunscrapers/djet.svg + :target: https://travis-ci.org/sunscrapers/djet + +.. image:: https://img.shields.io/codecov/c/github/sunscrapers/djet.svg + :target: https://codecov.io/gh/sunscrapers/djet + +**Django Extended Tests** is a set of helpers for easy testing of Django apps. + +Main features: + +* easy unit testing of Django views (``ViewTestCase``) +* useful assertions provides as mixin classes: + + * response status codes (``StatusCodeAssertionsMixin``) + * emails (``EmailAssertionsMixin``) + * messages (``MessagesAssertionsMixin``) + * model instances (``InstanceAssertionsMixin``) + +* handy helpers for testing file-related code (``InMemoryStorageMixin`` and others) +* smooth integration with Django REST Framework authentication mechanism (``APIViewTestCase``) + +Full documentation available on `read the docs <https://djet.readthedocs.io/en/latest/>`_. + +Developed by `SUNSCRAPERS <http://sunscrapers.com>`_ with passion & patience. + +Requirements +============ + +* **Python**: 2.7 (Only Django 1.11), 3.4+ +* **Django**: 1.11, 2.0+ +* (optional) **Django REST Framework**: 3.7+ + +Installation +============ + +Simply install using ``pip``: + +.. code-block:: bash + + $ pip install djet + +Documentation +============= + +Full documentation is available to study at +`read the docs <https://djet.readthedocs.io/en/latest/>`_ +and in ``docs`` directory. + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/djet-0.2.2/djet.egg-info/SOURCES.txt new/djet-0.3.0/djet.egg-info/SOURCES.txt --- old/djet-0.2.2/djet.egg-info/SOURCES.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/djet-0.3.0/djet.egg-info/SOURCES.txt 2021-07-29 23:19:28.000000000 +0200 @@ -0,0 +1,43 @@ +.gitignore +.travis.yml +LICENSE +MANIFEST.in +Makefile +Pipfile +Pipfile.lock +README.rst +pyproject.toml +pytest.ini +requirements.txt +setup.py +tox.ini +djet/__init__.py +djet/assertions.py +djet/files.py +djet/restframework.py +djet/testcases.py +djet.egg-info/PKG-INFO +djet.egg-info/SOURCES.txt +djet.egg-info/dependency_links.txt +djet.egg-info/top_level.txt +docs/Makefile +docs/make.bat +docs/source/assertions.rst +docs/source/class_based_views.rst +docs/source/conf.py +docs/source/files.rst +docs/source/function_based_views.rst +docs/source/getting_started.rst +docs/source/index.rst +docs/source/integration_with_drf.rst +docs/source/introduction.rst +testproject/__init__.py +testproject/manage.py +testproject/settings.py +testproject/testapp/__init__.py +testproject/testapp/models.py +testproject/testapp/tests/__init__.py +testproject/testapp/tests/test_assertions.py +testproject/testapp/tests/test_files.py +testproject/testapp/tests/test_restframework.py +testproject/testapp/tests/test_testcases.py \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/djet-0.2.2/djet.egg-info/dependency_links.txt new/djet-0.3.0/djet.egg-info/dependency_links.txt --- old/djet-0.2.2/djet.egg-info/dependency_links.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/djet-0.3.0/djet.egg-info/dependency_links.txt 2021-07-29 23:19:28.000000000 +0200 @@ -0,0 +1 @@ + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/djet-0.2.2/djet.egg-info/top_level.txt new/djet-0.3.0/djet.egg-info/top_level.txt --- old/djet-0.2.2/djet.egg-info/top_level.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/djet-0.3.0/djet.egg-info/top_level.txt 2021-07-29 23:19:28.000000000 +0200 @@ -0,0 +1 @@ +djet diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/djet-0.2.2/pyproject.toml new/djet-0.3.0/pyproject.toml --- old/djet-0.2.2/pyproject.toml 1970-01-01 01:00:00.000000000 +0100 +++ new/djet-0.3.0/pyproject.toml 2021-07-29 23:11:41.000000000 +0200 @@ -0,0 +1,3 @@ +[build-system] +requires = ["setuptools", "wheel"] +build-backend = "setuptools.build_meta:__legacy__" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/djet-0.2.2/requirements.txt new/djet-0.3.0/requirements.txt --- old/djet-0.2.2/requirements.txt 2018-07-23 15:18:40.000000000 +0200 +++ new/djet-0.3.0/requirements.txt 2021-07-29 22:58:59.000000000 +0200 @@ -1,8 +1,8 @@ -e . -Pillow>=5.0<5.3 -coverage==4.5.1 +Pillow>=8.0.0<8.3.0 +coverage==5.5 -pytest==3.6.3 -pytest-cov==2.5.1 -pytest-django==3.3.2 -flake8==3.5.0 +pytest==6.2.4 +pytest-cov==2.12.1 +pytest-django==4.4.0 +flake8==3.9.2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/djet-0.2.2/setup.cfg new/djet-0.3.0/setup.cfg --- old/djet-0.2.2/setup.cfg 1970-01-01 01:00:00.000000000 +0100 +++ new/djet-0.3.0/setup.cfg 2021-07-29 23:19:29.038267600 +0200 @@ -0,0 +1,4 @@ +[egg_info] +tag_build = +tag_date = 0 + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/djet-0.2.2/setup.py new/djet-0.3.0/setup.py --- old/djet-0.2.2/setup.py 2018-07-23 15:18:40.000000000 +0200 +++ new/djet-0.3.0/setup.py 2021-07-29 23:19:02.000000000 +0200 @@ -3,7 +3,7 @@ setup( name='djet', - version='0.2.2', + version='0.3.0', description='Set of helpers for easy testing of Django apps.', long_description=codecs.open('README.rst', encoding='utf-8').read(), license='MIT', @@ -21,7 +21,6 @@ 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent', 'Programming Language :: Python', - 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 3', 'Topic :: Software Development :: Testing' ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/djet-0.2.2/testproject/testapp/tests/test_assertions.py new/djet-0.3.0/testproject/testapp/tests/test_assertions.py --- old/djet-0.2.2/testproject/testapp/tests/test_assertions.py 2018-07-23 15:18:40.000000000 +0200 +++ new/djet-0.3.0/testproject/testapp/tests/test_assertions.py 2021-07-29 22:58:59.000000000 +0200 @@ -157,7 +157,7 @@ self.assert_instance_exists(models.MockModel, field='value') def test_assert_instance_exists_raises_assertion_error_when_no_instance(self): - with self.assertRaisesRegexp(AssertionError, 'No MockModel found'): + with self.assertRaisesRegex(AssertionError, 'No MockModel found'): self.assert_instance_exists(models.MockModel, field='value') def test_assert_instance_does_not_exist_passes_for_nonexisting_instances(self): @@ -166,7 +166,7 @@ def test_assert_instance_does_not_exist_raises_assertion_error_when_instance_found(self): models.MockModel.objects.create(field='value') - with self.assertRaisesRegexp(AssertionError, 'A MockModel was found'): + with self.assertRaisesRegex(AssertionError, 'A MockModel was found'): self.assert_instance_does_not_exist(models.MockModel, field='value') def test_assert_instance_created_passes_when_instance_created(self): @@ -174,7 +174,7 @@ models.MockModel.objects.create(field='value') def test_assert_instance_created_raises_assertion_error_when_not_created(self): - with self.assertRaisesRegexp(AssertionError, 'No MockModel found'): + with self.assertRaisesRegex(AssertionError, 'No MockModel found'): with self.assert_instance_created(models.MockModel, field='value'): pass @@ -187,6 +187,6 @@ def test_assert_instance_deleted_raises_assertion_error_when_not_deleted(self): models.MockModel.objects.create(field='value') - with self.assertRaisesRegexp(AssertionError, 'A MockModel was found'): + with self.assertRaisesRegex(AssertionError, 'A MockModel was found'): with self.assert_instance_deleted(models.MockModel, field='value'): pass diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/djet-0.2.2/tox.ini new/djet-0.3.0/tox.ini --- old/djet-0.2.2/tox.ini 2018-07-23 15:18:40.000000000 +0200 +++ new/djet-0.3.0/tox.ini 2021-07-29 23:12:45.000000000 +0200 @@ -1,33 +1,33 @@ [tox] envlist = - {py27,py34,py35,py36}-django111-drf{37,38} - {py34,py35,py36,py37}-django20-drf{37,38} - py{35,36,37}-djangomaster-drf37 + py{36,37,38,39}-django{22,31,32}-drf{311,312} +; py{38,39}-djangomaster-drf312 ; right now broken on master flake8 [travis:env] DJANGO = - 1.11: django111 - 2.0: django20 + 2.2: django22 + 3.1: django31 + 3.2: django32 master: djangomaster [testenv] passenv = CI TRAVIS TRAVIS_* basepython = - py27: python2.7 - py34: python3.4 py35: python3.5 py36: python3.6 py37: python3.7 + py38: python3.8 + py39: python3.9 deps = - django111: django>=1.11,<2.0 - django20: django>=2.0,<2.1 + django22: django>=2.2,<3.0 + django31: django>=3.1,<3.2 + django32: django>=3.2,<3.3 djangomaster: git+git://github.com/django/django.git - drf37: djangorestframework>=3.7,<3.8 - drf38: djangorestframework>=3.8,<3.9 - py27: mock + drf312: djangorestframework>=3.12,<3.13 + drf311: djangorestframework>=3.11,<3.12 -rrequirements.txt commands = py.test --capture=no --cov-report term-missing --cov-report html --cov=djet testproject/ ++++++ support-public-httpresponse.patch ++++++ >From f97c37afeb1b6f17055d2eebadaa42bc316cd15f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Ga=C5=82uszka?= <[email protected]> Date: Sat, 31 Jul 2021 07:26:59 +0200 Subject: [PATCH] fix: Django 2.2 made HttpResponse headers public field --- djet/assertions.py | 2 +- djet/restframework.py | 13 +++------ djet/testcases.py | 15 ++++------ testproject/testapp/tests/test_testcases.py | 32 +++++++++------------ 4 files changed, 24 insertions(+), 38 deletions(-) Index: djet-0.3.0/djet/assertions.py =================================================================== --- djet-0.3.0.orig/djet/assertions.py +++ djet-0.3.0/djet/assertions.py @@ -57,7 +57,7 @@ class StatusCodeAssertionsMixin(object): self._get_redirect_assertion_message(response), ) if expected_url: - location_header = response._headers.get('location', None) + location_header = response._headers.get('Location', None) self.assertEqual( location_header, ('Location', str(expected_url)), Index: djet-0.3.0/djet/restframework.py =================================================================== --- djet-0.3.0.orig/djet/restframework.py +++ djet-0.3.0/djet/restframework.py @@ -1,4 +1,3 @@ -import django from rest_framework import test from djet import testcases @@ -28,10 +27,9 @@ class APIViewTestCase(testcases.ViewTest return super(APIViewTestCase, self)._get_view(request) -if django.VERSION >= (1, 4): - class APIViewLiveServerTestCase(testcases.ViewLiveServerTestCase): - factory_class = APIRequestFactory - -if django.VERSION >= (1, 5): - class APIViewSimpleTestCase(testcases.ViewSimpleTestCase): - factory_class = APIRequestFactory +class APIViewLiveServerTestCase(testcases.ViewLiveServerTestCase): + factory_class = APIRequestFactory + + +class APIViewSimpleTestCase(testcases.ViewSimpleTestCase): + factory_class = APIRequestFactory Index: djet-0.3.0/djet/testcases.py =================================================================== --- djet-0.3.0.orig/djet/testcases.py +++ djet-0.3.0/djet/testcases.py @@ -1,5 +1,4 @@ from functools import partial -import django from django import test as django_test @@ -93,7 +92,7 @@ class ViewTestCaseMixin(object): middleware_classes = self.middleware_classes or [] for mw_class in middleware_classes: mw_class, mw_types = self._unpack_middleware(mw_class) - mw_instance = mw_class() + mw_instance = mw_class(self._get_response) if self._should_add_middleware(mw_instance, mw_types, MiddlewareType.PROCESS_REQUEST): self._request_middleware.append(mw_instance.process_request) @@ -184,10 +183,8 @@ class ViewTestCase(ViewTestCaseMixin, dj pass -if django.VERSION >= (1, 4): - class ViewLiveServerTestCase(ViewTestCaseMixin, django_test.LiveServerTestCase): - pass - -if django.VERSION >= (1, 5): - class ViewSimpleTestCase(ViewTestCaseMixin, django_test.SimpleTestCase): - pass +class ViewLiveServerTestCase(ViewTestCaseMixin, django_test.LiveServerTestCase): + pass + +class ViewSimpleTestCase(ViewTestCaseMixin, django_test.SimpleTestCase): + pass Index: djet-0.3.0/testproject/testapp/tests/test_testcases.py =================================================================== --- djet-0.3.0.orig/testproject/testapp/tests/test_testcases.py +++ djet-0.3.0/testproject/testapp/tests/test_testcases.py @@ -1,4 +1,3 @@ -import django from django import test as django_test from django.core.handlers.wsgi import WSGIRequest from django.http import HttpResponse @@ -9,6 +8,8 @@ from djet import testcases class MockMiddleware(object): + def __init__(self, get_response): + self.get_response = get_response def process_request(self, request): request.process_request_was_here = True @@ -38,6 +39,8 @@ class NewStyleMiddleware(object): class ProcessViewMockMiddleware(object): + def __init__(self, get_response): + self.get_response = get_response def process_view(self, request, view_func, view_args, view_kwargs): response = HttpResponse() @@ -144,13 +147,11 @@ class ViewTransactionTestCaseTest(ViewTe pass -if django.VERSION >= (1, 4): - class ViewLiveServerTestCaseTest(ViewTestCaseTestMixin, testcases.ViewLiveServerTestCase): - pass - -if django.VERSION >= (1, 5): - class ViewSimpleTestCaseTest(ViewTestCaseTestMixin, testcases.ViewSimpleTestCase): - pass +class ViewLiveServerTestCaseTest(ViewTestCaseTestMixin, testcases.ViewLiveServerTestCase): + pass + +class ViewSimpleTestCaseTest(ViewTestCaseTestMixin, testcases.ViewSimpleTestCase): + pass class ProcessExceptionMiddlewareViewTestCaseTest(testcases.ViewTestCase): @@ -235,14 +236,9 @@ class NewStyleMiddlewareTest(testcases.V def test_new_middleware(self): request = self.factory.get() - try: - response = self.view(request) - except NotImplementedError: - if django.VERSION >= (1, 10): - assert True + response = self.view(request) - if django.VERSION >= (1, 10): - self.assertTrue(response.new_middleware) + self.assertTrue(response.new_middleware) class NoViewClassDefined(testcases.ViewTestCase):
