a
    )rc>                     @   s  d 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ddlZddl	Z	ddlZddl
mZmZmZmZmZmZ dZdZdZdZdZd	Zejd
dddddddddddddddddddddd ejdddddddd e Zdd Zed d!d" ZdS )#zRoutes plots.    N)Bottlerouteviewresponserequestabortz#c12f4dz#F29E22z#5FA05Az#AA228Cz#F07024   zHelvetica NeueFz#dedddcNonez#161616whiteroundwTout)zaxes.axisbelowzaxes.edgecolorzaxes.facecolorz	axes.gridzaxes.labelcolorzaxes.spines.rightzaxes.spines.topzfigure.facecolorzlines.solid_capstylezpatch.edgecolorzpatch.force_edgecolorz
text.colorzxtick.bottomzxtick.colorzxtick.directionz	xtick.topzytick.colorzytick.directionz
ytick.leftzytick.right)fontrcnotebook         d   i,  )z	font.sizezaxes.titlesizezaxes.labelsizez
figure.dpizsavefig.dpi)r   c                 C   s   | dkrd|  S dS )N2   %.0f%%  )pctr   r   /var/www/vevn/routes/plot.pyautopctQ   s    r   z/surveys/<name>/plot.pngc              
   C   s  t | \}}ttjd}tjd}tjd}tjd}tjd}tjd}tjd}	t | }
|
t| }t 	||t 
| |}|||  }ttg}|dkr t|||   || ||	 d	}tj|||  d
 g|||  d g|||  d gdj}tttg}tj \}}|| dkr|dkrR||dk }|jd	dd }|jjd|ddddddd d}tjjdddd}| | |   || dkrtdg}|! jjd|t"ddd d!id"d d#}tjjdddd}| | |   nZ|| d$krj|jd	dd }|jj#|d}|j$|j%d d%d&d'}t&t'|D ].}|| (d( || )||t'|   q^d)*t+,|| d*}|j-|d+d, |dkr|. /d- |0 /d- |j1d. /d- |j1d/ /d- |j1d0 /d	 |j1d1 /d- g }|2 D ]:}|(d |3d d)*t+,|4 d2}|5| q$|6| t78 }|j9|d3d4d5 d6t:_;tj<  tj= >  |? S )7Nzselected-answerstypereadingquestionplotz
good-regexz	bad-regexsatisfactionTbadneithergood)zInsatisfecho/azNi nizSatisfecho/azDona partidar   )	normalizer   r   z%.1f%%r   g?r
   bold)colorZweight)ylabelcolorsr   fontsizepctdistance	textpropslabels)r   r   g333333?)r&   z
Dona totalz	#00000000    r&   z#999999Z   )r'   r(   r   r)   r*   r+   Z
startangler,   zBarras verticalesr      )fmtpaddingr   
   (   )padFtoprightbottomleft
   ZsvgZtight)formatZbbox_incheszimage/svg+xml)@surveyparser
get_surveyjsonloadsr   querygetget_readingsintfilter_surveyget_metadataPRIMARY	SECONDARYreadingparserZclassifyto_framepandas	DataFrame	from_dictTGOODOKBAD
matplotlibpyplotsubplotsvalue_countsr   pieZCircleZgcaZ
add_artistZtight_layoutsqueezer   barZ	bar_labelZ
containersrangelenZset_fontsizeZ	set_colorjointextwrapwrapZ	set_titleZ	get_xaxisZset_visibleZ	get_yaxisZspinesZget_xticklabelsZset_rotationZget_textappendZset_xticklabelsioBytesIOZsavefigr   content_typecloseZfigurecleargetvalue)namesurvey
propertiesselected_answersr   r   r   r   Z
good_regexZ	bad_regexreadings	dataframer(   r    figaxZcircleZboxesititleZ	new_textsZticktextZ
png_outputr   r   r   plot_readingT   s    

$








ro   )__doc__rQ   Zseabornr>   r[   r^   r<   rH   rJ   mathbottler   r   r   r   r   r   rP   rO   rN   rF   rG   ZMAX_SATISF_CHARSsetZset_contextr   r   ro   r   r   r   r   <module>!   sV   @ 

