3
/d\                 @   s  d dl m Z  d dlZd dlmZmZ d dlmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZmZmZ eeZejd ejd	< d
ejd< eeZe jdZG dd dejZdd Zejdddgddd Zejddd Zejddd Z ejddd Z!dS )     )datetimeN)urlparseparse_qs)Flaskrender_templaterequestredirectsend_from_directoryurl_for)
SQLAlchemy)IntegrityError)
tethercalcget_last_fight_idTetherCalcExceptionZDATABASE_URLZSQLALCHEMY_DATABASE_URIFZSQLALCHEMY_TRACK_MODIFICATIONSiDZc               @   s   e Zd ZejejdddZejejddZejej	Z
ejej	ZejejdZejejdZejejZejejejj dZdS )Report   T)Zprimary_key@   	   )Zserver_defaultN)__name__
__module____qualname__dbZColumnZString	report_idZIntegerfight_idZJSONresultsfriendsenc_nameenc_timeZBooleanenc_killZDateTimefuncnowcomputed r"   r"    /var/www/ffxiv/tethercalc/app.pyr      s   r   c             C   sv   t | }dd |jjdD d	 }yt|jd d }W n tk
rT   tdY nX |dkrft|}t|}||fS )
Nc             S   s   g | ]}|r|qS r"   r"   ).0Zsegmentr"   r"   r#   
<listcomp>   s    z!decompose_url.<locals>.<listcomp>/   Zfightr   z*Fight ID is required. Select a fight firstZlast)	r   pathsplitr   ZfragmentKeyErrorr   r   int)Zurlpartsr   r   r"   r"   r#   decompose_url   s    r.   r&   ZGETPOST)methodsc              C   sh   t jdkr`t jd } yt| \}}W n( tk
rL } ztd|dS d}~X nX ttd||dS tdS )	z6Simple form for redirecting to a report, no validationr/   
report_urlz
error.html)	exceptionNcalc)r   r   z	home.html)r   methodZformr.   r   r   r   r
   )r1   r   r   r2   r"   r"   r#   homepage-   s    

r5   z/aboutc              C   s   t jj } | d7 } td| dS )Nio  z
about.html)Zreport_count)r   querycountr   )r7   r"   r"   r#   about;   s    
r8   z/favicon.icoc               C   s   t tjjtjddddS )NZstaticzfavicon.icoz	image/png)Zmimetype)r	   osr)   joinappZ	root_pathr"   r"   r"   r#   faviconD   s    r<   z"/<string:report_id>/<int:fight_id>c          !   C   sz  t | dkrttdS tjj| |dj }|r|j sB|jtk ryt	| |\}}}W n( t
k
r~ } ztd|dS d}~X nX ||_||_|d |_|d |_|d	 |_tj |_tjj  d
d |jj D }nyt	| |\}}}W n* t
k
r } ztd|dS d}~X nX tf | |||d|}ytjj| tjj  W n$ tk
rj } zW Y dd}~X nX td||dS )z"The actual calculated results viewr   r5   )r   r   z
error.html)r2   Nr   r   r   c             S   s   i | ]\}}|t |qS r"   )r,   )r$   kvr"   r"   r#   
<dictcomp>c   s    zcalc.<locals>.<dictcomp>)r   r   r   r   z	calc.html)reportr   )lenr   r
   r   r6   Z	filter_byZfirstr!   LAST_CALC_DATEr   r   r   r   r   r   r   r   r   r    r   ZsessionZcommititemsaddr   )r   r   r@   r   r   Zencounter_infor2   r"   r"   r#   r3   H   sB    




r3   )"r   r9   Zurllib.parser   r   Zflaskr   r   r   r   r	   r
   Zflask_sqlalchemyr   Zsqlalchemy.excr   r   r   r   r   r;   environconfigr   ZfromtimestamprB   ZModelr   r.   Zrouter5   r8   r<   r3   r"   r"   r"   r#   <module>   s"    


	