
     ix                         d dl mZ d dlmZmZ ddlmZmZ dee         dee         deee                  fdZe G d	 d
                      Z	dddee
         defdZdee	         fdZd ZdS )    )	dataclass)ListOptional   )ParserTpre_validatorsparserpost_validatorsc                 &     s sS  fd}|S )Nc                 ^    D ]} ||           }  |           } D ]} ||           } | S N )datavr
   r   r	   s     d/root/.openclaw/workspace/.venvs/songid/lib/python3.11/site-packages/dataclass_factory/validators.pypre_post_validating_parserz=combine_parser_validators.<locals>.pre_post_validating_parser   sQ    #  qww6$<<D$  qwwK    r   )r	   r
   r   r   s   ``` r   combine_parser_validatorsr   
   sF    
  *> *	 	 	 	 	 	 	 *)r   c                   0    e Zd ZU eed<   ee         ed<   dS )ValidatorInfo	pre_parsefieldN)__name__
__module____qualname__bool__annotations__r   strr   r   r   r   r      s+         OOOC=r   r   F)prefieldsr    c                       fd}sd|S )a  
    Decorator to set a method as a data validator.
    Such method will be called during data parsing.

    Validator method receives data which must be validated
    and returns corrected data or raises ValueError

    :param fields: names of fields (as they are in target class)
                   which are processed by this validator.
                   None is treated as "any single field"
    :param pre: flag to call validator before parsing corresponding value
    c                     	 | j         }n# t          $ r g x| _         }Y nw xY wD ]&}|                    t          |                     '| S )N)r   r   )dataclass_factory_validate_infoAttributeErrorappendr   )funcvi	fieldnamer!   r    s      r   deczvalidate.<locals>.dec0   sv    	;5BB 	; 	; 	;8::D0222	; 	E 	EIIIm)sCCCDDDDs    !!r   r   )r    r!   r*   s   `` r   validater+   #   s6           Jr   infosc                     |D ]f}|j         r/|                    |j        g                               |            8|                    |j        g                               |            gd S r   )r   
setdefaultr   r&   )r'   r,   r    postinfos        r   fill_validatorsr1   >   ss     9 9> 	9NN4:r**11$7777OODJ++2248888	9 9r   c                     i }i }t          |           D ]:}t          | |          }	 t          ||j        ||           +# t          $ r Y 7w xY w||fS r   )dirgetattrr1   r$   r%   )objectr    r/   xatrs        r   prepare_validatorsr8   F   sy    
CD[[  fa  	C!Dc4PPPP 	 	 	D	9s   ?
AAN)dataclassesr   typingr   r   commonr   r   r   r   r   r   r+   r1   r8   r   r   r   <module>r<      s)   " ! ! ! ! ! ! ! ! ! ! ! ! !        *L*1I* &)_* * * *&        
 27   hsm $    69m!4 9 9 9 9
 
 
 
 
r   