
    wdfw                         d Z ddlmZ ddlZddlZddlZddlmZ 	 ddl	m
Z
 n# e$ r	 ddlm
Z
 Y nw xY w G d de          ZdS )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
    )print_functionN)Stats)Profilec                   4    e Zd ZdZej        ddddfdZd ZdS )ProfilerMiddlewarea  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.
    -   ``{time}`` - The time of the request.

    If it is a callable, it will be called with the WSGI ``environ``
    dict and should return a filename.

    :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:: 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                 Z    || _         || _        || _        || _        || _        || _        d S N)_app_stream_sort_by_restrictions_profile_dir_filename_format)selfappstreamsort_byrestrictionsprofile_dirfilename_formats          a/var/www/book.euthymeo.com/html/venv/lib/python3.11/site-packages/werkzeug/middleware/profiler.py__init__zProfilerMiddleware.__init__I   s7     	)' /    c                    
 g dfd	

 fd}t                      }t          j                    }|                    |           d                              }t          j                    |z
  } j        t           j                  r                               }nt j                            d                             d          	                    d          
                    dd          pd|d	z  t          j                    
          }t          j                             j        |          }|                    |            j        t          | j                  }	 |	j         j          t%          d j                   t%          d                                        dd                     j                    |	j         j          t%          d j                   |gS )Nc                 ,     | ||           j         S r   )append)statusheadersexc_inforesponse_bodystart_responses      r   catching_start_responsez<ProfilerMiddleware.__call__.<locals>.catching_start_response\   s     N67H555 ''r   c                                                     }                     |            t          | d          r|                                  d S d S )Nclose)r   extendhasattrr'   )app_iterr%   environr#   r   s    r   runappz+ProfilerMiddleware.__call__.<locals>.runapp`   s]    yy*ABBH  ***x)) !     ! !r   r   REQUEST_METHOD	PATH_INFO/.rootg     @@)methodpathelapsedr   )r   zP--------------------------------------------------------------------------------)filez
PATH: {!r} zQ--------------------------------------------------------------------------------
r   )r   r   runcalljoinr   callabler   formatgetstripreplaceosr3   
dump_statsr   r   
sort_statsr   printprint_statsr   )r   r+   r$   r,   profilestartbodyr4   filenamestatsr%   r#   s   ```       @@r   __call__zProfilerMiddleware.__call__Y   s   	( 	( 	( 	( 	( 	( 	(	! 	! 	! 	! 	! 	! 	! 	! ))	xx&&)++%(-.. 
0099077"#34K0066s;;CCCMMWQW#f, 8   w||D$5x@@Hx(((<#'$,777EEdm,,(....,%%gkk+r&B&BCC$,WWWWEt122/5555vr   )__name__
__module____qualname____doc__sysstdoutr   rH   r
   r   r   r   r      sU        + +` z!I0 0 0 0 + + + + +r   r   )rL   
__future__r   os.pathr>   rM   r   pstatsr   cProfiler   ImportErrorrC   objectr   r
   r   r   <module>rU      s     & % % % % %  



                      i i i i i i i i i is   # 11