
    lDh]                        U d dl Zd dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZ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+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> dddddddiddigidddddddd g d d!Z?d"dd#d$dd%e&dz   idid&Z@d'd(d)d*d+d,d-ZAeeBeBf         eCd.<   d/ed0eeeBef         eeeBef                  f         fd1ZDd2d3d4ed5ed6e0d7eeee>d8         f         ef         d9eEd0eeeBef                  fd:ZFd2d3d;ee         d5ed6e0d7eeee>d8         f         ef         d9eEd0eeeBef                  fd<ZGd=ejH        d>eBd0eBfd?ZId=ejH        d>eBd0eBfd@ZJd=ejH        d>eBdAe
eB         d0eeBef         fdBZKd2d3d=ejH        dAe
eB         d5ed6e0d7eeee>d8         f         ef         d9eEd0eeeBef         eeBef         eeBef         f         fdCZLdDe	e:         d0ee         fdEZMdFddddddddd2dG
dHeBdIeBdJeBdKeeB         dLeeB         dDe	e:         dMee	e:                  dNeeeeBef                           dOeeeeBeeBef         f                           dPeeB         dQeeeBeeBef         f                  dReeeBeeBef         f                  d9eEd0eeBef         fdSZNdS )T    N)
AnyDictListOptionalSequenceSetTupleTypeUnioncast)routing)GenerateJsonSchemaJsonSchemaValue
ModelField	Undefinedget_compat_model_name_mapget_definitionsget_schema_from_model_fieldlenient_issubclass)DefaultPlaceholder)	Dependant)_get_flat_fields_from_paramsget_flat_dependantget_flat_params)jsonable_encoder)METHODS_WITH_BODY
REF_PREFIXREF_TEMPLATE)OpenAPI)Body
ParamTypes)Response)ModelNameMap)deep_dict_updategenerate_operation_id_for_pathis_body_allowed_for_status_code)	BaseModel)JSONResponse)	BaseRoute)HTTP_422_UNPROCESSABLE_ENTITY)LiteralValidationErrorobjectLocationarrayanyOftypestringinteger)titler1   itemsMessage)r4   r1   z
Error Type)locmsgr1   )r4   r1   
propertiesrequiredHTTPValidationErrordetailDetail$ref)r4   r1   r9   InformationSuccessRedirectionzClient ErrorzServer ErrorzDefault Response)1XX2XX3XX4XX5XXDEFAULTstatus_code_rangesflat_dependantreturnc                     i }g }| j         D ]K}t          |j        j        dd          }|j        j        }|||<   |                    ||j        i           L||fS )NTby_aliasexclude_none)security_requirementsr   security_schememodelscheme_nameappendscopes)rI   security_definitionsoperation_securitysecurity_requirementsecurity_definitionsecurity_names         V/users/jtampere/www/backend/venv/lib/python3.11/site-packages/fastapi/openapi/utils.py get_openapi_security_definitionsr[   N   s      . D P P. 06
 
 

 -<H.A]+!!=2F2M"NOOOO!333    T)separate_input_output_schemas	dependantschema_generatormodel_name_mapfield_mapping)
validationserializationr]   c           	      X   g }t          | d          }t          |j                  }t          |j                  }t          |j                  }	t          |j                  }
t          j        |ft          j        |ft          j	        |	ft          j
        |
fg}d}t          |j                  dk    r=|j        d         }t          |j        t                    rt          |j        dd          }|D ]5\  }}|D ]+}|j        }t          |dd          st#          |||||          }|j        }t          |j        d|          }|t          j	        k    r-|j        |j        k    r|r|j                            dd	          }||j        |j        |d
}|j        r
|j        |d<   t          |dd           }t          |dd           }|rt1          |          |d<   n|t2          k    rt1          |          |d<   t          |dd           rd|d<   |                    |           -7|S )NTskip_repeats   r   convert_underscoresinclude_in_schemafieldr_   r`   ra   r]   _-)nameinr:   schemadescriptionopenapi_examplesexampleexamples
deprecated)r   r   path_paramsquery_paramsheader_paramscookie_paramsr!   pathqueryheadercookielenr   type_r'   getattr
field_infor   aliasrn   replacevaluer:   rq   r   r   rS   )r^   r_   r`   ra   r]   
parametersrI   rv   rw   rx   ry   parameter_groupsdefault_convert_underscoresfirst_field
param_typeparam_groupparamr   param_schemarn   rh   	parameterrr   rs   s                           rZ   !_get_openapi_operation_parametersr   _   s    J'	EEEN.~/IJJK/0KLLL01MNNM01MNNM	+&		<(		M*		M*	 #'
>'((A--$215k/;; 	*1&(=t+ +' $4 *) *)
K  )	) )	)E)J:':DAA 6!1-+.K  L ;D") %+# # j///K5:--' . z))#s33  &!N&	 I % B+5+A	-(&z3EtLLj)T::G A(89I(J(J	*%%I%%'7'@'@	)$z<66 /*.	,'i((((S)	)T r\   
body_fieldc                 h   | sd S t          | t                    sJ t          | ||||          }t          t          | j                  }|j        }| j        }i }	|r||	d<   d|i}
|j        rt          |j                  |
d<   n'|j
        t          k    rt          |j
                  |
d<   ||
i|	d<   |	S )Nrj   r:   rp   rt   rs   content)
isinstancer   r   r   r    r   
media_typer:   rr   r   rs   r   )r   r_   r`   ra   r]   body_schemar   request_media_typer:   request_body_oairequest_media_contents              rZ   "get_openapi_operation_request_bodyr      s      tj*------)%#&C  K dJ122J#."H') 0'/$-5{,C" P,<'-
 -
j)) 
	y	(	(+;J<N+O+Oi(#57L"MYr\   routemethodc                     t          j        dt          d           | j        r| j        S | j        }t          | j        ||          S )Nzqfastapi.openapi.utils.generate_operation_id() was deprecated, it is not used internally, and will be removed soon   
stacklevel)rn   rz   r   )warningswarnDeprecationWarningoperation_idpath_formatr%   rn   )r   r   rz   s      rZ   generate_operation_idr      s]     M	>	     "!!!D)uzVTTTTr\   c                 x    | j         r| j         S | j                            dd                                          S )Nrl    )summaryrn   r   r4   r   r   s     rZ   generate_operation_summaryr      s8    } }:c3''--///r\   operation_idsc                    i }| j         r
| j         |d<   t          | |          |d<   | j        r
| j        |d<   | j        p| j        }||v r]d| d| j        j         z   }t          | j        di                               d          }|r|d	| z  }t          j
        |d
           |                    |           ||d<   | j        r
| j        |d<   |S )Ntagsr   r   rq   zDuplicate Operation ID z for function __globals____file__z at rg   r   operationIdru   )r   r   rq   r   	unique_idendpoint__name__r   getr   r   addru   )r   r   r   	operationr   message	file_names          rZ   get_openapi_operation_metadatar      s    !#Iz '!J	&5E&QQQIi 5#(#4	- %8L}$$BlBBB(*+ 	 ENM2>>BB:NN	 	*)i)))Gg!,,,,l###+Im 3"'"2	,r\   c           
        + i }i }i }| j         
J d            t          | j        t                    r| j        j        }	n| j        }	|	s
J d            |	j        }
| j        r| j         D ]}t          | ||          +g }t          | j	        d          }t          |          \  }}|r)+                    dg                               |           |r|                    |           t          | j	        ||||          }|                    |           |rQd	 |D             }d
 |D             }|                    |           t          |                                          +d<   |t"          v r t%          | j        ||||          }|r|+d<   | j        rUi }| j        D ]F}t          |t*          j                  r*t/          ||||||          \  }}}|j        |i||j        <   G|+d<   | j        t7          | j                  }nct9          j        |	j                  }|j                             d          }|.t          |j!        tD                    rt7          |j!                  }| j#        +                    di                               |i           d<   |
rtI          | j                  rddi}tK          |	tL                    r#| j'        rtQ          | j'        ||||          }ni }|+                    di                               |i                               di                               |
i           d<   | j)        r+                    di           }| j)        *                                D ]\  }}|+                                } | ,                    dd            t7          |          -                                }!|!dk    rd}!|                    |!i           }"t          | t\                    s
J d            | j/                             |          }#d }$|#rftQ          |#||||          }$|
pd}%|                     di                               |%i                               di           }&ta          |&|$           tb                               t7          |          -                                          p0td          j3        j)                             tE          |                    }'|                      d          p|"                     d          p|'pd}(ta          |"|            |(|"d<   t7          th                    })tk          | j	                  }*|*s| j        r`tm          +fd|)ddfD                       sBd ddd!tn          d"z   iiid#+d         |)<   d$|vr"|                    tp          tr          d%           | j:        rta          +| j:                   +||;                                <   |||fS )&NzMethods must be a listz.A response class is needed to generate OpenAPI)r   r   r   Tre   )rI   security)r^   r_   r`   ra   r]   c                 0    i | ]}|d          |d         f|S )ro   rn    .0r   s     rZ   
<dictcomp>z$get_openapi_path.<locals>.<dictcomp>*  s4     " " "<AU4[%-0%" " "r\   c                 Z    i | ](}|                     d           |d         |d         f|)S )r:   ro   rn   )r   r   s     rZ   r   z$get_openapi_path.<locals>.<dictcomp>-  sI     ' ' 'yy,,'4[%-0%' ' 'r\   r   )r   r_   r`   ra   r]   requestBodyr   r   r_   r`   ra   r]   	callbacksstatus_code	responsesrq   r1   r2   rj   r   rp   rQ   rG   defaultz%An additional response must be a dictzapplication/jsonzAdditional Responsec              3   ,   K   | ]}|d          v V  dS )r   Nr   )r   statusr   s     rZ   	<genexpr>z#get_openapi_path.<locals>.<genexpr>  sI       B B )K00B B B B B Br\   rE   zValidation Errorr>   r;   )rq   r   r,   )r,   r;   )<methodsr   response_classr   r   r   ri   r   r   r^   r[   
setdefaultextendupdater   listvaluesr   r   r   r   r   APIRouteget_openapi_pathrz   rn   r   strinspect	signature__init__r   r   r   intresponse_descriptionr&   r   r(   response_fieldr   r   r5   copypopupperdictresponse_fieldsr$   rH   httpclientr*   r   anyr   validation_error_definition$validation_error_response_definitionopenapi_extralower),r   r   r_   r`   ra   r]   rz   security_schemesdefinitionscurrent_response_classroute_response_media_typer   r   rI   rU   rV   operation_parametersall_parametersrequired_parametersr   r   callbackcb_pathcb_security_schemescb_definitionsr   response_signaturestatus_code_paramresponse_schemaoperation_responsesadditional_status_codeadditional_responseprocess_responsestatus_code_keyopenapi_responserk   additional_field_schemar   additional_schemastatus_textrq   http422all_route_paramsr   s,                                              @rZ   r   r      s    D')"$K=$$&>$$$%&(:;; 6161E1K!&!5!SS#SSSS/E/P g-m f	- f	-F6F-  I 02J/dSSSN7W-8 8 84 "4 " P$$Z44;;<NOOO# > ''(<===#D/!1-+.K$ $ $  2333 H" "EO" " "' '!+' ' '# %%&9:::*.~/D/D/F/F*G*G	,'***#E$/%5#1"/2O$ $ $  $ @/?Im, 3	 % L LH!(G,<== L
 -"**7-=+9*7:W  	#/* 5=M73K	(-0)2	+& ,!%"344 &-%67M7V%W%W"$6$A$E$Em$T$T!$0!"3";SAA E&)*;*C&D&D *   b11<<["MM ) $-L!. . $ $*8"4%&<lKK 
-+ 	-*E"'"6-=+9*7:W+ + + +-
 $	 $$["55@@ *Y++JJ7PRT,U,U
  ,B&/&:&:;&K&K# _**,,*B *B *'':'?'?'A'A$$(($777&)*@&A&A&G&G&I&IO&)33*3':'E'E'( ($ &&6==  ?   "1556LMMEHL+ U2M"'-=+9*7:W3 3 3/ &?%TBT
,77	2FF'Z
B77'Z"55 *
 )):<STTT1C1G1G23399;;2 2 2P.2237M3N3NOO   ),,];; 1+//>>1&1 1	   %%57GHHH6A$]33788G.u??  E$4 c B B B B&y9B B B ? ? 
 $6*$vz<Q/Q&R- 3 3	+&w/ %K77&&/J3W    " A E,?@@@#,D  !;..r\   routesc                    g }g }g }g }| D ]}t          |dd           r
t          |t          j                  r|j        r>t          |j        t
                    s
J d            |                    |j                   |j        r|                    |j                   |j        r,|	                    |j        
                                           |j        r'|	                    t          |j                             t          |j                  }|	                    |           !|t          ||z   |z             z   }|S )Nri   z'A request body must be a Pydantic Field)r   r   r   r   r   r   rS   r   r   r   r   r   get_fields_from_routesr   r^   r   )r   body_fields_from_routesresponses_from_routesrequest_fields_from_routescallback_flat_modelsr   paramsflat_modelss           rZ   r  r    sy    13.035-/ 6 65-t44 	67#:
 :
 	6  A!%"2J??  =   (..u/?@@@# C%,,U-ABBB$ M%,,U-B-I-I-K-KLLL U$++,B5?,S,STTT$U_55F&--f555&"77:TT* * K r\   z3.1.0)
openapi_versionr   rq   webhooksr   serversterms_of_servicecontactlicense_infor]   r4   versionr  r   rq   r	  r   r
  r  r  r  c           	         | |d}|r||d<   |r||d<   |	r|	|d<   |
r|
|d<   |r||d<   ||d}|r||d<   i }i }i }t                      }t          t          |pg           t          |pg           z             }t          |          }t	          t
          	          }t          ||||
          \  }|pg D ]}t          |t          j	                  rt          ||||||          }|rx|\  }}}|r.|                    |j        i                               |           |r)|                    di                               |           |r                    |           |pg D ]}t          |t          j	                  rt          ||||||          }|rx|\  }}}|r.|                    |j        i                               |           |r)|                    di                               |           |r                    |           rfdt                    D             |d<   |r||d<   ||d<   |r||d<   |r||d<   t          t!          di |dd          S )N)r4   r  r   rq   termsOfServicer  license)openapiinfor
  )ref_template)fieldsr_   r`   r]   r   securitySchemesc                 "    i | ]}||         S r   r   )r   kr   s     rZ   r   zget_openapi.<locals>.<dictcomp>1  s     P P PqKN P P Pr\   schemas
componentspathsr	  r   TrL   r   )setr  r   r   r   r   r   r   r   r   r   r   r   r   sortedr   r   )r4   r  r  r   rq   r   r	  r   r
  r  r  r  r]   r  outputr  r  webhook_pathsr   
all_fieldsr`   r_   ra   r   resultrz   r   path_definitionswebhookr   s                                @rZ   get_openapir$    st     &+w??D "!Y *)] 2!1 "!Y '&Y)8$GGF $#y,.J')E/1M!eeM'V\r(:(:T(.b=Q=Q(QRRJ.z::N)|DDD!0)%&C	" " "M; 2 9 9eW-.. 	9%+!1-+.K  F  	9;A8&(8 I$$U%6;;BB4HHH# ))*;R@@GG(   $ 9&&'7888>r 9 9gw/00 	9%+!1-+.K  F  	9;A8&(8 S!,,W-@"EELLTRRR# ))*;R@@GG(   $ 9&&'7888 Q P P P PF;<O<O P P P
9 *)|F7O +*z vG--f--4PPPPr\   )Ohttp.clientr   r   r   typingr   r   r   r   r   r   r	   r
   r   r   fastapir   fastapi._compatr   r   r   r   r   r   r   r   fastapi.datastructuresr   fastapi.dependencies.modelsr   fastapi.dependencies.utilsr   r   r   fastapi.encodersr   fastapi.openapi.constantsr   r   r   fastapi.openapi.modelsr   fastapi.paramsr    r!   fastapi.responsesr"   fastapi.typesr#   fastapi.utilsr$   r%   r&   pydanticr'   starlette.responsesr(   starlette.routingr)   starlette.statusr*   typing_extensionsr+   r   r   rH   r   __annotations__r[   boolr   r   r   r   r   r   r   r  r$  r   r\   rZ   <module>r:     s          U U U U U U U U U U U U U U U U U U U U U U U U      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 6 5 5 5 5 5 1 1 1 1 1 1         
 . - - - - - Q Q Q Q Q Q Q Q Q Q * * * * * * + + + + + + + + & & & & & & & & & & & &         
       , , , , , , ' ' ' ' ' ' : : : : : : % % % % % %    2VY4GHI
 

 #H55&99  '&&    #j+<<=
 

( 
( $ !& & DcN   44
4S>4S#X//04 4 4 42 +/H H HH )H !	H
 j'"?@@A?RH $(H 
$sCx.H H H Hf +/" " "$" )" !	"
 j'"?@@A?R" $(" d38n" " " "JUU(+UU U U U0)9 03 03 0 0 0 0(+<?H	#s(^   F +/}/ }/ }/}/ s8}/ )	}/
 !}/ j'"?@@A?R}/ $(}/ 4S>4S>4S>9:}/ }/ }/ }/@Y	*   F #!!%.2+/:>&*489=*.\Q \Q \Q\Q \Q 	\Q
 c]\Q #\Q Y\Q x	*+\Q 4S#X'
(\Q d4U38_ 4567\Q sm\Q d3c3h/01\Q 4U38_ 456\Q $(\Q 
#s(^\Q \Q \Q \Q \Q \Qr\   