
    Ah                         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ej0                        Zd Zy)z"Django admin support for treebeard    N)settings)adminmessages)HttpResponseHttpResponseBadRequest)path)gettext_lazy)	force_str)InvalidPositionMissingNodeOrderByInvalidMoveToDescendantPathOverflow)AL_Nodec                   N     e Zd ZdZdZ fdZd	 fd	Z fdZd Zd Z	d Z
 xZS )
	TreeAdminz!Django Admin class for treebeard.zadmin/tree_change_list.htmlc                     t        | j                  t              rt        |   |      S | j                  j                         S N)
issubclassmodelr   superget_querysetget_tree)selfrequest	__class__s     ?/home/dcms/DCMS/lib/python3.12/site-packages/treebeard/admin.pyr   zTreeAdmin.get_queryset   s6    djj'* 7'00::&&((    c                     t        | j                  t              rd| _        |i }t	        t        d t        j                              }d|vxr | }|r||d<   t        | %  ||      S )Nzadmin/tree_list.htmlc                     | j                  dd       dk(  xr8 | j                  dd      xr$ d| j                  di       j                  dg       v S )NBACKENDz/django.template.backends.django.DjangoTemplatesAPP_DIRSFz*django.template.context_processors.requestOPTIONScontext_processors)get)tmpls    r   <lambda>z+TreeAdmin.changelist_view.<locals>.<lambda>'   sX    HHY-1bb zHHZ/z@DHHYXZD[D_D_`tvxDyy r   r   )
r   r   r   change_list_templateanymapr   	TEMPLATESr   changelist_view)r   r   extra_contextrequest_contextlacks_requestr   s        r   r+   zTreeAdmin.changelist_view   sz    djj'*(>D% Mz ""
 #-7O<O'.M)$w&w>>r   c                     t         |          }ddlm} t	        d|j                  dg      d      }t	        d| j                  j                  | j                              |g}||z   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.i18nr0   r   as_view
admin_site
admin_view	move_node)r   urlsr0   
jsi18n_urlnew_urlsr   s        r   r4   zTreeAdmin.get_urls3   sl     w!7)%%}%=%

 $//44T^^DG
 $r   c                 N    | j                   j                  j                  |      S )N)pk)r   objectsr$   )r   node_ids     r   get_nodezTreeAdmin.get_nodeE   s     zz!!%%%11r   c           
         	 |j                  ||       | j                  |j                        }|j                          |rt        d      }nt        d      }t        j                  ||||dz         t!        d      S # t        t
        t        t        f$ rY t        j                         d   }t        j                  |t        d      t        t        |            z         t        d      cY S w xY w)	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)moverA   r>   saver   r   r   r   sysexc_infor   error_r
   r   infor   )r   as_childrE   rC   r   targetemsgs           r   try_to_move_nodezTreeAdmin.try_to_move_nodeH   s    	JIIf#I& ==)DIIK CDCEFCgsdV%DDED!! #L2I! 		Jq!A NN7EF(|J- -. **HII		Js   >B   A/C21C2c                    	 |j                   d   }|j                   d   }t        t        |j                   j                  dd                  }| j                  |      }| j                  |      }|j                  rdnd}dd	d
dd||f   }| j                  |||||      S # t        t
        f$ r t        d      cY S w xY w)Nr@   
sibling_idrO   r   zMalformed POST paramsTFzsorted-childz
last-childzsorted-siblingleft))TT)TF)FT)FF)
POSTboolintr$   KeyError
ValueErrorr   rA   node_order_byrS   )	r   r   r@   	target_idrO   rE   rP   	is_sortedrC   s	            r   r9   zTreeAdmin.move_node`   s    	Cll9-G\2IC 0 0Q ?@AH
 }}W%y) ..DE	 )'+"	

 I
 $$XtS'6JJ *% 	C)*ABB	Cs   AB! !B>=B>r   )__name__
__module____qualname____doc__r'   r   r+   r4   rA   rS   r9   __classcell__)r   s   @r   r   r      s+    +8)?($2"0Kr   r   c                 T    t        | j                  dz   t        ft        |             S )zDynamically build a TreeAdmin subclass for the given form class.

    :param form_class:
    :return: A TreeAdmin subclass.
    Admin)form)typer_   r   dict)
form_classs    r   admin_factoryrj   v   s,     g%	* r   )rb   rJ   django.confr   django.contribr   r   django.httpr   r   django.urlsr   django.utils.translationr	   rM   django.utils.encodingr
   treebeard.exceptionsr   r   r   r   treebeard.al_treer   
ModelAdminr   rj    r   r   <module>ru      sH    ( 
   * <  6 +I I %bK   bKJ	r   