
    hY                     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 d dl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Z+dZ,dZ-dZ.dZ/dZ0e+e,e-e/eefZ1 G d dejd                        Z3 G d d      Z4y)    )datetime	timedelta)forms)settings)messages)FieldListFilter)DisallowedModelAdminLookupDisallowedModelAdminToField)IS_POPUP_VARTO_FIELD_VARIncorrectLookupParameters)get_fields_from_pathlookup_needs_distinctprepare_lookup_valuequote)FieldDoesNotExistImproperlyConfiguredSuspiciousOperation)InvalidPage)FFieldManyToOneRelOrderBy)
Combinable)reverse)	urlencode)
make_aware)gettextalloot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      b/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/django/contrib/admin/views/main.pyr+   zChangeListSearchForm.__init__(   s0    $)&) eD
    )__name__
__module____qualname__r+   __classcell__)r2   s   @r3   r&   r&   '   s    
 
r4   r&   c                   h    e Zd ZeZd ZddZd ZddZd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zy)
ChangeListc                    || _         |j                  | _        | j                  | _        |j	                  |      | _        || _        || _        || _        d | _	        d | _
        d | _        || _        || _        || _        |	| _        |
| _        || _        |j%                  |      | _        || _        | j+                  |j,                        }|j/                         sD|j0                  j3                         D ]'  }t5        j6                  |dj9                  |             ) |j:                  j=                  t>              xs d| _         	 tC        |j,                  j=                  tD        d            | _#        tJ        |j,                  v | _&        tN        |j,                  v | _(        |j,                  j=                  tR              }|r |jU                  ||      stW        d|z        || _,        t[        |j,                  j]                               | _/        tD        | j^                  v r| j^                  tD        = t`        | j^                  v r| j^                  t`        = | jP                  rd| _1        n|| _1        | j	                  |      | _2        | jg                  |       | jP                  rti        d      }n2| j"                  jk                  |      rti        d      }nti        d      }|| j                  jl                  z  | _7        | j                  jp                  jr                  | _:        y # tH        $ r d| _#        Y w xY w)	Nz,  r   z"The field %s cannot be referenced. z	Select %szSelect %s to changezSelect %s to view);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_form_classGETis_validerrorsvaluesr   errorjoincleaned_datagetr,   queryintPAGE_VARpage_num
ValueErrorALL_VARshow_allr   is_popupr   to_field_allowedr
   to_fielddictitemsparams
ERROR_FLAGlist_editablequerysetget_resultsr   has_change_permissionverbose_nametitlepkattname
pk_attname)r/   requestr>   rD   rE   rF   rJ   rK   rL   rM   rN   rj   rO   rR   _search_formrX   re   ro   s                     r3   r+   zChangeList.__init__3   s    
KK	99(55g>("4&"&$(!,*#6 *!2&!,!B!B7!K& --gkk:$$&%,,335 :w		%(89:!..22:>D"
	! <=DM  7;;.$3;;??<0K88(K-.RU].]^^ 7;;,,./t{{"H%$J'==!#D!.D))'2!==K(E33G<12E/0ETYY333
**--557  	DM	s   	.L+ +L?>L?Nc                 l    |xs | j                   }|j                         }t        D ]
  }||v s||=  |S )z:
        Return all params except IGNORED_PARAMS.
        )rh   copyIGNORED_PARAMS)r/   rh   lookup_paramsignoreds       r3   get_filters_paramszChangeList.get_filters_paramsn   sF     &4;; & 	+G-'!'*	+ r4   c           	         | j                         }d}d}|j                         D ]/  \  }}| j                  j                  ||      r#t	        d|z         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|xs t!        | j"                  |      }|
s|
j%                         s|j'                  |
       |	t        |      kD  sd} | j(                  r9|j+                  d| j(                  z  d       }||j+                  d| j(                  z  d       }|j+                  d| j(                  z  d       }	 t-        t/        |      t/        ||nd	      t/        ||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  |d| j(                  z  |i       	 |j                         D ].  \  }}tC        ||      ||<   |xs t!        | j"                  |      }0 |tE        |      |||fS # t0        $ r}t3        |      |d }~ww xY w# tF        $ r}t3        |      |d }~ww xY w)NFzFiltering by %s not allowed)
field_pathTz%s__yearz	%s__monthz%s__day   )days    )day)yearz%s__gtez%s__lt)$rz   rg   rO   lookup_allowedr	   rF   lencallabler>   
isinstancetuplelistr   creater   r   r   rA   
has_outputappendrJ   popr   r]   r`   r   r   replacer   r   USE_TZr   updater   boolr   )r/   rs   rx   use_distinctrH   keyvaluefilter_specsrF   lookup_params_countspecr}   fieldfield_list_filter_classr   monthr   	from_dater$   to_dates                       r3   get_filterszChangeList.get_filters{   s\   //1"'--/ 	VJC##223>01NQT1TUU	V ++ 	.K"%m"4$"7M4::tGWGWX!
kE4=95@2E2
 6A/BXBX2E!%/!&J0ZHLE.7MJJ 0 0Z ']);;#/#f3HIYIY[e3fL)##D)&]);;)-&?	.B  !$$Z$2E2E%EtLD%))+8K8K*KTR#''	D4G4G(GN> (D	U%6EA>3?C:!I ')*;;G  )9"+==FF1FMG'//Y^^a5G/HG?? *9 5I(1G$$ 3 33Yt222G& 		6+113 \
U%9#u%Ec"+[/DTEUEUWZ/[\ d<0-" 9 " >3A6A=>@ ! 	6+A.A5	6s1   ,0L AL3 	L0L++L03	M<MMc                 8   |i }|g }| j                   j                         }|D ]'  }t        |      D ]  }|j                  |      s||=  ) |j	                         D ]  \  }}|	||v s||= |||<    dt        t        |j	                                     z  S )Nz?%s)rh   rv   r   
startswithrg   r   sorted)r/   
new_paramsremover"   rkvs          r3   get_query_stringzChangeList.get_query_string   s    J>FKK 	A!W <<?!	 $$& 	DAqy6!!	 y	!2333r4   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                  dz         j                  }|| _        | j                   j
                  | _        | j
                   xs t!        |      | _        || _        || _        || _        || _        || _        y # t        $ r t        w xY w)Nr~   )rO   get_paginatorrk   rM   countshow_full_result_countrC   rN   rb   _clonepager_   object_listr   r   result_countr   show_admin_actionsfull_result_countresult_listcan_show_all
multi_page	paginator)r/   rs   r   r   r   r   r   r   s           r3   rl   zChangeList.get_results   s5   $$227DMM4K]K]^	  22 $ 2 2 8 8 : $#t'='==!D$6$66
 MMl:--..0K0'nnT]]Q->?KK )&*&6&6&M&M# '+&A&A"A"\TJ[E\!2&($"  0//0s   ;(E Ec                     g }| j                   j                  r| j                   j                  }|S | j                  j                  r| j                  j                  }|S N)rO   orderingrA   )r/   r   s     r3   _get_default_orderingz ChangeList._get_default_ordering	  sU    $$''00H  &&''00Hr4   c                 |   	 | j                   j                  |      }|j                  S # t        $ r t	        |      r|}nCt        | j                  |      rt        | j                  |      }nt        | j                  |      }t        |t              rt        |d      r|j                  }t        |dd      cY S w xY w)ai  
        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 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)rA   	get_fieldnamer   r   hasattrrO   getattrr>   r   propertyr   )r/   
field_namer   attrs       r3   get_ordering_fieldzChangeList.get_ordering_field  s    	<$$..z:E::  	< 
#!)):6t//<tzz:6$)gdF.Cyy4!4d;;	<s   &) BB;:B;c                    | j                   }t        | j                  j                  |      xs | j	                               }t
        |v r,g }|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%                                n?|j'                  d      r|dk(  r|j                  |dd        n|j                  ||z           |j-                  |j.                  j0                         | j3                  |      S # t(        t*        f$ r Y Xw 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_expressionr~   N)rh   r   rO   get_orderingr   	ORDER_VARsplit
rpartitionrD   r]   r   r   r   rv   reverse_orderingr   r   descascr   
IndexErrorr`   extendr\   order_by_get_deterministic_ordering)r/   rs   rk   rh   r   order_paramsr"   nonepfxidxr   order_fields               r3   r   zChangeList.get_ordering)  s    ((55g>^$B\B\B^_H!),2237L! %&\\#%6ND#s!%!2!23s8!<J"&"9"9*"EK& !+w7#:*5*:*:*<K'88: 4 .BC cSj(8(8(:kooN_`$//4 AB8 k(9:'0 	//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.
        rp   Nr   c              3   4   K   | ]  }|j                     y wr   )r.   ).0
constraints     r3   	<genexpr>z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>~  s      " %%   c              3   4   K   | ]  }|j                     y wr   )nullr   r   s     r3   r   z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s     6euzz6r   c              3   4   K   | ]  }|j                     y wr   )rq   r   s     r3   r   z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s     -Pemm-Pr   z-pk)r   setrA   r.   uniquer   rq   r   strlstripr   r   r   
expressionr   r   remote_fieldaddunique_togethertotal_unique_constraintsany
issupersetr   )
r/   r   ordering_fieldsr   total_ordering_fieldspartr   constraint_field_namesfield_namesr.   s
             r3   r   z&ChangeList._get_deterministic_orderingT  s    >%!%'+'7'7'>'>*
#||EJJ MM*
 !
  .	'DJ$$![[-
D!$!YY
D'*z$//1/M!__11
 ,,66zBE %%*

*B==$992 1  ##EMM2/.	'6&!!11&&*&6&6&O&O&"  6 'S^_Z$**44Z@__ 6v66"---P-PP
 ' &g*
" )  . `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|d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~   Nr   )r   r   rh   r   r   r   r   r   r   
descendingr   r   	enumeraterD   r   r   r   r]   r`   )r/   r   r   r   
order_typeindexr   r"   r   r   r   s              r3   get_ordering_field_columnsz%ChangeList.get_ordering_field_columns  sm    --/DKK' " ej'%:;%eW5 %		!%"2"2A6/4/?/?VU
 % 0 0 5 5 %%c*!!"IE!'J!&J#,T->->#? KE4..t4=1;.4  [[+11#6 G!"c!2c3c(C 25v$G  " s   4E	EEc                    | j                  |      \  | _        | _        }}| _        | j                  }| j                  D ]  }|j                  ||      }||} 	  |j                  di |}|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   r   r=   )r   r   rG   rH   rC   rk   filterr   r   	Exceptionr   r\   select_relatedapply_select_relatedr   r   rO   get_search_resultsr   rz   rI   distinct)
r/   rs   remaining_lookup_paramsfilters_use_distinctqsfilter_specnew_qsr$   r   search_use_distincts
             r3   rB   zChangeList.get_queryset  sl    W%	
# # ,, 	K ))'26F!	
	/ 545B xx&&**2.B $$Wb1R[[(# #'"2"2"E"EgrSWS]S]"^ %)$9$9.**, %: %
!
  "55;;= I? $%9: 	  	/ ,A..	/s   D E5E  Ec                     | j                   du r|j                         S | j                   du r | j                         r|j                         S | j                   r |j                  | j                    S |S NTF)rL   r   !has_related_field_in_list_display)r/   r   s     r3   r   zChangeList.apply_select_related  so    ##t+$$&&##u,557((**##$2$$d&>&>??	r4   c                     | j                   D ]N  }	 | j                  j                  |      }t        |j                  t
              s:||j                         k7  sN y y# t        $ r Y ]w xY wr  )rD   rA   r   r   r   r   get_attnamer   )r/   r   r   s      r3   r  z,ChangeList.has_related_field_in_list_display  sq    ++ 		$J$((22:> e00,?!U%6%6%88#		$  % s   A	A+*A+c                     t        || j                        }t        d| j                  j                  d| j                  j
                  dt        |      f| j                  j                  j                        S )Nzadmin:__change)r0   current_app)
r   rr   r   r@   	app_label
model_namer   rO   
admin_siter   )r/   resultrp   s      r3   url_for_resultzChangeList.url_for_result	  s^    VT__-tyy/B/B/3yy/C/CE"2YL#'#3#3#>#>#C#CE 	Er4   r   )NN)r5   r6   r7   r&   rS   r+   rz   r   r   rl   r   r   r   r   r   rB   r   r  r  r=   r4   r3   r:   r:   0   sW    ,96vY6v4$#B<0):V<|&P4l
Er4   r:   N)5r   r   djangor   django.confr   django.contribr   django.contrib.adminr   django.contrib.admin.exceptionsr	   r
   django.contrib.admin.optionsr   r   r   django.contrib.admin.utilsr   r   r   r   django.core.exceptionsr   r   r   django.core.paginatorr   django.db.modelsr   r   r   r   django.db.models.expressionsr   django.urlsr   django.utils.httpr   django.utils.timezoner   django.utils.translationr   ra   r   ORDER_TYPE_VARr^   r,   ri   rw   Formr&   r:   r=   r4   r3   <module>r#     s    (    # 0    . < < 3  ' , , 	

 Y
L,P
5:: 
^E ^Er4   