
    %h                        S r SSKJr  SSKrSSKrSSKrSSKrSSK	J
r
   SSKJr  \R                  (       a  SSKJr  SSKJr  SSKJr   " S	 S
5      rg! \ a	    SSKJr   N<f = f)a9  
Application Profiler
====================

This module provides a middleware that profiles each request with the
:mod:`cProfile` module. This can help identify bottlenecks in your code
that may be slowing down your application.

.. autoclass:: ProfilerMiddleware

:copyright: 2007 Pallets
:license: BSD-3-Clause
    )annotationsN)Stats)Profile)StartResponse)WSGIApplication)WSGIEnvironmentc                  t    \ rS rSrSr\R                  SSSS4             S
S jjr      SS jrS	r	g)ProfilerMiddleware"   aa  Wrap a WSGI application and profile the execution of each
request. Responses are buffered so that timings are more exact.

If ``stream`` is given, :class:`pstats.Stats` are written to it
after each request. If ``profile_dir`` is given, :mod:`cProfile`
data files are saved to that directory, one file per request.

The filename can be customized by passing ``filename_format``. If
it is a string, it will be formatted using :meth:`str.format` with
the following fields available:

-   ``{method}`` - The request method; GET, POST, etc.
-   ``{path}`` - The request path or 'root' should one not exist.
-   ``{elapsed}`` - The elapsed time of the request in milliseconds.
-   ``{time}`` - The time of the request.

If it is a callable, it will be called with the WSGI ``environ`` and
be expected to return a filename string. The ``environ`` dictionary
will also have the ``"werkzeug.profiler"`` key populated with a
dictionary containing the following fields (more may be added in the
future):
-   ``{elapsed}`` - The elapsed time of the request in milliseconds.
-   ``{time}`` - The time of the request.

:param app: The WSGI application to wrap.
:param stream: Write stats to this stream. Disable with ``None``.
:param sort_by: A tuple of columns to sort stats by. See
    :meth:`pstats.Stats.sort_stats`.
:param restrictions: A tuple of restrictions to filter stats by. See
    :meth:`pstats.Stats.print_stats`.
:param profile_dir: Save profile data files to this directory.
:param filename_format: Format string for profile data file names,
    or a callable returning a name. See explanation above.

.. code-block:: python

    from werkzeug.middleware.profiler import ProfilerMiddleware
    app = ProfilerMiddleware(app)

.. versionchanged:: 3.0
    Added the ``"werkzeug.profiler"`` key to the ``filename_format(environ)``
    parameter with the  ``elapsed`` and ``time`` fields.

.. versionchanged:: 0.15
    Stats are written even if ``profile_dir`` is given, and can be
    disable by passing ``stream=None``.

.. versionadded:: 0.15
    Added ``filename_format``.

.. versionadded:: 0.9
    Added ``restrictions`` and ``profile_dir``.
)timecalls Nz/{method}.{path}.{elapsed:.0f}ms.{time:.0f}.profc                L    Xl         X l        X0l        X@l        XPl        X`l        g N)_app_stream_sort_by_restrictions_profile_dir_filename_format)selfappstreamsort_byrestrictionsprofile_dirfilename_formats          T/var/www/auris/envauris/lib/python3.13/site-packages/werkzeug/middleware/profiler.py__init__ProfilerMiddleware.__init__Y   s%     	)' /    c                $  ^ ^^^^ / mSUU4S jjmSUUUU 4S jjn[        5       n[        R                  " 5       nUR                  U5        SR                  T5      n[        R                  " 5       U-
  nT R                  b  [        T R                  5      (       a0  US-  [        R                  " 5       S.TS'   T R                  T5      nO`T R                  R                  TS   TS   R                  S	5      R                  S	S
5      =(       d    SUS-  [        R                  " 5       S9n[        R                  R                  T R                  U5      nUR                  U5        T R                  b  [        UT R                  S9n	U	R                  " T R                   6   [#        ST R                  S9  TR%                  SS5      n
[#        SU
< 3T R                  S9  U	R&                  " T R(                  6   [#        S S3T R                  S9  U/$ )Nc                .   > T" XU5        TR                   $ r   )append)statusheadersexc_inforesponse_bodystart_responses      r   catching_start_response<ProfilerMiddleware.__call__.<locals>.catching_start_responsen   s    6H5 '''r!   c                    > TR                  T[        R                  " ST5      5      n TR                  U 5        [	        U S5      (       a  U R                  5         g g )Nr   close)r   tcastextendhasattrr-   )app_iterr*   environr(   r   s    r   runapp+ProfilerMiddleware.__call__.<locals>.runappr   sN    yy1HIH   *x))  *r!   r!   g     @@)elapsedr   zwerkzeug.profilerREQUEST_METHOD	PATH_INFO/.root)methodpathr6   r   )r   zP--------------------------------------------------------------------------------)file zPATH: 
r   )returnNone)r   r   runcalljoinr   callabler   formatstripreplaceosr=   
dump_statsr   r   
sort_statsr   printgetprint_statsr   )r   r3   r)   r4   profilestartbodyr6   filenamestats	path_infor*   r(   s   ```        @@r   __call__ProfilerMiddleware.__call__i   s    &(	( 	(	! 	! )		xx&))+%(--..&/ IIK0+,  0090077"#34 -33C8@@cJTf#f,	 8  ww||D$5$5x@Hx(<<#'$,,7Edmm,(.K4IF9-(t||<t112XJb/5vr!   )r   r   r   r   r   r   )r   r   r   zt.IO[str] | Noner   zt.Iterable[str]r   zt.Iterable[str | int | float]r   z
str | Noner   strrA   rB   )r3   r   r)   r   rA   zt.Iterable[bytes])
__name__
__module____qualname____firstlineno____doc__sysstdoutr   rU   __static_attributes__r   r!   r   r
   r
   "   s    4r $'::#468"&P00 !0 !	0
 40  0 0 
0 2&28E2	2r!   r
   )r\   
__future__r   os.pathrI   r]   r   typingr.   pstatsr   cProfiler   ImportErrorrO   TYPE_CHECKING_typeshed.wsgir   r   r   r
   r   r!   r   <module>rh      sX    #  
      ??,..y y    s   A A#"A#