o
    h                     @   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 N)
issubclassmodelr   superget_querysetget_tree)selfrequest	__class__ O/var/www/html/ndineBlogger/venv/lib/python3.10/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| }|r&||d< t 	||S )Nzadmin/tree_list.htmlc                 S   s4   |  dd dko|  ddod|  di  dg v S )NBACKENDz/django.template.backends.django.DjangoTemplatesAPP_DIRSFz*django.template.context_processors.requestOPTIONScontext_processors)get)tmplr   r   r   <lambda>'   s   
z+TreeAdmin.changelist_view.<locals>.<lambda>r   )
r   r   r   change_list_templateanymapr   	TEMPLATESr   changelist_view)r   r   extra_contextrequest_context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/	treebeard)packageszjavascript-catalog)namezmove/)	r   get_urlsdjango.views.i18nr+   r   as_view
admin_site
admin_view	move_node)r   urlsr+   
jsi18n_urlnew_urlsr   r   r   r/   3   s   
zTreeAdmin.get_urlsc                 C   s   | j jj|dS )N)pk)r   objectsr    )r   node_idr   r   r   get_nodeE   s   zTreeAdmin.get_nodec                 C   s   z|j ||d | |j}|  W n% ttttfy8   t	 d }t
|tdtt|  td Y S w |r@t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;   r8   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y&   td Y S w | |}| |}|jr6dnd}dd	d
dd||f }| 	|||||S )Nr:   
sibling_idrH   r   zMalformed POST paramsTFzsorted-childz
last-childzsorted-siblingleft))TT)TF)FT)FF)
POSTboolintr    KeyError
ValueErrorr   r;   node_order_byrL   )	r   r   r:   	target_idrH   r>   rI   	is_sortedr<   r   r   r   r4   `   s$   



zTreeAdmin.move_noder   )__name__
__module____qualname____doc__r#   r   r'   r/   r;   rL   r4   __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.
    Admin)form)typerW   r   dict)
form_classr   r   r   admin_factoryv   s
   ra   )rZ   rC   django.confr   django.contribr   r   django.httpr   r   django.urlsr   django.utils.translationr   rF   django.utils.encodingr	   treebeard.exceptionsr
   r   r   r   treebeard.al_treer   
ModelAdminr   ra   r   r   r   r   <module>   s    e