
    >|h                        d Z ddlZddlmZ ddlZddlmZ  ej                  d      Z	d Z
d Zd Zd	 Zd
 Zd Zej                   j"                  e
ej                   j$                  eej                   j&                  eej                   j(                  eej                   j*                  eej                   j,                  eiZ G d de      Zy)zapispec plugins    N)Mapping)
BasePluginz<(?:[^:<>]+:)?([^<>]+)>c                     ddi}|S )Ntypestring 	converterschemas     Y/var/www/html/test/engine/venv/lib/python3.12/site-packages/flask_smorest/spec/plugins.pybaseconverter2paramschemar      s    hFM    c                 $   ddi}t        j                  d      j                  | j                        d   j	                  d      }t        |d         |d<   t        |      dk(  rt        |d         |d<   |S |d   d	k7  rt        |d         |d<   |S )
Nr   r   z	{([^}]*)}r   ,	minLength   	maxLength )recompilefindallregexsplitintlen)r
   r   boundss      r   unicodeconverter2paramschemar      s    hFZZ%--ioo>qAGGLFfQi.F;
6{a!&)n{ M 
b!&)n{Mr   c                     ddi}| j                   | j                   |d<   | j                  | j                  |d<   | j                  st        |j                  dd      d      |d<   |S )Nr   integermaximumminimumr   maxminsignedgetr	   s     r   integerconverter2paramschemar'      sf    i F}} %MMy}} %MMy

9a 8!<yMr   c                     ddi}| j                   | j                   |d<   | j                  | j                  |d<   | j                  st        |j                  dd      d      |d<   |S )Nr   numberr    r!   r   r"   r	   s     r   floatconverter2paramschemar*   )   sf    hF}} %MMy}} %MMy

9a 8!<yMr   c                     ddi}| j                   dd j                  d      D cg c]  }t        j                  dd|       c}|d<   |S c c}w )	Nr   r      |z\\(.)z\1enum)r   r   r   sub)r
   r   ss      r   anyconverter2paramschemar2   4   s[    hF 2&,,S1  	x"F6N
 Ms   Ac                     ddd}|S )Nr   uuid)r   formatr   r	   s     r   uuidconverter2paramschemar6   >   s    &1FMr   c                   N     e Zd ZdZ fdZ fdZed        Zd Zd Z	d Z
 xZS )FlaskPluginzVPlugin to create OpenAPI paths from Flask rules

    Heavily copied from apispec.
    c                 X    t         |           t        t              | _        d | _        y N)super__init__dictDEFAULT_CONVERTER_MAPPINGconverter_mappingopenapi_version)self	__class__s    r   r<   zFlaskPlugin.__init__S   s$    !%&?!@#r   c                 F    t         |   |       |j                  | _        y r:   )r;   	init_specr@   )rA   specrB   s     r   rD   zFlaskPlugin.init_specX   s    $#33r   c                 .    t         j                  d|       S )znConvert a Flask URL rule to an OpenAPI-compliant path.

        :param str path: Flask path template.
        z{\1})RE_URLr0   )paths    r   flaskpath2openapizFlaskPlugin.flaskpath2openapi]   s     zz'4((r   c                 "    || j                   |<   y)zRegister custom path parameter converter

        :param BaseConverter converter: Converter.
            Subclass of werkzeug's BaseConverter
        :param callable func: Function returning a parameter schema from
            a converter intance
        N)r?   )rA   r
   funcs      r   register_converterzFlaskPlugin.register_convertere   s     -1y)r   c                    g }|j                   D cg c]  \  }}|du r||j                  vr| c}}D ]  }d|dd}|j                  |   }t        |      j                  D ]!  }|| j
                  v s| j
                  |   }	 n  	|      }
| j                  j                  dk  r|j                  |
       n|
|d<   |j                  |        |S c c}}w )zGet parameters from flask RuleTrH   )innamerequiredr,   r   )
_tracedefaults_convertersr   __mro__r?   r@   majorupdateappend)rA   ruleparams
is_dynamicaargumentparamr
   converter_classrK   r   s              r   rule_to_paramszFlaskPlugin.rule_to_paramso   s     "&

AT!at}}&< 
 	!H   E
 ((2I#'	?#:#: "d&<&<<11/BD )_F##))A-V$"(hMM% +	!, -
s   Cc                     | j                  |      D ]@  t        fd|D        d      }||j                  i |       0|j                         B | j	                  |j
                        S )z>Get path from flask Rule and set path parameters in operationsc              3   h   K   | ])  }t        |t              r|d    dk(  r|d   d   k(  r| + yw)rN   rH   rO   N)
isinstancer   ).0ppath_ps     r   	<genexpr>z*FlaskPlugin.path_helper.<locals>.<genexpr>   s?      "1g.dGv-fI7 s   /2N)r_   nextrV   rW   rI   rX   )rA   rX   
operations
parameterskwargsp_docre   s         @r   path_helperzFlaskPlugin.path_helper   s     ))$/ 	*F ' E   00%01!!&))	*, %%dii00r   )__name__
__module____qualname____doc__r<   rD   staticmethodrI   rL   r_   rl   __classcell__)rB   s   @r   r8   r8   M   s5    
$
4
 ) )161r   r8   )rp   r   collections.abcr   werkzeug.routingwerkzeugapispecr   r   rG   r   r   r'   r*   r2   r6   routingBaseConverterAnyConverterUnicodeConverterIntegerConverterFloatConverterUUIDConverterr>   r8   r   r   r   <module>r~      s     	 #   
.	/
 ""$=!!#;%%'C%%'C##%?""$= V1* V1r   