o
    QDi#                     @  s   d dl mZ d dlmZmZ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 dd	lmZ dd
lmZ erHddl
mZ ddlmZ e	jdddG dd deedZdS )    )annotations)TYPE_CHECKINGAnyClassVarListOptionalUnionN   )errorssettings)FrictionlessException)Metadata   Dataset)Factory)types)ControlTF)kw_onlyreprc                	      s  e Zd ZU dZejdddZded< 	 dZded< 	 dZ	d	ed
< 	 dZ
ded< 	 dZd	ed< 	 dZd	ed< 	 ejedZded< 	 dZd	ed< 	  fddZedEddZdFddZdGd d!ZdHd"d#ZdId%d&ZdHd'd(Zd)d* Zd+d, Zdd-dJd/d0Zd1d2 ZdK fd5d6Zd7ZejZ d8dgd9e!j"d:d9e!j#d:dd9idd9id;dd8id<d=d>Z$e%dLd?d@Z&e%dM fdCdDZ'  Z(S )NCatalogzCatalog representationNF)defaultr   zOptional[Any]sourcezOptional[Control]controlzOptional[str]namezClassVar[Union[str, None]]typetitledescription)factoryzList[Dataset]datasetsbasepathc                   s(   | j D ]	}| |_||j_qt   d S )N)r   catalogpackagedatasetsuper__attrs_post_init__selfr#   	__class__ U/var/www/Datamplify/venv/lib/python3.10/site-packages/frictionless/catalog/catalog.pyr%   C   s   

zCatalog.__attrs_post_init__return	List[str]c                 C  s   dd | j D S )zReturn names of datasetsc                 S  s   g | ]}|j qS r*   )r   ).0r#   r*   r*   r+   
<listcomp>N   s    z)Catalog.dataset_names.<locals>.<listcomp>r   r'   r*   r*   r+   dataset_namesK   s   zCatalog.dataset_namesr#   Union[Dataset, str]r   c                 C  s0   t |trtj|| jd}| j| | |_|S )zAdd new dataset to the catalog)r    )
isinstancestrr   from_descriptorr    r   appendr!   r&   r*   r*   r+   add_datasetP   s
   
zCatalog.add_datasetr5   boolc                 C  s    | j D ]
}|j|kr dS qdS )zCheck if a dataset is presentTF)r   r   r'   r   r#   r*   r*   r+   has_datasetX   s
   

zCatalog.has_datasetc                 C  s:   | j D ]}|j|kr|  S qtjd| dd}t|)zGet dataset by namez	dataset "z" does not exist)note)r   r   r
   CatalogErrorr   )r'   r   r#   errorr*   r*   r+   get_dataset_   s   

zCatalog.get_datasetOptional[Dataset]c                 C  sP   |j sJ | |j r!| |j }| j|}|| j|< | |_|S | | dS )zSet dataset by nameN)r   r;   r?   r   indexr#   r8   )r'   r#   prev_datasetrA   r*   r*   r+   set_datasetg   s   

zCatalog.set_datasetc                 C  s   |  |}| j| |S )zRemove dataset by name)r?   r   remover:   r*   r*   r+   remove_datasetr   s   
zCatalog.remove_datasetc                 C  s
   g | _ dS )zRemove all the datasetsNr0   r1   r*   r*   r+   clear_datasetsx   s   
zCatalog.clear_datasetsc                 C  sr   t | jt t| jkr5g }t| jD ]#\}}|j}||d }|dkr/d||f | j| _|| qd S d S )Nr   z%s%s)lenr2   set	enumerater   r   countr7   )r'   
seen_namesrA   r#   r   rJ   r*   r*   r+   deduplicate_datasets|   s   zCatalog.deduplicate_datasetsstatsrN   c                C  s   | j D ]}|j|d qdS )zyInfer catalog's metadata

        Parameters:
            stats? (bool): stream files completely and infer stats
        rM   N)r   infer)r'   rN   r#   r*   r*   r+   rO      s   
zCatalog.inferc                 C  s   | j D ]}|  qdS )zDereference underlaying metadata

        If some of underlaying metadata is provided as a string
        it will replace it by the metadata object
        N)r   dereferencer&   r*   r*   r+   rP      s   

zCatalog.dereferenceoptionsr   c                   s   t  jdd| ji|S )zCreate a copy of the catalogr    Nr*   )r$   to_copyr    )r'   rQ   r(   r*   r+   rR      s
   
zCatalog.to_copyr!   objectstring)r   patternarray)r   items)r   r   r   r   r   )r   required
propertiesc                 C  s   |dkrt S d S )Nr   r   )clsr   r*   r*   r+   metadata_select_property_class   s   z&Catalog.metadata_select_property_class
descriptortypes.IDescriptorc                   s   t  jd|dd|S )NT)r\   with_basepathr*   )r$   metadata_import)rZ   r\   rQ   r(   r*   r+   r_      s   zCatalog.metadata_import)r,   r-   )r#   r3   r,   r   )r   r5   r,   r9   )r   r5   r,   r   )r#   r   r,   r@   )rN   r9   )rQ   r   )r   r5   )r\   r]   rQ   r   ))__name__
__module____qualname____doc__attrsfieldr   __annotations__r   r   r   r   r   listr   r    r%   propertyr2   r8   r;   r?   rC   rE   rF   rL   rO   rP   rR   metadata_typer
   r=   metadata_Errorr   NAME_PATTERNTYPE_PATTERNmetadata_profileclassmethodr[   r_   __classcell__r*   r*   r(   r+   r      s`   
 




	

r   )	metaclass)
__future__r   typingr   r   r   r   r   r   rd    r
   r   	exceptionr   metadatar   r#   r   r   r   r   dialectr   definer   r*   r*   r*   r+   <module>   s     