
    恕f                     R    d dl Z d dlmZmZmZ d dlmZmZ  G d de      Zd Z	d Z
y)    N)string_types
as_unicode	iteritems)AjaxModelLoaderDEFAULT_PAGE_SIZEc                   <     e Zd Z fdZd Zd Zd ZdefdZ xZ	S )QueryAjaxModelLoaderc                     t         t        |   ||       || _        |j	                  d      | _        | j                         | _        | j
                  st        d|d| j                        y)zj
            Constructor.

            :param fields:
                Fields to run query against
        fieldsz3AJAX loading requires `fields` to be specified for .N)
superr	   __init__modelgetr   _process_fields_cached_fields
ValueErrorname)selfr   r   options	__class__s       c/var/www/feuerwehr-webapp/venv/lib/python3.12/site-packages/flask_admin/contrib/mongoengine/ajax.pyr   zQueryAjaxModelLoader.__init__   sc     	"D24A
kk(+"224{{[`bfbkbklmm     c                     g }| j                   D ]i  }t        |t              rFt        | j                  |d       }|st        | j                  d|d      |j                  |       Y|j                  |       k |S )Nr   z does not exist.)r   
isinstancer   getattrr   r   append)r   remote_fieldsfieldattrs       r   r   z$QueryAjaxModelLoader._process_fields   sq    [[ 		,E%.tzz5$7$

E%RSS$$T*$$U+		, r   c                 H    |sy t        |j                        t        |      fS )N)r   pk)r   r   s     r   formatzQueryAjaxModelLoader.format)   s!    588$j&788r   c                 j    | j                   j                  j                  |      j                         S )N)r"   )r   objectsfilterfirst)r   r"   s     r   get_onezQueryAjaxModelLoader.get_one/   s)    zz!!((B(/5577r   r   c                 x   | j                   j                  }t        |      dkD  red }| j                  D ]C  }d|j                  z  |i}|st        j                  di |},|t        j                  di |z  }E |j                  |      }|r|j                  |      }|j                  |      j                         S )Nr   z%s__icontains )r   r%   lenr   r   mongoengineQr&   skiplimitall)r   termoffsetr/   querycriteriar   flts           r   get_listzQueryAjaxModelLoader.get_list2   s    

""t9q=H,, 5'%**4d;*}}3s3H 4 44H5 LL*EJJv&E{{5!%%''r   )
__name__
__module____qualname__r   r   r#   r(   r   r6   __classcell__)r   s   @r   r	   r	      s%    n" 98 %&-> (r   r	   c                    t        | |d       }|t        d| d|d      t        |      j                  }|dk(  s|dk(  r!|j                  }t        |      j                  }|dk7  rt        d|z        |j
                  }t        ||fi |S )NzModel z does not have field r   	ListFieldSortedListFieldReferenceFieldz0Dont know how to convert %s type for AJAX loader)r   r   typer7   r   document_typer	   )r   r   
field_nameoptspropftyperemote_models          r   create_ajax_loaderrF   H   s    5*d+D|ujQRRJEu(99zzT
##  KeSTT%%Ll;d;;r   c                 X     d  fdfd |j                   |d        S )Nc                 b    | r| d|j                         S t        |      j                         S )N-)lowerr   )baser   s     r   	make_namez*process_ajax_references.<locals>.make_name\   s-    #T*1133d#))++r   c                    t        |       j                  }|dk(  s|dk(  r4t        |di       j                  d       }|r | j                  ||       y y |dk(  ri }t        |di       }t        |      D ]C  \  }} ||      }	t        |t              rt        | j                  |	||      }
n|}
|
||<   |
|	<   E ||_
        t        |dd       }|r | j                  ||       y y t        d|       )Nr<   r=   _form_subdocumentsEmbeddedDocumentFieldform_ajax_refsz$Failed to process subdocument field )r?   r7   r   r   r   r   r   dictrF   document_type_obj_form_ajax_refsr   )r   subdocrK   rD   	child_docresult	ajax_refsrA   rB   
child_nameloaderhandle_fieldhandle_subdocrL   
referencess              r   rZ   z-process_ajax_references.<locals>.handle_fieldb   s   U$$K5,=#=(<bAEEdKIU[[)T: --F(8"=I$-i$8 	0 
D&tZ8
dD)/0G0GU_aefF!F%+z")/
:&	0 &,F"(<dCIe55vtD  PQQr   c           	          t        |di       }t        |      D ]6  \  }}t        | |d       }|st        d| d|       || ||             8 y )NrN   zInvalid subdocument field r   )r   r   r   )	r   rT   rK   	documentsr   docr   rZ   rL   s	          r   r[   z.process_ajax_references.<locals>.handle_subdoc   s^    F$8"=	"9- 	<ID#E4.E eT!RSSYtT%:;	<r    )r   )r\   viewrZ   r[   rL   s   ` @@@r   process_ajax_referencesrb   [   s,    ,R@	< $**dB'r   )r,   flask_admin._compatr   r   r   flask_admin.model.ajaxr   r   r	   rF   rb   r*   r   r   <module>re      s(     C C E>(? >(B<&4r   