o
    QDiU                     @  s`   d dl mZ d dlmZ d dlmZmZ ddlmZm	Z	 er$ddl
mZ G dd dee Zd	S )
    )annotations)cached_property)TYPE_CHECKINGList   )errorshelpers)Fieldc                      s   e Zd ZdZddd$ fddZedd Zedd Zedd Zedd Z	edd Z
edd Zedd Zedd Zdd Zd d! Zd"d# Z  ZS )%Headera  Header representation

    > Constructor of this object is not Public API

    Parameters:
        labels (any[]): header row labels
        fields (Field[]): table fields
        row_numbers (int[]): row numbers
        ignore_case (bool): ignore case

    F)ignore_caselabels	List[str]fieldsList[Field]row_numbers	List[int]r   boolc                  sT   t  dd |D  dd |D | _|  | _|| _|| _|| _g | _| 	  d S )Nc                 s  s    | ]}|j V  qd S )N)name.0field r   R/var/www/Datamplify/venv/lib/python3.10/site-packages/frictionless/table/header.py	<genexpr>!   s    z"Header.__init__.<locals>.<genexpr>c                 S  s   g | ]}|  qS r   )to_copyr   r   r   r   
<listcomp>"   s    z#Header.__init__.<locals>.<listcomp>)
super__init___Header__fieldscopy_Header__field_names_Header__row_numbers_Header__ignore_case_Header__labels_Header__errors_Header__process)selfr   r   r   r   	__class__r   r   r      s   
zHeader.__init__c                 C     | j S )z;
        Returns:
            Schema: table labels
        r#   r&   r   r   r   r   *      zHeader.labelsc                 C  r)   )z;
        Returns:
            Schema: table fields
        )r   r+   r   r   r   r   2   r,   zHeader.fieldsc                 C  r)   )z?
        Returns:
            str[]: table field names
        )r    r+   r   r   r   field_names:   r,   zHeader.field_namesc                 C  s   t tdt| jd S )zC
        Returns:
            str[]: list of field numbers
           )listrangelenr    r+   r   r   r   field_numbersB   s   zHeader.field_numbersc                 C  r)   )zA
        Returns:
            int[]: table row positions
        )r!   r+   r   r   r   r   J   r,   zHeader.row_numbersc                 C     | j  S )zC
        Returns:
            bool: if there is not header
        r*   r+   r   r   r   missingR      zHeader.missingc                 C  r)   )z=
        Returns:
            Error[]: header errors
        r$   r+   r   r   r   r   Z   r,   zHeader.errorsc                 C  r3   )z<
        Returns:
            bool: if header valid
        r6   r+   r   r   r   validb   r5   zHeader.validc                 C  s   |   }t|S )zA
        Returns:
            str: a row as a CSV string
        )to_listr   stringify_csv_string)r&   cellsr   r   r   to_strl   s   
zHeader.to_strc                 C  s   |   S )zConvert to a list)r   r+   r   r   r   r8   u   s   zHeader.to_listc                 C  s  | j rd S | j}| j}t|t|k rAt|d }|t|d  }t||dD ]\}}| jtjdt	t
t|| jdd|d q't|t|kr|t|d }|t|d  }t||dD ]\}}|d ur{| jtjdt	t
t|| jd|j|d q]d}t||D ]\}}|d7 }|s| jtjdt	t
t|| jd|j|d |rg }|d|d  }	t|	ddD ]\}
}||kr||
 q|rd }d}|dt
t| }| jtj|t	t
t|| jt||d  |j|d |r(|j}|dd	 }| jr| | kr(n||kr(| jtjdt	t
t|| jt||j|d q|s>tjdt	t
t|| jd
g| _d S d S )Nr.   )start )noter   r   label
field_namefield_numberr   zat position "%s"z, 
 )r>   r   r   )r4   r#   r   r1   	enumerater$   appendr   ExtraLabelErrorr/   mapstrr!   MissingLabelErrorr   zipBlankLabelErrorjoinDuplicateLabelErrorreplacestripr"   lowerIncorrectLabelErrorBlankHeaderError)r&   r   r   r<   iteratorrA   r?   r   duplicate_field_numbers
seen_cellsseen_number	seen_cellr>   r   lnamer   r   r   	__process{   s   
&
zHeader.__process)r   r   r   r   r   r   r   r   )__name__
__module____qualname____doc__r   r   r   r   r-   r2   r   r4   r   r7   r;   r8   r%   __classcell__r   r   r'   r   r
      s.    







		r
   N)
__future__r   	functoolsr   typingr   r   r=   r   r   schemar	   rH   r
   r   r   r   r   <module>   s    