
    h                        d dl Z d dlmZmZ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mZ d d	lmZ d d
lmZ d dlmZmZ  e j8                  e      Zd fdedededefdZd(dede de!de de f
dZ"dede fdZ#d)de de de fdZ$de dedef   fdZ%d)de de dee   fdZ&dedee    fd Z'	 d*ded!ee   d"ed#e!de dee   fd$Z(d%ede!fd&Z)defd'Z*y)+    N)AnyCallableDictListSetUnion)	urlencode)apps)
ListFilter)	AdminForm)AbstractUser)Model	ModelBase)Options)gettext)NoReverseMatchreversec                     | S N xs    I/var/www/Befach/backend/env/lib/python3.12/site-packages/jazzmin/utils.py<lambda>r      s    XY    original	referencegetterreturnc                     g }t        |       }| D ]+  }	 |j                   ||            }|j                  |       - t	        t        ||       d       D cg c]  \  }}|	 c}}S # t        $ r |}Y Kw xY wc c}}w )z
    Order a list based on the location of items in the reference list, optionally, use a getter to pull values out of
    the first list
    c                     | d   S )Nr   r   r   s    r   r   z'order_with_respect_to.<locals>.<lambda>!   s    qtr   )key)lenindex
ValueErrorappendsortedzip)	r   r   r   rankingmax_numitemposr   ys	            r   order_with_respect_tor.      s    
 G(mG	//&,/C 	s  !Wh!7^LM$!QAMM  	C	
 Ns   A)A:)A76A7instance
admin_sitefrom_appkwargsc                 J   d}	 t        | t              rC| j                  d      \  }}|j                         }t	        dj                  ||      |      }n| j                  t        k(  rK| j                  j                  | j                  j                  }}t	        dj                  ||      |      }n| j                  j                  t        k(  rlt        | | j                        rV| j                  j                  | j                  j                  }}t	        dj                  ||      | j                  f|      }|r|d
j                  t#        |            z  }|S # t        t        f$ r3 |s.t        j                  t!        dj                  | 	                   Y cw xY w)zZ
    Return the admin URL for the given instance, model class or <app>.<model> string
    #.z)admin:{app_label}_{model_name}_changelist)	app_label
model_namecurrent_appz%admin:{app_label}_{model_name}_change)argsr9   z%Could not reverse url from {instance})r/   z	?{params})params)
isinstancestrsplitlowerr   format	__class__r   _metar6   r7   pkr   r%   loggerwarningr   r	   )r/   r0   r1   r2   urlr6   r7   s          r   get_admin_urlrG   $   sz    Cgh$$,NN3$7!Iz#))+J;BBYcmBn&C 9,$,NN$<$<hnn>W>WzI;BBYcmBn&C ))Y6:hPXPbPb;c$,NN$<$<hnn>W>WzI7>>_i>jkk^&C {!!6):!;;J J' gNN7#J#Q#Q[c#Q#defgs   D:E   ?F"!F"specc           	      F    t        | dt        | d| j                              S )N
field_pathparameter_name)getattrtitle)rH   s    r   get_filter_idrN   O   s    4wt5Etzz'RSSr   rF   c                     | st         j                  d       yd| v r| S 	 t        | j                         |      } | S # t        $ r. t         j                  dj                  |              d| z   } Y | S w xY w)z5
    Take in a custom url, and try to reverse it
    zNo url supplied in custom linkr4   /r8   zCouldnt reverse {url})rF   )rD   rE   r   r?   r   r@   )rF   r0   s     r   get_custom_urlrQ   S   s{     78
cz
ciikz:
 J	  .55#5>?CiJ	s   = 3A43A4	model_strc                     	 | j                  d      \  }}t        j                  ||      }|j                  S # t        t
        f$ r Y yw xY w)z
    Get model meta class
    r5   N)r>   r
   get_registered_modelrB   r%   LookupError)rR   appmodelmodel_klasss       r   get_model_metarY   f   sN    __S)
U!66sEB   $ s   58 A
	A
rV   c                    | t         j                  vr't        j                  dj	                  |              g S g }t         j                  |    j                         D ]  }t        ||d      }|dk(  r|j                  |dj	                  |j                  j                  |j                  j                        |j                  j                  j                         d        |S )	zO
    For the given app string, get links to all the app models admin views
    z%{app} not found when generating links)rV   T)r0   r1   r4   z{app}.{model})rV   rW   )rF   rW   name)r
   app_configsrD   rE   r@   
get_modelsrG   r&   rB   r6   r7   verbose_name_pluralrM   )rV   r0   modelsrW   rF   s        r   get_app_admin_urlsr`   r   s     $""">EE#ENO	F!!#&113Ej4H #:(//EKK4I4IQVQ\Q\QgQg/h77==?	
 4 Mr   userc                    | j                         }g }|D ]F  }|j                  d      \  }}|j                  dj                  ||j	                                      H |D ch c]  }d|v sd|v s|j                  dd       c}S c c}w )zB
    Get model names based on a users view/change permissions
    r5   z{app}.{perm_codename})rV   perm_codenameviewchangeview_ )get_all_permissionsr>   r&   r@   r?   replace)ra   permslower_permspermrV   rc   r   s          r   get_view_permissionsrm      s     $$&EK!ZZ_]299cQ^QdQdQf9gh  -8Xq6Q;(VW-AIIgr"XXXs   "B0Blinksoptionsallow_appmenusc                 (   | sg S t        |       }g }|D ]  }g }|j                  dg       D ]"  }	|j                  | j                  |	             $ t	        |      sId|v rY|j                  |j                  dd      t        |d   |      d|j                  dd      |j                  d	|d
         d       d|v r|d   j                         |vrt        |d         }
|
r|
j                  j                         n|d   }|j                  |t        |d   |      g |j                  dd      |d   j                  |d   |d
         d       ?d|v sE|sIt        |d   |      D cg c]%  }|d   |v r|j                  d|d         |d   dd' }}t        |      dk(  r|j                  t        t        j                  |d      d|d         j                         d||d   j                  |d   |d
         d        |S c c}w )z8
    Make a menu from a list of user supplied links
    permissionsrF   r[   unspecified)r0   N
new_windowFicondefault_icon_children)r[   rF   childrenrt   ru   rW   iconsrV   verbose_name)r[   rF   rw   r   r4   )r[   rF   rw   ru   )rm   getr&   has_permallrQ   r?   rY   r^   rM   rG   r`   r#   rL   r
   r\   )ra   rn   ro   rp   r0   model_permissionsmenulinkperm_matchesrl   rB   r[   childrw   s                 r   	make_menur      s;    	,T2DHH]B/Dd 34 0 <  D=KK HHV];)$u+*M $"&((<"? HHVW5L-MN _G}""$,=="4=1E8=5,,2244=DKK (g:N ""&((<"?#G,00gH_@`a d]~ 0U
S>%66 >5=A%PU,dhiH 
 8}!KK#D$4$4T%[$A>SWX]S^_eeg (#G,00egF]>^_	a r K#s   /*H	adminformc                 N    | j                   }|rt        |      dk(  r	|d   d   yy)N   r   FT)	fieldsetsr#   )r   r   s     r   has_fieldsets_checkr      s.    ##IY1,1a1Hr   c                        dt         f fd}|S )Nfuncc                 R    j                         D ]  \  }}t        | ||        | S r   )itemssetattr)r   r"   valuer2   s      r   	decoratorzattr.<locals>.decorator   s(     ,,.JCD#u% )r   )r   )r2   r   s   ` r   attrr      s     
 r   )adminF)r   )Tr   )+loggingtypingr   r   r   r   r   r   urllib.parser	   django.appsr
   django.contrib.adminr   django.contrib.admin.helpersr   django.contrib.auth.modelsr   django.db.models.baser   r   django.db.models.optionsr   django.utils.translationr   jazzmin.compatr   r   	getLogger__name__rD   r.   r=   boolrG   rN   rQ   rY   r`   rm   r   r   r   r   r   r   <module>r      s    8 8 "  + 2 3 2 , , 2			8	$ OZ ND NT N8 N^b N$(C (S (d (^a (fi (VT
 Ts T  3 &	c 	eD'M&: 	C S tDz 6
Y| 
YC 
Y jqE
E#DzE48EJNEcfE	$ZEP9  h r   