
    _?ib                     n   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.m/Z/ dZ0dZ1dZ2dZ3dZ4e0e1e3eeefZ5 G d dejl                        Z7 G d d      Z8y)    )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)	urlencode)
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      q/home/cursorai/projects/django-cronjob-utils/venv/lib/python3.12/site-packages/django/contrib/admin/views/main.pyr.   zChangeListSearchForm.__init__9   s0    $)&) eD
    )__name__
__module____qualname__r.   __classcell__)r5   s   @r6   r)   r)   8   s    
 
r7   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getr/   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)r2   requestrC   rI   rJ   rK   rO   rP   rQ   rR   rS   rz   rT   rW   rX   _search_formr^   rp   r   s                      r6   r.   zChangeList.__init__D   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=>)r5   r:   rC   rT   )r2   s    r6   __repr__zChangeList.__repr__   s;    NN''JJ##&&33
 	
r7   Nc                 l    |xs | j                   }|j                         }t        D ]
  }||v s||=  |S )z:
        Return all params except IGNORED_PARAMS.
        )ru   copyIGNORED_PARAMS)r2   rs   lookup_paramsignoreds       r6   get_filters_paramszChangeList.get_filters_params   sC     -4-- &G-'!'* & r7   c           	         | j                         }d}d}|j                         D ]8  \  }}|D ].  }| j                  j                  |||      r!t	        d| d       : 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|j%                         s|j'                  |       |
t        |      kD  sd} | j(                  rD|j+                  d| j(                  z  d       }|"|j+                  d| j(                  z  d       }|j+                  d	| j(                  z  d       }	 t-        t/        |d         t/        ||d   nd
      t/        ||d   nd
            }|r|t5        d
      z   }nA|r |t5        d      z   j7                  d
      }n|j7                  |j8                  d
z         }t:        j<                  rt?        |      }t?        |      }|jA                  d| j(                  z  |gd| j(                  z  |gi       	 |j                         D ]-  \  }}tC        ||      ||<   |t!        | j"                  |      z  }/ |tE        |      |||fS # t0        $ r}t3        |      |d }~ww xY w# tF        $ r}t3        |      |d }~ww xY w)NFzFiltering by z not allowed)
field_pathTz%s__yearz	%s__monthz%s__dayr@   )days    )day)yearz%s__gtez%s__lt)$r   rr   rT   lookup_allowedr	   rK   lencallablerC   
isinstancetuplelistr   creater   r   r   rF   
has_outputappendrO   popr   rc   rf   r   r   replacer   r   USE_TZr!   updater   boolr   )r2   r   r   may_have_duplicatesrM   key
value_listvaluefilter_specsrK   lookup_params_countspecr   fieldfield_list_filter_classr   monthr   	from_dater'   to_dates                        r6   get_filterszChangeList.get_filters   sy   //1#",224OC#''66sE7K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   49L( AM (	M1L==M	MMMc                 <   |i }|g }| j                   j                         }|D ]'  }t        |      D ]  }|j                  |      s||=  ) |j	                         D ]  \  }}|	||v s||= |||<    dt        t        |j	                               d      z  S )Nz?%sT)doseq)ru   r   r   
startswithrr   r    sorted)r2   
new_paramsrA   r%   rkvs          r6   rw   zChangeList.get_query_string  s    J>F##%A!W<<?!   $$&DAqy6!! ' y	!2$???r7   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)rT   get_paginatorr{   rR   countshow_full_result_countrH   rS   rh   _clonepagere   object_listr   r   result_countr   show_admin_actionsfull_result_countresult_listcan_show_all
multi_page	paginator)r2   r   r   r   r   r   r   r   s           r6   r|   zChangeList.get_results'  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   )rT   orderingrF   )r2   r   s     r6   _get_default_orderingz ChangeList._get_default_orderingP  sU    $$''00H  &&''00Hr7   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)rF   	get_fieldnamer   r   hasattrrT   getattrrC   AttributeErrorr   r   propertyr   )r2   
field_namer   attrs       r6   get_ordering_fieldzChangeList.get_ordering_fieldX  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	                               }|j                  t              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           |j1                  |j2                  j4                         | j7                  |      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)rs   r   rT   get_orderingr   ra   	ORDER_VARsplit
rpartitionrI   rc   r   r   r   r   reverse_orderingr   r   descascr   removeprefix
IndexErrorrf   extendrb   order_by_get_deterministic_ordering)r2   r   r{   rs   r   order_paramsr%   nonepfxidxr   order_fields               r6   r   zChangeList.get_orderingu  s    ))'2Rd6P6P6R
 ::i 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 G;CG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   )r1   ).0
constraints     r6   	<genexpr>z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s      &O
 %%&O   c              3   4   K   | ]  }|j                     y wr   )nullr   r   s     r6   r   z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s     6veuzzvr   c              3   4   K   | ]  }|j                     y wr   )r   r   s     r6   r   z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s     -Pemmr   z-pk)r   setrF   r1   uniquer   r   r   strlstripr   r   r   
expressionr   r   remote_fieldaddunique_togethertotal_unique_constraintsany
issupersetr   )
r2   r   ordering_fieldsr   total_ordering_fieldspartr   constraint_field_namesfield_namesr1   s
             r6   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   rs   r   r   r   r   r   r   
descendingr   r   r   	enumeraterI   r   r   r   rc   rf   )r2   r   r  r   
order_typeindexr   r%   r   r   r   s              r6   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   rA   )r   r   rL   rM   rH   expected_parametersr{   r   filterr   r   	Exceptionr   rb   select_relatedapply_select_relatedr   r   rT   get_search_resultsrw   r   rN   distinct)r2   r   exclude_parametersremaining_lookup_paramsfilters_may_have_duplicatesqsfilter_specnew_qsq_objectr'   r   search_may_have_duplicatess               r6   rG   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)rQ   r  !has_related_field_in_list_display)r2   r  s     r6   r  zChangeList.apply_select_relatedL  so    ##t+$$&&##u,557((**##$2$$d&>&>??	r7   c                     | j                   D ]J  }	 | j                  j                  |      }t        |j                  t
              s:||j                  k7  sJ y y# t        $ r Y Yw xY wr  )rI   rF   r   r   r   r   r   r   )r2   r   r   s      r6   r  z,ChangeList.has_related_field_in_list_displayX  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)r3   current_app)
r   r   r   rE   	app_label
model_namer   rT   
admin_siter   )r2   resultr   s      r6   url_for_resultzChangeList.url_for_resulte  sY    VT__-$(II$7$79M9MN)((3388
 	
r7   r   )NN)r8   r9   r:   r)   rY   r.   r   r   r   rw   r|   r   r   r   r   r  rG   r  r  r(  rB   r7   r6   r=   r=   A   s]    ,S6j
f6P@$'#R<:-:^?B&P=~

r7   r=   N)9r   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.httpr    django.utils.timezoner!   django.utils.translationr"   rg   r   rd   r/   rv   r   Formr)   r=   rB   r7   r6   <module>r:     s    (    # 0   
 . < < 1 3  ' , , 	

 
5:: 
j
 j
r7   