From 40031043287c1472b7899d62eee4c5b52fac5cb9 Mon Sep 17 00:00:00 2001 From: quantulr <35954003+quantulr@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:26:20 +0800 Subject: [PATCH] init --- .idea/.gitignore | 8 + .idea/get_qrcode.iml | 8 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 7 + .idea/modules.xml | 8 + README.md | 0 get_qrcode/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 159 bytes get_qrcode/__pycache__/main.cpython-312.pyc | Bin 0 -> 2432 bytes get_qrcode/main.py | 65 +++ get_qrcode/qrcode.json | 1 + get_qrcode/qrcode.png | Bin 0 -> 8324 bytes poetry.lock | 400 ++++++++++++++++++ pyproject.toml | 20 + qrcode.json | 1 + qrcode.png | Bin 0 -> 8011 bytes tests/__init__.py | 0 17 files changed, 524 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/get_qrcode.iml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 README.md create mode 100644 get_qrcode/__init__.py create mode 100644 get_qrcode/__pycache__/__init__.cpython-312.pyc create mode 100644 get_qrcode/__pycache__/main.cpython-312.pyc create mode 100644 get_qrcode/main.py create mode 100644 get_qrcode/qrcode.json create mode 100644 get_qrcode/qrcode.png create mode 100644 poetry.lock create mode 100644 pyproject.toml create mode 100644 qrcode.json create mode 100644 qrcode.png create mode 100644 tests/__init__.py diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/get_qrcode.iml b/.idea/get_qrcode.iml new file mode 100644 index 0000000..d0876a7 --- /dev/null +++ b/.idea/get_qrcode.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..61efeba --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..9c39cc7 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/get_qrcode/__init__.py b/get_qrcode/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/get_qrcode/__pycache__/__init__.cpython-312.pyc b/get_qrcode/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20f1567203d248b51150d0493fb50a6258a3849a GIT binary patch literal 159 zcmX@j%ge<81n2#yrGn_kAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxdW#?iQffQbq1L+_p4*+tr3;GT28 z`<-*oJ#){!{KB$UfLnOrGojrAz#n9wH!82J$XJ;GJm6sj_;V8ap*E)clqP9EjU^Rf zB!k}o35SjtC6nJInf+#M%tS1b)o;bR;RE2e@kZR+1(r8mXaqnuQ$Vm!=NE)v2o6Dy z`8gT)dLXhSg&;4Bmju~Ep^DyEUm`Tn6%iyMs&);Agt#ikqG&@7e^-q1v19?p*3{vl zP~Nj9jJT)q-^$;3hZ8`B`eaz&u?}FV$20;|gARv@hjopIJjK&rG1J5|ZX+-S!Z@Sr z8*iA-uZJ^X9HA`00x;9Io(F(x*RgPkt`#M3n$AZ%LSy^V;*75G<`iAvFlw2Ohs$-X zC{v6c)rdi@)ba2}T`Nl7lww3!U>j4$6m?+_{(|KxyqgpZZ!U6m4ci#?NFY#a3b=*0 z>i8RA#FR3HYxTLJ#J0tZk&^{ud6CaYeO3N5lA> zu5Y}v$Q)nV3fh1IlN1DJ0K`Azrv~XWAPN74x9hmNMfd0iatYo~F@}<&=QCj3r@H@_ z=~&B*GD(p0j!#9CZc~){dB!ycJf*$J5{ZQZk%5?^ihttIEt5m#p%Ft6#KdE=iYPuf zykS69*CTH?|E22Zn+2r8;9M*ADRUeDfPTh2vuSiw~clf%~h7?Tl|3?|4aT>N4D*}dD( zCNDp|adq+D_e*!aefr7mr#HS%xYkZC-u-Cl*3G3)rxFefKl^fG>DuR*x^(5c=M%U3 zF@)Ri2R#)sDN| z$*F=AM{F)}TqqE|6i^Dod|3IkawM&0-4HqRHX3kVj0nh)M=*~gfI@DuI=!uS`Z~}0 zVxineK6`2?G!T%bQ*taUgjD4$P8*lAU#m(1G1?p-Le}E6yaRhB_nLAJSNAAbU@PX? znlxK8%hrw_T`1c)U*=Aixu=@$`hI+SuI#PR?hIqSdgAhl8Atsb(~v2z812beOR|*9 z;>uKSnXhh1SGU}z?y%pmcL!&ykB#+cXj{6vZN@8Qya!ikSaS%D^(!O4W6r+wg&kPfYt|2~*LRIOvL0Y_ye!8)H21478B8Ur_pcX5;H+N; z(9*a-OzVHOH!L{Z%Yd@DG+^tT-Tla3nl)fxHERY2+trhoPhRO!j^i}{L>;Dm2f%%U z%U4g|uPi5elgsC&@9!_e`h$9duf_DB$wYLo!ME4+V2`FBDDT=%|6E>1dJn|?D^Dr8 zEwrbU)acr$^p$G{;x}CT-d}(f%mXsHmk>ivh1`l&GE_{s!^eOrxza7Ska;u55eCP3 zN@VgR$yKBy4}?r!J7iXHWk$t>l&fZkK5P!fBqkVTbl@&aLkJ%O_A#(&zxF5Kwco(;C!lG$ gWD|5PcS2a2-3}Q0*ziNT>JekUax_Z=W|QXmAA1l@kN^Mx literal 0 HcmV?d00001 diff --git a/get_qrcode/main.py b/get_qrcode/main.py new file mode 100644 index 0000000..69ccf0a --- /dev/null +++ b/get_qrcode/main.py @@ -0,0 +1,65 @@ +import base64 +import json +import time +import redis +from selenium import webdriver +from selenium.common import NoSuchElementException, NoSuchWindowException +from selenium.webdriver.common.by import By + + +# from selenium.webdriver.support import expected_conditions +# from selenium.webdriver.support.wait import WebDriverWait + + +def get_qrcode(): + driver = webdriver.Chrome() + redis_client = redis.StrictRedis(host="localhost", port=6379, db=0) + driver.get("http://localhost:3030") + json_str_temp = "" + while True: + try: + qrcode_canvas = driver.find_element(By.CLASS_NAME, "qrcode") + qrcode_base64 = driver.execute_script("return arguments[0].toDataURL('image/png').substring(22);", + qrcode_canvas) + qrcode_png = base64.b64decode(qrcode_base64) + json_str = json.dumps({"qrcode": qrcode_base64}) + if json_str != json_str_temp: + json_str_temp = json_str + redis_client.publish("qrcode", json_str) + with open("qrcode.json", "w") as qrcode_json_file: + qrcode_json_file.write(json_str) + with open("qrcode.png", "wb") as qrcode_png_file: + qrcode_png_file.write(qrcode_png) + print("二维码文件已更新") + except NoSuchElementException: + print("二维码不存在") + except NoSuchWindowException: + print("窗口已关闭") + break + time.sleep(0.5) + driver.quit() + + +def main(): + get_qrcode() + # driver = webdriver.Chrome() + # driver.get("http://localhost:3030") + # # qrcode_login = driver.find_element(By.ID, "lbApp") + # # qrcode_login.click() + # # qrcode_canvas = None + # + # qrcode_canvas = WebDriverWait(driver, 1000 * 60 * 60 * 24).until( + # expected_conditions.presence_of_element_located((By.CSS_SELECTOR, ".qrcode")) + # ) + # qrcode_base64 = driver.execute_script("return arguments[0].toDataURL('image/png').substring(22);", qrcode_canvas) + # + # qrcode_png = base64.b64decode(qrcode_base64) + # + # with open("qrcode.png", "wb") as qrcode_png_file: + # qrcode_png_file.write(qrcode_png) + # # time.sleep(8) + # driver.quit() + + +if __name__ == "__main__": + main() diff --git a/get_qrcode/qrcode.json b/get_qrcode/qrcode.json new file mode 100644 index 0000000..5f141e2 --- /dev/null +++ b/get_qrcode/qrcode.json @@ -0,0 +1 @@ +{"qrcode": "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"} \ No newline at end of file diff --git a/get_qrcode/qrcode.png b/get_qrcode/qrcode.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6885fa9c7792683d6a57d18a411c3506b36b9b GIT binary patch literal 8324 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.3)"] +dev = ["attrs[tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] + +[[package]] +name = "certifi" +version = "2023.11.17" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, +] + +[[package]] +name = "cffi" +version = "1.16.0" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "idna" +version = "3.6" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, +] + +[[package]] +name = "outcome" +version = "1.3.0.post0" +description = "Capture the outcome of Python function calls." +optional = false +python-versions = ">=3.7" +files = [ + {file = "outcome-1.3.0.post0-py2.py3-none-any.whl", hash = "sha256:e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b"}, + {file = "outcome-1.3.0.post0.tar.gz", hash = "sha256:9dcf02e65f2971b80047b377468e72a268e15c0af3cf1238e6ff14f7f91143b8"}, +] + +[package.dependencies] +attrs = ">=19.2.0" + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] + +[[package]] +name = "pysocks" +version = "1.7.1" +description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, + {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, + {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, +] + +[[package]] +name = "redis" +version = "5.0.1" +description = "Python client for Redis database and key-value store" +optional = false +python-versions = ">=3.7" +files = [ + {file = "redis-5.0.1-py3-none-any.whl", hash = "sha256:ed4802971884ae19d640775ba3b03aa2e7bd5e8fb8dfaed2decce4d0fc48391f"}, + {file = "redis-5.0.1.tar.gz", hash = "sha256:0dab495cd5753069d3bc650a0dde8a8f9edde16fc5691b689a566eda58100d0f"}, +] + +[package.extras] +hiredis = ["hiredis (>=1.0.0)"] +ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "selenium" +version = "4.16.0" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "selenium-4.16.0-py3-none-any.whl", hash = "sha256:aec71f4e6ed6cb3ec25c9c1b5ed56ae31b6da0a7f17474c7566d303f84e6219f"}, + {file = "selenium-4.16.0.tar.gz", hash = "sha256:b2e987a445306151f7be0e6dfe2aa72a479c2ac6a91b9d5ef2d6dd4e49ad0435"}, +] + +[package.dependencies] +certifi = ">=2021.10.8" +trio = ">=0.17,<1.0" +trio-websocket = ">=0.9,<1.0" +urllib3 = {version = ">=1.26,<3", extras = ["socks"]} + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] + +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +optional = false +python-versions = "*" +files = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] + +[[package]] +name = "trio" +version = "0.24.0" +description = "A friendly Python library for async concurrency and I/O" +optional = false +python-versions = ">=3.8" +files = [ + {file = "trio-0.24.0-py3-none-any.whl", hash = "sha256:c3bd3a4e3e3025cd9a2241eae75637c43fe0b9e88b4c97b9161a55b9e54cd72c"}, + {file = "trio-0.24.0.tar.gz", hash = "sha256:ffa09a74a6bf81b84f8613909fb0beaee84757450183a7a2e0b47b455c0cac5d"}, +] + +[package.dependencies] +attrs = ">=20.1.0" +cffi = {version = ">=1.14", markers = "os_name == \"nt\" and implementation_name != \"pypy\""} +idna = "*" +outcome = "*" +sniffio = ">=1.3.0" +sortedcontainers = "*" + +[[package]] +name = "trio-websocket" +version = "0.11.1" +description = "WebSocket library for Trio" +optional = false +python-versions = ">=3.7" +files = [ + {file = "trio-websocket-0.11.1.tar.gz", hash = "sha256:18c11793647703c158b1f6e62de638acada927344d534e3c7628eedcb746839f"}, + {file = "trio_websocket-0.11.1-py3-none-any.whl", hash = "sha256:520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638"}, +] + +[package.dependencies] +trio = ">=0.11" +wsproto = ">=0.14" + +[[package]] +name = "urllib3" +version = "2.1.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, + {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, +] + +[package.dependencies] +pysocks = {version = ">=1.5.6,<1.5.7 || >1.5.7,<2.0", optional = true, markers = "extra == \"socks\""} + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "wsproto" +version = "1.2.0" +description = "WebSockets state-machine based protocol implementation" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, + {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, +] + +[package.dependencies] +h11 = ">=0.9.0,<1" + +[metadata] +lock-version = "2.0" +python-versions = "^3.12" +content-hash = "7ae25f005588c3e5cd3636a04dd108acd630da76d38e622c90f5fe02c2b2c847" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..f2b840e --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,20 @@ +[tool.poetry] +name = "get-qrcode" +version = "0.1.0" +description = "" +authors = ["quantulr <35954003+quantulr@users.noreply.github.com>"] +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.12" +selenium = "^4.16.0" +requests = "^2.31.0" +redis = "^5.0.1" + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.poetry.scripts] +dev = "get_qrcode.main:main" diff --git a/qrcode.json b/qrcode.json new file mode 100644 index 0000000..7e5dcf5 --- /dev/null +++ b/qrcode.json @@ -0,0 +1 @@ +{"qrcode": "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"} \ No newline at end of file diff --git a/qrcode.png b/qrcode.png new file mode 100644 index 0000000000000000000000000000000000000000..00286eccbc1146bb72df22747c3c192bc0a8cbfa GIT binary patch literal 8011 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 TyD4@V{v$BdH`OcGaSZ=2?J}2n literal 0 HcmV?d00001 diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29