From dee24fbc9c9eff233bc41aa2a6bb920d10b81756 Mon Sep 17 00:00:00 2001 From: Sli Date: Wed, 3 Aug 2022 21:48:37 +0200 Subject: [PATCH 1/5] Fix deprecation warnings --- com/tests.py | 8 +-- core/tests.py | 18 +++--- eboutic/tests.py | 2 +- eboutic/tests/test.py | 6 +- eboutic/views.py | 2 +- pedagogy/tests.py | 140 +++++++++++++++++++++--------------------- 6 files changed, 88 insertions(+), 88 deletions(-) diff --git a/com/tests.py b/com/tests.py index d42a056e..be47f10d 100644 --- a/com/tests.py +++ b/com/tests.py @@ -40,8 +40,8 @@ class ComAlertTest(TestCase): def test_page_is_working(self): self.client.login(username="comunity", password="plop") response = self.client.get(reverse("com:alert_edit")) - self.assertNotEquals(response.status_code, 500) - self.assertEquals(response.status_code, 200) + self.assertNotEqual(response.status_code, 500) + self.assertEqual(response.status_code, 200) class ComInfoTest(TestCase): @@ -51,8 +51,8 @@ class ComInfoTest(TestCase): def test_page_is_working(self): self.client.login(username="comunity", password="plop") response = self.client.get(reverse("com:info_edit")) - self.assertNotEquals(response.status_code, 500) - self.assertEquals(response.status_code, 200) + self.assertNotEqual(response.status_code, 500) + self.assertEqual(response.status_code, 200) class ComTest(TestCase): diff --git a/core/tests.py b/core/tests.py index cb0c986b..d1ebd6af 100644 --- a/core/tests.py +++ b/core/tests.py @@ -402,32 +402,32 @@ class UserToolsTest(TestCase): def test_anonymous_user_unauthorized(self): response = self.client.get(reverse("core:user_tools")) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) def test_page_is_working(self): # Test for simple user self.client.login(username="guy", password="plop") response = self.client.get(reverse("core:user_tools")) - self.assertNotEquals(response.status_code, 500) - self.assertEquals(response.status_code, 200) + self.assertNotEqual(response.status_code, 500) + self.assertEqual(response.status_code, 200) # Test for root self.client.login(username="root", password="plop") response = self.client.get(reverse("core:user_tools")) - self.assertNotEquals(response.status_code, 500) - self.assertEquals(response.status_code, 200) + self.assertNotEqual(response.status_code, 500) + self.assertEqual(response.status_code, 200) # Test for skia self.client.login(username="skia", password="plop") response = self.client.get(reverse("core:user_tools")) - self.assertNotEquals(response.status_code, 500) - self.assertEquals(response.status_code, 200) + self.assertNotEqual(response.status_code, 500) + self.assertEqual(response.status_code, 200) # Test for comunity self.client.login(username="comunity", password="plop") response = self.client.get(reverse("core:user_tools")) - self.assertNotEquals(response.status_code, 500) - self.assertEquals(response.status_code, 200) + self.assertNotEqual(response.status_code, 500) + self.assertEqual(response.status_code, 200) # TODO: many tests on the pages: diff --git a/eboutic/tests.py b/eboutic/tests.py index 9d0bf2de..6435f49b 100644 --- a/eboutic/tests.py +++ b/eboutic/tests.py @@ -59,7 +59,7 @@ class EbouticTest(TestCase): with open("./eboutic/tests/public_key.pem") as f: settings.SITH_EBOUTIC_PUB_KEY = f.read() privkey = crypto.load_privatekey(crypto.FILETYPE_PEM, PRIVKEY) - sig = crypto.sign(privkey, query, "sha1") + sig = crypto.sign(privkey, query.encode("utf-8"), "sha1") b64sig = base64.b64encode(sig).decode("ascii") url = reverse("eboutic:etransation_autoanswer") + "?%s&Sig=%s" % ( diff --git a/eboutic/tests/test.py b/eboutic/tests/test.py index 83a14ad9..2a4e6cfb 100755 --- a/eboutic/tests/test.py +++ b/eboutic/tests/test.py @@ -14,11 +14,11 @@ with open("./private_key.pem") as f: with open("./public_key.pem") as f: PUBKEY = f.read() -string = "Amount=400&BasketID=4000&Auto=42&Error=00000\n" +data = "Amount=400&BasketID=4000&Auto=42&Error=00000\n".encode("utf-8") # Sign prvkey = crypto.load_privatekey(crypto.FILETYPE_PEM, PRVKEY) -sig = crypto.sign(prvkey, string, "sha1") +sig = crypto.sign(prvkey, data, "sha1") b64sig = base64.b64encode(sig) print(b64sig) @@ -28,7 +28,7 @@ cert = crypto.X509() cert.set_pubkey(pubkey) sig = base64.b64decode(b64sig) try: - crypto.verify(cert, sig, string, "sha1") + crypto.verify(cert, sig, data, "sha1") print("Verify OK") except: print("Verify failed") diff --git a/eboutic/views.py b/eboutic/views.py index abac99ef..0124305b 100644 --- a/eboutic/views.py +++ b/eboutic/views.py @@ -264,7 +264,7 @@ class EtransactionAutoAnswer(View): crypto.verify( cert, sig, - "&".join(request.META["QUERY_STRING"].split("&")[:-1]), + "&".join(request.META["QUERY_STRING"].split("&")[:-1]).encode("utf-8"), "sha1", ) except: diff --git a/pedagogy/tests.py b/pedagogy/tests.py index be40d704..ce2c8072 100644 --- a/pedagogy/tests.py +++ b/pedagogy/tests.py @@ -95,7 +95,7 @@ class UVCreation(TestCase): response = self.client.post( reverse("pedagogy:uv_create"), create_uv_template(self.bibou.id) ) - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) self.assertTrue(UV.objects.filter(code="IFC1").exists()) def test_create_uv_pedagogy_admin_success(self): @@ -103,7 +103,7 @@ class UVCreation(TestCase): response = self.client.post( reverse("pedagogy:uv_create"), create_uv_template(self.tutu.id) ) - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) self.assertTrue(UV.objects.filter(code="IFC1").exists()) def test_create_uv_unauthorized_fail(self): @@ -111,21 +111,21 @@ class UVCreation(TestCase): response = self.client.post( reverse("pedagogy:uv_create"), create_uv_template(0) ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Test with subscribed user self.client.login(username="sli", password="plop") response = self.client.post( reverse("pedagogy:uv_create"), create_uv_template(self.sli.id) ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Test with non subscribed user self.client.login(username="guy", password="plop") response = self.client.post( reverse("pedagogy:uv_create"), create_uv_template(self.guy.id) ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Check that the UV has never been created self.assertFalse(UV.objects.filter(code="IFC1").exists()) @@ -137,16 +137,16 @@ class UVCreation(TestCase): response = self.client.post( reverse("pedagogy:uv_create"), create_uv_template(self.bibou.id) ) - self.assertNotEquals(response.status_code, 302) - self.assertEquals(response.status_code, 200) + self.assertNotEqual(response.status_code, 302) + self.assertEqual(response.status_code, 200) # Remove a required field response = self.client.post( reverse("pedagogy:uv_create"), create_uv_template(self.tutu.id, exclude_list=["title"]), ) - self.assertNotEquals(response.status_code, 302) - self.assertEquals(response.status_code, 200) + self.assertNotEqual(response.status_code, 302) + self.assertEqual(response.status_code, 200) # Check that the UV hase never been created self.assertFalse(UV.objects.filter(code="IFC1").exists()) @@ -179,12 +179,12 @@ class UVListTest(TestCase): def test_uv_list_display_fail(self): # Don't display for anonymous user response = self.client.get(reverse("pedagogy:guide")) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Don't display for none subscribed users self.client.login(username="guy", password="plop") response = self.client.get(reverse("pedagogy:guide")) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) class UVDeleteTest(TestCase): @@ -220,7 +220,7 @@ class UVDeleteTest(TestCase): "pedagogy:uv_delete", kwargs={"uv_id": UV.objects.get(code="PA00").id} ) ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Not subscribed user self.client.login(username="guy", password="plop") @@ -229,7 +229,7 @@ class UVDeleteTest(TestCase): "pedagogy:uv_delete", kwargs={"uv_id": UV.objects.get(code="PA00").id} ) ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Simply subscribed user self.client.login(username="sli", password="plop") @@ -238,7 +238,7 @@ class UVDeleteTest(TestCase): "pedagogy:uv_delete", kwargs={"uv_id": UV.objects.get(code="PA00").id} ) ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Check that the UV still exists self.assertTrue(UV.objects.filter(code="PA00").exists()) @@ -262,7 +262,7 @@ class UVUpdateTest(TestCase): create_uv_template(self.bibou.id, code="PA00"), ) self.uv.refresh_from_db() - self.assertEquals(self.uv.credit_type, "TM") + self.assertEqual(self.uv.credit_type, "TM") def test_uv_update_pedagogy_admin_success(self): self.client.login(username="tutu", password="plop") @@ -271,7 +271,7 @@ class UVUpdateTest(TestCase): create_uv_template(self.bibou.id, code="PA00"), ) self.uv.refresh_from_db() - self.assertEquals(self.uv.credit_type, "TM") + self.assertEqual(self.uv.credit_type, "TM") def test_uv_update_original_author_does_not_change(self): self.client.login(username="tutu", password="plop") @@ -281,8 +281,8 @@ class UVUpdateTest(TestCase): ) self.uv.refresh_from_db() - self.assertEquals(response.status_code, 200) - self.assertEquals(self.uv.author, self.bibou) + self.assertEqual(response.status_code, 200) + self.assertEqual(self.uv.author, self.bibou) def test_uv_update_pedagogy_unauthorized_fail(self): # Anonymous user @@ -290,7 +290,7 @@ class UVUpdateTest(TestCase): reverse("pedagogy:uv_update", kwargs={"uv_id": self.uv.id}), create_uv_template(self.bibou.id, code="PA00"), ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Not subscribed user self.client.login(username="guy", password="plop") @@ -298,7 +298,7 @@ class UVUpdateTest(TestCase): reverse("pedagogy:uv_update", kwargs={"uv_id": self.uv.id}), create_uv_template(self.bibou.id, code="PA00"), ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Simply subscribed user self.client.login(username="sli", password="plop") @@ -306,11 +306,11 @@ class UVUpdateTest(TestCase): reverse("pedagogy:uv_update", kwargs={"uv_id": self.uv.id}), create_uv_template(self.bibou.id, code="PA00"), ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Check that the UV has not changed self.uv.refresh_from_db() - self.assertEquals(self.uv.credit_type, "OM") + self.assertEqual(self.uv.credit_type, "OM") # UVComment class tests @@ -355,7 +355,7 @@ class UVCommentCreationAndDisplay(TestCase): reverse("pedagogy:uv_detail", kwargs={"uv_id": self.uv.id}), create_uv_comment_template(self.bibou.id), ) - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) response = self.client.get( reverse("pedagogy:uv_detail", kwargs={"uv_id": self.uv.id}) ) @@ -367,7 +367,7 @@ class UVCommentCreationAndDisplay(TestCase): reverse("pedagogy:uv_detail", kwargs={"uv_id": self.uv.id}), create_uv_comment_template(self.tutu.id), ) - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) response = self.client.get( reverse("pedagogy:uv_detail", kwargs={"uv_id": self.uv.id}) ) @@ -379,7 +379,7 @@ class UVCommentCreationAndDisplay(TestCase): reverse("pedagogy:uv_detail", kwargs={"uv_id": self.uv.id}), create_uv_comment_template(self.sli.id), ) - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) response = self.client.get( reverse("pedagogy:uv_detail", kwargs={"uv_id": self.uv.id}) ) @@ -391,7 +391,7 @@ class UVCommentCreationAndDisplay(TestCase): reverse("pedagogy:uv_detail", kwargs={"uv_id": self.uv.id}), create_uv_comment_template(0), ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Test with non subscribed user self.client.login(username="guy", password="plop") @@ -399,7 +399,7 @@ class UVCommentCreationAndDisplay(TestCase): reverse("pedagogy:uv_detail", kwargs={"uv_id": self.uv.id}), create_uv_comment_template(self.guy.id), ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Check that the comment has never been created self.client.login(username="root", password="plop") @@ -415,7 +415,7 @@ class UVCommentCreationAndDisplay(TestCase): create_uv_comment_template(self.bibou.id, exclude_list=["grade_global"]), ) - self.assertEquals(response.status_code, 200) + self.assertEqual(response.status_code, 200) response = self.client.get( reverse("pedagogy:uv_detail", kwargs={"uv_id": self.uv.id}) @@ -442,7 +442,7 @@ class UVCommentCreationAndDisplay(TestCase): response = self.client.post( reverse("pedagogy:uv_detail", kwargs={"uv_id": self.uv.id}), comment ) - self.assertEquals(response.status_code, 200) + self.assertEqual(response.status_code, 200) self.assertTrue( UVComment.objects.filter(comment__contains="Superbe UV").exists() ) @@ -459,12 +459,12 @@ class UVCommentCreationAndDisplay(TestCase): reverse("pedagogy:uv_detail", kwargs={"uv_id": self.uv.id}), create_uv_comment_template(self.bibou.id, exclude_list=["uv"]), ) - self.assertEquals(response.status_code, 200) + self.assertEqual(response.status_code, 200) self.client.post( reverse("pedagogy:uv_detail", kwargs={"uv_id": self.uv.id}), create_uv_comment_template(self.bibou.id, exclude_list=["author"]), ) - self.assertEquals(response.status_code, 200) + self.assertEqual(response.status_code, 200) class UVCommentDeleteTest(TestCase): @@ -508,21 +508,21 @@ class UVCommentDeleteTest(TestCase): response = self.client.post( reverse("pedagogy:comment_delete", kwargs={"comment_id": self.comment.id}) ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Unsbscribed user self.client.login(username="guy", password="plop") response = self.client.post( reverse("pedagogy:comment_delete", kwargs={"comment_id": self.comment.id}) ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Subscribed user (not author of the comment) self.client.login(username="sli", password="plop") response = self.client.post( reverse("pedagogy:comment_delete", kwargs={"comment_id": self.comment.id}) ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Check that the comment still exists self.assertTrue(UVComment.objects.filter(id=self.comment.id).exists()) @@ -555,9 +555,9 @@ class UVCommentUpdateTest(TestCase): reverse("pedagogy:comment_update", kwargs={"comment_id": self.comment.id}), self.comment_edit, ) - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) self.comment.refresh_from_db() - self.assertEquals(self.comment.comment, self.comment_edit["comment"]) + self.assertEqual(self.comment.comment, self.comment_edit["comment"]) def test_uv_comment_update_pedagogy_admin_success(self): self.client.login(username="tutu", password="plop") @@ -565,9 +565,9 @@ class UVCommentUpdateTest(TestCase): reverse("pedagogy:comment_update", kwargs={"comment_id": self.comment.id}), self.comment_edit, ) - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) self.comment.refresh_from_db() - self.assertEquals(self.comment.comment, self.comment_edit["comment"]) + self.assertEqual(self.comment.comment, self.comment_edit["comment"]) def test_uv_comment_update_author_success(self): self.client.login(username="krophil", password="plop") @@ -575,9 +575,9 @@ class UVCommentUpdateTest(TestCase): reverse("pedagogy:comment_update", kwargs={"comment_id": self.comment.id}), self.comment_edit, ) - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) self.comment.refresh_from_db() - self.assertEquals(self.comment.comment, self.comment_edit["comment"]) + self.assertEqual(self.comment.comment, self.comment_edit["comment"]) def test_uv_comment_update_unauthorized_fail(self): # Anonymous user @@ -585,25 +585,25 @@ class UVCommentUpdateTest(TestCase): reverse("pedagogy:comment_update", kwargs={"comment_id": self.comment.id}), self.comment_edit, ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Unsbscribed user response = self.client.post( reverse("pedagogy:comment_update", kwargs={"comment_id": self.comment.id}), self.comment_edit, ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Subscribed user (not author of the comment) response = self.client.post( reverse("pedagogy:comment_update", kwargs={"comment_id": self.comment.id}), self.comment_edit, ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Check that the comment hasn't change self.comment.refresh_from_db() - self.assertNotEquals(self.comment.comment, self.comment_edit["comment"]) + self.assertNotEqual(self.comment.comment, self.comment_edit["comment"]) def test_uv_comment_update_original_author_does_not_change(self): self.client.login(username="root", password="plop") @@ -613,8 +613,8 @@ class UVCommentUpdateTest(TestCase): reverse("pedagogy:comment_update", kwargs={"comment_id": self.comment.id}), self.comment_edit, ) - self.assertEquals(response.status_code, 200) - self.assertEquals(self.comment.author, self.krophil) + self.assertEqual(response.status_code, 200) + self.assertEqual(self.comment.author, self.krophil) class UVSearchTest(TestCase): @@ -631,27 +631,27 @@ class UVSearchTest(TestCase): # Test with root user self.client.login(username="root", password="plop") response = self.client.get(reverse("pedagogy:guide")) - self.assertEquals(response.status_code, 200) + self.assertEqual(response.status_code, 200) # Test with pedagogy admin self.client.login(username="tutu", password="plop") response = self.client.get(reverse("pedagogy:guide")) - self.assertEquals(response.status_code, 200) + self.assertEqual(response.status_code, 200) # Test with subscribed user self.client.login(username="sli", password="plop") response = self.client.get(reverse("pedagogy:guide")) - self.assertEquals(response.status_code, 200) + self.assertEqual(response.status_code, 200) def test_get_page_unauthorized_fail(self): # Test with anonymous user response = self.client.get(reverse("pedagogy:guide")) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Test with not subscribed user self.client.login(username="guy", password="plop") response = self.client.get(reverse("pedagogy:guide")) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) def test_search_pa00_success(self): self.client.login(username="sli", password="plop") @@ -833,32 +833,32 @@ class UVModerationFormTest(TestCase): # Test with root self.client.login(username="root", password="plop") response = self.client.get(reverse("pedagogy:moderation")) - self.assertEquals(response.status_code, 200) + self.assertEqual(response.status_code, 200) # Test with pedagogy admin self.client.login(username="tutu", password="plop") response = self.client.get(reverse("pedagogy:moderation")) - self.assertEquals(response.status_code, 200) + self.assertEqual(response.status_code, 200) def test_access_unauthorized_fail(self): # Test with anonymous user response = self.client.get(reverse("pedagogy:moderation")) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Test with unsubscribed user self.client.login(username="guy", password="plop") response = self.client.get(reverse("pedagogy:moderation")) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) # Test with subscribed user self.client.login(username="sli", password="plop") response = self.client.get(reverse("pedagogy:moderation")) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) def test_do_nothing(self): self.client.login(username="root", password="plop") response = self.client.post(reverse("pedagogy:moderation")) - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) # Test that nothing has changed self.assertTrue(UVCommentReport.objects.filter(id=self.report_1.id).exists()) @@ -874,7 +874,7 @@ class UVModerationFormTest(TestCase): response = self.client.post( reverse("pedagogy:moderation"), {"accepted_reports": [self.report_1.id]} ) - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) # Test that the comment and it's associated report has been deleted self.assertFalse(UVCommentReport.objects.filter(id=self.report_1.id).exists()) @@ -894,7 +894,7 @@ class UVModerationFormTest(TestCase): reverse("pedagogy:moderation"), {"accepted_reports": [self.report_1.id, self.report_2.id]}, ) - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) # Test that comments and their associated reports has been deleted self.assertFalse(UVCommentReport.objects.filter(id=self.report_1.id).exists()) @@ -913,7 +913,7 @@ class UVModerationFormTest(TestCase): reverse("pedagogy:moderation"), {"accepted_reports": [self.report_1.id, self.report_1_bis.id]}, ) - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) # Test that the comment and it's associated report has been deleted self.assertFalse(UVCommentReport.objects.filter(id=self.report_1.id).exists()) @@ -928,7 +928,7 @@ class UVModerationFormTest(TestCase): response = self.client.post( reverse("pedagogy:moderation"), {"denied_reports": [self.report_1.id]} ) - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) # Test that the report has been deleted and that the comment still exists self.assertFalse(UVCommentReport.objects.filter(id=self.report_1.id).exists()) @@ -954,7 +954,7 @@ class UVModerationFormTest(TestCase): ] }, ) - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) # Test that every reports has been deleted self.assertFalse(UVCommentReport.objects.filter(id=self.report_1.id).exists()) @@ -976,7 +976,7 @@ class UVModerationFormTest(TestCase): "denied_reports": [self.report_1.id], }, ) - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) # Test that report 2 and his comment has been deleted self.assertFalse(UVCommentReport.objects.filter(id=self.report_2.id).exists()) @@ -1000,7 +1000,7 @@ class UVModerationFormTest(TestCase): "denied_reports": [self.report_1_bis.id], }, ) - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) # Test that report 1 and 1 bis has been deleted self.assertFalse( @@ -1047,10 +1047,10 @@ class UVCommentReportCreateTest(TestCase): }, ) if success: - self.assertEquals(response.status_code, 302) + self.assertEqual(response.status_code, 302) else: - self.assertEquals(response.status_code, 403) - self.assertEquals(UVCommentReport.objects.all().exists(), success) + self.assertEqual(response.status_code, 403) + self.assertEqual(UVCommentReport.objects.all().exists(), success) def test_create_report_root_success(self): self.create_report_test("root", True) @@ -1069,7 +1069,7 @@ class UVCommentReportCreateTest(TestCase): reverse("pedagogy:comment_report", kwargs={"comment_id": self.comment.id}), {"comment": self.comment.id, "reporter": 0, "reason": "C'est moche"}, ) - self.assertEquals(response.status_code, 403) + self.assertEqual(response.status_code, 403) self.assertFalse(UVCommentReport.objects.all().exists()) def test_notifications(self): @@ -1092,7 +1092,7 @@ class UVCommentReportCreateTest(TestCase): # Check that notifications are not duplicated if not viewed self.create_report_test("tutu", True) - self.assertEquals( + self.assertEqual( self.tutu.notifications.filter(type="PEDAGOGY_MODERATION").count(), 1 ) @@ -1103,6 +1103,6 @@ class UVCommentReportCreateTest(TestCase): self.create_report_test("tutu", True) - self.assertEquals( + self.assertEqual( self.tutu.notifications.filter(type="PEDAGOGY_MODERATION").count(), 2 ) From 98bfc308a75b1f1e480125c52e501f02894e84b5 Mon Sep 17 00:00:00 2001 From: Sli Date: Thu, 4 Aug 2022 00:26:43 +0200 Subject: [PATCH 2/5] Minimal working version * Upgrade dependencies * Fix ugettext * Fix bad urls --- .gitignore | 1 - accounting/models.py | 2 +- accounting/views.py | 2 +- club/forms.py | 2 +- club/models.py | 2 +- club/tests.py | 2 +- club/views.py | 4 +- com/models.py | 4 +- com/tests.py | 2 +- com/views.py | 2 +- core/__init__.py | 2 - core/models.py | 2 +- core/scss/processor.py | 2 +- core/urls.py | 6 +- core/views/files.py | 22 +- core/views/forms.py | 34 +- core/views/group.py | 2 +- core/views/user.py | 2 +- counter/__init__.py | 2 - counter/app.py | 2 +- .../0013_customer_recorded_products.py | 2 +- counter/models.py | 2 +- counter/views.py | 2 +- doc/frequent/subscriptions.rst | 2 +- doc/overlay/rights.rst | 4 +- doc/start/translations.rst | 2 +- eboutic/models.py | 2 +- eboutic/views.py | 2 +- election/models.py | 2 +- election/views.py | 2 +- forum/models.py | 2 +- forum/views.py | 2 +- launderette/models.py | 2 +- launderette/views.py | 2 +- matmat/views.py | 2 +- pedagogy/forms.py | 2 +- pedagogy/models.py | 2 +- pedagogy/tests.py | 2 +- poetry.lock | 1370 +++++++++++++++++ pyproject.toml | 14 +- rootplace/views.py | 2 +- sas/models.py | 2 +- sas/views.py | 2 +- sith/settings.py | 4 +- sith/urls.py | 62 +- stock/models.py | 2 +- stock/views.py | 2 +- subscription/models.py | 2 +- subscription/views.py | 2 +- trombi/models.py | 2 +- trombi/views.py | 2 +- 51 files changed, 1479 insertions(+), 126 deletions(-) create mode 100644 poetry.lock diff --git a/.gitignore b/.gitignore index 45f266f8..511f5fbf 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,6 @@ db.sqlite3 *__pycache__* .DS_Store pyrightconfig.json -poetry.lock dist/ .vscode/ env/ diff --git a/accounting/models.py b/accounting/models.py index 54fcb437..285a615a 100644 --- a/accounting/models.py +++ b/accounting/models.py @@ -27,7 +27,7 @@ from django.core.exceptions import ValidationError from django.core import validators from django.db import models from django.conf import settings -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.template import defaultfilters from phonenumber_field.modelfields import PhoneNumberField diff --git a/accounting/views.py b/accounting/views.py index 9f891a09..e3a0f83e 100644 --- a/accounting/views.py +++ b/accounting/views.py @@ -25,7 +25,7 @@ from django.views.generic import ListView, DetailView from django.views.generic.edit import UpdateView, CreateView, DeleteView, FormView from django.urls import reverse_lazy, reverse -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.forms.models import modelform_factory from django.core.exceptions import PermissionDenied, ValidationError from django.forms import HiddenInput diff --git a/club/forms.py b/club/forms.py index 658b343f..a5f63ffe 100644 --- a/club/forms.py +++ b/club/forms.py @@ -25,7 +25,7 @@ from django.conf import settings from django import forms -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from ajax_select.fields import AutoCompleteSelectField, AutoCompleteSelectMultipleField diff --git a/club/models.py b/club/models.py index c4cc75c6..5adc5a53 100644 --- a/club/models.py +++ b/club/models.py @@ -26,7 +26,7 @@ from django.db import models from django.core import validators from django.conf import settings -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.core.exceptions import ValidationError, ObjectDoesNotExist from django.db import transaction from django.urls import reverse diff --git a/club/tests.py b/club/tests.py index 10ccde0c..56bc9155 100644 --- a/club/tests.py +++ b/club/tests.py @@ -25,7 +25,7 @@ from django.conf import settings from django.test import TestCase from django.utils import timezone, html -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ from django.urls import reverse from django.core.management import call_command from django.core.exceptions import ValidationError, NON_FIELD_ERRORS diff --git a/club/views.py b/club/views.py index 574e7b47..5c3d61df 100644 --- a/club/views.py +++ b/club/views.py @@ -39,8 +39,8 @@ from django.http import ( ) from django.urls import reverse, reverse_lazy from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ -from django.utils.translation import ugettext as _t +from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext as _t from django.core.exceptions import PermissionDenied, ValidationError, NON_FIELD_ERRORS from django.core.paginator import Paginator, InvalidPage from django.shortcuts import get_object_or_404, redirect diff --git a/com/models.py b/com/models.py index c5a83b3f..4ac365eb 100644 --- a/com/models.py +++ b/com/models.py @@ -26,11 +26,11 @@ from django.shortcuts import render from django.db import models, transaction from django.db.models import Q -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.utils import timezone from django.urls import reverse from django.conf import settings -from django.contrib.staticfiles.templatetags.staticfiles import static +from django.templatetags.static import static from django.core.mail import EmailMultiAlternatives from django.core.exceptions import ValidationError diff --git a/com/tests.py b/com/tests.py index be47f10d..e0ebfc69 100644 --- a/com/tests.py +++ b/com/tests.py @@ -27,7 +27,7 @@ from django.conf import settings from django.urls import reverse from django.core.management import call_command from django.utils import html -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ from core.models import User, RealGroup diff --git a/com/views.py b/com/views.py index 02ddb50d..1acf1ef2 100644 --- a/com/views.py +++ b/com/views.py @@ -28,7 +28,7 @@ from django.http import HttpResponseRedirect from django.views.generic import ListView, DetailView, View from django.views.generic.edit import UpdateView, CreateView, DeleteView from django.views.generic.detail import SingleObjectMixin -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.urls import reverse, reverse_lazy from django.core.exceptions import ValidationError from django.utils import timezone diff --git a/core/__init__.py b/core/__init__.py index e5fb0a2d..0ace29c4 100644 --- a/core/__init__.py +++ b/core/__init__.py @@ -21,5 +21,3 @@ # Place - Suite 330, Boston, MA 02111-1307, USA. # # - -default_app_config = "core.apps.SithConfig" diff --git a/core/models.py b/core/models.py index 4ead06ed..61f0f3c1 100644 --- a/core/models.py +++ b/core/models.py @@ -34,7 +34,7 @@ from django.contrib.auth.models import ( GroupManager as AuthGroupManager, AnonymousUser as AuthAnonymousUser, ) -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.utils import timezone from django.core import validators from django.core.exceptions import ValidationError, PermissionDenied diff --git a/core/scss/processor.py b/core/scss/processor.py index 8a5c3334..6aa334f2 100644 --- a/core/scss/processor.py +++ b/core/scss/processor.py @@ -25,9 +25,9 @@ import os import sass +from urllib.parse import urljoin from django.utils.encoding import force_bytes, iri_to_uri from django.core.files.base import ContentFile -from django.utils.six.moves.urllib.parse import urljoin from django.templatetags.static import static from django.conf import settings from core.scss.storage import ScssFileStorage, find_file diff --git a/core/urls.py b/core/urls.py index c0441da5..1c2577fc 100644 --- a/core/urls.py +++ b/core/urls.py @@ -23,7 +23,7 @@ # # -from django.urls import re_path +from django.urls import re_path, path from core.views import * @@ -60,8 +60,8 @@ urlpatterns = [ SithPasswordResetDoneView.as_view(), name="password_reset_done", ), - re_path( - r"^reset/(?P[0-9A-Za-z_\-]+)/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$", + path( + r"reset///", SithPasswordResetConfirmView.as_view(), name="password_reset_confirm", ), diff --git a/core/views/files.py b/core/views/files.py index 60f7f7aa..09f117a7 100644 --- a/core/views/files.py +++ b/core/views/files.py @@ -29,7 +29,7 @@ from django.views.generic.edit import UpdateView, FormMixin, DeleteView from django.views.generic.detail import SingleObjectMixin from django.forms.models import modelform_factory from django.conf import settings -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.http import HttpResponse from wsgiref.util import FileWrapper from django.urls import reverse @@ -147,7 +147,7 @@ class FileListView(ListView): def get_context_data(self, **kwargs): kwargs = super(FileListView, self).get_context_data(**kwargs) kwargs["popup"] = "" - if self.kwargs["popup"]: + if self.kwargs.get("popup") is not None: kwargs["popup"] = "popup" return kwargs @@ -165,7 +165,7 @@ class FileEditView(CanEditMixin, UpdateView): return modelform_factory(SithFile, fields=fields) def get_success_url(self): - if self.kwargs["popup"]: + if self.kwargs.get("popup") is not None: return reverse( "core:file_detail", kwargs={"file_id": self.object.id, "popup": "popup"} ) @@ -176,7 +176,7 @@ class FileEditView(CanEditMixin, UpdateView): def get_context_data(self, **kwargs): kwargs = super(FileEditView, self).get_context_data(**kwargs) kwargs["popup"] = "" - if self.kwargs["popup"]: + if self.kwargs.get("popup") is not None: kwargs["popup"] = "popup" return kwargs @@ -217,13 +217,13 @@ class FileEditPropView(CanEditPropMixin, UpdateView): def get_success_url(self): return reverse( "core:file_detail", - kwargs={"file_id": self.object.id, "popup": self.kwargs["popup"] or ""}, + kwargs={"file_id": self.object.id, "popup": self.kwargs.get("popup", "")}, ) def get_context_data(self, **kwargs): kwargs = super(FileEditPropView, self).get_context_data(**kwargs) kwargs["popup"] = "" - if self.kwargs["popup"]: + if self.kwargs.get("popup") is not None: kwargs["popup"] = "popup" return kwargs @@ -301,14 +301,14 @@ class FileView(CanViewMixin, DetailView, FormMixin): def get_success_url(self): return reverse( "core:file_detail", - kwargs={"file_id": self.object.id, "popup": self.kwargs["popup"] or ""}, + kwargs={"file_id": self.object.id, "popup": self.kwargs.get("popup", "")}, ) def get_context_data(self, **kwargs): kwargs = super(FileView, self).get_context_data(**kwargs) kwargs["popup"] = "" kwargs["form"] = self.form - if self.kwargs["popup"]: + if self.kwargs.get("popup") is not None: kwargs["popup"] = "popup" kwargs["clipboard"] = SithFile.objects.filter( id__in=self.request.session["clipboard"] @@ -328,20 +328,20 @@ class FileDeleteView(CanEditPropMixin, DeleteView): return self.request.GET["next"] if self.object.parent is None: return reverse( - "core:file_list", kwargs={"popup": self.kwargs["popup"] or ""} + "core:file_list", kwargs={"popup": self.kwargs.get("popup", "")} ) return reverse( "core:file_detail", kwargs={ "file_id": self.object.parent.id, - "popup": self.kwargs["popup"] or "", + "popup": self.kwargs.get("popup", ""), }, ) def get_context_data(self, **kwargs): kwargs = super(FileDeleteView, self).get_context_data(**kwargs) kwargs["popup"] = "" - if self.kwargs["popup"]: + if self.kwargs.get("popup") is not None: kwargs["popup"] = "popup" return kwargs diff --git a/core/views/forms.py b/core/views/forms.py index 18081e01..13bc48d1 100644 --- a/core/views/forms.py +++ b/core/views/forms.py @@ -37,8 +37,8 @@ from django.forms import ( DateTimeInput, Textarea, ) -from django.utils.translation import ugettext_lazy as _ -from django.utils.translation import ugettext +from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext from phonenumber_field.widgets import PhoneNumberInternationalFallbackWidget from ajax_select.fields import AutoCompleteSelectField from ajax_select import make_ajax_field @@ -118,19 +118,16 @@ class SelectFile(TextInput): attrs["class"] = "select_file" else: attrs = {"class": "select_file"} - output = ( - '%(content)s
' - % { - "content": super(SelectFile, self).render(name, value, attrs, renderer), - "title": _("Choose file"), - "name": name, - } - ) + output = '%(content)s
' % { + "content": super(SelectFile, self).render(name, value, attrs, renderer), + "title": _("Choose file"), + "name": name, + } output += ( '' - + ugettext("Choose file") + + gettext("Choose file") + "" ) return output @@ -142,19 +139,16 @@ class SelectUser(TextInput): attrs["class"] = "select_user" else: attrs = {"class": "select_user"} - output = ( - '%(content)s
' - % { - "content": super(SelectUser, self).render(name, value, attrs, renderer), - "title": _("Choose user"), - "name": name, - } - ) + output = '%(content)s
' % { + "content": super(SelectUser, self).render(name, value, attrs, renderer), + "title": _("Choose user"), + "name": name, + } output += ( '' - + ugettext("Choose user") + + gettext("Choose user") + "" ) return output diff --git a/core/views/group.py b/core/views/group.py index fa394174..662f257e 100644 --- a/core/views/group.py +++ b/core/views/group.py @@ -31,7 +31,7 @@ from django.views.generic import ListView from django.views.generic.edit import FormView from django.urls import reverse_lazy from django.shortcuts import get_object_or_404 -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django import forms from ajax_select.fields import AutoCompleteSelectMultipleField diff --git a/core/views/user.py b/core/views/user.py index aea3de60..ffd867ad 100644 --- a/core/views/user.py +++ b/core/views/user.py @@ -27,7 +27,7 @@ from django.shortcuts import render, redirect, get_object_or_404 from django.contrib.auth import views from django.contrib.auth.forms import PasswordChangeForm -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ from django.urls import reverse from django.core.exceptions import PermissionDenied, ValidationError from django.http import Http404, HttpResponse diff --git a/counter/__init__.py b/counter/__init__.py index 584960bd..5d5acce0 100644 --- a/counter/__init__.py +++ b/counter/__init__.py @@ -22,5 +22,3 @@ # Place - Suite 330, Boston, MA 02111-1307, USA. # # - -default_app_config = "counter.app.CounterConfig" diff --git a/counter/app.py b/counter/app.py index 1e60276c..c1feefe2 100644 --- a/counter/app.py +++ b/counter/app.py @@ -23,7 +23,7 @@ # from django.apps import AppConfig -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class CounterConfig(AppConfig): diff --git a/counter/migrations/0013_customer_recorded_products.py b/counter/migrations/0013_customer_recorded_products.py index 84f5caf5..80f6d94d 100644 --- a/counter/migrations/0013_customer_recorded_products.py +++ b/counter/migrations/0013_customer_recorded_products.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.db import migrations, models from django.conf import settings diff --git a/counter/models.py b/counter/models.py index 064656b3..8523555c 100644 --- a/counter/models.py +++ b/counter/models.py @@ -24,7 +24,7 @@ from sith.settings import SITH_COUNTER_OFFICES, SITH_MAIN_CLUB from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.utils import timezone from django.conf import settings from django.urls import reverse diff --git a/counter/views.py b/counter/views.py index ff2ed6b1..b819322e 100644 --- a/counter/views.py +++ b/counter/views.py @@ -41,7 +41,7 @@ from django.urls import reverse_lazy, reverse from django.http import HttpResponseRedirect, HttpResponse, JsonResponse from django.utils import timezone from django import forms -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.conf import settings from django.db import DataError, transaction, models diff --git a/doc/frequent/subscriptions.rst b/doc/frequent/subscriptions.rst index b73c5de1..c151b35a 100644 --- a/doc/frequent/subscriptions.rst +++ b/doc/frequent/subscriptions.rst @@ -12,7 +12,7 @@ Pour modifier les cotisations disponnibles, tout se gère dans la configuration .. code-block:: python - from django.utils.translation import ugettext_lazy as _ + from django.utils.translation import gettext_lazy as _ SITH_SUBSCRIPTIONS = { # Voici un échantillon de la véritable configuration à l'heure de l'écriture. diff --git a/doc/overlay/rights.rst b/doc/overlay/rights.rst index a7e34e56..1e03f536 100644 --- a/doc/overlay/rights.rst +++ b/doc/overlay/rights.rst @@ -20,7 +20,7 @@ Nous allons présenter ici les deux techniques. Dans un premier temps nous allon from django.db import models from django.conf import settings - from django.utils.translation import ugettext_lazy as _ + from django.utils.translation import gettext_lazy as _ from core.views import * from core.models import User, Group @@ -63,7 +63,7 @@ Voici maintenant comment faire en définissant des fonctions personnalisées. Ce .. code-block:: python from django.db import models - from django.utils.translation import ugettext_lazy as _ + from django.utils.translation import gettext_lazy as _ from core.views import * from core.models import User, Group diff --git a/doc/start/translations.rst b/doc/start/translations.rst index 76aa1c6e..a854518d 100644 --- a/doc/start/translations.rst +++ b/doc/start/translations.rst @@ -14,7 +14,7 @@ Si le mot est dans le code Python : .. sourcecode:: python - from django.utils.translation import ugettext_lazy as _ + from django.utils.translation import gettext_lazy as _ # ... diff --git a/eboutic/models.py b/eboutic/models.py index 4d43ce26..b69f70c0 100644 --- a/eboutic/models.py +++ b/eboutic/models.py @@ -23,7 +23,7 @@ # from django.db import models, DataError -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.utils.functional import cached_property from django.conf import settings diff --git a/eboutic/views.py b/eboutic/views.py index 0124305b..3f2ef6cb 100644 --- a/eboutic/views.py +++ b/eboutic/views.py @@ -33,7 +33,7 @@ from django.views.generic import TemplateView, View from django.http import HttpResponse, HttpResponseRedirect from django.core.exceptions import SuspiciousOperation from django.db import transaction, DataError -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ from django.conf import settings from counter.models import Customer, Counter, ProductType, Selling diff --git a/election/models.py b/election/models.py index 3289c11c..537cc6e9 100644 --- a/election/models.py +++ b/election/models.py @@ -1,6 +1,6 @@ from django.db import models from ordered_model.models import OrderedModel -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.utils import timezone from core.models import User, Group diff --git a/election/views.py b/election/views.py index ad0cdb3e..f36482fa 100644 --- a/election/views.py +++ b/election/views.py @@ -3,7 +3,7 @@ from django.views.generic import ListView, DetailView from django.views.generic.edit import UpdateView, CreateView from django.views.generic.edit import DeleteView, FormView from django.urls import reverse_lazy -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.core.exceptions import PermissionDenied from django.db import transaction from django.forms import CheckboxSelectMultiple diff --git a/forum/models.py b/forum/models.py index d8fefd35..dd8722e9 100644 --- a/forum/models.py +++ b/forum/models.py @@ -24,7 +24,7 @@ from django.db import models from django.conf import settings -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.core.exceptions import ValidationError from django.urls import reverse from django.utils import timezone diff --git a/forum/views.py b/forum/views.py index 9a2f443b..9b75794b 100644 --- a/forum/views.py +++ b/forum/views.py @@ -27,7 +27,7 @@ from django.shortcuts import get_object_or_404 from django.views.generic import ListView, DetailView, RedirectView from django.views.generic.edit import UpdateView, CreateView, DeleteView from django.views.generic.detail import SingleObjectMixin -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.urls import reverse_lazy from django.utils import timezone, html from django.conf import settings diff --git a/launderette/models.py b/launderette/models.py index 14cd4f77..795dd908 100644 --- a/launderette/models.py +++ b/launderette/models.py @@ -23,7 +23,7 @@ # from django.db import models, DataError -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.conf import settings from django.urls import reverse diff --git a/launderette/views.py b/launderette/views.py index a7672102..0387c3d3 100644 --- a/launderette/views.py +++ b/launderette/views.py @@ -28,7 +28,7 @@ import pytz from django.views.generic import ListView, DetailView, TemplateView from django.views.generic.edit import UpdateView, CreateView, DeleteView, BaseFormView -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ from django.utils import dateparse, timezone from django.urls import reverse_lazy from django.conf import settings diff --git a/matmat/views.py b/matmat/views.py index a2d8fff9..10b2d4f5 100644 --- a/matmat/views.py +++ b/matmat/views.py @@ -26,7 +26,7 @@ from enum import Enum from django.views.generic import ListView, View from django.views.generic.edit import FormView -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.views.generic.detail import SingleObjectMixin from django.http.response import HttpResponseRedirect from django.urls import reverse diff --git a/pedagogy/forms.py b/pedagogy/forms.py index 3e0b4fb7..6a3d29ce 100644 --- a/pedagogy/forms.py +++ b/pedagogy/forms.py @@ -23,7 +23,7 @@ # from django import forms -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.forms.widgets import Widget from django.templatetags.static import static diff --git a/pedagogy/models.py b/pedagogy/models.py index f3a8139f..5fa21096 100644 --- a/pedagogy/models.py +++ b/pedagogy/models.py @@ -23,7 +23,7 @@ # from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.utils import timezone from django.core import validators from django.conf import settings diff --git a/pedagogy/tests.py b/pedagogy/tests.py index ce2c8072..a429bf02 100644 --- a/pedagogy/tests.py +++ b/pedagogy/tests.py @@ -25,7 +25,7 @@ from django.conf import settings from django.test import TestCase from django.urls import reverse -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.core.management import call_command from core.models import User, Notification diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..367f7da3 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1370 @@ +[[package]] +name = "alabaster" +version = "0.7.12" +description = "A configurable sidebar-enabled Sphinx theme" +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "appnope" +version = "0.1.3" +description = "Disable App Nap on macOS >= 10.9" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "asgiref" +version = "3.5.2" +description = "ASGI specs, helper code, and adapters" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +tests = ["pytest", "pytest-asyncio", "mypy (>=0.800)"] + +[[package]] +name = "babel" +version = "2.10.3" +description = "Internationalization utilities" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +pytz = ">=2015.7" + +[[package]] +name = "backcall" +version = "0.2.0" +description = "Specifications for callback functions passed in to an API" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "black" +version = "22.6.0" +description = "The uncompromising code formatter." +category = "dev" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "certifi" +version = "2022.6.15" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "cffi" +version = "1.15.1" +description = "Foreign Function Interface for Python calling C code." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "2.1.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = true +python-versions = ">=3.6.0" + +[package.extras] +unicode_backport = ["unicodedata2"] + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.5" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "coverage" +version = "5.5" +description = "Code coverage measurement for Python" +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" + +[package.extras] +toml = ["toml"] + +[[package]] +name = "cryptography" +version = "36.0.2" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cffi = ">=1.12" + +[package.extras] +docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] +docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] +pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] +sdist = ["setuptools_rust (>=0.11.4)"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +category = "dev" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "django" +version = "3.2.15" +description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +asgiref = ">=3.3.2,<4" +pytz = "*" +sqlparse = ">=0.2.2" + +[package.extras] +argon2 = ["argon2-cffi (>=19.1.0)"] +bcrypt = ["bcrypt"] + +[[package]] +name = "django-ajax-selects" +version = "2.2.0" +description = "Edit ForeignKey, ManyToManyField and CharField in Django Admin using jQuery UI AutoComplete." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "django-debug-toolbar" +version = "3.5.0" +description = "A configurable set of panels that display various debug information about the current request/response." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +Django = ">=3.2" +sqlparse = ">=0.2.0" + +[[package]] +name = "django-haystack" +version = "3.2.1" +description = "Pluggable search for Django." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +Django = ">=2.2" + +[package.extras] +elasticsearch = ["elasticsearch (>=5,<8)"] + +[[package]] +name = "django-jinja" +version = "2.10.2" +description = "Jinja2 templating language integrated in Django." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +django = ">=2.2" +jinja2 = ">=3" + +[[package]] +name = "django-ordered-model" +version = "3.6" +description = "Allows Django models to be ordered and provides a simple admin interface for reordering them." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "django-phonenumber-field" +version = "5.2.0" +description = "An international phone number field for django models." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +Django = ">=2.2" + +[package.extras] +phonenumbers = ["phonenumbers (>=7.0.2)"] +phonenumberslite = ["phonenumberslite (>=7.0.2)"] + +[[package]] +name = "django-ranged-response" +version = "0.2.0" +description = "Modified Django FileResponse that adds Content-Range headers." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +django = "*" + +[[package]] +name = "django-simple-captcha" +version = "0.5.17" +description = "A very simple, yet powerful, Django captcha application" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +Django = ">=2.2" +django-ranged-response = "0.2.0" +Pillow = ">=6.2.0" + +[package.extras] +test = ["testfixtures"] + +[[package]] +name = "djangorestframework" +version = "3.13.1" +description = "Web APIs for Django, made easy." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +django = ">=2.2" +pytz = "*" + +[[package]] +name = "docutils" +version = "0.17.1" +description = "Docutils -- Python Documentation Utilities" +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "idna" +version = "3.3" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = true +python-versions = ">=3.5" + +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "importlib-metadata" +version = "4.12.0" +description = "Read metadata from Python packages" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] +perf = ["ipython"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] + +[[package]] +name = "ipython" +version = "7.34.0" +description = "IPython: Productive Interactive Computing" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +appnope = {version = "*", markers = "sys_platform == \"darwin\""} +backcall = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +pickleshare = "*" +prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" +pygments = "*" +traitlets = ">=4.2" + +[package.extras] +all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] +doc = ["Sphinx (>=1.3)"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["notebook", "ipywidgets"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["nose (>=0.10.1)", "requests", "testpath", "pygments", "nbformat", "ipykernel", "numpy (>=1.17)"] + +[[package]] +name = "jedi" +version = "0.18.1" +description = "An autocompletion tool for Python that can be used for text editors." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +parso = ">=0.8.0,<0.9.0" + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "libsass" +version = "0.21.0" +description = "Sass for Python: A straightforward binding of libsass for Python." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +six = "*" + +[[package]] +name = "markupsafe" +version = "2.1.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "matplotlib-inline" +version = "0.1.3" +description = "Inline Matplotlib backend for Jupyter" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +traitlets = "*" + +[[package]] +name = "mistune" +version = "0.8.4" +description = "The fastest markdown parser in pure Python" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "mysqlclient" +version = "2.1.1" +description = "Python interface to MySQL" +category = "main" +optional = true +python-versions = ">=3.5" + +[[package]] +name = "packaging" +version = "21.3" +description = "Core utilities for Python packages" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" + +[[package]] +name = "parso" +version = "0.8.3" +description = "A Python Parser" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["docopt", "pytest (<6.0.0)"] + +[[package]] +name = "pathspec" +version = "0.9.0" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[[package]] +name = "pexpect" +version = "4.8.0" +description = "Pexpect allows easy control of interactive console applications." +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "phonenumbers" +version = "8.12.52" +description = "Python version of Google's common library for parsing, formatting, storing and validating international phone numbers." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pickleshare" +version = "0.7.5" +description = "Tiny 'shelve'-like database with concurrency support" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "pillow" +version = "8.4.0" +description = "Python Imaging Library (Fork)" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "platformdirs" +version = "2.5.2" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] +test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.30" +description = "Library for building powerful interactive command lines in Python" +category = "dev" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "psycopg2-binary" +version = "2.9.3" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pygments" +version = "2.12.0" +description = "Pygments is a syntax highlighting package written in Python." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "pygraphviz" +version = "1.9" +description = "Python interface to Graphviz" +category = "main" +optional = false +python-versions = ">=3.8" + +[[package]] +name = "pyopenssl" +version = "21.0.0" +description = "Python wrapper module around the OpenSSL library" +category = "main" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" + +[package.dependencies] +cryptography = ">=3.3" +six = ">=1.5.2" + +[package.extras] +docs = ["sphinx", "sphinx-rtd-theme"] +test = ["flaky", "pretend", "pytest (>=3.0.1)"] + +[[package]] +name = "pyparsing" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "main" +optional = true +python-versions = ">=3.6.8" + +[package.extras] +diagrams = ["railroad-diagrams", "jinja2"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pytz" +version = "2021.3" +description = "World timezone definitions, modern and historical" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "reportlab" +version = "3.6.9" +description = "The Reportlab Toolkit" +category = "main" +optional = false +python-versions = ">=3.7, <4" + +[package.dependencies] +pillow = ">=4.0.0" + +[package.extras] +rlpycairo = ["rlPyCairo (>=0.0.5)"] + +[[package]] +name = "requests" +version = "2.28.1" +description = "Python HTTP for Humans." +category = "main" +optional = true +python-versions = ">=3.7, <4" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<3" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "sentry-sdk" +version = "1.9.0" +description = "Python client for Sentry (https://sentry.io)" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +certifi = "*" +urllib3 = ">=1.10.0" + +[package.extras] +aiohttp = ["aiohttp (>=3.5)"] +beam = ["apache-beam (>=2.12)"] +bottle = ["bottle (>=0.12.13)"] +celery = ["celery (>=3)"] +chalice = ["chalice (>=1.16.0)"] +django = ["django (>=1.8)"] +falcon = ["falcon (>=1.4)"] +fastapi = ["fastapi (>=0.79.0)"] +flask = ["flask (>=0.11)", "blinker (>=1.1)"] +httpx = ["httpx (>=0.16.0)"] +pure_eval = ["pure-eval", "executing", "asttokens"] +pyspark = ["pyspark (>=2.4.4)"] +quart = ["quart (>=0.16.1)", "blinker (>=1.1)"] +rq = ["rq (>=0.6)"] +sanic = ["sanic (>=0.8)"] +sqlalchemy = ["sqlalchemy (>=1.2)"] +starlette = ["starlette (>=0.19.1)"] +tornado = ["tornado (>=5)"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "sphinx" +version = "4.5.0" +description = "Python documentation generator" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=1.3" +colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.14,<0.18" +imagesize = "*" +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} +Jinja2 = ">=2.3" +packaging = "*" +Pygments = ">=2.0" +requests = ">=2.5.0" +snowballstemmer = ">=1.1" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.931)", "docutils-stubs", "types-typed-ast", "types-requests"] +test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"] + +[[package]] +name = "sphinx-copybutton" +version = "0.4.0" +description = "Add a copy button to each of your code cells." +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +sphinx = ">=1.8" + +[package.extras] +code_style = ["pre-commit (==2.12.1)"] +rtd = ["sphinx", "ipython", "sphinx-book-theme"] + +[[package]] +name = "sphinx-rtd-theme" +version = "1.0.0" +description = "Read the Docs theme for Sphinx" +category = "main" +optional = true +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" + +[package.dependencies] +docutils = "<0.18" +sphinx = ">=1.6" + +[package.extras] +dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.2" +description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" +category = "main" +optional = true +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "main" +optional = true +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.0" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest", "html5lib"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "main" +optional = true +python-versions = ">=3.5" + +[package.extras] +test = ["pytest", "flake8", "mypy"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "main" +optional = true +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "main" +optional = true +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sqlparse" +version = "0.4.2" +description = "A non-validating SQL parser." +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "traitlets" +version = "5.3.0" +description = "" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +test = ["pre-commit", "pytest"] + +[[package]] +name = "typing-extensions" +version = "4.3.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "urllib3" +version = "1.26.11" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" + +[package.extras] +brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "wcwidth" +version = "0.2.5" +description = "Measures the displayed width of unicode strings in a terminal" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "xapian-bindings" +version = "0.1.0" +description = "Meta-package to build and install xapian-bindings extension." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "xapian-haystack" +version = "3.0.1" +description = "A Xapian backend for Haystack" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +django = ">=2.2" +django-haystack = ">=2.8.0" + +[[package]] +name = "zipp" +version = "3.8.1" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] + +[extras] +docs = ["Sphinx", "sphinx-rtd-theme", "sphinx-copybutton"] +migration = ["mysqlclient"] +testing = ["coverage"] + +[metadata] +lock-version = "1.1" +python-versions = "^3.8" +content-hash = "e22554098eee12752a944794d2436b38b69efc0803794a68c16419dd1af65471" + +[metadata.files] +alabaster = [ + {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, + {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, +] +appnope = [] +asgiref = [] +babel = [] +backcall = [ + {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, + {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, +] +black = [] +certifi = [] +cffi = [] +charset-normalizer = [] +click = [] +colorama = [] +coverage = [ + {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, + {file = "coverage-5.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b"}, + {file = "coverage-5.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669"}, + {file = "coverage-5.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90"}, + {file = "coverage-5.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c"}, + {file = "coverage-5.5-cp27-cp27m-win32.whl", hash = "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a"}, + {file = "coverage-5.5-cp27-cp27m-win_amd64.whl", hash = "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81"}, + {file = "coverage-5.5-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6"}, + {file = "coverage-5.5-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0"}, + {file = "coverage-5.5-cp310-cp310-win_amd64.whl", hash = "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae"}, + {file = "coverage-5.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb"}, + {file = "coverage-5.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160"}, + {file = "coverage-5.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6"}, + {file = "coverage-5.5-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701"}, + {file = "coverage-5.5-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793"}, + {file = "coverage-5.5-cp35-cp35m-win32.whl", hash = "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e"}, + {file = "coverage-5.5-cp35-cp35m-win_amd64.whl", hash = "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3"}, + {file = "coverage-5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066"}, + {file = "coverage-5.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a"}, + {file = "coverage-5.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465"}, + {file = "coverage-5.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb"}, + {file = "coverage-5.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821"}, + {file = "coverage-5.5-cp36-cp36m-win32.whl", hash = "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45"}, + {file = "coverage-5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184"}, + {file = "coverage-5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a"}, + {file = "coverage-5.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53"}, + {file = "coverage-5.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d"}, + {file = "coverage-5.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638"}, + {file = "coverage-5.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3"}, + {file = "coverage-5.5-cp37-cp37m-win32.whl", hash = "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a"}, + {file = "coverage-5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a"}, + {file = "coverage-5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6"}, + {file = "coverage-5.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2"}, + {file = "coverage-5.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759"}, + {file = "coverage-5.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873"}, + {file = "coverage-5.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a"}, + {file = "coverage-5.5-cp38-cp38-win32.whl", hash = "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6"}, + {file = "coverage-5.5-cp38-cp38-win_amd64.whl", hash = "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502"}, + {file = "coverage-5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b"}, + {file = "coverage-5.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529"}, + {file = "coverage-5.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b"}, + {file = "coverage-5.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff"}, + {file = "coverage-5.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b"}, + {file = "coverage-5.5-cp39-cp39-win32.whl", hash = "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6"}, + {file = "coverage-5.5-cp39-cp39-win_amd64.whl", hash = "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03"}, + {file = "coverage-5.5-pp36-none-any.whl", hash = "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079"}, + {file = "coverage-5.5-pp37-none-any.whl", hash = "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4"}, + {file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"}, +] +cryptography = [ + {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:4e2dddd38a5ba733be6a025a1475a9f45e4e41139d1321f412c6b360b19070b6"}, + {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:4881d09298cd0b669bb15b9cfe6166f16fc1277b4ed0d04a22f3d6430cb30f1d"}, + {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea634401ca02367c1567f012317502ef3437522e2fc44a3ea1844de028fa4b84"}, + {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7be666cc4599b415f320839e36367b273db8501127b38316f3b9f22f17a0b815"}, + {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8241cac0aae90b82d6b5c443b853723bcc66963970c67e56e71a2609dc4b5eaf"}, + {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b2d54e787a884ffc6e187262823b6feb06c338084bbe80d45166a1cb1c6c5bf"}, + {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:c2c5250ff0d36fd58550252f54915776940e4e866f38f3a7866d92b32a654b86"}, + {file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ec6597aa85ce03f3e507566b8bcdf9da2227ec86c4266bd5e6ab4d9e0cc8dab2"}, + {file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ca9f686517ec2c4a4ce930207f75c00bf03d94e5063cbc00a1dc42531511b7eb"}, + {file = "cryptography-36.0.2-cp36-abi3-win32.whl", hash = "sha256:f64b232348ee82f13aac22856515ce0195837f6968aeaa94a3d0353ea2ec06a6"}, + {file = "cryptography-36.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:53e0285b49fd0ab6e604f4c5d9c5ddd98de77018542e88366923f152dbeb3c29"}, + {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:32db5cc49c73f39aac27574522cecd0a4bb7384e71198bc65a0d23f901e89bb7"}, + {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b3d199647468d410994dbeb8cec5816fb74feb9368aedf300af709ef507e3e"}, + {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:da73d095f8590ad437cd5e9faf6628a218aa7c387e1fdf67b888b47ba56a17f0"}, + {file = "cryptography-36.0.2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:0a3bf09bb0b7a2c93ce7b98cb107e9170a90c51a0162a20af1c61c765b90e60b"}, + {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8897b7b7ec077c819187a123174b645eb680c13df68354ed99f9b40a50898f77"}, + {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82740818f2f240a5da8dfb8943b360e4f24022b093207160c77cadade47d7c85"}, + {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1f64a62b3b75e4005df19d3b5235abd43fa6358d5516cfc43d87aeba8d08dd51"}, + {file = "cryptography-36.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e167b6b710c7f7bc54e67ef593f8731e1f45aa35f8a8a7b72d6e42ec76afd4b3"}, + {file = "cryptography-36.0.2.tar.gz", hash = "sha256:70f8f4f7bb2ac9f340655cbac89d68c527af5bb4387522a8413e841e3e6628c9"}, +] +decorator = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] +django = [] +django-ajax-selects = [] +django-debug-toolbar = [] +django-haystack = [] +django-jinja = [] +django-ordered-model = [] +django-phonenumber-field = [ + {file = "django-phonenumber-field-5.2.0.tar.gz", hash = "sha256:52b2e5970133ec5ab701218b802f7ab237229854dc95fd239b7e9e77dc43731d"}, + {file = "django_phonenumber_field-5.2.0-py3-none-any.whl", hash = "sha256:5547fb2b2cc690a306ba77a5038419afc8fa8298a486fb7895008e9067cc7e75"}, +] +django-ranged-response = [ + {file = "django-ranged-response-0.2.0.tar.gz", hash = "sha256:f71fff352a37316b9bead717fc76e4ddd6c9b99c4680cdf4783b9755af1cf985"}, +] +django-simple-captcha = [ + {file = "django-simple-captcha-0.5.17.tar.gz", hash = "sha256:9649e66dab4e71efacbfef02f48b83b91684898352a1ab56f1686ce71033b328"}, + {file = "django_simple_captcha-0.5.17-py2.py3-none-any.whl", hash = "sha256:f9a07e5e9de264ba4039c9eaad66bc48188a21ceda5fcdc2fa13c5512141c2c9"}, +] +djangorestframework = [ + {file = "djangorestframework-3.13.1-py3-none-any.whl", hash = "sha256:24c4bf58ed7e85d1fe4ba250ab2da926d263cd57d64b03e8dcef0ac683f8b1aa"}, + {file = "djangorestframework-3.13.1.tar.gz", hash = "sha256:0c33407ce23acc68eca2a6e46424b008c9c02eceb8cf18581921d0092bc1f2ee"}, +] +docutils = [ + {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, + {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, +] +idna = [ + {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, + {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, +] +imagesize = [] +importlib-metadata = [] +ipython = [] +jedi = [ + {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, + {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, +] +jinja2 = [] +libsass = [ + {file = "libsass-0.21.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:06c8776417fe930714bdc930a3d7e795ae3d72be6ac883ff72a1b8f7c49e5ffb"}, + {file = "libsass-0.21.0-cp27-cp27m-win32.whl", hash = "sha256:a005f298f64624f313a3ac618ab03f844c71d84ae4f4a4aec4b68d2a4ffe75eb"}, + {file = "libsass-0.21.0-cp27-cp27m-win_amd64.whl", hash = "sha256:6b984510ed94993708c0d697b4fef2d118929bbfffc3b90037be0f5ccadf55e7"}, + {file = "libsass-0.21.0-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e25dd9047a9392d3c59a0b869e0404f2b325a03871ee45285ee33b3664f5613"}, + {file = "libsass-0.21.0-cp36-abi3-macosx_10_14_x86_64.whl", hash = "sha256:12f39712de38689a8b785b7db41d3ba2ea1d46f9379d81ea4595802d91fa6529"}, + {file = "libsass-0.21.0-cp36-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e2b1a7d093f2e76dc694c17c0c285e846d0b0deb0e8b21dc852ba1a3a4e2f1d6"}, + {file = "libsass-0.21.0-cp36-abi3-win32.whl", hash = "sha256:abc29357ee540849faf1383e1746d40d69ed5cb6d4c346df276b258f5aa8977a"}, + {file = "libsass-0.21.0-cp36-abi3-win_amd64.whl", hash = "sha256:659ae41af8708681fa3ec73f47b9735a6725e71c3b66ff570bfce78952f2314e"}, + {file = "libsass-0.21.0.tar.gz", hash = "sha256:d5ba529d9ce668be9380563279f3ffe988f27bc5b299c5a28453df2e0b0fbaf2"}, +] +markupsafe = [ + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, +] +matplotlib-inline = [ + {file = "matplotlib-inline-0.1.3.tar.gz", hash = "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee"}, + {file = "matplotlib_inline-0.1.3-py3-none-any.whl", hash = "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c"}, +] +mistune = [ + {file = "mistune-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"}, + {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, +] +mypy-extensions = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] +mysqlclient = [] +packaging = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] +parso = [ + {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, + {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, +] +pathspec = [ + {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, + {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, +] +pexpect = [ + {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, + {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, +] +phonenumbers = [] +pickleshare = [ + {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, + {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, +] +pillow = [ + {file = "Pillow-8.4.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:81f8d5c81e483a9442d72d182e1fb6dcb9723f289a57e8030811bac9ea3fef8d"}, + {file = "Pillow-8.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3f97cfb1e5a392d75dd8b9fd274d205404729923840ca94ca45a0af57e13dbe6"}, + {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb9fc393f3c61f9054e1ed26e6fe912c7321af2f41ff49d3f83d05bacf22cc78"}, + {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d82cdb63100ef5eedb8391732375e6d05993b765f72cb34311fab92103314649"}, + {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc1afda735a8d109007164714e73771b499768b9bb5afcbbee9d0ff374b43f"}, + {file = "Pillow-8.4.0-cp310-cp310-win32.whl", hash = "sha256:e3dacecfbeec9a33e932f00c6cd7996e62f53ad46fbe677577394aaa90ee419a"}, + {file = "Pillow-8.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:620582db2a85b2df5f8a82ddeb52116560d7e5e6b055095f04ad828d1b0baa39"}, + {file = "Pillow-8.4.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:1bc723b434fbc4ab50bb68e11e93ce5fb69866ad621e3c2c9bdb0cd70e345f55"}, + {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72cbcfd54df6caf85cc35264c77ede902452d6df41166010262374155947460c"}, + {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70ad9e5c6cb9b8487280a02c0ad8a51581dcbbe8484ce058477692a27c151c0a"}, + {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25a49dc2e2f74e65efaa32b153527fc5ac98508d502fa46e74fa4fd678ed6645"}, + {file = "Pillow-8.4.0-cp36-cp36m-win32.whl", hash = "sha256:93ce9e955cc95959df98505e4608ad98281fff037350d8c2671c9aa86bcf10a9"}, + {file = "Pillow-8.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2e4440b8f00f504ee4b53fe30f4e381aae30b0568193be305256b1462216feff"}, + {file = "Pillow-8.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8c803ac3c28bbc53763e6825746f05cc407b20e4a69d0122e526a582e3b5e153"}, + {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8a17b5d948f4ceeceb66384727dde11b240736fddeda54ca740b9b8b1556b29"}, + {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1394a6ad5abc838c5cd8a92c5a07535648cdf6d09e8e2d6df916dfa9ea86ead8"}, + {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:792e5c12376594bfcb986ebf3855aa4b7c225754e9a9521298e460e92fb4a488"}, + {file = "Pillow-8.4.0-cp37-cp37m-win32.whl", hash = "sha256:d99ec152570e4196772e7a8e4ba5320d2d27bf22fdf11743dd882936ed64305b"}, + {file = "Pillow-8.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7b7017b61bbcdd7f6363aeceb881e23c46583739cb69a3ab39cb384f6ec82e5b"}, + {file = "Pillow-8.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:d89363f02658e253dbd171f7c3716a5d340a24ee82d38aab9183f7fdf0cdca49"}, + {file = "Pillow-8.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a0956fdc5defc34462bb1c765ee88d933239f9a94bc37d132004775241a7585"}, + {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b7bb9de00197fb4261825c15551adf7605cf14a80badf1761d61e59da347779"}, + {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72b9e656e340447f827885b8d7a15fc8c4e68d410dc2297ef6787eec0f0ea409"}, + {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5a4532a12314149d8b4e4ad8ff09dde7427731fcfa5917ff16d0291f13609df"}, + {file = "Pillow-8.4.0-cp38-cp38-win32.whl", hash = "sha256:82aafa8d5eb68c8463b6e9baeb4f19043bb31fefc03eb7b216b51e6a9981ae09"}, + {file = "Pillow-8.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:066f3999cb3b070a95c3652712cffa1a748cd02d60ad7b4e485c3748a04d9d76"}, + {file = "Pillow-8.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:5503c86916d27c2e101b7f71c2ae2cddba01a2cf55b8395b0255fd33fa4d1f1a"}, + {file = "Pillow-8.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4acc0985ddf39d1bc969a9220b51d94ed51695d455c228d8ac29fcdb25810e6e"}, + {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b052a619a8bfcf26bd8b3f48f45283f9e977890263e4571f2393ed8898d331b"}, + {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:493cb4e415f44cd601fcec11c99836f707bb714ab03f5ed46ac25713baf0ff20"}, + {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8831cb7332eda5dc89b21a7bce7ef6ad305548820595033a4b03cf3091235ed"}, + {file = "Pillow-8.4.0-cp39-cp39-win32.whl", hash = "sha256:5e9ac5f66616b87d4da618a20ab0a38324dbe88d8a39b55be8964eb520021e02"}, + {file = "Pillow-8.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:3eb1ce5f65908556c2d8685a8f0a6e989d887ec4057326f6c22b24e8a172c66b"}, + {file = "Pillow-8.4.0-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ddc4d832a0f0b4c52fff973a0d44b6c99839a9d016fe4e6a1cb8f3eea96479c2"}, + {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3e5ddc44c14042f0844b8cf7d2cd455f6cc80fd7f5eefbe657292cf601d9ad"}, + {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c70e94281588ef053ae8998039610dbd71bc509e4acbc77ab59d7d2937b10698"}, + {file = "Pillow-8.4.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:3862b7256046fcd950618ed22d1d60b842e3a40a48236a5498746f21189afbbc"}, + {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4901622493f88b1a29bd30ec1a2f683782e57c3c16a2dbc7f2595ba01f639df"}, + {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c471a734240653a0ec91dec0996696eea227eafe72a33bd06c92697728046b"}, + {file = "Pillow-8.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:244cf3b97802c34c41905d22810846802a3329ddcb93ccc432870243211c79fc"}, + {file = "Pillow-8.4.0.tar.gz", hash = "sha256:b8e2f83c56e141920c39464b852de3719dfbfb6e3c99a2d8da0edf4fb33176ed"}, +] +platformdirs = [] +prompt-toolkit = [] +psycopg2-binary = [ + {file = "psycopg2-binary-2.9.3.tar.gz", hash = "sha256:761df5313dc15da1502b21453642d7599d26be88bff659382f8f9747c7ebea4e"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:539b28661b71da7c0e428692438efbcd048ca21ea81af618d845e06ebfd29478"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e82d38390a03da28c7985b394ec3f56873174e2c88130e6966cb1c946508e65"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57804fc02ca3ce0dbfbef35c4b3a4a774da66d66ea20f4bda601294ad2ea6092"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:083a55275f09a62b8ca4902dd11f4b33075b743cf0d360419e2051a8a5d5ff76"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_24_ppc64le.whl", hash = "sha256:0a29729145aaaf1ad8bafe663131890e2111f13416b60e460dae0a96af5905c9"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a79d622f5206d695d7824cbf609a4f5b88ea6d6dab5f7c147fc6d333a8787e4"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:090f3348c0ab2cceb6dfbe6bf721ef61262ddf518cd6cc6ecc7d334996d64efa"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a9e1f75f96ea388fbcef36c70640c4efbe4650658f3d6a2967b4cc70e907352e"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c3ae8e75eb7160851e59adc77b3a19a976e50622e44fd4fd47b8b18208189d42"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-win32.whl", hash = "sha256:7b1e9b80afca7b7a386ef087db614faebbf8839b7f4db5eb107d0f1a53225029"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:8b344adbb9a862de0c635f4f0425b7958bf5a4b927c8594e6e8d261775796d53"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:e847774f8ffd5b398a75bc1c18fbb56564cda3d629fe68fd81971fece2d3c67e"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68641a34023d306be959101b345732360fc2ea4938982309b786f7be1b43a4a1"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3303f8807f342641851578ee7ed1f3efc9802d00a6f83c101d21c608cb864460"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_24_aarch64.whl", hash = "sha256:e3699852e22aa68c10de06524a3721ade969abf382da95884e6a10ff798f9281"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_24_ppc64le.whl", hash = "sha256:526ea0378246d9b080148f2d6681229f4b5964543c170dd10bf4faaab6e0d27f"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b1c8068513f5b158cf7e29c43a77eb34b407db29aca749d3eb9293ee0d3103ca"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:15803fa813ea05bef089fa78835118b5434204f3a17cb9f1e5dbfd0b9deea5af"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:152f09f57417b831418304c7f30d727dc83a12761627bb826951692cc6491e57"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:404224e5fef3b193f892abdbf8961ce20e0b6642886cfe1fe1923f41aaa75c9d"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-win32.whl", hash = "sha256:1f6b813106a3abdf7b03640d36e24669234120c72e91d5cbaeb87c5f7c36c65b"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:2d872e3c9d5d075a2e104540965a1cf898b52274a5923936e5bfddb58c59c7c2"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:10bb90fb4d523a2aa67773d4ff2b833ec00857f5912bafcfd5f5414e45280fb1"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a52ecab70af13e899f7847b3e074eeb16ebac5615665db33bce8a1009cf33"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a29b3ca4ec9defec6d42bf5feb36bb5817ba3c0230dd83b4edf4bf02684cd0ae"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:12b11322ea00ad8db8c46f18b7dfc47ae215e4df55b46c67a94b4effbaec7094"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_24_ppc64le.whl", hash = "sha256:53293533fcbb94c202b7c800a12c873cfe24599656b341f56e71dd2b557be063"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c381bda330ddf2fccbafab789d83ebc6c53db126e4383e73794c74eedce855ef"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d29409b625a143649d03d0fd7b57e4b92e0ecad9726ba682244b73be91d2fdb"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:183a517a3a63503f70f808b58bfbf962f23d73b6dccddae5aa56152ef2bcb232"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:15c4e4cfa45f5a60599d9cec5f46cd7b1b29d86a6390ec23e8eebaae84e64554"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-win32.whl", hash = "sha256:adf20d9a67e0b6393eac162eb81fb10bc9130a80540f4df7e7355c2dd4af9fba"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2f9ffd643bc7349eeb664eba8864d9e01f057880f510e4681ba40a6532f93c71"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:def68d7c21984b0f8218e8a15d514f714d96904265164f75f8d3a70f9c295667"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dffc08ca91c9ac09008870c9eb77b00a46b3378719584059c034b8945e26b272"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:280b0bb5cbfe8039205c7981cceb006156a675362a00fe29b16fbc264e242834"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:af9813db73395fb1fc211bac696faea4ca9ef53f32dc0cfa27e4e7cf766dcf24"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_24_ppc64le.whl", hash = "sha256:63638d875be8c2784cfc952c9ac34e2b50e43f9f0a0660b65e2a87d656b3116c"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ffb7a888a047696e7f8240d649b43fb3644f14f0ee229077e7f6b9f9081635bd"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0c9d5450c566c80c396b7402895c4369a410cab5a82707b11aee1e624da7d004"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:d1c1b569ecafe3a69380a94e6ae09a4789bbb23666f3d3a08d06bbd2451f5ef1"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8fc53f9af09426a61db9ba357865c77f26076d48669f2e1bb24d85a22fb52307"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-win32.whl", hash = "sha256:6472a178e291b59e7f16ab49ec8b4f3bdada0a879c68d3817ff0963e722a82ce"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:35168209c9d51b145e459e05c31a9eaeffa9a6b0fd61689b48e07464ffd1a83e"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:47133f3f872faf28c1e87d4357220e809dfd3fa7c64295a4a148bcd1e6e34ec9"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91920527dea30175cc02a1099f331aa8c1ba39bf8b7762b7b56cbf54bc5cce42"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887dd9aac71765ac0d0bac1d0d4b4f2c99d5f5c1382d8b770404f0f3d0ce8a39"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:1f14c8b0942714eb3c74e1e71700cbbcb415acbc311c730370e70c578a44a25c"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_24_ppc64le.whl", hash = "sha256:7af0dd86ddb2f8af5da57a976d27cd2cd15510518d582b478fbb2292428710b4"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93cd1967a18aa0edd4b95b1dfd554cf15af657cb606280996d393dadc88c3c35"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bda845b664bb6c91446ca9609fc69f7db6c334ec5e4adc87571c34e4f47b7ddb"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:01310cf4cf26db9aea5158c217caa92d291f0500051a6469ac52166e1a16f5b7"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:99485cab9ba0fa9b84f1f9e1fef106f44a46ef6afdeec8885e0b88d0772b49e8"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-win32.whl", hash = "sha256:46f0e0a6b5fa5851bbd9ab1bc805eef362d3a230fbdfbc209f4a236d0a7a990d"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:accfe7e982411da3178ec690baaceaad3c278652998b2c45828aaac66cd8285f"}, +] +ptyprocess = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] +pycparser = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] +pygments = [] +pygraphviz = [] +pyopenssl = [ + {file = "pyOpenSSL-21.0.0-py2.py3-none-any.whl", hash = "sha256:8935bd4920ab9abfebb07c41a4f58296407ed77f04bd1a92914044b848ba1ed6"}, + {file = "pyOpenSSL-21.0.0.tar.gz", hash = "sha256:5e2d8c5e46d0d865ae933bef5230090bdaf5506281e9eec60fa250ee80600cb3"}, +] +pyparsing = [] +python-dateutil = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] +pytz = [ + {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"}, + {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, +] +reportlab = [ + {file = "reportlab-3.6.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4ba8eebfa4383e4680d6e7e6dba9c45c1fe19bbc0a754db4d84823f1a9511e56"}, + {file = "reportlab-3.6.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37dda88dbe16dd3f4f9039464637cce66e462c0b95e5763dbd45ac5799136d3a"}, + {file = "reportlab-3.6.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10681d89a0ca37bb4036283fb8c0efac9ac1b22265dbdf350bda0448be33e00c"}, + {file = "reportlab-3.6.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cebd0b28a0e875a9ce789514700f80659269ecf2a8fcef0aa10b8ae52b40474a"}, + {file = "reportlab-3.6.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ec84055cf2c83783958b74eadf0e577eb0cd9088c8b5d536e9ddc0f4a9f8c70"}, + {file = "reportlab-3.6.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:90f74627cafecf3924741ab8b0690a19df4214eb56b1cfce2dc74a15c9744034"}, + {file = "reportlab-3.6.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2c2fd861f10b2cd49ccf29a31da9ad5c3b95aa437804e4fd0351ed4eb695f74"}, + {file = "reportlab-3.6.9-cp310-cp310-win32.whl", hash = "sha256:e492e87886423192af1fafde23907bcd9d2fdccfc22f67e18aa5c73db3a380a3"}, + {file = "reportlab-3.6.9-cp310-cp310-win_amd64.whl", hash = "sha256:d1bf9455aff37beb421a4447d89d6dd77bb46f677c0bab4eb0272cdb79faad2f"}, + {file = "reportlab-3.6.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0a7f2b7232c3ffb451b649d55c51a6dd0c8104ad7bbcfe355addf7619705e7fa"}, + {file = "reportlab-3.6.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1967dbc9930917d75c39784712a137d432dbc2e5ca9e132a2453319c2619ccff"}, + {file = "reportlab-3.6.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32a5c5cd9625a40feec956f460355b4813bc3187c4f8dc9efd9f1a7f8f854e34"}, + {file = "reportlab-3.6.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cb82b6d14ad4bd915acacc8f114c6a7bab8b9b1503cabb930e433ebd320f90c"}, + {file = "reportlab-3.6.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e767cf4507ca8eed7dde8511f0889b0f19f160a2bdf9ef07742b2aaeceed9f2"}, + {file = "reportlab-3.6.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a114761ad3ba6e0cdfacf14a8fb2cb8f5713b115ca1f0c17f3cd638d0a5b4bd"}, + {file = "reportlab-3.6.9-cp37-cp37m-win32.whl", hash = "sha256:bbaab798991863952c593c0459dcb82e0aade837675593310e13cba2ce7fb45a"}, + {file = "reportlab-3.6.9-cp37-cp37m-win_amd64.whl", hash = "sha256:ab1ffe4ec7be99ad348791116d436610afdc7a9a02a968997f31eaa62eaadad8"}, + {file = "reportlab-3.6.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:496f42840604255ce06777bc129048b3bab966213bbac4f07fbe4ceb6a2e0482"}, + {file = "reportlab-3.6.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a441afdfe31870b964bccde042d7172ed3c0077f519bbf3ed7d9d34c406b6b91"}, + {file = "reportlab-3.6.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fbe23ac870adf90544d2014c572dba6ec4d772afad6505bb91f171ddad12839"}, + {file = "reportlab-3.6.9-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de724c78f4eb1363b1195dce85a2a8806e7509b69ac5c842a714d942ea534d63"}, + {file = "reportlab-3.6.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:713574da534b6ce73d884f1574c35a565e438af4888fcc75e752f1de02e356a7"}, + {file = "reportlab-3.6.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:193671445b4885128d8800d3e416eb2fa4fd89bafae08cc9889c0752fe5ad8c2"}, + {file = "reportlab-3.6.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff0e014a3a3fe286c642ef51213c41684a156b9ed293ef205e8890bc1dbbfdc7"}, + {file = "reportlab-3.6.9-cp38-cp38-win32.whl", hash = "sha256:23f5aed2d212096f2fe95d56f868d63f839a08bf7e389237e644d93981274222"}, + {file = "reportlab-3.6.9-cp38-cp38-win_amd64.whl", hash = "sha256:09b2ca175129a34292399fc4c6a8b1739f6c5946368fcaa6f931d69385b2f720"}, + {file = "reportlab-3.6.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cb21666fc9edec9716553bfcfe0c30d1bbbe2731910a96f07ec65652974e5f83"}, + {file = "reportlab-3.6.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d927bf802bf53c1b5a3878a22e9be310900877984e7c436a3a99bdd19cfec4c3"}, + {file = "reportlab-3.6.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce3a3aad287c8532f62223f5720b5504e31abe3dce52a27bd2a25f508c0d846e"}, + {file = "reportlab-3.6.9-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9a5f63bc381c0f945402ef4c1bccc74a8eed28f6be6596704b1db7d82ec89fe"}, + {file = "reportlab-3.6.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50f8e30f5410efc69b0217261b1f21912888da392a4549e79c7aaaac85f01bfa"}, + {file = "reportlab-3.6.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15294435f786968bcdf1a7a67bcc23a136470b6ea26919497f5c76ff0f653041"}, + {file = "reportlab-3.6.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9b5e9115363545a727d8ebe7e4b94f7cf6f26113261a269d50d88b8db4eb726"}, + {file = "reportlab-3.6.9-cp39-cp39-win32.whl", hash = "sha256:e1fc1b1f5d9d1c2e18b5e60602dfa7854b2330ba0efc312ef605abf588abea9c"}, + {file = "reportlab-3.6.9-cp39-cp39-win_amd64.whl", hash = "sha256:92a6613af9877e3ad2a1c5a16a122514a4f9f8d9b91b1f22e7fa0fa796617b36"}, + {file = "reportlab-3.6.9.tar.gz", hash = "sha256:5d0cc3682456ad213150f6dbffe7d47eab737d809e517c316103376be548fb84"}, +] +requests = [] +sentry-sdk = [] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +snowballstemmer = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] +sphinx = [] +sphinx-copybutton = [ + {file = "sphinx-copybutton-0.4.0.tar.gz", hash = "sha256:8daed13a87afd5013c3a9af3575cc4d5bec052075ccd3db243f895c07a689386"}, + {file = "sphinx_copybutton-0.4.0-py3-none-any.whl", hash = "sha256:4340d33c169dac6dd82dce2c83333412aa786a42dd01a81a8decac3b130dc8b0"}, +] +sphinx-rtd-theme = [ + {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"}, + {file = "sphinx_rtd_theme-1.0.0.tar.gz", hash = "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c"}, +] +sphinxcontrib-applehelp = [ + {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, + {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, +] +sphinxcontrib-devhelp = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] +sphinxcontrib-htmlhelp = [ + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, +] +sphinxcontrib-jsmath = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] +sphinxcontrib-qthelp = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] +sphinxcontrib-serializinghtml = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] +sqlparse = [ + {file = "sqlparse-0.4.2-py3-none-any.whl", hash = "sha256:48719e356bb8b42991bdbb1e8b83223757b93789c00910a616a071910ca4a64d"}, + {file = "sqlparse-0.4.2.tar.gz", hash = "sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae"}, +] +tomli = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] +traitlets = [] +typing-extensions = [] +urllib3 = [] +wcwidth = [ + {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, + {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, +] +xapian-bindings = [ + {file = "xapian-bindings-0.1.0.tar.gz", hash = "sha256:f2b0396082ebf4f6681ab43d6d8fd1f63b6964b18c32c91236ed067c6f62ad14"}, +] +xapian-haystack = [] +zipp = [] diff --git a/pyproject.toml b/pyproject.toml index fe92876b..bc71cdd1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,29 +20,29 @@ license = "GPL-3.0-only" [tool.poetry.dependencies] python = "^3.8" -Django = "^2.2" +Django = "^3.2" Pillow = "^8.3.2" mistune = "^0.8.4" -django-jinja = "^2.9.1" +django-jinja = "^2.10" cryptography = "36.0.2" pyOpenSSL = "^21.0.0" pytz = "^2021.1" -djangorestframework = "^3.12.4" +djangorestframework = "^3.13" django-phonenumber-field = "^5.2.0" phonenumbers = "^8.12.33" django-ajax-selects = "^2.1.0" reportlab = "^3.6.1" -django-haystack = "^3.1.1" -xapian-haystack = "^2.1.1" +django-haystack = "^3.2.1" +xapian-haystack = "^3.0.1" xapian-bindings = "^0.1.0" libsass = "^0.21.0" django-ordered-model = "^3.4.3" django-simple-captcha = "^0.5.14" python-dateutil = "^2.8.2" -psycopg2-binary = "2.8.6" +psycopg2-binary = "2.9.3" sentry-sdk = "^1.4.3" pygraphviz = "^1.9" -Jinja2 = "<=3.0.3" +Jinja2 = "^3.1" # Extra optional dependencies mysqlclient = { version = "^2.0.3", optional = true } diff --git a/rootplace/views.py b/rootplace/views.py index 6ec44549..802262fc 100644 --- a/rootplace/views.py +++ b/rootplace/views.py @@ -23,7 +23,7 @@ # # -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ from django.views.generic.edit import FormView from django.views.generic import ListView from django.urls import reverse diff --git a/sas/models.py b/sas/models.py index 076b4a70..db82aef3 100644 --- a/sas/models.py +++ b/sas/models.py @@ -26,7 +26,7 @@ from django.db import models from django.urls import reverse from django.core.cache import cache from django.conf import settings -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.utils import timezone from PIL import Image diff --git a/sas/views.py b/sas/views.py index a43369e4..01aa7577 100644 --- a/sas/views.py +++ b/sas/views.py @@ -28,7 +28,7 @@ from django.urls import reverse_lazy, reverse from core.views.forms import SelectDate from django.views.generic import DetailView, TemplateView from django.views.generic.edit import UpdateView, FormMixin, FormView -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.conf import settings from django import forms from django.core.exceptions import PermissionDenied diff --git a/sith/settings.py b/sith/settings.py index 394c4e9e..6beb040f 100644 --- a/sith/settings.py +++ b/sith/settings.py @@ -41,7 +41,7 @@ import sys import binascii import sentry_sdk from sentry_sdk.integrations.django import DjangoIntegration -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) @@ -132,9 +132,7 @@ TEMPLATES = [ "extensions": [ "jinja2.ext.do", "jinja2.ext.loopcontrols", - "jinja2.ext.with_", "jinja2.ext.i18n", - "jinja2.ext.autoescape", "django_jinja.builtins.extensions.CsrfExtension", "django_jinja.builtins.extensions.CacheExtension", "django_jinja.builtins.extensions.TimezoneExtension", diff --git a/sith/urls.py b/sith/urls.py index 370470a3..085e17ad 100644 --- a/sith/urls.py +++ b/sith/urls.py @@ -37,13 +37,15 @@ Including another URLconf 1. Add an import: from blog import urls as blog_urls 2. Add a URL to urlpatterns: url(r'^blog/', include(blog_urls)) """ -from django.urls import include, re_path +from django.urls import include, path from django.contrib import admin from django.conf import settings from django.conf.urls.static import static from django.views.i18n import JavaScriptCatalog from ajax_select import urls as ajax_select_urls +import core.urls + js_info_dict = {"packages": ("sith",)} handler403 = "core.views.forbidden" @@ -51,43 +53,37 @@ handler404 = "core.views.not_found" handler500 = "core.views.internal_servor_error" urlpatterns = [ - re_path(r"^", include(("core.urls", "core"), namespace="core")), - re_path( - r"^rootplace/", include(("rootplace.urls", "rootplace"), namespace="rootplace") - ), - re_path( - r"^subscription/", + path("", include(("core.urls", "core"), namespace="core")), + path("rootplace/", include(("rootplace.urls", "rootplace"), namespace="rootplace")), + path( + "subscription/", include(("subscription.urls", "subscription"), namespace="subscription"), ), - re_path(r"^com/", include(("com.urls", "com"), namespace="com")), - re_path(r"^club/", include(("club.urls", "club"), namespace="club")), - re_path(r"^counter/", include(("counter.urls", "counter"), namespace="counter")), - re_path(r"^stock/", include(("stock.urls", "stock"), namespace="stock")), - re_path( - r"^accounting/", + path("com/", include(("com.urls", "com"), namespace="com")), + path("club/", include(("club.urls", "club"), namespace="club")), + path("counter/", include(("counter.urls", "counter"), namespace="counter")), + path("stock/", include(("stock.urls", "stock"), namespace="stock")), + path( + "accounting/", include(("accounting.urls", "accounting"), namespace="accounting"), ), - re_path(r"^eboutic/", include(("eboutic.urls", "eboutic"), namespace="eboutic")), - re_path( - r"^launderette/", + path("eboutic/", include(("eboutic.urls", "eboutic"), namespace="eboutic")), + path( + "launderette/", include(("launderette.urls", "launderette"), namespace="launderette"), ), - re_path(r"^sas/", include(("sas.urls", "sas"), namespace="sas")), - re_path(r"^api/v1/", include(("api.urls", "api"), namespace="api")), - re_path( - r"^election/", include(("election.urls", "election"), namespace="election") - ), - re_path(r"^forum/", include(("forum.urls", "forum"), namespace="forum")), - re_path(r"^trombi/", include(("trombi.urls", "trombi"), namespace="trombi")), - re_path(r"^matmatronch/", include(("matmat.urls", "matmat"), namespace="matmat")), - re_path( - r"^pedagogy/", include(("pedagogy.urls", "pedagogy"), namespace="pedagogy") - ), - re_path(r"^admin/", admin.site.urls), - re_path(r"^ajax_select/", include(ajax_select_urls)), - re_path(r"^i18n/", include("django.conf.urls.i18n")), - re_path(r"^jsi18n/$", JavaScriptCatalog.as_view(), name="javascript-catalog"), - re_path(r"^captcha/", include("captcha.urls")), + path("sas/", include(("sas.urls", "sas"), namespace="sas")), + path("api/v1/", include(("api.urls", "api"), namespace="api")), + path("election/", include(("election.urls", "election"), namespace="election")), + path("forum/", include(("forum.urls", "forum"), namespace="forum")), + path("trombi/", include(("trombi.urls", "trombi"), namespace="trombi")), + path("matmatronch/", include(("matmat.urls", "matmat"), namespace="matmat")), + path("pedagogy/", include(("pedagogy.urls", "pedagogy"), namespace="pedagogy")), + path("admin/", admin.site.urls), + path("ajax_select/", include(ajax_select_urls)), + path("i18n/", include("django.conf.urls.i18n")), + path("jsi18n/$", JavaScriptCatalog.as_view(), name="javascript-catalog"), + path("captcha/", include("captcha.urls")), ] if settings.DEBUG: @@ -95,4 +91,4 @@ if settings.DEBUG: urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) import debug_toolbar - urlpatterns += [re_path(r"^__debug__/", include(debug_toolbar.urls))] + urlpatterns += [path("__debug__/", include(debug_toolbar.urls))] diff --git a/stock/models.py b/stock/models.py index f8696233..5e277b97 100644 --- a/stock/models.py +++ b/stock/models.py @@ -24,7 +24,7 @@ # from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.urls import reverse from django.conf import settings diff --git a/stock/views.py b/stock/views.py index d0ebee04..6b4776aa 100644 --- a/stock/views.py +++ b/stock/views.py @@ -37,7 +37,7 @@ from django.views.generic.edit import ( FormMixin, BaseFormView, ) -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django import forms from django.http import HttpResponseRedirect, HttpResponse from django.forms.models import modelform_factory diff --git a/subscription/models.py b/subscription/models.py index f3a9c3d8..f0ea0907 100644 --- a/subscription/models.py +++ b/subscription/models.py @@ -25,7 +25,7 @@ from datetime import date, timedelta from django.db import models from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.conf import settings from django.core.exceptions import ValidationError from django.urls import reverse diff --git a/subscription/views.py b/subscription/views.py index 63ce0a33..eff9d9cc 100644 --- a/subscription/views.py +++ b/subscription/views.py @@ -23,7 +23,7 @@ # from django.views.generic.edit import CreateView, FormView -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.core.exceptions import PermissionDenied, ValidationError from django.urls import reverse_lazy from django import forms diff --git a/trombi/models.py b/trombi/models.py index 5b0b0e2b..e4439c1a 100644 --- a/trombi/models.py +++ b/trombi/models.py @@ -23,7 +23,7 @@ # from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.urls import reverse from django.conf import settings from django.core.exceptions import ValidationError diff --git a/trombi/views.py b/trombi/views.py index 71749f78..e646fdd6 100644 --- a/trombi/views.py +++ b/trombi/views.py @@ -28,7 +28,7 @@ from django.shortcuts import get_object_or_404, redirect from django.urls import reverse_lazy, reverse from django.views.generic import DetailView, RedirectView, TemplateView, View from django.views.generic.edit import UpdateView, CreateView, DeleteView -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django import forms from django.conf import settings from django.forms.models import modelform_factory From 08924c5e0512a961d23f34559ecc05d7b3dec63a Mon Sep 17 00:00:00 2001 From: Sli Date: Thu, 4 Aug 2022 00:38:50 +0200 Subject: [PATCH 3/5] Fix wrong url and set default auto field --- sith/settings.py | 2 ++ sith/urls.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/sith/settings.py b/sith/settings.py index 6beb040f..bf47bfda 100644 --- a/sith/settings.py +++ b/sith/settings.py @@ -62,6 +62,8 @@ ALLOWED_HOSTS = ["*"] # Application definition +DEFAULT_AUTO_FIELD = "django.db.models.AutoField" + SITE_ID = 4000 INSTALLED_APPS = ( diff --git a/sith/urls.py b/sith/urls.py index 085e17ad..cdb0cabe 100644 --- a/sith/urls.py +++ b/sith/urls.py @@ -82,7 +82,7 @@ urlpatterns = [ path("admin/", admin.site.urls), path("ajax_select/", include(ajax_select_urls)), path("i18n/", include("django.conf.urls.i18n")), - path("jsi18n/$", JavaScriptCatalog.as_view(), name="javascript-catalog"), + path("jsi18n/", JavaScriptCatalog.as_view(), name="javascript-catalog"), path("captcha/", include("captcha.urls")), ] From 320a89661075929b2742e8d50a5fc00a6a5223fc Mon Sep 17 00:00:00 2001 From: Sli Date: Thu, 4 Aug 2022 17:20:21 +0200 Subject: [PATCH 4/5] Fix tests and broken forms --- club/templates/club/mailing.jinja | 2 +- club/tests.py | 2 +- pedagogy/templates/pedagogy/moderation.jinja | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/club/templates/club/mailing.jinja b/club/templates/club/mailing.jinja index 7aa88eed..8a364295 100644 --- a/club/templates/club/mailing.jinja +++ b/club/templates/club/mailing.jinja @@ -45,7 +45,7 @@ {% for widget in form_mailing_removal.subwidgets %} - {% set user = ms[widget.data.value][0] %} + {% set user = ms[widget.data.value.value][0] %} {{ user.get_username }} {{ user.get_email }} diff --git a/club/tests.py b/club/tests.py index 56bc9155..63b48f47 100644 --- a/club/tests.py +++ b/club/tests.py @@ -180,7 +180,7 @@ class ClubTest(TestCase): ) self.assertTrue(response.status_code == 200) self.assertTrue( - "
  • Vous n'avez pas la permission de faire cela
  • " + "
  • Vous n'avez pas la permission de faire cela
  • " in str(response.content) ) diff --git a/pedagogy/templates/pedagogy/moderation.jinja b/pedagogy/templates/pedagogy/moderation.jinja index 61a2a617..95367858 100644 --- a/pedagogy/templates/pedagogy/moderation.jinja +++ b/pedagogy/templates/pedagogy/moderation.jinja @@ -18,7 +18,7 @@ {% set queryset = form.accepted_reports.field.queryset %} {% for widget in form.accepted_reports.subwidgets %} - {% set report = queryset.get(id=widget.data.value) %} + {% set report = queryset.get(id=widget.data.value.value) %}
    {% csrf_token %} From 4f00224f0dee21595f43914755d2d7ee386cf283 Mon Sep 17 00:00:00 2001 From: Sli Date: Thu, 4 Aug 2022 18:08:10 +0200 Subject: [PATCH 5/5] Update dependencies, apply black and fix wrong default SITH_COUNTER_OFFICES values --- core/views/forms.py | 26 +++++---- counter/tests.py | 3 +- poetry.lock | 135 ++++++-------------------------------------- pyproject.toml | 18 +++--- sith/settings.py | 2 +- 5 files changed, 46 insertions(+), 138 deletions(-) diff --git a/core/views/forms.py b/core/views/forms.py index 13bc48d1..9359cd28 100644 --- a/core/views/forms.py +++ b/core/views/forms.py @@ -118,11 +118,14 @@ class SelectFile(TextInput): attrs["class"] = "select_file" else: attrs = {"class": "select_file"} - output = '%(content)s
    ' % { - "content": super(SelectFile, self).render(name, value, attrs, renderer), - "title": _("Choose file"), - "name": name, - } + output = ( + '%(content)s
    ' + % { + "content": super(SelectFile, self).render(name, value, attrs, renderer), + "title": _("Choose file"), + "name": name, + } + ) output += ( '' + % { + "content": super(SelectUser, self).render(name, value, attrs, renderer), + "title": _("Choose user"), + "name": name, + } + ) output += ( '=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] sdist = ["setuptools_rust (>=0.11.4)"] ssh = ["bcrypt (>=3.1.5)"] -test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] +test = ["pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] [[package]] name = "decorator" @@ -226,11 +226,11 @@ python-versions = "*" [[package]] name = "django-phonenumber-field" -version = "5.2.0" +version = "6.3.0" description = "An international phone number field for django models." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] Django = ">=2.2" @@ -477,7 +477,7 @@ ptyprocess = ">=0.5" [[package]] name = "phonenumbers" -version = "8.12.52" +version = "8.12.53" description = "Python version of Google's common library for parsing, formatting, storing and validating international phone numbers." category = "main" optional = false @@ -493,11 +493,15 @@ python-versions = "*" [[package]] name = "pillow" -version = "8.4.0" +version = "9.2.0" description = "Python Imaging Library (Fork)" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] [[package]] name = "platformdirs" @@ -610,14 +614,14 @@ python-versions = "*" [[package]] name = "reportlab" -version = "3.6.9" +version = "3.6.11" description = "The Reportlab Toolkit" category = "main" optional = false python-versions = ">=3.7, <4" [package.dependencies] -pillow = ">=4.0.0" +pillow = ">=9.0.0" [package.extras] rlpycairo = ["rlPyCairo (>=0.0.5)"] @@ -917,7 +921,7 @@ testing = ["coverage"] [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "e22554098eee12752a944794d2436b38b69efc0803794a68c16419dd1af65471" +content-hash = "08911593e7e5f4267de94d632be1332f4ef01a22b37a827f557eb15f0dba340b" [metadata.files] alabaster = [ @@ -991,28 +995,7 @@ coverage = [ {file = "coverage-5.5-pp37-none-any.whl", hash = "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4"}, {file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"}, ] -cryptography = [ - {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:4e2dddd38a5ba733be6a025a1475a9f45e4e41139d1321f412c6b360b19070b6"}, - {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:4881d09298cd0b669bb15b9cfe6166f16fc1277b4ed0d04a22f3d6430cb30f1d"}, - {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea634401ca02367c1567f012317502ef3437522e2fc44a3ea1844de028fa4b84"}, - {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7be666cc4599b415f320839e36367b273db8501127b38316f3b9f22f17a0b815"}, - {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8241cac0aae90b82d6b5c443b853723bcc66963970c67e56e71a2609dc4b5eaf"}, - {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b2d54e787a884ffc6e187262823b6feb06c338084bbe80d45166a1cb1c6c5bf"}, - {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:c2c5250ff0d36fd58550252f54915776940e4e866f38f3a7866d92b32a654b86"}, - {file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ec6597aa85ce03f3e507566b8bcdf9da2227ec86c4266bd5e6ab4d9e0cc8dab2"}, - {file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ca9f686517ec2c4a4ce930207f75c00bf03d94e5063cbc00a1dc42531511b7eb"}, - {file = "cryptography-36.0.2-cp36-abi3-win32.whl", hash = "sha256:f64b232348ee82f13aac22856515ce0195837f6968aeaa94a3d0353ea2ec06a6"}, - {file = "cryptography-36.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:53e0285b49fd0ab6e604f4c5d9c5ddd98de77018542e88366923f152dbeb3c29"}, - {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:32db5cc49c73f39aac27574522cecd0a4bb7384e71198bc65a0d23f901e89bb7"}, - {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b3d199647468d410994dbeb8cec5816fb74feb9368aedf300af709ef507e3e"}, - {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:da73d095f8590ad437cd5e9faf6628a218aa7c387e1fdf67b888b47ba56a17f0"}, - {file = "cryptography-36.0.2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:0a3bf09bb0b7a2c93ce7b98cb107e9170a90c51a0162a20af1c61c765b90e60b"}, - {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8897b7b7ec077c819187a123174b645eb680c13df68354ed99f9b40a50898f77"}, - {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82740818f2f240a5da8dfb8943b360e4f24022b093207160c77cadade47d7c85"}, - {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1f64a62b3b75e4005df19d3b5235abd43fa6358d5516cfc43d87aeba8d08dd51"}, - {file = "cryptography-36.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e167b6b710c7f7bc54e67ef593f8731e1f45aa35f8a8a7b72d6e42ec76afd4b3"}, - {file = "cryptography-36.0.2.tar.gz", hash = "sha256:70f8f4f7bb2ac9f340655cbac89d68c527af5bb4387522a8413e841e3e6628c9"}, -] +cryptography = [] decorator = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, @@ -1023,10 +1006,7 @@ django-debug-toolbar = [] django-haystack = [] django-jinja = [] django-ordered-model = [] -django-phonenumber-field = [ - {file = "django-phonenumber-field-5.2.0.tar.gz", hash = "sha256:52b2e5970133ec5ab701218b802f7ab237229854dc95fd239b7e9e77dc43731d"}, - {file = "django_phonenumber_field-5.2.0-py3-none-any.whl", hash = "sha256:5547fb2b2cc690a306ba77a5038419afc8fa8298a486fb7895008e9067cc7e75"}, -] +django-phonenumber-field = [] django-ranged-response = [ {file = "django-ranged-response-0.2.0.tar.gz", hash = "sha256:f71fff352a37316b9bead717fc76e4ddd6c9b99c4680cdf4783b9755af1cf985"}, ] @@ -1141,49 +1121,7 @@ pickleshare = [ {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] -pillow = [ - {file = "Pillow-8.4.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:81f8d5c81e483a9442d72d182e1fb6dcb9723f289a57e8030811bac9ea3fef8d"}, - {file = "Pillow-8.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3f97cfb1e5a392d75dd8b9fd274d205404729923840ca94ca45a0af57e13dbe6"}, - {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb9fc393f3c61f9054e1ed26e6fe912c7321af2f41ff49d3f83d05bacf22cc78"}, - {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d82cdb63100ef5eedb8391732375e6d05993b765f72cb34311fab92103314649"}, - {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc1afda735a8d109007164714e73771b499768b9bb5afcbbee9d0ff374b43f"}, - {file = "Pillow-8.4.0-cp310-cp310-win32.whl", hash = "sha256:e3dacecfbeec9a33e932f00c6cd7996e62f53ad46fbe677577394aaa90ee419a"}, - {file = "Pillow-8.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:620582db2a85b2df5f8a82ddeb52116560d7e5e6b055095f04ad828d1b0baa39"}, - {file = "Pillow-8.4.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:1bc723b434fbc4ab50bb68e11e93ce5fb69866ad621e3c2c9bdb0cd70e345f55"}, - {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72cbcfd54df6caf85cc35264c77ede902452d6df41166010262374155947460c"}, - {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70ad9e5c6cb9b8487280a02c0ad8a51581dcbbe8484ce058477692a27c151c0a"}, - {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25a49dc2e2f74e65efaa32b153527fc5ac98508d502fa46e74fa4fd678ed6645"}, - {file = "Pillow-8.4.0-cp36-cp36m-win32.whl", hash = "sha256:93ce9e955cc95959df98505e4608ad98281fff037350d8c2671c9aa86bcf10a9"}, - {file = "Pillow-8.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2e4440b8f00f504ee4b53fe30f4e381aae30b0568193be305256b1462216feff"}, - {file = "Pillow-8.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8c803ac3c28bbc53763e6825746f05cc407b20e4a69d0122e526a582e3b5e153"}, - {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8a17b5d948f4ceeceb66384727dde11b240736fddeda54ca740b9b8b1556b29"}, - {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1394a6ad5abc838c5cd8a92c5a07535648cdf6d09e8e2d6df916dfa9ea86ead8"}, - {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:792e5c12376594bfcb986ebf3855aa4b7c225754e9a9521298e460e92fb4a488"}, - {file = "Pillow-8.4.0-cp37-cp37m-win32.whl", hash = "sha256:d99ec152570e4196772e7a8e4ba5320d2d27bf22fdf11743dd882936ed64305b"}, - {file = "Pillow-8.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7b7017b61bbcdd7f6363aeceb881e23c46583739cb69a3ab39cb384f6ec82e5b"}, - {file = "Pillow-8.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:d89363f02658e253dbd171f7c3716a5d340a24ee82d38aab9183f7fdf0cdca49"}, - {file = "Pillow-8.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a0956fdc5defc34462bb1c765ee88d933239f9a94bc37d132004775241a7585"}, - {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b7bb9de00197fb4261825c15551adf7605cf14a80badf1761d61e59da347779"}, - {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72b9e656e340447f827885b8d7a15fc8c4e68d410dc2297ef6787eec0f0ea409"}, - {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5a4532a12314149d8b4e4ad8ff09dde7427731fcfa5917ff16d0291f13609df"}, - {file = "Pillow-8.4.0-cp38-cp38-win32.whl", hash = "sha256:82aafa8d5eb68c8463b6e9baeb4f19043bb31fefc03eb7b216b51e6a9981ae09"}, - {file = "Pillow-8.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:066f3999cb3b070a95c3652712cffa1a748cd02d60ad7b4e485c3748a04d9d76"}, - {file = "Pillow-8.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:5503c86916d27c2e101b7f71c2ae2cddba01a2cf55b8395b0255fd33fa4d1f1a"}, - {file = "Pillow-8.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4acc0985ddf39d1bc969a9220b51d94ed51695d455c228d8ac29fcdb25810e6e"}, - {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b052a619a8bfcf26bd8b3f48f45283f9e977890263e4571f2393ed8898d331b"}, - {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:493cb4e415f44cd601fcec11c99836f707bb714ab03f5ed46ac25713baf0ff20"}, - {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8831cb7332eda5dc89b21a7bce7ef6ad305548820595033a4b03cf3091235ed"}, - {file = "Pillow-8.4.0-cp39-cp39-win32.whl", hash = "sha256:5e9ac5f66616b87d4da618a20ab0a38324dbe88d8a39b55be8964eb520021e02"}, - {file = "Pillow-8.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:3eb1ce5f65908556c2d8685a8f0a6e989d887ec4057326f6c22b24e8a172c66b"}, - {file = "Pillow-8.4.0-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ddc4d832a0f0b4c52fff973a0d44b6c99839a9d016fe4e6a1cb8f3eea96479c2"}, - {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3e5ddc44c14042f0844b8cf7d2cd455f6cc80fd7f5eefbe657292cf601d9ad"}, - {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c70e94281588ef053ae8998039610dbd71bc509e4acbc77ab59d7d2937b10698"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:3862b7256046fcd950618ed22d1d60b842e3a40a48236a5498746f21189afbbc"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4901622493f88b1a29bd30ec1a2f683782e57c3c16a2dbc7f2595ba01f639df"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c471a734240653a0ec91dec0996696eea227eafe72a33bd06c92697728046b"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:244cf3b97802c34c41905d22810846802a3329ddcb93ccc432870243211c79fc"}, - {file = "Pillow-8.4.0.tar.gz", hash = "sha256:b8e2f83c56e141920c39464b852de3719dfbfb6e3c99a2d8da0edf4fb33176ed"}, -] +pillow = [] platformdirs = [] prompt-toolkit = [] psycopg2-binary = [ @@ -1267,44 +1205,7 @@ pytz = [ {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"}, {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, ] -reportlab = [ - {file = "reportlab-3.6.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4ba8eebfa4383e4680d6e7e6dba9c45c1fe19bbc0a754db4d84823f1a9511e56"}, - {file = "reportlab-3.6.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37dda88dbe16dd3f4f9039464637cce66e462c0b95e5763dbd45ac5799136d3a"}, - {file = "reportlab-3.6.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10681d89a0ca37bb4036283fb8c0efac9ac1b22265dbdf350bda0448be33e00c"}, - {file = "reportlab-3.6.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cebd0b28a0e875a9ce789514700f80659269ecf2a8fcef0aa10b8ae52b40474a"}, - {file = "reportlab-3.6.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ec84055cf2c83783958b74eadf0e577eb0cd9088c8b5d536e9ddc0f4a9f8c70"}, - {file = "reportlab-3.6.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:90f74627cafecf3924741ab8b0690a19df4214eb56b1cfce2dc74a15c9744034"}, - {file = "reportlab-3.6.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2c2fd861f10b2cd49ccf29a31da9ad5c3b95aa437804e4fd0351ed4eb695f74"}, - {file = "reportlab-3.6.9-cp310-cp310-win32.whl", hash = "sha256:e492e87886423192af1fafde23907bcd9d2fdccfc22f67e18aa5c73db3a380a3"}, - {file = "reportlab-3.6.9-cp310-cp310-win_amd64.whl", hash = "sha256:d1bf9455aff37beb421a4447d89d6dd77bb46f677c0bab4eb0272cdb79faad2f"}, - {file = "reportlab-3.6.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0a7f2b7232c3ffb451b649d55c51a6dd0c8104ad7bbcfe355addf7619705e7fa"}, - {file = "reportlab-3.6.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1967dbc9930917d75c39784712a137d432dbc2e5ca9e132a2453319c2619ccff"}, - {file = "reportlab-3.6.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32a5c5cd9625a40feec956f460355b4813bc3187c4f8dc9efd9f1a7f8f854e34"}, - {file = "reportlab-3.6.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cb82b6d14ad4bd915acacc8f114c6a7bab8b9b1503cabb930e433ebd320f90c"}, - {file = "reportlab-3.6.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e767cf4507ca8eed7dde8511f0889b0f19f160a2bdf9ef07742b2aaeceed9f2"}, - {file = "reportlab-3.6.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a114761ad3ba6e0cdfacf14a8fb2cb8f5713b115ca1f0c17f3cd638d0a5b4bd"}, - {file = "reportlab-3.6.9-cp37-cp37m-win32.whl", hash = "sha256:bbaab798991863952c593c0459dcb82e0aade837675593310e13cba2ce7fb45a"}, - {file = "reportlab-3.6.9-cp37-cp37m-win_amd64.whl", hash = "sha256:ab1ffe4ec7be99ad348791116d436610afdc7a9a02a968997f31eaa62eaadad8"}, - {file = "reportlab-3.6.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:496f42840604255ce06777bc129048b3bab966213bbac4f07fbe4ceb6a2e0482"}, - {file = "reportlab-3.6.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a441afdfe31870b964bccde042d7172ed3c0077f519bbf3ed7d9d34c406b6b91"}, - {file = "reportlab-3.6.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fbe23ac870adf90544d2014c572dba6ec4d772afad6505bb91f171ddad12839"}, - {file = "reportlab-3.6.9-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de724c78f4eb1363b1195dce85a2a8806e7509b69ac5c842a714d942ea534d63"}, - {file = "reportlab-3.6.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:713574da534b6ce73d884f1574c35a565e438af4888fcc75e752f1de02e356a7"}, - {file = "reportlab-3.6.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:193671445b4885128d8800d3e416eb2fa4fd89bafae08cc9889c0752fe5ad8c2"}, - {file = "reportlab-3.6.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff0e014a3a3fe286c642ef51213c41684a156b9ed293ef205e8890bc1dbbfdc7"}, - {file = "reportlab-3.6.9-cp38-cp38-win32.whl", hash = "sha256:23f5aed2d212096f2fe95d56f868d63f839a08bf7e389237e644d93981274222"}, - {file = "reportlab-3.6.9-cp38-cp38-win_amd64.whl", hash = "sha256:09b2ca175129a34292399fc4c6a8b1739f6c5946368fcaa6f931d69385b2f720"}, - {file = "reportlab-3.6.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cb21666fc9edec9716553bfcfe0c30d1bbbe2731910a96f07ec65652974e5f83"}, - {file = "reportlab-3.6.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d927bf802bf53c1b5a3878a22e9be310900877984e7c436a3a99bdd19cfec4c3"}, - {file = "reportlab-3.6.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce3a3aad287c8532f62223f5720b5504e31abe3dce52a27bd2a25f508c0d846e"}, - {file = "reportlab-3.6.9-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9a5f63bc381c0f945402ef4c1bccc74a8eed28f6be6596704b1db7d82ec89fe"}, - {file = "reportlab-3.6.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50f8e30f5410efc69b0217261b1f21912888da392a4549e79c7aaaac85f01bfa"}, - {file = "reportlab-3.6.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15294435f786968bcdf1a7a67bcc23a136470b6ea26919497f5c76ff0f653041"}, - {file = "reportlab-3.6.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9b5e9115363545a727d8ebe7e4b94f7cf6f26113261a269d50d88b8db4eb726"}, - {file = "reportlab-3.6.9-cp39-cp39-win32.whl", hash = "sha256:e1fc1b1f5d9d1c2e18b5e60602dfa7854b2330ba0efc312ef605abf588abea9c"}, - {file = "reportlab-3.6.9-cp39-cp39-win_amd64.whl", hash = "sha256:92a6613af9877e3ad2a1c5a16a122514a4f9f8d9b91b1f22e7fa0fa796617b36"}, - {file = "reportlab-3.6.9.tar.gz", hash = "sha256:5d0cc3682456ad213150f6dbffe7d47eab737d809e517c316103376be548fb84"}, -] +reportlab = [] requests = [] sentry-sdk = [] six = [ diff --git a/pyproject.toml b/pyproject.toml index bc71cdd1..3a88a467 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,23 +21,23 @@ license = "GPL-3.0-only" [tool.poetry.dependencies] python = "^3.8" Django = "^3.2" -Pillow = "^8.3.2" +Pillow = "^9.2" mistune = "^0.8.4" django-jinja = "^2.10" -cryptography = "36.0.2" +cryptography = "^37.0" pyOpenSSL = "^21.0.0" pytz = "^2021.1" djangorestframework = "^3.13" -django-phonenumber-field = "^5.2.0" -phonenumbers = "^8.12.33" +django-phonenumber-field = "^6.3" +phonenumbers = "^8.12" django-ajax-selects = "^2.1.0" -reportlab = "^3.6.1" +reportlab = "^3.6" django-haystack = "^3.2.1" xapian-haystack = "^3.0.1" xapian-bindings = "^0.1.0" -libsass = "^0.21.0" -django-ordered-model = "^3.4.3" -django-simple-captcha = "^0.5.14" +libsass = "^0.21" +django-ordered-model = "^3.6" +django-simple-captcha = "^0.5.17" python-dateutil = "^2.8.2" psycopg2-binary = "2.9.3" sentry-sdk = "^1.4.3" @@ -61,7 +61,7 @@ docs = ["Sphinx", "sphinx-rtd-theme", "sphinx-copybutton"] [tool.poetry.dev-dependencies] django-debug-toolbar = "^3.2.2" ipython = "^7.28.0" -black = "^22.3.0" +black = "^22.6.0" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/sith/settings.py b/sith/settings.py index bf47bfda..37d00a00 100644 --- a/sith/settings.py +++ b/sith/settings.py @@ -389,7 +389,7 @@ SITH_SUBSCRIPTION_LOCATIONS = [ SITH_COUNTER_BARS = [(1, "MDE"), (2, "Foyer"), (35, "La Gommette")] -SITH_COUNTER_OFFICES = {17: "BdF", 19: "AE"} +SITH_COUNTER_OFFICES = {2: "BdF", 1: "AE"} SITH_COUNTER_PAYMENT_METHOD = [ ("CHECK", _("Check")),