Sanic

View on PyPIReverse Dependencies (387)

23.12.1 sanic-23.12.1-py3-none-any.whl

Wheel Details

Project: Sanic
Version: 23.12.1
Filename: sanic-23.12.1-py3-none-any.whl
Download: [link]
Size: 235817
MD5: 85c3d067576beb37b54d1dc3099a944f
SHA256: e292293b2663a7afeb380bdc48ab93978468b27deae46ad9561513941eb0311f
Uploaded: 2024-01-09 17:48:45 +0000

dist-info

METADATA

Metadata-Version: 2.1
Name: sanic
Version: 23.12.1
Summary: A web server and web framework that's written to go fast. Build fast. Run fast.
Author: Sanic Community
Author-Email: admhpkns[at]gmail.com
Home-Page: http://github.com/sanic-org/sanic/
License: MIT
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Platform: any
Requires-Python: >=3.8
Requires-Dist: sanic-routing (>=23.12.0)
Requires-Dist: httptools (>=0.0.10)
Requires-Dist: aiofiles (>=0.6.0)
Requires-Dist: websockets (>=10.0)
Requires-Dist: multidict (<7.0,>=5.0)
Requires-Dist: html5tagger (>=1.2.1)
Requires-Dist: tracerite (>=1.0.0)
Requires-Dist: typing-extensions (>=4.4.0)
Requires-Dist: uvloop (>=0.15.0); sys_platform != "win32" and implementation_name == "cpython"
Requires-Dist: ujson (>=1.35); sys_platform != "win32" and implementation_name == "cpython"
Requires-Dist: sphinx (>=2.1.2); extra == "all"
Requires-Dist: sphinx-rtd-theme (>=0.4.3); extra == "all"
Requires-Dist: m2r2; extra == "all"
Requires-Dist: cryptography; extra == "all"
Requires-Dist: enum-tools[sphinx]; extra == "all"
Requires-Dist: towncrier; extra == "all"
Requires-Dist: pytest-sanic; extra == "all"
Requires-Dist: bandit; extra == "all"
Requires-Dist: mypy; extra == "all"
Requires-Dist: tox; extra == "all"
Requires-Dist: coverage; extra == "all"
Requires-Dist: beautifulsoup4; extra == "all"
Requires-Dist: pygments; extra == "all"
Requires-Dist: mistune (<2.0.0); extra == "all"
Requires-Dist: chardet (==3.*); extra == "all"
Requires-Dist: ruff; extra == "all"
Requires-Dist: autodocsumm (>=0.2.11); extra == "all"
Requires-Dist: pytest (==7.1.*); extra == "all"
Requires-Dist: slotscheck (<1,>=0.8.0); extra == "all"
Requires-Dist: uvicorn (<0.15.0); extra == "all"
Requires-Dist: pytest-benchmark; extra == "all"
Requires-Dist: sanic-testing (>=23.6.0); extra == "all"
Requires-Dist: docutils; extra == "all"
Requires-Dist: types-ujson; (sys_platform != "win32" and implementation_name == "cpython") and extra == "all"
Requires-Dist: sanic-testing (>=23.6.0); extra == "dev"
Requires-Dist: pytest (==7.1.*); extra == "dev"
Requires-Dist: coverage; extra == "dev"
Requires-Dist: beautifulsoup4; extra == "dev"
Requires-Dist: pytest-sanic; extra == "dev"
Requires-Dist: pytest-benchmark; extra == "dev"
Requires-Dist: chardet (==3.*); extra == "dev"
Requires-Dist: ruff; extra == "dev"
Requires-Dist: bandit; extra == "dev"
Requires-Dist: mypy; extra == "dev"
Requires-Dist: docutils; extra == "dev"
Requires-Dist: pygments; extra == "dev"
Requires-Dist: uvicorn (<0.15.0); extra == "dev"
Requires-Dist: slotscheck (<1,>=0.8.0); extra == "dev"
Requires-Dist: cryptography; extra == "dev"
Requires-Dist: tox; extra == "dev"
Requires-Dist: towncrier; extra == "dev"
Requires-Dist: types-ujson; (sys_platform != "win32" and implementation_name == "cpython") and extra == "dev"
Requires-Dist: sphinx (>=2.1.2); extra == "docs"
Requires-Dist: sphinx-rtd-theme (>=0.4.3); extra == "docs"
Requires-Dist: docutils; extra == "docs"
Requires-Dist: pygments; extra == "docs"
Requires-Dist: m2r2; extra == "docs"
Requires-Dist: enum-tools[sphinx]; extra == "docs"
Requires-Dist: mistune (<2.0.0); extra == "docs"
Requires-Dist: autodocsumm (>=0.2.11); extra == "docs"
Requires-Dist: sanic-ext; extra == "ext"
Requires-Dist: aioquic; extra == "http3"
Requires-Dist: sanic-testing (>=23.6.0); extra == "test"
Requires-Dist: pytest (==7.1.*); extra == "test"
Requires-Dist: coverage; extra == "test"
Requires-Dist: beautifulsoup4; extra == "test"
Requires-Dist: pytest-sanic; extra == "test"
Requires-Dist: pytest-benchmark; extra == "test"
Requires-Dist: chardet (==3.*); extra == "test"
Requires-Dist: ruff; extra == "test"
Requires-Dist: bandit; extra == "test"
Requires-Dist: mypy; extra == "test"
Requires-Dist: docutils; extra == "test"
Requires-Dist: pygments; extra == "test"
Requires-Dist: uvicorn (<0.15.0); extra == "test"
Requires-Dist: slotscheck (<1,>=0.8.0); extra == "test"
Requires-Dist: types-ujson; (sys_platform != "win32" and implementation_name == "cpython") and extra == "test"
Provides-Extra: all
Provides-Extra: dev
Provides-Extra: docs
Provides-Extra: ext
Provides-Extra: http3
Provides-Extra: test
License-File: LICENSE
[Description omitted; length: 5813 characters]

WHEEL

Wheel-Version: 1.0
Generator: bdist_wheel (0.42.0)
Root-Is-Purelib: true
Tag: py3-none-any

RECORD

Path Digest Size
sanic/__init__.py sha256=JnxQbtAwLI7vsTRJDo0MOKPnunEFiB3Al8RAeEsahzs 1752
sanic/__main__.py sha256=ZhCRcPsaaRsUa9XCQszqndK4xcL0y1gFBdRQYku_lkw 278
sanic/__version__.py sha256=AG0xYWTx2_vbByG8f9XaMpDxdIp1AuK0UOhF-z3ocx8 24
sanic/app.py sha256=R_inePDt4o38bCM85ukmjRc6yvqGCE4-NGYnZRO4mnM 92870
sanic/asgi.py sha256=_S5_dWAN6iHHi0geg3KfKczp_xKdE7sKMKWW54FAztk 9061
sanic/blueprint_group.py sha256=3jhb8Z4A9BcplfVeMpKdcuF1T79SaFXjSMbAqWCkoBw 84
sanic/blueprints.py sha256=mZ-9op4sqJSTCQROb3xtFAld67cnKkvJfsV-rpyKFTY 32703
sanic/compat.py sha256=Dk7FUYdDuFxMMdLLIJSi921kgLG8VMU7DMlhisqLznU 5340
sanic/config.py sha256=izN-JRsVmLHw2IuHNeWBF01iZgAVoGMY0kLsSEG0Tuo 13420
sanic/constants.py sha256=BPl-dSbJ6MXOsD6hIjy-M0f9Ec-Ll_EyhUACIEF4eis 862
sanic/errorpages.py sha256=vhm_FaNYSHNG_k9ng7tCPNU76EnCo9dDw9DFf-eyXVg 12752
sanic/exceptions.py sha256=jf3YKqe3PLU8pxYaSlzJjMBcn3KRkn45OVeg2oyuTRE 26447
sanic/headers.py sha256=QRCSRDmiqScywTdYAKlEb-cQfea3gIutmEmvA2eeae0 18885
sanic/helpers.py sha256=JchiP0Q8veb5RD4pOqKZ4t5pqLN_mzD8m0iVqZTqNzI 4238
sanic/log.py sha256=lK8GohbntOPQ2a8kXjtsStpJdGJeviFCXG4WR2ggua0 4035
sanic/middleware.py sha256=X8XAaIqZBiTlvtOpctR7zyJfNDG4CX7t3OV5GkokZ2U 3000
sanic/py.typed sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU 0
sanic/router.py sha256=xNcheg5pUXEsbA_4aPHgzWnsdpdIuK5QtX9udcrAQYo 9334
sanic/signals.py sha256=R_MTC0kpp_NJYj2D1KmV_dNcMI-aoC3PwGIqXFyil9I 14850
sanic/simple.py sha256=BhEg0NxDoUnGmNYc1asrejd0sp-3lPwx4FhGY7HqnpU 435
sanic/utils.py sha256=D9wVLGv8nafsZeNWxBNqLX7FjgUhR83gcArBmcl4ZJY 4419
sanic/views.py sha256=nC2XegZ7IIfmzMXYWcNKS4W6zgLq607r1jedyCUiQDU 8501
sanic/application/__init__.py sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU 0
sanic/application/constants.py sha256=2IL0wxTqVWLo0uguOj0cEvyq6f0hJrK6JAW8jP32jsU 711
sanic/application/ext.py sha256=SvB8lSru84QJAeXB7FigPX-VNODLjZjbkv8Pnh32w6g 1241
sanic/application/logo.py sha256=-LzPzPpmEQueVSXnFhpP5VH4rEqzsKljQGdSbdcpP1E 4030
sanic/application/motd.py sha256=7bN8TplJgM_cDrDC_fFarcQdFMQ7Nh7hmQcxe5PX_Ao 6066
sanic/application/spinner.py sha256=kf7pcuD1KqPTu6dyb-a8bJZx4n0ilvJq15ynczBpsfg 2380
sanic/application/state.py sha256=10SHfO8yGjpE-ULHE-bs5oAPCqfDj1TO2pB78D0V7lk 3627
sanic/base/__init__.py sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU 0
sanic/base/meta.py sha256=o_H0oTtu4kr285uyN_YZSK6PmksbN20tmUWWexNAHoc 208
sanic/base/root.py sha256=55V3OLeLTnySkjGgUEpg0in_ST7IYzf5xZkXLRsjpZ0 2075
sanic/cli/__init__.py sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU 0
sanic/cli/app.py sha256=aTyDO2Gkm-_EiczF7-L-0ba4APOzrWIHrpCK6Weu_Uk 8823
sanic/cli/arguments.py sha256=g5CYQOyCmuTYWezJnn6bxqRzyPiE7-iLKl_0QkXmNfk 8695
sanic/cli/base.py sha256=rpn2WMXUTp_RvWkl1oojXxxx2O3rv4poE67xospRd_Q 1075
sanic/cli/console.py sha256=3IgxUcdAQ3X3b55SM5yEPP6bF1TImTydUcg8nj5-G1s 7941
sanic/cli/inspector.py sha256=ndvCVsN6GiTIeeHP54sdKJAsFz18A3vypbJjuPZs-FA 3266
sanic/cli/inspector_client.py sha256=hG8GWE10ehE8jC_xQwDGrrOMBdCUhFhmhRUjq9QNF3Y 3798
sanic/cookies/__init__.py sha256=LhKqwzYs4p-8yFPsGXS81WvL279tFEqpbXNQx-xULX0 76
sanic/cookies/request.py sha256=coor4ai77jobH2g0NqDbjFyI9e-bwrpZHGPjuK0vHr0 5636
sanic/cookies/response.py sha256=zCEiVUkhf3piaSEDyI30PPyn-NM3Q9O4ES9ybzu1_yY 27333
sanic/handlers/__init__.py sha256=i0ajf0Bh0gLHLKexyuQ-2yyu4vVHc5re6UxV9vyD6a0 206
sanic/handlers/content_range.py sha256=95Sxm11POBMaPFYKaUfiDcWEURd2GDeA8omBeOnyiW8 2525
sanic/handlers/directory.py sha256=HLCZMUuBa3Vxb5v1SKtMEiUXd26yqtomIzk_p8Pd3VA 3577
sanic/handlers/error.py sha256=wsMo3NSp-nnMwhoobY2g0tOovbdFtxaLZqa8OtV54xE 7316
sanic/http/__init__.py sha256=qPK2fBZtnmDfYutL4QRqxbmDWn_10Edo2PV1bVJzpc8 117
sanic/http/constants.py sha256=4znFzWXzBEy1beqELyJbZiaipoNqVnqpTRWUXSAfZZQ 890
sanic/http/http1.py sha256=cSBAnzIuV7WaHU3pJzfiIlTFElc3WAP-KlzNVgH97dw 20526
sanic/http/http3.py sha256=YClOy0vOrGVP9LI3j1q_puPXdvwu7bXP2fsKyWgqI2g 13720
sanic/http/stream.py sha256=GFbwndG-Y8Y8OV8nfx4QdnA8ZiwPMIbcJY7EpwdbCLs 696
sanic/http/tls/__init__.py sha256=c34IH1GBUnLd1xZoO4q8yPifNPxwgIGgY9_03YBB7-4 132
sanic/http/tls/context.py sha256=MzKVfMa6f3EYHekyYcGELsRIVuWYBIR4-CglDcfA6co 7396
sanic/http/tls/creators.py sha256=yEnE_-Gf26k6WFcp5BytFPcjA_iGhsQcNDortIKw2DI 9555
sanic/mixins/__init__.py sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU 0
sanic/mixins/base.py sha256=XrbhOSPBBQ4Fbmk4AwxNBYhaP2EzG8A9e21IySTm4jI 918
sanic/mixins/exceptions.py sha256=O6a94nkZgIicridtGcHYBHlEfaeBAX_dXdoiftz5Teo 3905
sanic/mixins/listeners.py sha256=pqjN5XttoXY7hOiP_iY9c0KoIi7HQJj0IQRTf6IA0p8 16495
sanic/mixins/middleware.py sha256=CHQLTF08tfQ84Eak1Yl-pyvEsMDWnx0l7FhrZT8Ix78 8411
sanic/mixins/routes.py sha256=YT6dVMuGxyw9w1BaPFbOyS_rMTmz72PaBadzFEoVLiM 31606
sanic/mixins/signals.py sha256=KzxvA68952S75rpaX0K0JXuFLYauEGlQ_47nNDA-77o 5273
sanic/mixins/startup.py sha256=babGOtVhrsW1vSoYnOKnqFkq1ph6s-KPNC_HG8NiqxM 52850
sanic/mixins/static.py sha256=93yMpPOLqTlqW1I8bej7HSwCbf78rgUlPejyG6xj5io 14679
sanic/models/__init__.py sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU 0
sanic/models/asgi.py sha256=M7GCSE4vT6ZxU3mMjz7id3j0Rr8COohBoDaK2cT7GpU 3065
sanic/models/futures.py sha256=Qe_KFy_vG18gABovCyYPFBm9dN2YQ0y0BhFhLShjRDk 1578
sanic/models/handler_types.py sha256=ZbAns106IyUorzi739mVMF6WX94vRBeZDa45MiWfRbI 1036
sanic/models/http_types.py sha256=_0yOf8Pjom8pEbxw9-BfjR98QmV4Gbk9gpkxAYeO2Co 981
sanic/models/protocol_types.py sha256=xPvZNg5B2XIJMtU2m2Tx1mver3tDAt5XhtRkeIXrRnU 818
sanic/models/server_types.py sha256=j9mVFmtCNeM9bDDL6F5yzJxzhaBF0_Km4LW-2-vdMFA 2428
sanic/pages/__init__.py sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU 0
sanic/pages/base.py sha256=DQprNAJHYXQe63oCLp7SjT4X__f4QVoO-7v9eaBYMJo 2309
sanic/pages/css.py sha256=hvjAagni71pZ6gBgqpRSsMKuHaHRAILkzqzwOsqhG-Y 1105
sanic/pages/directory_page.py sha256=BMywz645abb3U7yDXltYA11b1UgT2b9pkpJHIGp17Gc 1774
sanic/pages/error.py sha256=1Zulmf-fFcDCneOSiQXa9jIXVoMosEZLydJwjdoaol0 3916
sanic/pages/styles/BasePage.css sha256=XmqZR2AeLkMtbXOg_7UN0neK0rH_u5J_ns2Wu5rsauA 2852
sanic/pages/styles/DirectoryPage.css sha256=rVJkr2u3yqoXbx_iRGU1tf0ktyNyzVn0Yhjf2hG_BuE 909
sanic/pages/styles/ErrorPage.css sha256=QfFiKMBqw88yOC_dsm5Tzo0ucMtxxNC2WxJRMkfBRks 2126
sanic/request/__init__.py sha256=t-tmbN2UK6e6sCBs8pipRZ88Z_pECj5Pc4C1eiuF2Iw 210
sanic/request/form.py sha256=MYazSJNwtzmokJ815tzfX0wtR-bDf-R9U8lYjfsmSis 3830
sanic/request/parameters.py sha256=lmQRNp8myrJG569n4XUO-aUTpsrDV_5kJbuyAf1CIFU 1091
sanic/request/types.py sha256=bAXYnxFJZbNOMyL6XAcitI04cjFExUH1JjnmcuTQRU0 37091
sanic/response/__init__.py sha256=Pt4p_yILevgwftUBLJCzWlKoKBq-qvfOjBPRjUIMMNY 504
sanic/response/convenience.py sha256=7wMjs_JJQdlsRyjzTw9be8HVWiWCUFAgzAXqB4Yb6ng 13879
sanic/response/types.py sha256=KhrdW5XGpLP1q7uZTbzn-pE3a9dP4Q-SMOFb4d1o9tI 18739
sanic/server/__init__.py sha256=ifxPV3-LZXbgaGvDSFlEk8ziJxBX9oKpYpEDgK8uqoE 375
sanic/server/async_server.py sha256=qEc8qQW8Tg1T-kOFGbC-bwOQ6O2w9GsOyrjSxeTV5hw 3475
sanic/server/events.py sha256=MNTjqOd4BNbmWH97PcbQIjdtHKXwF1EQEAge9NHJepo 994
sanic/server/goodbye.py sha256=nc6Rg3AjEQaU_hss0dB_8WSe2ZhioRXwStBGDnjtVPQ 1096
sanic/server/loop.py sha256=8mhDGQzwWaIZdYNlhEKq2VEsdwFJcaotnu9cyQc6k6Q 2557
sanic/server/runners.py sha256=Hc_7GYf9rqRx9Z3-4FjXHio-a3gvK0jUAzV668HMsG0 11362
sanic/server/socket.py sha256=IZZ2TUN0vxWi8zyRYSWpX2wI8yx6DDkJSZiXoZiNF88 4313
sanic/server/protocols/__init__.py sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU 0
sanic/server/protocols/base_protocol.py sha256=GhFk8ku_48P_CfRyfbCmo9L3W_JPZKRrjuVHGp6uRkM 4149
sanic/server/protocols/http_protocol.py sha256=RxMHB9mGadBmoLGn2p7I6YiY62vwE0sftXOiotTG0gw 10957
sanic/server/protocols/websocket_protocol.py sha256=W_x42JHmJV-Vt79-yZxpNyJE6JT2rPNAkjVlFe_Zqeo 5680
sanic/server/websockets/__init__.py sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU 0
sanic/server/websockets/connection.py sha256=JYj2bGK6hcpBOYL0Iqi-MKuQxQV3pvWqOgfYudGVVd4 2352
sanic/server/websockets/frame.py sha256=X32kDWGaQihVAmmsO9VbQDhL3vmmUpsKLb1n6LTwefI 11463
sanic/server/websockets/impl.py sha256=Ofb_eB-OWA2ydnb2RboEMzpM5EW_AJP3Q_C7OIrACk8 35810
sanic/touchup/__init__.py sha256=kBf5cCmZAwRD3buui0EeryaCc0lieMZQJ9l4Asms-jI 109
sanic/touchup/meta.py sha256=hLR72V4D4U4qV9Sd5uW9GtKpp7mgRDtu7L5AlcvLmok 702
sanic/touchup/service.py sha256=At9gaRQxbOAtqxVJL5Jy1DB3jzFG-juU83PIWfl1X_c 943
sanic/touchup/schemes/__init__.py sha256=UVoQByp8fxnA0yVn79FHxXfqQayvdMLJBvpSzh1NR24 144
sanic/touchup/schemes/altsvc.py sha256=Ib2x6PXvVI_Ib5VGAtpzbn30wkSPreo70HIejCorQF4 1590
sanic/touchup/schemes/base.py sha256=tDTf700foeuJKwndu9Ekr4KDX9l9HgHJuTU7wwSmef8 1023
sanic/touchup/schemes/ode.py sha256=eGSxDb9sR7hr3QyttimD61-4tXdWthVXhLPqN3f4fqY 2901
sanic/types/__init__.py sha256=nWL8T3hDPq1KBWF1086JgXh5uDctgZqr2koOxIL9axE 70
sanic/types/hashable_dict.py sha256=RJe9BXg7Ej57KKzi-x7drY-uziAo2bApSTIzYvU67U4 99
sanic/types/shared_ctx.py sha256=ozQU_MitoXSjDaNMC9ADI435YJCYungKzNgVqhAiWdE 1866
sanic/worker/__init__.py sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU 0
sanic/worker/constants.py sha256=pf9GgJcHqLtC2t9txPSK0CTUWuDBz-VQQbcQEUrsQR8 465
sanic/worker/inspector.py sha256=GTfN8Ns_VW7kBg4VNu_zkLZqTDyIn3ZjudSlpPD1sWY 5178
sanic/worker/loader.py sha256=G5g76SwnW6uNGC8Q-9MczsMxuPTTNpAz1KFObjy6o5k 5783
sanic/worker/manager.py sha256=x9I-QAGzJOIGTyFnyw2TbtRLWqE7BRcaPNjGHxtyWHc 18297
sanic/worker/multiplexer.py sha256=YhDA0z3L4pvQBzfCSWxHm9efw7jTY3LrO18uXecsGQY 5473
sanic/worker/process.py sha256=lUb2sBVf4Ctqb_rej0b1eJOM3p-d69gxSA4tE-XFY-0 8489
sanic/worker/reloader.py sha256=7CY-yRxR_MW3ZLir-KwWO5n-R-7IYH4oxMHu3rIhpc0 3984
sanic/worker/restarter.py sha256=S126NXv6w0HREbrmH5hDSKBJTPrdJYYPyOmkyU1d2_Q 3049
sanic/worker/serve.py sha256=3Xr_QQGI1q8BKUaugdNLZmadqhD0EhfNXpjwWgh6Kkc 4608
sanic/worker/state.py sha256=9UHhpvKKvAX8MjHZB1pM_Py-BYmHYItAMhtVDMMqGKE 2349
sanic-23.12.1.dist-info/LICENSE sha256=zcKUxJWo2A8_tZbyV_t7YSFMfV5e4lSFK3U_-B6OE3w 1080
sanic-23.12.1.dist-info/METADATA sha256=35oBgYTzkDAyoDDxdlk66dMUV242aPHvDHrBsHbam0o 10293
sanic-23.12.1.dist-info/WHEEL sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM 92
sanic-23.12.1.dist-info/entry_points.txt sha256=0vIzcvJJECQnWr4YHvpLveDvBw5jLvB5pq9x9RCl-rE 46
sanic-23.12.1.dist-info/top_level.txt sha256=ENtJKuBkCofUPUrIvzElGjOx1MUNBOm9GExhwSlZZQ8 6
sanic-23.12.1.dist-info/RECORD

top_level.txt

sanic

entry_points.txt

sanic = sanic.__main__:main