a
    Dg                     @   sx   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	 G dd dZ
G dd	 d	Ze	 Zd
d ZG dd dZdS )    )quote)ImproperlyConfigured)reverse)search_for_hooks)ObjectTypeRegistryc                   @   s2   e Zd ZdZdZdZd	ddZdd Zdd ZdS )
ModelAdminURLFinderz@
    Handles admin edit URL lookups for an individual model
    Nc                 C   s
   || _ d S N)userselfr	    r   ]/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/admin/admin_url_finder.py__init__$   s    zModelAdminURLFinder.__init__c                 C   s0   | j du rtdt|  t| j t|jfdS )z
        Return the edit URL for the given instance - regardless of whether the user can access it -
        or None if no edit URL is available.
        Nz;%r must define edit_url_name or override construct_edit_url)args)edit_url_namer   typer   r   pkr   instancer   r   r   construct_edit_url'   s    
z&ModelAdminURLFinder.construct_edit_urlc                 C   s0   | j r"| jr"| j| j d|s"dS | |S dS )z
        Return the edit URL for the given instance if one exists and the user has permission for it,
        or None otherwise.
        ZchangeN)r	   permission_policyZ user_has_permission_for_instancer   r   r   r   r   get_edit_url3   s    z ModelAdminURLFinder.get_edit_url)N)	__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r   r      s   
r   c                   @   s"   e Zd ZdZdddZdd ZdS )NullAdminURLFinderz9
    A dummy AdminURLFinder that always returns None
    Nc                 C   s   d S r   r   r
   r   r   r   r   I   s    zNullAdminURLFinder.__init__c                 C   s   d S r   r   r   r   r   r   r   L   s    zNullAdminURLFinder.get_edit_url)Nr   r   r   r   r   r   r   r   r   r   r   D   s   
r   c                 C   s   t j| |d d S )N)value)finder_classesregister)modelhandlerr   r   r   register_admin_url_finderS   s    r#   c                   @   s"   e Zd ZdZdddZdd ZdS )AdminURLFinderzR
    The 'main' admin URL finder, which searches across all registered models
    Nc                 C   s   t   || _i | _d S r   )r   r	   finders_by_modelr
   r   r   r   r   \   s    zAdminURLFinder.__init__c                 C   sV   t |}z| j| }W n4 tyJ   t|p0t}|| j}|| j|< Y n0 ||S r   )r   r%   KeyErrorr   getr   r	   r   )r   r   r!   finderZfinder_classr   r   r   r   a   s    
zAdminURLFinder.get_edit_url)Nr   r   r   r   r   r$   W   s   
r$   N)Zdjango.contrib.admin.utilsr   Zdjango.core.exceptionsr   Zdjango.urlsr   Zwagtail.hooksr   Zwagtail.utils.registryr   r   r   r   r#   r$   r   r   r   r   <module>   s   (