
    <%i(                     ~    d dl 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
 d dlmZmZmZmZ d dlmZ d	 Zd
 Zd Zy)    N)defaultdict)MutableMapping)camelize)api_settings)warn)ResolvedComponent	list_hashload_enum_name_overridessafe_ref)spectacular_settingsc           	      T
   d fd	fd}d }| j                  di       j                  di       }t               }t        t              }t        t              } |      D ]  \  }	}
|
j	                         D ]q  \  }}|j                  d      dk(  r|j                  d	      }t        |t              rd
|vr@ ||      }||   j                  |       ||   j                  |	|f       s  t        j                  }i }|j	                         D ]  \  }}|D ]  }||v r||   }nt        |      dk(  rt        |       | }nzt        ||         dk(  r5t        t        ||               \  }	}t        |	       t        |       | }n4t        |       |dd j                          | }t        d| d| d       |j                  ||      |k7  rt        d| d       ||= n|||<   ||||f<      |      D ]  \  }}
|
j	                         D ]  \  }}|j                  d      dk(  }|r|j                  d	      }t        |t              rd
|vrC|d
   }|d
   D cg c]	  }|dvs| c}|d
<    ||      }|j                  |      xs |||f   }|j	                         D ci c]  \  }}|dv s|| }}}|j	                         D ci c]  \  }}|dvs|| }}}t        j                   rj|j                  dd      j#                  d      r|j%                  d      |d<   n4d|j                  dd      v r |d   j'                  d      \  }}}d|z   |d<    |||      g}t        j(                  rd|v r|j+                   |d| d
dgi             d|v r]t        j,                  j#                  d      r|j+                   |d| ddi             n|j+                   |d| d
dgi             t        j,                  j#                  d      r2t        |d   t.              r|d   D cg c]
  }|dk7  s	| c}d   |d<   t        |      dk(  r|j1                  |d   j2                         n+|j1                  d|D cg c]  }|j2                   c}i       |rt5        |      |
|   d	<   t5        |      |
|<     j6                  j9                  t        j:                        | d<   t=        |        | S c c}w c c}}w c c}}w c c}w c c}w )!z
    simple replacement of Enum/Choices that globally share the same name and have
    the same choices. Aids client generation to not generate a separate enum for
    every occurrence. only takes effect when replacement is guaranteed to be correct.
    Nc              3     K   |sx| j                         D ]d  \  }} t        j                  rt        j                  dd|      }t        j
                  rt        j                  dd|      } | |      E d {    f y t        | t              r| D ]  } ||      E d {     y t        | t              r~| j                  d      r	|| d   f  | j                  dg       |      E d {     | j                  dg       |      E d {     | j                  dg       |      E d {    y y 7 7 7 L7 -7 w)Nz^Patched(.+)z\1z(.+)Request$
propertiesoneOfallOfanyOf)
itemsr   COMPONENT_SPLIT_PATCHresubCOMPONENT_SPLIT_REQUEST
isinstancelistdictget)schemacomponent_nameitemiter_prop_containerss      M/usr/local/footviz/venv/lib/python3.12/site-packages/drf_spectacular/hooks.pyr   z6postprocess_schema_enums.<locals>.iter_prop_containers   s1    *0,,. H&'==%'VVNE>%RN'??%'VVNE>%RN/GGGH % F/nEEEF%zz,'$f\&:::+FJJw,C^TTT+FJJw,C^TTT+FJJw,C^TTT &	 H F UTTs[   A3E 6D67(E D8 AE -D:. E D< E /D>0E 8E :E <E >E c                 x    t        | t         j                  ||       }j                  j                  |       |S )N)nametyper   object)r   SCHEMAregistryregister_on_missing)r"   r   	component	generators      r    create_enum_componentz7postprocess_schema_enums.<locals>.create_enum_component(   s;    %"))	
	 	..y9    c                 d    d| v r| d   S t        | d   D cg c]  }|dvs||f c}      S c c}w )Nx-spec-enum-idenum N)r	   )r   is     r    extract_hashz.postprocess_schema_enums.<locals>.extract_hash2   sB    v% *++ fVnT@Sq!fTUUTs   	--
componentsschemasr#   arrayr   r.         zOenum naming encountered a non-optimally resolvable collision for fields named "zq". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "z9". add an entry to ENUM_NAME_OVERRIDES to fix the naming.z4encountered multiple names for the same choice set (z). This may be unwanted even though the generated schema is technically correct. Add an entry to ENUM_NAME_OVERRIDES to fix the naming.r/   )r#   r.   )r#   r.   r-   descriptionr0   *z

*)r   Blankz3.1Nullnullr   r   )N)r   r
   r   setr   r   r   addr   ENUM_SUFFIXlenr   nextiter
capitalizer    ENUM_GENERATE_CHOICE_DESCRIPTION
startswithpop	partition#ENUM_ADD_EXPLICIT_BLANK_NULL_CHOICEappendOAS_VERSIONr   updaterefr   r&   buildAPPEND_COMPONENTS"postprocess_schema_enum_id_removal)resultr)   kwargsr*   r2   r4   	overridesprop_hash_mappinghash_name_mappingr   props	prop_nameprop_schemaprop_enum_cleaned_hashenum_suffixenum_name_mappingprop_hash_set	prop_hash	enum_name_is_arrayprop_enum_original_listr1   kvenum_schemapostr3   tcr   s    `                            @r    postprocess_schema_enumsrg      s   U$V jjr*..y"=G(*I#C(#C(!5g!> 	W&+kkm 	W"I{v&'1)oog6k>:fK>W%1+%>"i(,,-CD4599>9:UV	W	W '22K
 $5$;$;$= B 	=& 	BII%%i0	]#q('	23K=A	&y12a7$(.?	.J)K$L!'78)9L8Mk][	'	23IbqM4L4L4N3OP[}]	'[ )PPY{ [MN !$$Y	:iGJ9+ VM N
 &i0/8!),8Ay)457	BB@ )1 495&+kkm 3	9"I{"v.'9H)oog6k>:fK>W&1&&9#.9&.A"YQjEX1"YK$[1I *--i8c<MiYbNb<cI -8,=,=,?YDAq1HXCX1a4YKY,7,=,=,?oDAq1LnCn1a4oKo $DD??="5@@E1<1OK.r BB!,]!;!E!Eg!NJAq$14tK. &iDJ $GG00%%&;eK=<Q[adfcgZh&ij22+77BB5I"))*?${m@T^dfl]m*no"))*?${m@T^dgkfl]m*no $//::5AjQ\]cQdfjFk2=f2E&UQfq&UVW&XF#:!#"":a=#4#45""GZ-Haee-H#IJ,4[,Ai )#+K#8i g3	949n %--334H4Z4Z[F< 'vy9Me #Z Zo0 'V
 .Is6   $	T.T-T
:T
T
"T
<
T T T%c                 "    fd |        | S )z
    Iterative modifying approach to scanning the whole schema and removing the
    temporary helper ids that allowed us to distinguish similar enums.
    c                     t        | t              r%t        |       D ]  }|dk(  r| d=  | |           y t        | t        t        f      r| D ]
  } |        y y )Nr-   )r   r   r   tuple)
sub_resultkeyr   cleans      r    rm   z1postprocess_schema_enum_id_removal.<locals>.clean   sj    j$'J' +**"#34*S/*	+
 
T5M2" d 3r+    )rP   r)   rQ   rm   s      @r    rO   rO      s    
	 
&MMr+   c           
          dt         j                   d}| D cg c]2  \  }}}}|j                  |      s|j                  |dz         s||||f4 c}}}}S c c}}}}w )z
        preprocessing hook that filters out {format} suffixed paths, in case
        format_suffix_patterns is used and {format} path params are unwanted.
    {}/)r   FORMAT_SUFFIX_KWARGendswith)	endpointsrQ   format_pathpath
path_regexmethodcallbacks          r    preprocess_exclude_path_formatr{      sm    
 |778;K 3< .D*fhk*dmmK#<M.N 
z68,  s   7A
)r   collectionsr   collections.abcr   
inflectionr   rest_framework.settingsr   drf_spectacular.drainager   drf_spectacular.plumbingr   r	   r
   r   drf_spectacular.settingsr   rg   rO   r{   rn   r+   r    <module>r      s7    	 # *  0 )  :bJ*
r+   