3
÷å‚d¦  ã               @   sR  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZejƒ a	ej
eƒZde_eƒ adad8\aaZd;\aaZdd„ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdd„ Zdd„ Zdd„ Z d<d d!„Z!ej"d"ƒd#d$„ ƒZ#ej"d%ƒd&d'„ ƒZ$d(d)„ Z%d=d+d,„Z&d-d.„ Z'd/d0„ Z(ej"d1d2gd3�d4d5„ ƒZ)dS )>é    Ns@   7fb45965e367bbb20f203043b4cf4e662bc859650b6322af5a9a9d3c9b281938Z180é±   é   és   é‡   é   iŠ  é"   é^   c             C   s8   | j d }|dks(|dks(tdj|ƒƒ‚|dkr4dS dS )Nr   ÚAÚBz get_flux_type: flux_type == "{}"zflusso Azflusso Béÿÿÿÿ)ÚnameÚAssertionErrorÚformat)Úpathlib_fileÚ	flux_type© r   ú#/home/webmaster/webflussi/webapp.pyÚget_flux_type   s    
r   c               @   s   e Zd ZdS )ÚWebappExceptionN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r      s   r   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚCodRegNotFoundExceptionc             C   s   t |ƒ| _|| _d S )N)r   r   Ú
first_line)ÚselfÚ	flux_filer   r   r   r   Ú__init__   s    
z CodRegNotFoundException.__init__c             C   s   dj t| jƒS )NzGCodice regionale "{}" non trovato nel {}.
Trovato codice inatteso "{}".)r   Úcod_regr   )r   r   r   r   Ú__str__#   s    zCodRegNotFoundException.__str__N)r   r   r   r   r   r   r   r   r   r      s   r   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚUnexpectedLenExceptionc             C   s   t |ƒ| _|| _d S )N)r   r   Úlen_riga)r   r   r    r   r   r   r   +   s    
zUnexpectedLenException.__init__c             C   s   dj | j| jƒS )NzILunghezza riga inattesa nel {}.
Trovata lunghezza "{}" (incluso newline).)r   r   r    )r   r   r   r   r   /   s    zUnexpectedLenException.__str__N)r   r   r   r   r   r   r   r   r   r   *   s   r   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚMalformedDateExceptionc             C   s   t |ƒ| _|| _d S )N)r   r   Úcompare_date)r   r   r"   r   r   r   r   6   s    
zMalformedDateException.__init__c             C   s   dj | j| jƒS )Nz*Data malformata nel {}.
Trovata data "{}".)r   r   r"   )r   r   r   r   r   :   s    zMalformedDateException.__str__N)r   r   r   r   r   r   r   r   r   r!   5   s   r!   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚDifferentFluxExceptionc             C   s   || _ || _d S )N)Ú
fluxtype_aÚ
fluxtype_b)r   r$   r%   r   r   r   r   @   s    zDifferentFluxException.__init__c             C   s   dS )NzfSono stati passati file di tipo C1 e di tipo C2.
Si possono fondere file con lo stesso tipo di flusso.r   )r   r   r   r   r   D   s    zDifferentFluxException.__str__N)r   r   r   r   r   r   r   r   r   r#   ?   s   r#   c             C   s   t | ||d … ƒS )Né   )Úint)ÚlineÚ	pos_countr   r   r   Úextract_intI   s    r*   c       	      C   sÈ   |dks|dkst dj|ƒƒ‚|dkr,t}nt}x0tj| jƒ ƒ}|dkrJP t||ƒ}|j|ƒ q2W x`tj|jƒ ƒ}|dkr|P t||ƒ}t|| ƒj	ddƒ}|j|d |… | ||d d …  ƒ qdW d S )Nr   é   z save_new_flux: flux_type == "{}"Ú r&   Ú0)
r   r   Úpos_count_c1Úpos_count_c2Ú	unidecodeÚreadliner*   ÚwriteÚstrÚrjust)	Zflux_aZflux_br   Zflux_cr)   Úcur_lineZ	add_digitZ	cur_digitZ	new_digitr   r   r   Úsave_new_fluxL   s&    

r6   c       
      C   sþ   | j ƒ }|jtƒ}|dkr$t| |ƒ‚d}tjjd|ƒ}tjjd|ƒ}t|ƒ}|tkrZt}n|t	krht
}n
t| |ƒ‚|||d … }yXtjj||ƒ}	||	  ko¤|kn  rØ|tksÈ|t
ksÈtdj|ƒƒ‚|tkrÔdS dS W n tk
rø   t| |ƒ‚Y nX d S )	Nr   z%d%m%YZ01011900Z31122100é   zcheck_flux: pos == "{}"r   r+   )r1   Úfindr   r   ÚdatetimeÚstrptimeÚlenÚlen_c1Úpos_c1Úlen_c2Úpos_c2r   r   r   Ú
ValueErrorr!   )
r   r   ÚidxZdate_formatZ
lower_dateZ
upper_dateZlen_lineÚposÚcompareZ	find_dater   r   r   Ú
check_fluxd   s0    


rD   Ú?abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_é   c                sT   dj ‡ fdd„t|ƒD ƒƒ}x(|tkrDdj ‡ fdd„t|ƒD ƒƒ}qW tj|ƒ |S )Nr,   c                s   g | ]}t jˆ ƒ‘qS r   )ÚrandomÚchoice)Ú.0Ú_)Úsession_charsr   r   ú
<listcomp>‰   s    znew_session.<locals>.<listcomp>c                s   g | ]}t jˆ ƒ‘qS r   )rG   rH   )rI   rJ   )rK   r   r   rL   Œ   s    )ÚjoinÚrangeÚsessionsÚadd)rK   Zsession_str_lenZsession_strr   )rK   r   Únew_session†   s    

rQ   ú/c               C   s   t ƒ tjd< tjdƒS )NÚidz
index.html)rQ   ÚflaskÚsessionÚrender_templater   r   r   r   Úindex‘   s    rW   z/templates/<path>c             C   s   t jd| ƒS )NÚ	templates)rT   Úsend_from_directory)Úpathr   r   r   Ú
serve_file–   s    r[   c             C   s   | j ƒ r| jƒ  d S )N)ÚexistsÚunlink)r   r   r   r   Úsafe_file_removeš   s    r^   é @  c          
   C   s–   t j|ƒ}tjƒ  d}|jdd��X}xP| j|ƒ}|rT|d d… dkrT|dd … }d}|dkr^P tj|ƒ |j|ƒ q&W W d Q R X tjƒ  |tj	d fS )	NTÚwb)Úmoder+   s   
Fó    Úencoding)
ÚpathlibÚPathÚdetectorÚresetÚopenÚreadÚfeedr2   ÚcloseÚresult)Zwerkzeug_fileÚfilenameÚ
chunk_sizeZret_pathZfirst_iterationÚfZ
read_bytesr   r   r   Údetect_encoding_and_savež   s    


rp   c             C   s   | j t| ƒd�S )N)rc   )rh   Údetect_encoding)r   r   r   r   Úcustom_open±   s    rr   c             C   s   | j jd S )Nr   r   )r   r   )Úer   r   r   Úget_flux_file_from_exception´   s    rt   z/uploadÚPOST)Úmethodsc           '   C   s|  �zPyòt jd } | tkrtƒ } | d }| d }| d }tt jjd |ƒ\}}tt jjd |ƒ\}}tj|ƒ}|j	|d��v}	|j	|d��^}
t
|	ƒ}t
|
ƒ}||krªt||ƒ‚|j	dd	d
��"}t|	|
||ƒ t jd|ddd�S Q R X W d Q R X W d Q R X W nX ttttfk
�r$ } zt|ƒS d }~X n, tk
�rN } zdjt|ƒƒS d }~X nX W d tj| ƒ t|ƒ t|ƒ t|ƒ X dS )NrS   r	   r
   ÚCZflussoAZflussoB)rc   ÚwÚascii)ra   rc   Ú.ztext/plain; charset=UTF-8T)ÚmimetypeÚas_attachmentz6Asserzione fallita: "{}".
Notificare il programmatore.z.Errore intatteso.
Notificare il programmatore.)rT   rU   rO   rQ   rp   ÚrequestÚfilesrd   re   rh   rD   r#   r6   rY   r   r   r!   r3   r   r   Údiscardr^   )Z
session_idZpath_flusso_aZpath_flusso_bZpath_flusso_cZpfile_flusso_aZencoding_flusso_aZpfile_flusso_bZencoding_flusso_bZpfile_flusso_cÚfaZfbr$   r%   Zfcrs   r   r   r   Úupload·   sB    


&

r�   é²   é“   )r‚   r   rƒ   é‹  éj   )r„   r   r…   )rE   rF   )r_   )*ÚioÚosrT   rG   Zchardetrd   r9   r0   ZUniversalDetectorrf   ÚFlaskr   ZwebappÚ
secret_keyÚsetrO   r   r<   r=   r.   r>   r?   r/   r   Ú	Exceptionr   r   r   r!   r#   r*   r6   rD   rQ   ÚrouterW   r[   r^   rp   rr   rt   r�   r   r   r   r   Ú<module>   s>   




#


