o
    QDiW                     @  s   d dl mZ d dlZd dlZd dlm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mZ d
dlmZ erDddlmZ G dd deZdS )    )annotationsN)datetime)TYPE_CHECKINGAny   )errors)FrictionlessException)platform)Parsersystem   )
OdsControl)TableResourcec                   @  s.   e Zd ZdZdZg dZdd Zddd	Zd
S )	OdsParserzODS parser implementation.T)booleandater   integernumberstringtimeyearc              	   #  s    t | jj}tjt| j	j
 }zt|jtr#|j|j }n|j|jd  }W n ttfyH   d}|| jj|jf }ttj|dw d
dd | D ]} fdd	|D V  qRd S )Nr   z3OpenOffice document "%s" does not have a sheet "%s")notecellr   c                 S  s^   | j }| j}t|tr||d krt|S |dkr-t|dkr't|d S t|dS |S )z$Detects int value, date and datetimer   r   
   z%Y-%m-%dz%Y-%m-%dT%H:%M:%S)	
value_typevalue
isinstancefloatintlenr   strptimer   )r   ctyper    r"   X/var/www/Datamplify/venv/lib/python3.10/site-packages/frictionless/formats/ods/parser.py
type_value5   s   z5OdsParser.read_cell_stream_create.<locals>.type_valuec                   s   g | ]} |qS r"   r"   ).0r   r$   r"   r#   
<listcomp>K   s    z5OdsParser.read_cell_stream_create.<locals>.<listcomp>)r   r   )r   from_dialectresourcedialectr	   ezodfopendocioBytesIOloaderbyte_streamreadr   sheetstrsheetsKeyError
IndexErrornormpathr   r   FormatErrorrows)selfcontrolbookr2   r   cellsr"   r&   r#   read_cell_stream_create#   s"   
z!OdsParser.read_cell_stream_createsourcer   c                 C  s  t | jj}tjdd}|  tjj	d|j
d}d|j }| d}t|jj}|jD ]}|d7 }q.W d    n1 s?w   Y  | jtjj|||fd7  _|j| }	|S | jjjrtt|jjD ]\}
}|	d|
f | qft|jD ](\}}| jjjr|d n|}|j| jd	}t|D ]\}
}|	||
f | qqy|  W d    n1 sw   Y  t| j}||j
 d S )
NF)deleteods)doctypefilenamezSheet r   )sizer   )types)r   r(   r)   r*   tempfileNamedTemporaryFilecloser	   r+   newdocnamer2   r   schemafields
row_streamr4   Sheetheader	enumeratefield_names	set_valueto_listsupported_typessaver   create_loaderwrite_byte_stream)r:   r?   r;   filer<   titlerow_sizecol_size_r2   field_indexrJ   indexrow	row_indexr=   r   r/   r"   r"   r#   write_row_streamO   s8   





zOdsParser.write_row_streamN)r?   r   )__name__
__module____qualname____doc__requires_loaderrT   r>   ra   r"   r"   r"   r#   r      s    ,r   )
__future__r   r-   rF   r   typingr   r    r   	exceptionr   r	   r   r
   r;   r   	resourcesr   r   r"   r"   r"   r#   <module>   s    