File: //home/arjun/projects/env/lib/python3.10/site-packages/tornado/__pycache__/web.cpython-310.pyc
o
we�/ � @ s d Z ddlZddlZddlZddlZddlZddlZddlZddl Z ddl
Zddlm
Z
ddlmZ ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZ ddl m!Z!m"Z" ddlm#Z# ddlm$Z$ dd l%m&Z& dd
lm'Z' ddlm(Z( ddlm)Z) dd
l*m+Z+m,Z,m-Z- ddlm.Z. ddl/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z<m=Z=m>Z> e9Z?ddl@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN ddlmOZO ddl@Z@e@jP�rddl@mQZQ eCeRe=eSejTejf ZUeCeVeReAeSeVf eAeSeRf f ZWdZX dZY dZZ dZ[ G dd� d�Z\e\� Z]G dd� de^�Z_eLde_d�Z`deKe` deKe` fdd �ZadeKe_ debfd!d"�Zcd#eHd$eDeEd f deHd$eDeEd f fd%d&�Zdd#eHd$eDeEd f deHd$eDeEd f fd'd(�ZeG d)d*� d*e8�ZfG d+d,� d,e6�ZgG d-d.� d.e'jh�ZiG d/d0� d0ej�ZkG d1d2� d2ej�ZlG d3d4� d4ek�ZmG d5d6� d6e_�ZnG d7d8� d8e_�ZoG d9d:� d:e_�ZpG d;d<� d<e_�ZqG d=d>� d>e^�ZrG d?d@� d@er�Zsd#eHd$eDeEd f deHd$eDeEd f fdAdB�ZtG dCdD� dDe^�ZuG dEdF� dFeu�ZvG dGdH� dHeu�ZwG dIdJ� dJeu�ZxG dKdL� dLe^�Zy dndMeWdNeVdOeCeVeRf dPeDeS dQeDeHg ezf dReDeS deRfdSdT�Z{e�|dU�Z}dOeRdeSfdVdW�Z~ X dodMeWdNeVdOeCdeVeRf dYezdQeDeHg ezf dZeDeS deDeR fd[d\�ZdMeCeVeRf dNeVdOeRdYezdQeHg ezf deDeR fd]d^�Z�dOeRdeFeSeReReReRf fd_d`�Z�dMeWdNeVdOeRdYezdQeHg ezf deDeR fdadb�Z�dOeCeVeRf deDeS fdcdd�Z�dMeCeVeRf deeCeVeRf deRfdfdg�Z�dMeCeVeRf dheRdeRfdidj�Z�dkeVdebfdldm�Z�dS )paP ``tornado.web`` provides a simple web framework with asynchronous
features that allow it to scale to large numbers of open connections,
making it ideal for `long polling
<http://en.wikipedia.org/wiki/Push_technology#Long_polling>`_.
Here is a simple "Hello, world" example app:
.. testcode::
import asyncio
import tornado
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
async def main():
application = tornado.web.Application([
(r"/", MainHandler),
])
application.listen(8888)
await asyncio.Event().wait()
if __name__ == "__main__":
asyncio.run(main())
.. testoutput::
:hide:
See the :doc:`guide` for additional information.
Thread-safety notes
-------------------
In general, methods on `RequestHandler` and elsewhere in Tornado are
not thread-safe. In particular, methods such as
`~RequestHandler.write()`, `~RequestHandler.finish()`, and
`~RequestHandler.flush()` must only be called from the main thread. If
you use multiple threads it is important to use `.IOLoop.add_callback`
to transfer control back to the main thread before finishing the
request, or to limit your use of other threads to
`.IOLoop.run_in_executor` and ensure that your callbacks running in
the executor do not refer to Tornado objects.
� N)�isclass)�BytesIO)� urlencode)�Future�"future_set_result_unless_cancelled)�escape)�gen)�
HTTPServer)�httputil)�iostream)�locale)�
access_log�app_log�gen_log)�template)�utf8�_unicode)�
AnyMatches�DefaultHostMatches�HostMatches�ReversibleRouter�Rule�ReversibleRuleRouter�URLSpec� _RuleList)�
ObjectDict�unicode_type�_websocket_mask)�Dict�Any�Union�Optional� Awaitable�Tuple�List�Callable�Iterable� Generator�Type�TypeVar�cast�overload)�
TracebackType)�Set� � c @ s e Zd ZdS )�_ArgDefaultMarkerN)�__name__�
__module__�__qualname__� r4 r4 �D/home/arjun/projects/env/lib/python3.10/site-packages/tornado/web.pyr0 � s r0 c s� e Zd ZdZdZi Ze�� Ze �
d�ZdZdZ
dZdZdddejd ed
df� fdd�Zd�d
d�ZeZ ed
eeef fdd��Zded ed
dfdd�ZeZeZeZeZeZeZ eZ!d
e"e#d fdd�Z$d�dd�Z%d�dd�Z&d�dd�Z'd�dd�Z(d�de)de"e d
dfd d!�Z*d
e)fd"d#�Z+d$ed%e,d
dfd&d'�Z-d$ed%e,d
dfd(d)�Z.d$ed
dfd*d+�Z/e �
d,�Z0d%e,d
efd-d.�Z1e2d�d$ed0ed1e3d
efd2d3��Z4e2e5d/fd$ed0e6d1e3d
efd4d3��Z4e2 /d�d$ed0dd1e3d
e"e fd5d3��Z4e5d/fd$ed0e7dee6f d1e3d
e"e fd6d3�Z4d�d$ed1e3d
e8e fd7d8�Z9e5d/fd$ed0e7dee6f d1e3d
e"e fd9d:�Z:d�d$ed1e3d
e8e fd;d<�Z;e5d/fd$ed0e7dee6f d1e3d
e"e fd=d>�Z<d�d$ed1e3d
e8e fd?d@�Z= /d�d$ed0e7dee6f dAeee8e> f d1e3d
e"e f
dBdC�Z? /d�d$edAeee8e> f d1e3d
e8e fdDdE�Z@d�d%e>d$e"e d
efdFdG�ZAed
eeeBjCjDf fdHdI��ZCd�d$ed0e"e d
e"e fdJdK�ZE L d�dddddM�d$ed%e7ee>f dNe"e dOe"e7eFeGeHjHf dPedQe"eF dRe"e) dSe3dTe3dUe"e d ed
dfdVdW�ZId$ed ed
dfdXdY�ZJd ed
dfdZd[�ZK \ d�d$ed%e7ee>f dQe"eF d]e"e) d ed
dfd^d_�ZLeLZM d�d$ed%e7ee>f d]e"e) d
e>fd`da�ZN b d�d$ed%e"e dceFdde"e) d
e"e> f
dedf�ZOeOZP d�d$ed%e"e d
e"e) fdgdh�ZQeQZR d�diedje3dke"e) d
dfdldm�ZSdne7ee>eTf d
dfdodp�ZUdqed ed
drfdsdt�ZVdueWe d
efdvdw�ZXdxeWe> d
e>fdydz�ZYd{eWe d
efd|d}�ZZd~eWe> d
e>fdd��Z[dqed ed
e>fd�d��Z\d
eeef fd�d��Z]d�ed
e^j_fd�d��Z`d�d�e3d
drfd�d��Zad�dne"e7ee>eTf d
drfd�d��Zbd
ecjdfd�d��Zed�d�d��Zfd�de)d ed
dfd�d��Zgde)d ed
dfd�d��Zhed
eijjjkfd�d���Zjejjld%eijjjkd
dfd�d���Zjd
e"eijjjk fd�d��Zmd�d0ed
eijjjkfd�d��Zned
efd�d���Zoeojld%ed
dfd�d���Zod
efd�d��Zpd
efd�d��Zqd
e"e fd�d��Zred
e>fd�d���Zsd
eGe"e) e>eFf fd�d��Ztd�ed
eGe"e) e"e> e"eF f fd�d��Zud�d�d��Zvd
efd�d��Zw d�dPed�e"e3 d ed
efd�d��Zxd�d$ed�ed
dfd�d��Zyd$eded
efd�d��Zzd
e"e fd�d��Z{d�d�d��Z|d
e3fd�d��Z}d�e8d� de>d e>d
dfd�dĄZ~dne>d
e"e#d fd�dƄZd�d�dȄZ�d
efd�dʄZ�d�e�d
dfd�d̈́Z�d�d�d%e"e� d�e"e� d
dfd�d҄Z�d$ed�e�d� d
e�d�ef fd�dׄZ�d�e�d�ef d
e�d�ef fd�dڄZ�d�d�d܄Z�� Z�S )��RequestHandleraF Base class for HTTP request handlers.
Subclasses must define at least one of the methods defined in the
"Entry points" section below.
Applications should not construct `RequestHandler` objects
directly and subclasses should not override ``__init__`` (override
`~RequestHandler.initialize` instead).
)�GET�HEAD�POST�DELETE�PATCH�PUT�OPTIONSz[\x00-\x08\x0e-\x1f]FN�application�Application�request�kwargs�returnc s� t � �� |� _|� _d� _d� _d� _d � _t� fdd�|j �
� D ��� _t� |j
�� jd<