o
    QDiq                     @  s   d dl mZ d dlZd dlZd dlmZmZmZ d dlmZm	Z	m
Z
mZmZ ddlmZ ddlmZmZ ddlmZ d	d
lmZ erHddlmZ G dd deZdS )    )annotationsN)datedatetimetimezone)TYPE_CHECKINGAnyDictListOptional   )platform)FieldSchema)Parser   )settings)TableResourcec                   @  sT   e Zd ZdZdgZdd ZdddZddddZdddZdddZ	ddddZ
d	S )
SpssParserzSpss parser implementation.stringc                 c  s"   t j}tjd|jd |j| jjdd}| }W d    n1 s$w   Y  | 	|}|| j_
|jV  |j| jjddH}|D ]<}g }t|jD ]/\}}|| }	|	d uru|jdkrctt|	}	n|jdv rutj|j }
||	|
d }	||	 qK|V  qBW d    d S 1 sw   Y  d S )NignorecategoryT)ioUtf8integerr   r   time)r   sav_reader_writerwarningsfilterwarningsSPSSIOWarningSavHeaderReaderresourcenormpathall _SpssParser__read_convert_schemaschemafield_names	SavReader	enumeratefieldstypeintfloatr   FORMAT_READspss2strDateappend)selfsavreaderspss_schemar%   itemcellsindexfieldvalueformat r:   Y/var/www/Datamplify/venv/lib/python3.10/site-packages/frictionless/formats/spss/parser.pyread_cell_stream_create   s0   



"z"SpssParser.read_cell_stream_creater3   r   c                 C  sT   t  }|jD ]!}| |j| }t||d}|j| }|r"||_|| q|S )N)namer*   )	r   varNames_SpssParser__read_convert_typeformatsr   from_descriptor	varLabelstitle	add_field)r0   r3   r%   r=   r*   r7   rC   r:   r:   r;   __read_convert_schema4   s   

z SpssParser.__read_convert_schemaN	spss_typeOptional[str]c                 C  s   dt dfdt dfdt dfdt dfdt d	fd
t dfdt dfdt dfdt dfg	}|rL|D ]\}}||rI|  S q<dS |S )Nr   z\bA\d+numberz\bF\d+\.\d+z\b[E|N]\d+\.?\d*r   z\bF\d+r   z\b[A|E|J|S]?DATE\d+r   z\bDATETIME\d+r   z	\bTIME\d+z\bDOLLAR\d+z\bPCT\d+)recompilematch)r0   rF   mappingr*   patternr:   r:   r;   __read_convert_type?   s&   
zSpssParser.__read_convert_typesourcer   c              	   C  s  t j}tjd|jd |  }| |}|j| jj	fddi|}| |j
D ]u}g }|jjD ]g}||j }	|jdv r|jdkrR|	jd urR|	tj}
|
jd d}	|jdkrm|	jd urmttj|	}
|
tj}
|
 }	tj|j }|	| }	||	|}	n|j|vr||	\}	}|	d	}	||	 q0| | q(W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )
Nr   r   r   Tr   r   )tzinfor   utf-8)!r   r   r   r   r   _SpssParser__write_convert_type!_SpssParser__write_convert_schema	SavWriterr!   r"   
row_streamr%   r)   r=   r*   rP   
astimezoner   utcreplacer   combiner   minr   r   FORMAT_WRITEstrftimeencodespssDateTime
write_cellr/   writerow)r0   rO   r1   rL   r3   writerrowr5   r7   celldtr9   _r:   r:   r;   write_row_stream\   sB   









"zSpssParser.write_row_streamc                 C  s4  g i i i d}| i }|   }|jjD ]5}|d |j |jr)|j|d |j< ||j}|rD|d |d |j< |d |d |j< qd||j< q|jD ]+}|	 D ]$}|| }	|j
|}||	\}	}
t|	d}||| krw|||< qSqM| D ]
\}}||d |< q}W d    |S 1 sw   Y  |S )	N)r>   rB   varTypesr@   r>   rB   r   rg   r   r@   rQ   )rR   r%   r)   r/   r=   rC   getr*   rU   keys	get_fieldr_   lenr]   items)r0   rO   r3   sizesrL   r7   rF   rb   r=   rc   re   sizer:   r:   r;   __write_convert_schema~   sD   

z!SpssParser.__write_convert_schemar*   c                 C  s<   ddgddgddgddgddgddgd}|r| |S |S )Nr   F10zF10.2
DATETIME20DATE10TIME8)r   rH   r   r   r   year)rh   )r0   r*   rL   r:   r:   r;   __write_convert_type   s   

zSpssParser.__write_convert_type)r3   r   )N)rF   rG   )rO   r   )r*   rG   )__name__
__module____qualname____doc__supported_typesr<   r$   r?   rf   rS   rR   r:   r:   r:   r;   r      s    


"$r   )
__future__r   rI   r   r   r   r   typingr   r   r   r	   r
   r   r%   r   r   systemr    r   	resourcesr   r   r:   r:   r:   r;   <module>   s    