
    g
e                        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 d dlmZmZmZmZmZ d d	lmZmZmZmZ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#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. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 dZ5dZ6dZ7dZ8dZ9e5e6e8eeefZ: G d dejv                        Z< G d d      Z=y)    N)datetime	timedelta)forms)settings)messages)FieldListFilter)DisallowedModelAdminLookupDisallowedModelAdminToField)IS_FACETS_VARIS_POPUP_VARTO_FIELD_VARIncorrectLookupParameters
ShowFacets)%build_q_object_from_lookup_parametersget_fields_from_pathlookup_spawns_duplicatesprepare_lookup_valuequote)FieldDoesNotExistImproperlyConfiguredSuspiciousOperation)InvalidPage)FFieldManyToOneRelOrderBy)
LOOKUP_SEP)
Combinable)reverse)RemovedInDjango60Warning)	urlencode)func_supports_parameter)
make_aware)gettextallopqec                        e Zd Z fdZ xZS )ChangeListSearchFormc                 h    t        |   |i | t        t        j                  dd      i| _        y )NF)requiredstrip)super__init__
SEARCH_VARr   	CharFieldfields)selfargskwargs	__class__s      w/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/contrib/admin/views/main.pyr0   zChangeListSearchForm.__init__<   s0    $)&) eD
    )__name__
__module____qualname__r0   __classcell__)r7   s   @r8   r+   r+   ;   s    
 
r9   r+   c                   p    e Zd ZeZd Zd Zd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y)
ChangeListc                 ~   || _         |j                  | _        | j                  | _        |j	                  |      | _        || _        || _        || _        d | _	        d | _
        d | _        || _        || _        || _        |	| _        |
| _        || _        |j%                  |      | _        || _        || _        | j-                  |j.                        }|j1                         sD|j2                  j5                         D ]'  }t7        j8                  |dj;                  |             ) |j<                  j?                  t@              xs d| _!        	 tE        |j.                  j?                  tF        d            | _$        tL        |j.                  v | _'        tP        |j.                  v | _)        |jT                  tV        jX                  u xs0 |jT                  tV        jZ                  u xr t\        |j.                  v | _/        |jT                  tV        jZ                  u | _0        |j.                  j?                  tb              }|r |je                  ||      stg        d|z        || _4        tk        |j.                  jm                               | _7        tk        |j.                  jq                               | _9        tF        | jn                  v r"| jn                  tF        = | jr                  tF        = tt        | jn                  v r"| jn                  tt        = | jr                  tt        = | jw                  t\        g      | _<        | jw                  t\        di      | _=        | jR                  rd| _>        n|| _>        | j	                  |      | _?        | j                  |       | jR                  rt        d      }n2| j"                  j                  |      rt        d	      }nt        d
      }|| j                  j                  z  | _D        | j                  j                  j                  | _G        y # tJ        $ r d| _$        Y w xY w)Nz,     z"The field %s cannot be referenced.)removeT z	Select %szSelect %s to changezSelect %s to view)Hmodel_metaoptslookup_optsget_querysetroot_querysetlist_displaylist_display_linkslist_filterhas_filtershas_active_filtersclear_all_filters_qsdate_hierarchysearch_fieldslist_select_relatedlist_per_pagelist_max_show_allmodel_adminget_preserved_filterspreserved_filterssortable_bysearch_help_textsearch_form_classGETis_validerrorsvaluesr   errorjoincleaned_datagetr1   queryintPAGE_VARpage_num
ValueErrorALL_VARshow_allr   is_popupshow_facetsr   ALWAYSALLOWr   
add_facetsis_facets_optionalr   to_field_allowedr
   to_fielddictitemsparamslistsfilter_params
ERROR_FLAGget_query_stringremove_facet_linkadd_facet_linklist_editablequerysetget_resultsr$   has_change_permissionverbose_nametitlepkattname
pk_attname)r4   requestrE   rK   rL   rM   rQ   rR   rS   rT   rU   r|   rV   rY   rZ   _search_formr`   rr   r   s                      r8   r0   zChangeList.__init__G   sq   " 
KK	99(55g>("4&"&$(!,*#6 *!2&!,!B!B7!K& 0 --gkk:$$&%,,335w		%(89 6!..22:>D"
	! <=DM  7;;.$3%11Z5F5FF 
##z'7'77XMW[[<X 	 #."9"9Z=M=M"M;;??<0K88(K-4x?  !7;;,,./!'++"3"3"56t{{"H%""8,$J'"":.!%!6!6}o!6!N"33]D4IJ==!#D!.D))'2!==K(E33G<12E/0ETYY333
**--55M  	DM	s   .P( (P<;P<c                     d| j                   j                  d| j                  j                  d| j                  j                   j                  dS )N<z: model=z model_admin=>)r7   r<   rE   rV   )r4   s    r8   __repr__zChangeList.__repr__   s;    NN''JJ##&&33
 	
r9   Nc                 l    |xs | j                   }|j                         }t        D ]
  }||v s||=  |S )z:
        Return all params except IGNORED_PARAMS.
        )rw   copyIGNORED_PARAMS)r4   ru   lookup_paramsignoreds       r8   get_filters_paramszChangeList.get_filters_params   sC     -4-- &G-'!'* & r9   c           	         | j                         }d}d}t        | j                  j                  d      }|s<t	        j
                  d| j                  j                  j                   dt               |j                         D ]?  \  }}|D ]5  }|r|||fn||f}	 | j                  j                  |	 r(t        d| d       A g }
| j                  D ]  }t        |      }t        |      r  |||| j                  | j                        }nd }t        |t         t"        f      r|\  }}n|t$        j&                  }}t        |t(              s|}t+        | j                  |      d   } ||||| j                  | j                  |      }|t        |      kD  r|t-        | j.                  |      z  }|s|j1                         s|
j3                  |       |t        |      kD  sd	} | j4                  rD|j7                  d
| j4                  z  d       }|"|j7                  d| j4                  z  d       }|j7                  d| j4                  z  d       }	 t9        t;        |d         t;        ||d   nd      t;        ||d   nd            }|r|tA        d      z   }nA|r |tA        d      z   jC                  d      }n|jC                  |jD                  dz         }tF        jH                  rtK        |      }tK        |      }|jM                  d| j4                  z  |gd| j4                  z  |gi       	 |j                         D ]-  \  }}tO        ||      ||<   |t-        | j.                  |      z  }/ |
tQ        |
      |||fS # t<        $ r}t?        |      |d }~ww xY w# tR        $ r}t?        |      |d }~ww xY w)NFr   z,`request` must be added to the signature of z.lookup_allowed().zFiltering by z not allowed)
field_pathTz%s__yearz	%s__monthz%s__dayrB   )days    )day)yearz%s__gtez%s__lt)*r   r"   rV   lookup_allowedwarningswarnr7   r<   r    rt   r	   rM   lencallablerE   
isinstancetuplelistr   creater   r   r   rH   
has_outputappendrQ   popr   re   rh   r   r   replacer   r   USE_TZr#   updater   boolr   )r4   r   r   may_have_duplicatesrO   supports_requestkey
value_listvalueru   filter_specsrM   lookup_params_countspecr   fieldfield_list_filter_classr   monthr   	from_dater)   to_dates                          r8   get_filterszChangeList.get_filters   s   //1#"2++Y
  MM>##--::;;MO(
  -224OC#2B#ug.e6t''66?4}SE5VWW $  5 ++K"%m"4$"7M4::tGWGWX!
kE4=95@2E2
 6A/BXBX2E!%/!&J0ZHLE.!JJ$$) ']);;'+C((", ' )##D)&]);;)-&M ,P  !$$Z$2E2E%EtLD%))+8K8K*KTR#''	D4G4G(GN> (DH):E"IBsCGA>!I ')*;;G  )9"+==FF1FMG'//Y^^a5G/HG?? *9 5I(1G$$!D$7$77) 4#6#66		6+113
U%9#u%Ec"#'?@P@PRU'VV# 4 \"#" = " >3A6A=>J ! 	6+A.A5	6s1   9N =AN* 	N'N""N'*	O3N??Oc                 <   |i }|g }| j                   j                         }|D ]'  }t        |      D ]  }|j                  |      s||=  ) |j	                         D ]  \  }}|	||v s||= |||<    dt        t        |j	                               d      z  S )Nz?%sT)doseq)rw   r   r   
startswithrt   r!   sorted)r4   
new_paramsrC   r'   rkvs          r8   ry   zChangeList.get_query_string"  s    J>F##%A!W<<?!   $$&DAqy6!! ' y	!2$???r9   c                    | j                   j                  || j                  | j                        }|j                  }| j                   j
                  r| j                  j	                         }nd }|| j                  k  }|| j                  kD  }| j                  r|s|s| j                  j                         }n&	 |j                  | j                        j                  }|| _        | j                   j
                  | _        | j
                   xs t!        |      | _        || _        || _        || _        || _        || _        y # t        $ r t        w xY wN)rV   get_paginatorr}   rT   countshow_full_result_countrJ   rU   rj   _clonepagerg   object_listr   r   result_countr   show_admin_actionsfull_result_countresult_listcan_show_all
multi_page	paginator)r4   r   r   r   r   r   r   r   s           r8   r~   zChangeList.get_results4  s<   $$22T]]D$6$6
	 ! 22 $ 2 2 8 8 : $#t'='==!D$6$66
 MMl:--..0K0'nnT]];GG )&*&6&6&M&M# '+&A&A"A #
TF
 "3&($"  0//0s   ;%E Ec                     g }| j                   j                  r| j                   j                  }|S | j                  j                  r| j                  j                  }|S r   )rV   orderingrH   )r4   r   s     r8   _get_default_orderingz ChangeList._get_default_ordering\  sU    $$''00H  &&''00Hr9   c                    	 | j                   j                  |      }|j                  S # t        $ r t	        |      r|}nat        | j                  |      rt        | j                  |      }n4	 t        | j                  |      }n# t        $ r t        |v r|cY cY S  w xY wt        |t              rt        |d      r|j                  }t        |dd      cY S w xY w)a  
        Return the proper model field name corresponding to the given
        field_name to use for ordering. field_name may either be the name of a
        proper model field, possibly across relations, or the name of a method
        (on the admin or model) or a callable with the 'admin_order_field'
        attribute. Return None if no proper model field name can be matched.
        fgetadmin_order_fieldN)rH   	get_fieldnamer   r   hasattrrV   getattrrE   AttributeErrorr   r   propertyr   )r4   
field_namer   attrs       r8   get_ordering_fieldzChangeList.get_ordering_fieldd  s    	<$$..z:E::  	< 
#!)):6t//<"4::z:D% !Z/)) $)gdF.Cyy4!4d;;!	<s4   &) AC.BCBCB8CCc                    | j                   }t        | j                  j                  |      xs | j	                               }t
        |v r8g }|t
           j                  d      }|D ]  }	 |j                  d      \  }}}	| j                  t        |	         }
| j                  |
      }|sFt        |t              r7|dk(  r |j                         }|j                          |j                  |       nt!        |d      r5|j                  |dk(  r|j#                         n|j%                                nK|dk(  r2|j'                  |      r!|j                  |j)                  |             n|j                  ||z           |j/                  |j0                  j2                         | j5                  |      S # t*        t,        f$ r Y dw xY w)a  
        Return the list of ordering fields for the change list.
        First check the get_ordering() method in model admin, then check
        the object's default ordering. Then, any manually-specified ordering
        from the query string overrides anything. Finally, a deterministic
        order is guaranteed by calling _get_deterministic_ordering() with the
        constructed ordering.
        .-resolve_expression)ru   r   rV   get_orderingr   	ORDER_VARsplit
rpartitionrK   re   r   r   r   r   reverse_orderingr   r   descascr   removeprefix
IndexErrorrh   extendrd   order_by_get_deterministic_ordering)r4   r   r}   ru   r   order_paramsr'   nonepfxidxr   order_fields               r8   r   zChangeList.get_ordering  s    ))'2Rd6P6P6R
 H!),2237L!%&\\#%6ND#s!%!2!23s8!<J"&"9"9*"EK& !+w7#:*5*:*:*<K'88: 4 .BC 25*K,,.+//BS (>(>s(C (@(@(EF k(9:+ "4 	//0//99 #J/ s   -A F:.CF::GGc                    t        |      }t               }dh| j                  j                  D ch c]&  }|j                  r|j
                  s|j                  ( c}z  }|D ]  }d}t        |t              r|j                  d      }n]t        |t              r|j                  }n@t        |t              r0t        |j                  t              r|j                  j                  }|s	 | j                  j                  |      }|j                   r||j                  k(  r|j                  |v r |S |j#                  |j                          g | j                  j$                  d | j                  j&                  D        }|D ]X  }|D cg c]  }| j                  j                  |       }	}t)        d |	D              r>|j+                  d |	D              sW |S  |j-                  d       |S c c}w # t        $ r Y w xY wc c}w )a  
        Ensure a deterministic order across all database backends. Search for a
        single field or unique together set of fields providing a total
        ordering. If these are missing, augment the ordering with a descendant
        primary key.
        r   Nr   c              3   4   K   | ]  }|j                     y wr   )r3   ).0
constraints     r8   	<genexpr>z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s      &O
 %%&O   c              3   4   K   | ]  }|j                     y wr   )nullr   r   s     r8   r   z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s     6veuzzvr   c              3   4   K   | ]  }|j                     y wr   )r   r   s     r8   r   z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s     -Pemmr   z-pk)r   setrH   r3   uniquer   r   r   strlstripr   r   r   
expressionr   r   remote_fieldaddunique_togethertotal_unique_constraintsany
issupersetr   )
r4   r   ordering_fieldsr   total_ordering_fieldspartr   constraint_field_namesfield_namesr3   s
             r8   r   z&ChangeList._get_deterministic_ordering  s    >%!%))00*
0||EJJ MM0*
 !

 DJ$$![[-
D!$!YY
D'*z$//1/M!__11
 ,,66zBE %%*

*B==$996 5  ##EMM2/ 6&!!11&&*&6&6&O&O&"  6 NYMXzD$$..z:[  
 6v66"---P-PP
   6 &m*
$ )  .s   +G5*G:"H
:	HHc                    | j                         }i }t        | j                  vr|D ]  }t        |t        t
        f      rbt        |t
              s|j                         }t        |j                  t              r'|j                  rdnd}|j                  j                  }n({|j                  d      r|j                  d      }d}nd}t        | j                        D ]   \  }}| j                  |      |k(  s|||<      |S | j                  t           j!                  d      D ]/  }|j#                  d      \  }}	}
	 t%        |
      }
|	dk(  rdnd||
<   1 |S # t&        $ r Y ?w xY w)zT
        Return a dictionary of ordering field column numbers and asc/desc.
        r   r   r   r   )r   r   ru   r   r   r   r   r   r   
descendingr   r   r   	enumeraterK   r   r   r   re   rh   )r4   r   r  r   
order_typeindexr   r'   r   r   r   s              r8   get_ordering_field_columnsz%ChangeList.get_ordering_field_columns  sb    --/DKK' "ej'%:;%eW5 %		!%"2"2A6/4/?/?VU
 % 0 0 5 5 %%c*!..s3E!'J!&J#,T->->#?KE4..t4=1;. $@ "4  [[+11#6!"c!2c3c(C 25v$ 7  " s    E	E'&E'c                    | j                  |      \  | _        | _        }}| _        | j                  }| j                  D ]/  }||j                         |k7  s|j                  ||      }|.|}1 	 t        |      }|j                  |      }|j                  j                  s| j                  |      }| j!                  ||      }
 |j"                  |
 }| j$                  j'                  ||| j                        \  }}| j)                  || j+                               | _        ||z  r|j/                         S |S # t        t        f$ r  t        $ r}	t        |	      d }	~	ww xY w)N)r   rC   )r   r   rN   rO   rJ   expected_parametersr}   r   filterr   r   	Exceptionr   rd   select_relatedapply_select_relatedr   r   rV   get_search_resultsry   r   rP   distinct)r4   r   exclude_parametersremaining_lookup_paramsfilters_may_have_duplicatesqsfilter_specnew_qsq_objectr)   r   search_may_have_duplicatess               r8   rI   zChangeList.get_queryset  s    W%	
#'# ,,K"*2248JJ$--gr:%B -	/ ==TUH8$B xx&&**2.B $$Wb1R[[(# *.)9)9)L)LJJ*
&& %)$9$9.**, %: %
!
 ')CC;;= IG $%9: 	  	/ ,A..	/s   2D= =E%E  E%c                     | j                   du r|j                         S | j                   du r | j                         r|j                         S | j                   r |j                  | j                    S |S NTF)rS   r  !has_related_field_in_list_display)r4   r  s     r8   r  zChangeList.apply_select_relatedX  so    ##t+$$&&##u,557((**##$2$$d&>&>??	r9   c                     | j                   D ]J  }	 | j                  j                  |      }t        |j                  t
              s:||j                  k7  sJ y y# t        $ r Y Yw xY wr"  )rK   rH   r   r   r   r   r   r   )r4   r   r   s      r8   r#  z,ChangeList.has_related_field_in_list_displayd  sg    ++J$((22:> e00,?!U]]2# ,  % s   A	A'&A'c                     t        || j                        }t        d| j                  j                  d| j                  j
                  dt        |      f| j                  j                  j                        S )Nzadmin:__change)r5   current_app)
r   r   r   rG   	app_label
model_namer   rV   
admin_siter   )r4   resultr   s      r8   url_for_resultzChangeList.url_for_resultq  sY    VT__-$(II$7$79M9MN)((3388
 	
r9   r   )NN)r:   r;   r<   r+   r[   r0   r   r   r   ry   r~   r   r   r   r   r  rI   r  r#  r-  rD   r9   r8   r?   r?   D   s]    ,S6j
p6d@$&#P<:-:^?B&P=~

r9   r?   )>r   r   r   djangor   django.confr   django.contribr   django.contrib.adminr   django.contrib.admin.exceptionsr	   r
   django.contrib.admin.optionsr   r   r   r   r   django.contrib.admin.utilsr   r   r   r   r   django.core.exceptionsr   r   r   django.core.paginatorr   django.db.modelsr   r   r   r   django.db.models.constantsr   django.db.models.expressionsr   django.urlsr   django.utils.deprecationr    django.utils.httpr!   django.utils.inspectr"   django.utils.timezoner#   django.utils.translationr$   ri   r   rf   r1   rx   r   Formr+   r?   rD   r9   r8   <module>rA     s     (    # 0   
 . < < 1 3  = ' 8 , , 	

 
5:: 
s
 s
r9   