
    E6ij              
          d dl Z d dlZd dlmZmZ d dlmZ d dlmZ d dl	m
Z
 ddlmZ ddlmZmZmZ dd	lmZ dd
lmZmZmZ ddlmZ d dlmZ dddddZededededddiZ  ejB                  d      Z"dZ#de#iZ$ ejB                  dejJ                        Z& ejB                  dejN                        Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d$d Z1d! Z2 G d" d#e3      Z4y)%    N)isclassgetdoc)OrderedDict)Hashable)current_app   )fields)Model	ModelBaseOrderedModel)RequestParser)mergenot_nonenot_none_sorted)
HTTPStatus)quoteintegernumberstring)intfloatr   defaultbooleanvoidz<(?:[^:<>]+:)?([^<>]+)>Successdescriptionz8^:raises\s+(?P<name>[\w\d_]+)\s*:\s*(?P<description>.*)$ao  
    (?P<static>[^<]*)                           # static rule data
    <
    (?:
        (?P<converter>[a-zA-Z_][a-zA-Z0-9_]*)   # converter name
        (?:\((?P<args>.*?)\))?                  # converter arguments
        \:                                      # variable delimiter
    )?
    (?P<variable>[a-zA-Z_][a-zA-Z0-9_]*)        # variable name
    >
    c                 z    t        | t              r| j                  n| }ddj                  t	        |d            iS )z*Return a reference to model in definitions$refz#/definitions/{0} )safe)
isinstancer   nameformatr   )modelr"   s     V/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/flask_restx/swagger.pyrefr&   >   s4    #E955::5D'..uT/CDEE    c                 *    t        |       r |        S | S )zDereference values (callable))callable)values    r%   _vr+   D   s    uo57050r'   c                 .    t         j                  d|       S )zB
    Transform a Flask/Werkzeug URL pattern in a Swagger one.
    z{\1})RE_URLsub)paths    r%   extract_pathr0   I   s     ::gt$$r'   c              #     K   d}t        |       }t        j                  }t               }||k  r || |      }|nu|j	                         }|d   r
dd|d   f |d   }|d   xs d}||v rt        d|d      |j                  |       ||d	   xs d|f |j                         }||k  r||k  r#| |d }	d
|	v sd|	v rt        d|       dd|	f yyw)aB  
    Parse a rule and return it as generator. Each iteration yields tuples in the form
    ``(converter, arguments, variable)``. If the converter is `None` it's a static url part, otherwise it's a dynamic
    one.

    Note: This originally lived in werkzeug.routing.parse_rule until it was removed in werkzeug 2.2.0.
    r   Nstaticvariable	converterr   zvariable name z used twice.args><zmalformed url rule: )lenRE_PARSE_RULEmatchset	groupdict
ValueErroraddend)
ruleposr?   do_match
used_namesmdatar3   r4   	remainings
             r%   
parse_rulerG   P   s     C
d)C""HJ
)T39{{}>d8n,,
#%2	z!~h\FGGx f-x77eeg ) SyJ	)si/3D8<==D)##	 s   B-C0)Cc                     t               }t        |       D ]Y  \  }}}|s
|ddd}|t        v rt        |   |d<   n0|t        j                  j
                  v rd|d<   nt        d|z        |||<   [ |S )zM
    Extract Flask-style parameters from an URL pattern as Swagger ones.
    r/   T)r"   inrequiredtyper   zUnsupported type converter: %s)r   rG   
PATH_TYPESr   url_map
convertersr=   )r/   paramsr4   	argumentsr3   params         r%   extract_path_paramsrR   q   s     ]F*4T*: !&	9h!TB
"&y1E&M+--888$E&M=	IJJ x! Mr'   c                 `    | j                  dd        | j                  dd        t        |       S )NrI   r"   )pop_clean_header)rQ   s    r%   _param_to_headerrV      s)    	IIdD	IIfdr'   c                    t        | t              rd| i} | j                  dd      }t        |t              r|t        v rt        |   | d<   t        |       S t        |t
        t        f      r:t        |      dk(  r,|d   t        v r!d| d<   dt        |d      i| d<   t        |       S t        |d      r&| j                  |j                         t        |       S || d<   t        |       S )	Nr   rK   r   r   r   arrayitems
__schema__)r!   strgetr   PY_TYPESlisttupler8   hasattrupdaterZ   r   )headertypedefs     r%   rU   rU      s    &#(jj*G'8$H)<!'*v F 	7T5M*LAAJ(" v!8GAJ#78w
 F	 
,	'g(() F !vFr'   c                    t        |       }|r5|j                  d      j                  d      d   j                  d      d   nd }i }|r0|j                  |d      j	                  d      j                  d      nd }t
        j                  |xs d      D ]I  }|j                  d      ||j                  d      <   |s)|j                  |j                  d      d      }K ||xs d |xs d d g |d	}|S )
Nz 

r   .r   z. 
r   r"   )rawsummarydetailsreturnsrO   raises)r   stripsplitreplacelstrip	RE_RAISESfinditergroup)objrg   rh   rk   ri   r:   parseds          r%   parse_docstringru      s    
+C?Bcii$$T*1-33C8;GFFIckk'2&--f5;;EBtG##CI2. :&+kk-&@u{{6"#ooekk!nb9G:
 ?d?dF Mr'   c                 D    |du ryt        | d      xr | j                  du S )z|
    Determine whether a Resource has been hidden from Swagger documentation
    i.e. by using Api.doc(False) decorator
    FT
__apidoc__)r`   rw   )resource	route_docs     r%   	is_hiddenrz      s,    
 Ex.O83F3F%3OOr'   c                 \    i }| D ]  }d|j                  dd      i||d   <    dddd|dd	S )
a  
    :param body_params: List of JSON schema of body parameters.
    :type body_params: list of dict, generated from the json body parameters of a request parser
    :return dict: The Swagger schema representation of the request body

    :Example:
        {
            'name': 'payload',
            'required': True,
            'in': 'body',
            'schema': {
                'type': 'object',
                'properties': [
                    'parameter1': {
                        'type': 'integer'
                    },
                    'parameter2': {
                        'type': 'string'
                    }
                ]
            }
        }
    rK   r   r"   payloadTbodyobject)rK   
propertiesr"   rJ   rI   schema)r\   )body_paramsr   rQ   s      r%   $build_request_body_parameters_schemar      sU    2 J J%+UYYvx-H$I
5=!J #:>	 r'   c                       e Zd ZdZd Zd Zd Zd ZddZd Z	d	 Z
dd
Zd Zd Zd Zd Zd Zd ZddZd Zd Zd Zd Zd Zd Zd Zy)Swaggerz>
    A Swagger documentation wrapper for an API instance.
    c                      || _         i | _        y N)api_registered_models)selfr   s     r%   __init__zSwagger.__init__   s    "$r'   c                 @   | j                   j                  }t        |      dkD  r|j                  d      r|dd }t	        | j                   j
                        t	        | j                   j                        d}| j                   j                  r"t	        | j                   j                        |d<   | j                   j                  r"t	        | j                   j                        |d<   | j                   j                  r| j                   j                  s| j                   j                  r`t	        | j                   j                        t	        | j                   j                        t	        | j                   j                        d|d	<   | j                   j                  r_d
t	        | j                   j                        i|d<   | j                   j                  r%t	        | j                   j                        |d   d<   i }| j                  | j                         }| j                         }| j                   j                   D ]`  }|j"                  D ]O  \  }}}	}
| j                   j%                  ||      D ])  }t'        |      } | j(                  |||fd|	i|
}|||<   + Q b t*        j,                  d   r,| j                   j.                  D ]  }| j1                  |        | j                   j                   D ]o  }|j2                  s| j                   j2                  i | j                   _        t5        | j                   j2                  |j2                        | j                   _        q d|t7        |      |t9        | j                   j:                  j=                               dg| j                   j2                  xs d| j?                  | j                   j@                        xs d|| jC                         xs d|xs d| jE                         d}tG        |      S )z
        Output the specification as a serializable ``dict``.

        :returns: the full Swagger specification in a serializable format
        :rtype: dict
        r   /N)titleversionr   termsOfService)r"   emailurlcontactr"   licenser   ry   RESTX_INCLUDE_ALL_MODELSz2.0zapplication/json)swaggerbasePathpathsinfoproducesconsumessecurityDefinitionssecuritytagsdefinitions	responseshost)$r   	base_pathr8   endswithr+   r   r   r   	terms_urlr   contact_emailcontact_urlr   license_urlextract_tagsregister_errors
namespaces	resourcesns_urlsr0   serialize_resourcer   configmodelsregister_modelauthorizationsr   r   r^   representationskeyssecurity_requirementsr   serialize_definitionsget_hostr   )r   basepathinfosr   r   r   nsrx   urlsry   kwargsr   r/   
serializedrD   specss                   r%   as_dictzSwagger.as_dict   sa    88%%x=1!2!23!7}H'$((**+
 88#%dhh&:&:#;E- 88&(););&<E"#88!7!7488;O;O488++,DHH223$((../ E)
 88 &488+;+;(<=E)xx##*,TXX-A-A*Bi '  * ((*	((%% 	-B57\\ -1$	688++B5 -C',D!8!8!8Hc"5>"BH"J #-E$K--	- 89XX__ '##A&' ((%% 	B  88**2.0DHH+*/HH++R->->+'		  $U+TXX55::<=+,#'88#:#:#Bd224883D3DEM557?4"*dMMO
 r'   c                     t         j                  j                  dd       xs d }|rg| j                  j                  rQ| j                  j                  j
                  r1dj                  | j                  j                  j
                  |f      }|S )NSERVER_NAMErf   )r   r   r\   r   	blueprint	subdomainjoin)r   hostnames     r%   r   zSwagger.get_host6  sh    %%))->F$**txx/A/A/K/Kxx!3!3!=!=x HIHr'   c                    g }i }|j                   D ]  }t        |t              rd|i}nQt        |t        t        f      r|d   |d   d}n/t        |t
              rd|v rnt        dj                  |            |j                  |       |||d   <    |j                  D ]  }|j                  st        d |j                  D              r-|j                  |vrC|j                  |j                  r|j                  |j                  dnd|j                  i       ~|j                  s|j                  ||j                     d<    |S )Nr"   r   r   )r"   r   zUnsupported tag format for {0}c              3   ^   K   | ]%  }t        |j                  |j                          ' yw)ry   N)rz   rx   ry   ).0rs     r%   	<genexpr>z'Swagger.extract_tags.<locals>.<genexpr>O  s"     VA9QZZ1;;??Vs   +-r   )r   r!   r[   r^   r_   dictr=   r#   appendr   r   allr"   r   )r   r   r   by_nametagr   s         r%   r   zSwagger.extract_tags<  s0   88 
	'C#s#smC$/"1vc!f=C&6S= !A!H!H!MNNKK#&GCK 
	' .. 	AB<<VVVwwg%~~  WWR^^D "''*
 24.. /	A r'   Nc           
         |i n|}|du ryt        t        |di       |      }|du ry|rdj                  |j                  |      n|j                  |d<   t        | j	                  |      |j                  dt                           }t        |t        |            }|j                         D ci c]  \  }}||j                  dd      f| }}}t               |j                  xs g D 	cg c]  }	|	j                          }
}	|
D ]3  }|j                  |t                     }t        ||      }t        |d      r|j                  }nt        |d	      r|j                  }t        |t        |dt                           }|durt        |      |d
<   | j	                  |      t        |j                  di             t        fd|j                         D              }t        |      |d<   |d   j                         D ]/  \  }}||j                  dd      f}||v sj!                  |       1 |||<   6 rq|
D ]l  }|j                  |      }|s|d   xs i j                         D ci c]  \  }}||j                  dd      f| }}}D ]  }||vs||   |d   |d   <    n t        fd|j                         D              |d<   |S c c}}w c c}	w c c}}w )NFrw   z{}_{}r"   rO   rI   queryim_func__func__	docstringc              3   6   K   | ]  \  }}|v s||f  y wr    )r   kvmethod_paramss      r%   r   z/Swagger.extract_resource_doc.<locals>.<genexpr>}  s%      /#q!m9KQF/s   	r   c              3   <   K   | ]  \  }}|vs|d    |f  yw)r   Nr   )r   r   pneed_to_go_downs      r%   r   z/Swagger.extract_resource_doc.<locals>.<genexpr>  s)      $
!Qq7OQqT1I$
s   )r   getattrr#   __name__expected_paramsr\   r   rR   rY   r;   methodslowerr`   r   r   ru   r>   )r   rx   r   ry   docrO   nr   	up_paramsrD   r   method
method_docmethod_implinherited_paramsr"   rQ   keyr   r   s                     @@r%   extract_resource_doczSwagger.extract_resource_doc[  s   #+B	GHlB7C%<
 7@GNN8,,c2XEVEV 	F t++C0#''(KM2RSv2378>DllnMdaatW-.1M	M%&.&6&6&<"=1779== 	%F7J!(F3K{I.)11j1)22GK{}MJ &*9+*F
;' $ 4 4Z @ %mZ^^Hb5Q R#. /'-||~/ $  (--=}'M
8$#-h#7#=#=#? 1KD%4!9:Ci''++C01 %CK-	%4 ! 
F WWV_
! ",H!5!; B B D1 dG,-q0  + FC&(7@~
8,SV4F
F $ $
"+//"3$
 
H 
Y N=@s   2K0K"7K'c           	         t               }d|vr|S |j                  dg       D ]  }t        |t              rat        d |j                  D              }|j                  |       |j                  D cg c]  }|d   dk(  s| }}|sft        |      |d<   ut        |t              r#t        ddd| j                  |      d      |d<   t        |t        t        f      st        |      dk(  r)|\  }}t        ddd| j                  |      |d	      |d<   t        ddd| j                  |      d      |d<    |S c c}w )
Nexpectc              3   <   K   | ]  }|d    dk7  s|d   |f  yw)rI   r}   r"   Nr   r   r   s     r%   r   z*Swagger.expected_params.<locals>.<genexpr>  s(      ,'(4FARQvYN,s   rI   r}   r|   Tr      )r"   rJ   rI   r   r   )r   r\   r!   r   rZ   ra   r   r   r   serialize_schemar^   r_   r8   )	r   r   rO   r   parser_paramsr   r   r$   r   s	            r%   r   zSwagger.expected_params  sf   3Mggh+ *	F&-0 + ,,2,=,=, ! m,*0*;*;QQqw&?PqQQ(L#)F9% FI.$, )$($"&"7"7"?	%y! FT5M2v;!#)/&E;(0$-(,"(&*&;&;E&B+6)F9% )1$-(,"(&*&;&;F&C	)F9%G*	V I Rs   2E  E c                 j   i }| j                   j                  j                         D ]  \  }}t        |      }d|d   i}t	        |di       }| j                  ||       d|v r7t        |d   j                               d   \  }}}| j                  |      |d<   t        |      ||j                  <    |S )Nr   rh   rw   r   r   r   )r   error_handlersrY   ru   r   process_headersr^   valuesr   r   r   )	r   r   	exceptionhandlerr   responseapidoc_r$   s	            r%   r   zSwagger.register_errors  s    	"&(("9"9"?"?"A 	?Iw!'*C%s9~6HWlB7F  62f$"6+#6#=#=#?@C5!%)%:%:5%A",4X,>Ii(()	? r'   c                    | j                  |||      }|du ry d| j                  |      xs d i}|j                  xs g D cg c]  }|j                          c}D ]e  }	|j	                  dg       D cg c]  }|j                          }
}||	   du s|
r|	|
vr>| j                  ||	      ||	<   |j                  g||	   d<   g t        |      S c c}w c c}w )Nr   F
parametersr   r   )r   parameters_forr   r   r\   serialize_operationr"   r   )r   r   rx   r   ry   r   r   r/   rD   r   r   s              r%   r   zSwagger.serialize_resource  s    ''#'K%<d11#6>$?*2*:*:*@bAQqwwyA 	-F*0**Y*CDQqwwyDGD6{e#w63H33C@DL$&GG9DL 	- ~ BDs   C4Cc           	         | j                  ||      xs d ||   d   d   | j                  ||      xs d | j                  ||      | j                  ||         xs d | j	                  ||      d}d||   v r||   d   |d<   |j                  d      s||   j                  d      rd|d<   t        |j                  di       j                               }||d   xs g z   }|r2t        d	 |D              r t        d
 |D              rdg|d<   nddg|d<   |j                  | j                  ||             t        |      S )Nr   rh   )r   rh   r   operationIdr   r   r   
deprecatedTrO   r   c              3   ,   K   | ]  }|d    dk(    yw)rI   formDataNr   r   s     r%   r   z.Swagger.serialize_operation.<locals>.<genexpr>  s     Hag3H   c              3   ,   K   | ]  }|d    dk(    yw)rK   fileNr   r   s     r%   r   z.Swagger.serialize_operation.<locals>.<genexpr>  s     ;11V9&;r  zmultipart/form-datar   z!application/x-www-form-urlencoded)responses_fordescription_foroperation_id_forr   security_forr\   r^   r   anyra   vendor_fieldsr   )r   r   r   	operation
doc_params
all_paramss         r%   r   zSwagger.serialize_operation  sZ   ++C8@D6{;/	://V<D00f=--c&k:Bd))#v6
	 V$$'K
$;Ij!77< CKOOL$A&*Il##''(B/6689
9\#:#@bA
#HZHH;
;;)>(?	*% 8))	*% 	++C89	""r'   c                 h    t        d ||   j                  di       j                         D              S )z
        Extract custom 3rd party Vendor fields prefixed with ``x-``

        See: https://swagger.io/specification/#specification-extensions
        c              3   n   K   | ]-  \  }}|j                  d       r|ndj                  |      |f / yw)zx-zx-{0}N)
startswithr#   r   r   r   s      r%   r   z(Swagger.vendor_fields.<locals>.<genexpr>	  s7      
1 ,,t$Q'..*;Q?
s   35vendor)r   r\   rY   r   r   r   s      r%   r  zSwagger.vendor_fields  s6      
F"5;;=
 
 	
r'   c                 
   g }d|v r|j                  |d   xs d       ||v rd||   v r|j                  ||   d          ||   d   d   r|j                  ||   d   d          dj                  |      j                         S )zDExtract the description metadata and fallback on the whole docstringr   r   r   ri   re   )r   r   rl   )r   r   r   partss       r%   r	  zSwagger.description_for  s    CLL]+1r2S=]c&k9LLV]34v;{#I.LLV[1)<=yy%%''r'   c                 ^    d||   v r||   d   S | j                   j                  |d   |      S )zExtract the operation ididr"   )r   
default_idr  s      r%   r
  zSwagger.operation_id_for  sB     s6{" K	
 $$S[&9	
r'   c                 l   g }|d   j                         D ]  \  }}||d<   d|vr	d|vrd|d<   d|vrd|d<   d|v rd|vr}|j                  dd       }t        |t        t        f      r&|d   }d	|d<   dt
        j                  ||      i|d
<   n/t        |t        t        d       f      r|t
        v rt
        |   |d<   |j                  |        |j                  d      }|rRt        j                  d   r?t        j                  d   ddddd}t        |t              r||d<   |j                  |       |S )NrO   r"   rK   r   r   rI   r   r   rX   rY   __mask__RESTX_MASK_SWAGGERRESTX_MASK_HEADERrb   maskzAn optional fields mask)r"   rI   rK   r#   r   r   )rY   r\   r!   r^   r_   r]   rK   r   r   r   r[   )r   r   rO   r"   rQ   ptypetypr   s           r%   r   zSwagger.parameters_for"  sM   x=..0 	!KD% E&MU"xu'< (f5 %d85#8		&$/edE]3(C$+E&M&,hll3.D%EE'Nd4j'9:u?P$,UOE&MMM% #	!( wwz"K&&';<#**+>?  8E $$#'i MM% r'   c           
         i }|||   fD ]2  }d|v r|d   j                         D ]  \  }}t        |      }t        |t              r|}d }i }	n6t        |      dk(  r|\  }}}	n!t        |      dk(  r|\  }}i }	nt	        d      |xs t
        }||v r||   j                  |       nd|i||<   |r2| j                  |      }
|	j                  d      }|rd||
ii}
|
||   d	<   | j                  ||   |||	j                  d
              d|v rot        |j                  dt        j                              }||vr(| j                  t        j                         ||      ||<   | j                  |d         ||   d	<   d|v sy|d   d   j                         D ]  \  }}| j                  j                  j                         D ]u  \  }}t!        |di       j                  di       }|r%t        t#        |j%                               d         nd }|sO|j&                  |k(  s_ddj)                  |      i||<      5 |sI| j                  t        j                         ||      |t        t        j                  j*                        <   |S )Nr      r   z"Unsupported response specification)r   r   enveloper   r   headersr$   default_coder   rk   rw   r   r   z#/responses/{0})rY   r[   r!   r8   r=   DEFAULT_RESPONSE_DESCRIPTIONra   r   r\   r   r   OKDEFAULT_RESPONSEcopyr   r   r   r^   r   r   r#   r*   )r   r   r   r   dcoder   r   r$   r   r   r%  r"   r   r   error_responsess                   r%   r  zSwagger.responses_forG  s   	c&k! 2	"Aa&'n&:&:&< ND(t9D!(C0&. $!#X!+5=2UFX!+-5*U!#()MNN"-"M1MKy(!$..;.G+8+*F	$!%!6!6u!=#)::j#9#&2Xv4F%GF4:	$1((!$ffjj6K16 !|155?@y(&*&:&:(--/f'IdO -1,A,A!G*,M	$)a)*;)A)G)G)I "%D+.2hh.E.E.K.K.M "*	7*1'<*L*P*P'+
  /  _%9%9%; <Q ?@!% 
  I$6$6$$>/57H7O7OPT7U.VIdO!""M2	"h 262F2F %%'f3Ic*----./ r'   c           
      .   |j                  |i       }d|v sd|v s|rxt        d t        j                  |j                  di       j	                         |j                  di       j	                         |xs i j	                               D              |d<   |S )Nr&  c              3   <   K   | ]  \  }}|t        |      f  y wr   )rU   r  s      r%   r   z*Swagger.process_headers.<locals>.<genexpr>  s&      'Aq M!$%'s   )r\   r   	itertoolschainrY   )r   r   r   r   r&  r   s         r%   r   zSwagger.process_headers  s    WWVR(
yJ6'"& '%OOGGIr*002NN9b1779]))+' #HY r'   c                 V    t        d | j                  j                         D              S )Nc              3   >   K   | ]  \  }}||j                   f  y wr   )rZ   )r   r"   r$   s      r%   r   z0Swagger.serialize_definitions.<locals>.<genexpr>  s$      
)4uT5##$
s   )r   r   rY   )r   s    r%   r   zSwagger.serialize_definitions  s+     
8<8O8O8U8U8W
 
 	
r'   c                 b   t        |t        t        f      r|d   }d| j                  |      dS t        |t              r| j                  |       t        |      S t        |t              r| j                  |       t        |      S t        |      r0t        |t        j                        r| j                   |             S t        |t        j                        r|j                  S t        |t        t        d       f      r|t        v rdt        |   iS t        dj!                  |            )Nr   rX   )rK   rY   rK   Model {0} not registered)r!   r^   r_   r   r   r   r&   r[   r   
issubclassr	   RawrZ   rK   r]   r=   r#   )r   r$   s     r%   r   zSwagger.serialize_schema  s    edE]+!HE..u5 
 y)&u:s#&u:U^
5&** =((11vzz*###d4j12u7HHUO,,3::5ABBr'   c                    t        |t              r|j                  n|}|| j                  j                  vrt        dj                  |            | j                  j                  |   }|| j                  v rt        |      S || j                  |<   t        |t              r"|j                  D ]  }| j                  |        t        |t        t        f      r&|j                         D ]  }| j                  |        t        |      S )Nr6  )r!   r   r"   r   r   r=   r#   r   r&   __parents__r   r
   r   r   register_field)r   r$   r"   r   parentfields         r%   r   zSwagger.register_model  s    'y9uzzutxx&7>>tDEE%4***u:(-%eY'++ ,##F+,ee\23 +##E*+5zr'   c                    t        |t        j                        r1|j                  j	                         D ]  }| j                  |        y t        |t        j                        r| j                  |j                         y t        |t        j                  t        j                  f      r| j                  |j                         y y r   )r!   r	   	Polymorphmappingr   r   NestednestedListWildcardr;  	container)r   r=  r$   s      r%   r;  zSwagger.register_field  s    eV--.--/ +##E*+v}}--V__=>0 ?r'   c                 ~    d }d|v r|d   }| j                  |      }d||   v r||   d   }| j                  |      }|S )Nr   )r   )r   r   r   r   auths        r%   r  zSwagger.security_for  sW    z?D11$7HV$v;z*D11$7Hr'   c                     t        |t        t        f      r|D cg c]  }| j                  |       c}S |r| j                  |      }|r|gS d S g S c c}w r   )r!   r^   r_   security_requirement)r   r*   r   requirements       r%   r   zSwagger.security_requirements  sY    edE]+:?@QD--a0@@33E:K$/K=9T9I As   Ac                     t        |t              r|g iS t        |t              r t        d |j                         D              S y )Nc              3   \   K   | ]$  \  }}|t        |t        t        f      r|n|gf & y wr   )r!   r^   r_   r  s      r%   r   z/Swagger.security_requirement.<locals>.<genexpr>  s2      Aq Ae}5AA3?s   *,)r!   r[   r   rY   )r   r*   s     r%   rI  zSwagger.security_requirement  sE    ec#2;t$ !KKM  
 r'   r   )NN)r   
__module____qualname____doc__r   r   r   r   r   r   r   r   r   r  r	  r
  r   r  r   r   r   r   r;  r  r   rI  r   r'   r%   r   r      s|    %HT>=~0d#:	

(
#J<|

C6 1
	r'   r   r   )5r1  reinspectr   r   collectionsr   collections.abcr   flaskr   r   r	   r$   r
   r   r   reqparser   utilsr   r   r   _httpr   urllib.parser   rL   r   r   r[   boolr]   compiler-   r(  r*  	MULTILINErp   VERBOSEr9   r&   r+   r0   rG   rR   rV   rU   ru   rz   r   r~   r   r   r'   r%   <module>r]     s    	 # # $   1 1 # 3 3   	
 	8)& 
.	/( !#?@ BJJ?	 


 JJ F1
%$B( ((P"JFf Fr'   