o
    QDi                     @  s   d dl mZ d dlmZmZmZmZ d dlZd dlm	Z	m
Z
 ddlmZ ddlmZ er2ddlmZ ejd	d
dG dd deZ	
ddddZ	
ddddZdS )    )annotations)TYPE_CHECKINGAnyIteratorListN)next	text_type   )fields)Step)ResourceTF)kw_onlyreprc                   @  sx   e Zd ZU dZdZded< 	 ded< 	 dZded	< 	 dZded
< 	 dddZddgddiddiddiddiddZ	dS )
field_packzkPack fields.

    This step can be added using the `steps` parameter
    for the `transform` function.
    z
field-packstrname	List[str]
from_namesFbool	as_objectpreserveresourcer   returnNonec                 C  sx   |  }| jr
tjntj}|| jd}|j| | js(| j	D ]}|j
| q| jr-tnt}||| j| j	| j|_d S )N)r   )to_petlr   r
   ObjectField
ArrayFieldr   schema	add_fieldr   r   remove_fielditerpackdictiterpackdata)selfr   tableFieldfieldr   	processor r(   \/var/www/Datamplify/venv/lib/python3.10/site-packages/frictionless/steps/field/field_pack.pytransform_resource2   s   
zfield_pack.transform_resource	fromNamestypestringarrayboolean)r   r+   asObjectr   )required
propertiesN)r   r   r   r   )
__name__
__module____qualname____doc__r,   __annotations__r   r   r*   metadata_profile_patchr(   r(   r(   r)   r      s&   
 

r   sourcer   r   r   r   r   r   r   r   Iterator[Any]c                 #  s    t | }t|}t  ttt|}t|}|D ]}||}	|s'||  |	 q||g t	|V  |D ]*}
 fddt
|
D }|rNt|
}n fddt
|
D }||g t	|V  q:dS )zCombines multiple columns as array
    Code partially referenced from https://github.com/petl-developers/petl/blob/master/petl/transform/unpacks.py#L64
    c                   s   g | ]
\}}| v r|qS r(   r(   .0ivfield_indexesr(   r)   
<listcomp>h       ziterpack.<locals>.<listcomp>c                      g | ]
\}}| vr|qS r(   r(   r;   r?   r(   r)   rA   l   rB   N)iterr   listmapr   indexremoveappendextendtuple	enumerater9   r   r   r   ithdrfldsouthdrr&   field_indexrowvalueout_rowr(   r?   r)   r!   M   s*   	



r!   c                 #  s    t | }t|}t  ttt|}t|}D ]}||}	|s'||  |	 q||g t	|V  |D ]-}
t
 fddt|
D }|rQt|
}n fddt|
D }||g t	|V  q:dS )z(Combines multiple columns as JSON Objectc                 3  s,    | ]\}}| v r|d   |fV  qdS )   Nr(   r;   r@   r   r(   r)   	<genexpr>   s    "ziterpackdict.<locals>.<genexpr>c                   rC   r(   r(   r;   r?   r(   r)   rA      rB   z iterpackdict.<locals>.<listcomp>N)rD   r   rE   rF   r   rG   rH   rI   rJ   rK   dictrL   rM   r(   rW   r)   r    q   s.   



r    )F)
r9   r   r   r   r   r   r   r   r   r:   )
__future__r   typingr   r   r   r   attrspetl.compatr   r    r
   pipeliner   r   r   definer   r!   r    r(   r(   r(   r)   <module>   s   @(