a
    Cg                     @   s   d Z ddlZddlmZ ddlmZm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mZmZmZ dd
lmZ G dd dejZdd ZdS )z"Django admin support for treebeard    N)settings)adminmessages)HttpResponseHttpResponseBadRequest)path)gettext_lazy)	force_str)InvalidPositionMissingNodeOrderByInvalidMoveToDescendantPathOverflow)AL_Nodec                       sV   e Zd ZdZdZ fddZd fdd	Z fdd	Zd
d Zdd Z	dd Z
  ZS )	TreeAdminz!Django Admin class for treebeard.zadmin/tree_change_list.htmlc                    s&   t | jtrt |S | j S d S )N)
issubclassmodelr   superget_querysetZget_tree)selfrequest	__class__ N/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/treebeard/admin.pyr      s    zTreeAdmin.get_querysetNc                    sZ   t | jtrd| _|d u ri }ttdd tj}d|vo>| }|rL||d< t 	||S )Nzadmin/tree_list.htmlc                 S   s4   |  dd dko2|  ddo2d|  di  dg v S )NZBACKENDz/django.template.backends.django.DjangoTemplatesZAPP_DIRSFz*django.template.context_processors.requestOPTIONSZcontext_processors)get)tmplr   r   r   <lambda>'   s    
z+TreeAdmin.changelist_view.<locals>.<lambda>r   )
r   r   r   change_list_templateanymapr   Z	TEMPLATESr   changelist_view)r   r   Zextra_contextrequest_contextZlacks_requestr   r   r   r!      s    	zTreeAdmin.changelist_viewc                    sN   t   }ddlm} td|jdgddd}td| j| j|g}|| S )	z8
        Adds a url to move nodes to this admin
        r   )JavaScriptCatalogzjsi18n/Z	treebeard)packageszjavascript-catalog)namezmove/)	r   get_urlsZdjango.views.i18nr#   r   Zas_viewZ
admin_siteZ
admin_view	move_node)r   urlsr#   Z
jsi18n_urlZnew_urlsr   r   r   r&   3   s    
zTreeAdmin.get_urlsc                 C   s   | j jj|dS )N)pk)r   Zobjectsr   )r   node_idr   r   r   get_nodeE   s    zTreeAdmin.get_nodec                 C   s   z&|j ||d | |j}|  W nJ ttttfyp   t	 d }t
|tdtt|  td Y S 0 |rtd}ntd}t
||||d  tdS )	N)pos   z&Exception raised while moving node: %szException raised during movez-Moved node "%(node)s" as child of "%(other)s"z/Moved node "%(node)s" as sibling of "%(other)s")nodeotherOK)mover+   r)   saver   r   r   r
   sysexc_infor   error_r	   r   infor   )r   as_childr.   r,   r   targetemsgr   r   r   try_to_move_nodeH   s&    

zTreeAdmin.try_to_move_nodec           	   	   C   s   z.|j d }|j d }tt|j dd}W n ttfyL   td Y S 0 | |}| |}|jrldnd}dd	d
dd||f }| 	|||||S )Nr*   Z
sibling_idr8   r   zMalformed POST paramsTFzsorted-childz
last-childzsorted-siblingleft))TT)TF)FT)FF)
POSTboolintr   KeyError
ValueErrorr   r+   Znode_order_byr<   )	r   r   r*   Z	target_idr8   r.   r9   Z	is_sortedr,   r   r   r   r'   `   s"    



zTreeAdmin.move_node)N)__name__
__module____qualname____doc__r   r   r!   r&   r+   r<   r'   __classcell__r   r   r   r   r      s   	r   c                 C   s   t | jd tft| dS )zDynamically build a TreeAdmin subclass for the given form class.

    :param form_class:
    :return: A TreeAdmin subclass.
    ZAdmin)form)typerC   r   dict)Z
form_classr   r   r   admin_factoryv   s
    rK   )rF   r3   Zdjango.confr   Zdjango.contribr   r   Zdjango.httpr   r   Zdjango.urlsr   Zdjango.utils.translationr   r6   Zdjango.utils.encodingr	   Ztreebeard.exceptionsr
   r   r   r   Ztreebeard.al_treer   Z
ModelAdminr   rK   r   r   r   r   <module>   s   e