U
    |h                     @   s   d dl mZ d dlmZ d dlmZ d dlmZ G dd deZ	G dd de	Z
G d	d
 d
e	ZG dd de	ZG dd deZG dd deZG dd deZG dd deZdS )    )zip_longest)
SubFactory)StepBuilder)blocksc                   @   s   e Zd ZdS )StreamFieldFactoryExceptionN__name__
__module____qualname__ r   r   t/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/test/utils/wagtail_factories/builder.pyr   	   s   r   c                   @   s   e Zd ZdS )InvalidDeclarationNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )DuplicateDeclarationNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )UnknownChildBlockFactoryNr   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )BaseBlockStepBuilderc                 C   s   |j j}|||| jdS )z Recurse into a sub-factory call.)strategy)factoryZ_builder_classr   )selffactory_metaextrasZbuilder_classr   r   r   recurse   s    zBaseBlockStepBuilder.recurseN)r   r	   r
   r   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )StructBlockStepBuilderNr   r   r   r   r   r       s   r   c                   @   s   e Zd ZdS )ListBlockStepBuilderNr   r   r   r   r   r   $   s   r   c                       s<   e Zd Z fddZdd Zdd Zdd Zd	d
 Z  ZS )StreamBlockStepBuilderc                    s2   |  ||\}}| ||}t |j|| d S )N)get_block_declarationscreate_factory_classsuper__init___meta)r   r   r   r   indexed_block_namesextra_declarationsZnew_factory_class	__class__r   r   r   )   s     zStreamBlockStepBuilder.__init__c              
   C   s2  i }i }|  D ]
\}}| r||jkr<td| dt|}||krx|| |krxtd| d| d||  d|||< qz |jddd	^}}	}
t|}W n& ttfk
r   t	d
| Y nX ||kr|| |	krtd| d|	 d||  d|	||< | 
||	|
}|||< q| || ||fS )NzNo factory defined for block ''z Multiple declarations for index z at this level of nesting (got z, already have )__   )maxsplitzStreamFieldFactory declarations must be of the form <index>=<block_name>, <index>__<block_name>=value or <index>__<block_name>__<param>=value, got: )itemsisdigitbase_declarationsr   intr   split
ValueError	TypeErrorr   reconstruct_key!validate_block_indexes_sequential)r   r   r   r   r    kvkeyinameparamsZtransformed_keyr   r   r   r   0   s<    




z-StreamBlockStepBuilder.get_block_declarationsc                 C   s   | dd |f| S )N.r%   )join)r   indexr5   r6   r   r   r   r/   c   s    z&StreamBlockStepBuilder.reconstruct_keyc                 C   sV   |sd S t | }t|tt|d D ]&\}}||kr*td|j d| q*d S )N   zParameters for z missing required index )sortedkeysr   rangemaxr   r   )r   r   r   Zindexesdeclaredexpectedr   r   r   r0   f   s    z8StreamBlockStepBuilder.validate_block_indexes_sequentialc           
      C   s   d|  i}| }| D ]^\}}|j| }|d k	rht|trh|j| }t|tjr\|j	}||
 j_||| d| < qddlm}	 td|	f|S )NZMetar7   r:   )StreamBlockFactoryZ_GeneratedStreamBlockFactory)Zto_meta_classZget_block_definitionr(   r*   
isinstancer   Zchild_blocksr   Z	ListBlockZchild_blockZget_factoryr   	block_defrA   type)
r   Zold_factory_metar   Znew_class_dictrC   r4   r5   Zdeclared_valueZ	child_defrA   r   r   r   r   r   s     

  z+StreamBlockStepBuilder.create_factory_class)	r   r	   r
   r   r   r/   r0   r   __classcell__r   r   r!   r   r   (   s
   3r   N)	itertoolsr   r   r   Zfactory.builderr   Zwagtailr   	Exceptionr   r   r   r   r   r   r   r   r   r   r   r   <module>   s   