o
    >hQ                     @   s<   d dl mZ ddlmZ ddlmZ dZG dd deZd	S )
    )unset_value   )widgets   )Field)	FormFieldc                       s|   e Zd ZdZe Z	d fdd	ZedfddZ	dd	d
Z
dd Zdd Zdd Zdd Zedd Zedd Z  ZS )r   a-  
    Encapsulate a form as a field in another form.

    :param form_class:
        A subclass of Form that will be encapsulated.
    :param separator:
        A string which will be suffixed to this field's name to create the
        prefix to enclosed fields. The default is fine for most uses.
    N-c                    sF   t  j||fi | || _|| _d | _| jrtd|r!tdd S )NzGFormField cannot take filters, as the encapsulated data is not mutable.zTFormField does not accept any validators. Instead, define them on the enclosed form.)super__init__
form_class	separator_objfilters	TypeError)selfr   label
validatorsr   kwargs	__class__ S/var/www/html/flask_server/venv/lib/python3.10/site-packages/wtforms/fields/form.pyr
      s   zFormField.__init__c                 C   s   |rt d|tu r z|  }W n t y   | j}Y nw || _|| _| j| j }t|tr<| j	d||d|| _
d S | j	|||d| _
d S )NzFFormField cannot take filters, as the encapsulateddata is not mutable.)formdataprefix)r   objr   r   )r   r   defaultr   object_datanamer   
isinstancedictr   form)r   r   dataextra_filtersr   r   r   r   process(   s    

zFormField.processr   c                 C   s   |rt d| j S )NzWFormField does not accept in-line validators, as it gets errors from the enclosed form.)r   r    validate)r   r    extra_validatorsr   r   r   r$   >   s
   
zFormField.validatec                 C   sH   t ||d }|d u r| jd u rtd| j}| j| t||| d S )NzZpopulate_obj: cannot find a value to populate from the provided obj or input data/defaults)getattrr   r   r    populate_objsetattr)r   r   r   	candidater   r   r   r'   F   s   
zFormField.populate_objc                 C   s
   t | jS N)iterr    r   r   r   r   __iter__S      
zFormField.__iter__c                 C   s
   | j | S r*   )r    r   r   r   r   r   __getitem__V   r.   zFormField.__getitem__c                 C   s   t | j|S r*   )r&   r    r/   r   r   r   __getattr__Y   s   zFormField.__getattr__c                 C      | j jS r*   )r    r!   r,   r   r   r   r!   \      zFormField.datac                 C   r2   r*   )r    errorsr,   r   r   r   r4   `   r3   zFormField.errors)NNr   )r   )__name__
__module____qualname____doc__r   TableWidgetwidgetr
   r   r#   r$   r'   r-   r0   r1   propertyr!   r4   __classcell__r   r   r   r   r   	   s    


r   N)wtforms.utilsr    r   corer   __all__r   r   r   r   r   <module>   s
    