o
    ["<f$                     @   s   d 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d	 Zd
d ZdddZdd Zdd Zdd ZG dd deZdS )z
Admin ui common utilities.
    )unicode_literals)fnmatch)import_module)settings)admin)reversec           
      C   s   t | trC|dj}| D ]4}|dd\}}t|}t||}td|j }|	|rA| | dd\}}	t|}t||	  S qn| dd\}}	t|}t||	S t
d|  )Nrequest.   %s:indexz!Dashboard matching "%s" not found)
isinstancedictgetpathrsplitr   getattrr   name
startswith
ValueError)
dashboard_clscontextcurr_urlkeyadmin_site_modadmin_site_inst
admin_site	admin_urlmodinst r   P/var/www/html/kck/venv/lib/python3.10/site-packages/grappelli/dashboard/utils.py_get_dashboard_cls   s"   




r!   c                 C   s   t ttdd|  S )zO
    Returns the admin dashboard defined in settings (or the default one).
    GRAPPELLI_INDEX_DASHBOARD4grappelli.dashboard.dashboards.DefaultIndexDashboard)r!   r   r   r   r   r   r    get_index_dashboard%   s   r%   Nc           	      C   s   t tdd}t|tr<| r| d}|j}|D ]#}|dd\}}t|}t ||}td|j	 }|
|r:|  S qntjS td| )Nr"   r#   r   r	   r
   r   z"Admin site matching "%s" not found)r   r   r   r   r   r   r   r   r   r   r   r   siter   )	r   r   r   r   r   r   r   r   r   r   r   r    get_admin_site1   s(   



r'   c                 C   s
   t | jS )N)r'   r   r$   r   r   r    get_admin_site_nameH   s   
r(   c                 C   sL   g }t | d}|j D ]\}}|| }d| vrq|||f q|S )z= Returns (model, perm,) for all models user can possibly see )r   T)r'   	_registryitemsget_model_permsvaluesappend)r   r*   r   modelmodel_adminpermsr   r   r    get_avail_modelsL   s   

r1   c              
   C   s   t | }g }dd }t|dkr|}n-|D ]*}g }|D ]}|\}	}
t||	|r1||vr1|| q|jdd d || q|dd }|D ]#}|D ]}|\}	}
t||	|rjz|| W qL tyi   Y qLw qLqH|S )zw
    Returns (model, perm,) for all models that match models/exclude patterns
    and are visible by current user.
    c                 S   s   d| j | jf S )Nz%s.%s)
__module____name__)r.   r   r   r    <lambda>`   s    zfilter_models.<locals>.<lambda>r   c                 S   s   t | d jjdS )Nr   zutf-8)str_metaverbose_name_pluralencode)xr   r   r    r4   q   s    )r   N)r1   lenr   r-   sortextendremover   )r   modelsexcluder*   included	full_namepatternpattern_itemsitemr.   r0   resultr   r   r    filter_modelsY   s6   
rF   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )AppListElementMixinzu
    Mixin class used by both the AppListDashboardModule and the
    AppListMenuItem (to honor the DRY concept).
    c                 C   s:   | j d d  }| jd d  }| j s| jsdg}t|||S )N*)r>   r?   rF   )selfr   r@   excludedr   r   r    _visible_models   s
   z#AppListElementMixin._visible_modelsc                 C   s   |j j}tdt| |fdS )/
        Returns the admin change url.
        z%s:app_list)args)r6   	app_labelr   r(   rI   r.   r   rN   r   r   r    _get_admin_app_list_url   s   z+AppListElementMixin._get_admin_app_list_urlc                 C   $   |j j}tdt|||j f S )rL   z%s:%s_%s_changelistr6   rN   r   r(   r3   lowerrO   r   r   r    _get_admin_change_url   
   
z)AppListElementMixin._get_admin_change_urlc                 C   rQ   )z,
        Returns the admin add url.
        z%s:%s_%s_addrR   rO   r   r   r    _get_admin_add_url   rU   z&AppListElementMixin._get_admin_add_urlN)r3   r2   __qualname____doc__rK   rP   rT   rV   r   r   r   r    rG      s    	rG   )NN)rX   
__future__r   r   	importlibr   django.confr   django.contribr   django.urlsr   r!   r%   r'   r(   r1   rF   objectrG   r   r   r   r    <module>   s   
'