
    h                     v    S r SSKJr  \" S/ SQ5      r\" S/ SQ5      rS rS rS	 rS
 rS r	S r
S rS rS rg)z
Helper function for returning the field information that is associated
with a model class. This includes returning all the forward and reverse
relationships and their associated metadata.

Usage: `get_field_info(model)` returns a `FieldInfo` instance.
    )
namedtuple	FieldInfo)pkfieldsforward_relationsreverse_relationsfields_and_pk	relationsRelationInfomodel_fieldrelated_modelto_manyto_fieldhas_through_modelreversec                     U R                   R                  R                   n[        U5      n[        U5      n[	        U5      n[        U5      n[        X#5      n[        XE5      n[        X#XEXg5      $ )z
Given a model class, returns a `FieldInfo` instance, which is a
`namedtuple`, containing metadata about the various field types on the model
including information about their relationships.
)	_metaconcrete_model_get_pk_get_fields_get_forward_relationships_get_reverse_relationships_merge_fields_and_pk_merge_relationshipsr   )modeloptsr   r   r   r   r	   relationshipss           Q/var/www/html/env/lib/python3.13/site-packages/rest_framework/utils/model_meta.pyget_field_infor       sl     ;;%%++D	BF248248(4M():NMR!2"3 3    c                    U R                   nUR                  nU(       aa  UR                  (       aP  UR                  R                  R                  R                   nUR                  nU(       a  UR                  (       a  MP  U$ N)r   remote_fieldparent_linkr   r   )r   r   rels      r   r   r   0   sU    	B
//C
#//__""((++oo #///
 Ir!   c                     0 nU R                    Vs/ s H*  o"R                  (       d  M  UR                  (       a  M(  UPM,     sn H  nX!UR                  '   M     U$ s  snf r#   )r   	serializer$   name)r   r   fields      r   r   r   <   sL    F%)[[_[EOO%EL^L^%[_"uzz ` M `s   AAAc                 H    [        U SS 5      =(       a    U R                  S   $ )N	to_fieldsr   )getattrr,   )r*   s    r   _get_to_fieldr.   D   s    5+t,C1CCr!   c           
      @   0 nU R                    Vs/ s H*  o"R                  (       d  M  UR                  (       d  M(  UPM,     sn H:  n[        UUR                  R                  S[        U5      SSS9XR                  '   M<     U R                   Vs/ s H  o"R                  (       d  M  UPM     sn H^  n[        UUR                  R                  SSUR                  R                  R                  R                  (       + SS9XR                  '   M`     U$ s  snf s  snf )2
Returns a dict of field names to `RelationInfo`.
Fr   TN)r   r(   r$   r   r   r.   r)   many_to_manythroughr   auto_created)r   r   r*   s      r   r   r   H   s     %)[[[[EOO%HZHZ%[[(4,,22"5)#)
**% \ &*%6%6J%6E//%%6J(4,,22&&..44AAA
)
**% K 1 \ Ks   DDDD)Dc                    0 nU R                    Vs/ s H!  o"R                  R                  (       a  M  UPM#     nnU H^  nUR                  5       n[	        SUR
                  UR                  R                  R                  [        UR                  5      SSS9X'   M`     U R                    Vs/ s H!  o"R                  R                  (       d  M  UPM#     nnU H  nUR                  5       n[	        SUR
                  SS[        UR                  R                  SS5      SL=(       a9    UR                  R                  R                  R                  R                  (       + SS9X'   M     U$ s  snf s  snf )r0   NFTr   r2   )related_objectsr*   r1   get_accessor_namer   r   r$   multipler.   r-   r2   r   r3   )r   r   rall_related_objectsrelationaccessor_name all_related_many_to_many_objectss          r   r   r   h   sC    &*&:&:W&:''BVBV1&:W' 224+7"00NN//88"8>>2#,
( ( 483G3G'`3Ga77K_K_3G$'`4 224+7"0044iFdR KNN//77==JJJ,
( 5 ; X (as   E-E--E2E2c                 F    SX R                   U 0nUR                  U5        U$ )Nr   )r)   update)r   r   r	   s      r   r   r      s&    2ww+M r!   c                     0 U EUE$ r#    )r   r   s     r   r   r      s    55#455r!   c                     [        U S5      =(       a3    [        U R                  S5      =(       a    U R                  R                  $ )zW
Given a model class, returns a boolean True if it is abstract and False if it is not.
r   abstract)hasattrr   rB   )r   s    r   is_abstract_modelrD      s0     5'"`wu{{J'G`EKKL`L``r!   N)__doc__collectionsr   r   r   r    r   r   r.   r   r   r   r   rD   r@   r!   r   <module>rG      sd    #{ % 	 . + 3&	D@"J6ar!   