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):

Reply via email to