
    恕fY                     |    d dl mZmZmZm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mZmZmZ  G d de      Zd	 Zy
)    )or_and_casttext)String)
as_unicodestring_types)AjaxModelLoaderDEFAULT_PAGE_SIZE   )get_primary_keyhas_multiple_pksis_relationshipis_association_proxyc                   B     e Zd Z fdZd Zd Zd Zd ZdefdZ	 xZ
S )QueryAjaxModelLoaderc                    t         t        |   ||       || _        || _        |j                  d      | _        |j                  d      | _        |j                  d      | _        | j                  st        d|d| j                        | j                         | _        t        |      rt        d      t        |      | _        y)z
            Constructor.

            :param fields:
                Fields to run query against
            :param filters:
                Additional filters to apply to the loader
        fieldsorder_byfiltersz3AJAX loading requires `fields` to be specified for .z9Flask-Admin does not support multi-pk AJAX model loading.N)superr   __init__sessionmodelgetr   r   r   
ValueErrorname_process_fields_cached_fieldsr   NotImplementedErrorr   pk)selfr   r   r   options	__class__s        \/var/www/feuerwehr-webapp/venv/lib/python3.12/site-packages/flask_admin/contrib/sqla/ajax.pyr   zQueryAjaxModelLoader.__init__   s     	"D24A
kk(+J/{{9-{{[`bfbkbklmm"224E"%&abb!%(    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&   ss    [[ 
	,E%.tzz5$7$

E%RSS$$T* $$U+
	, r'   c                 J    |sy t        || j                        t        |      fS N)r*   r"   r   )r#   r   s     r&   formatzQueryAjaxModelLoader.format7   s#    udgg&
5(999r'   c                 L    | j                   j                  | j                        S r0   )r   queryr   )r#   s    r&   	get_queryzQueryAjaxModelLoader.get_query=   s    ||!!$**--r'   c                     | j                   j                  5  | j                         j                  |      cd d d        S # 1 sw Y   y xY wr0   )r   no_autoflushr4   r   )r#   r"   s     r&   get_onezQueryAjaxModelLoader.get_one@   s9    \\&& 	,>>#''+	, 	, 	,s   A  A	r   c                    | j                         }fd| j                  D        }|j                  t        |       }| j                  r`| j                  D cg c]4  }t        | j                  j                  j                         d|      6 }}|j                  t        |       }| j                  r|j                  | j                        }|j                  |      j                  |      j                         S c c}w )Nc              3      K   | ]E  }t        |      r|j                  d z        n!t        |t              j                  d z         G yw)z%%%s%%N)r   iliker   r   ).0r-   terms     r&   	<genexpr>z0QueryAjaxModelLoader.get_list.<locals>.<genexpr>I   sQ      fHM 5I4O5;;y4/0UF+11)d2BCD fs   AAr   )r4   r    filterr   r   r   r   __tablename__lowerr   r   offsetlimitall)r#   r<   rA   rB   r3   r   values    `     r&   get_listzQueryAjaxModelLoader.get_listE   s     fQUQdQdfS']+<<^b^j^jkUZttzz'?'?'E'E'GOPkGkLLw0E==NN4==1E||F#))%04466 ls   9C?)__name__
__module____qualname__r   r   r1   r4   r7   r   rE   __classcell__)r%   s   @r&   r   r   
   s)    )6":.,
 %&-> 7r'   r   c                    t        | |d       }|t        d| d|d      t        |      st        |      st        | d|d      t        |      r|j                  }|j
                  j                  j                  }t        |||fi |S )NzModel z does not have field r   z is not a relation.)	r*   r   r   r   remote_attrpropmapperclass_r   )r   r   r   
field_namer$   r.   remote_models          r&   create_ajax_loaderrQ   W   s    5*d+D|ujQRR4 )=d)CujIJJD!99##**Lg|GwGGr'   N)
sqlalchemyr   r   r   r   sqlalchemy.typesr   flask_admin._compatr   r	   flask_admin.model.ajaxr
   r   toolsr   r   r   r   r   rQ    r'   r&   <module>rX      s/    , , # 8 E [ [J7? J7ZHr'   