
    }Vi                        d dl mZmZmZmZmZmZ d dlZd dlZd dl	Z	d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlZd dl mZ d dlmZ  ee      Z ejB                  jE                  dd      e _#        e jI                  e        ee      Z%d Z&e jO                  d      d        Z(e jO                  d      d        Z)e jO                  ddg      d        Z*e jO                  d      d        Z+e jO                  d      d        Z,e jO                  d      d        Zed k(  re j[                  d!"       yy)#    )Flaskrender_templaterequestredirectjsonifyResponseN)StringIO)engine)Visita)sessionmaker)func)datetime)obtenir_geo)parse)generar_estadistiques)r   )bp
SECRET_KEY"canvia_a_una_clau_llarga_i_secreta)bindc                     	 t        d|  ddd      5 }t        j                  |      cd d d        S # 1 sw Y   y xY w# t        $ r | dk7  rt	        d      cY S  w xY w)Nz%/var/www/ceduoda/static/translations/z.jsonrutf-8)encodingca)openjsonloadFileNotFoundErrorload_translation)	lang_codefs     /var/www/ceduoda/app.pyr   r   %   se    9)EJCZab 	 fg99Q<	  	  	  #D))	s#   ? 3	? <? ? AA/c                  h    t         j                  j                  g d      xs d} t        d|        S )Nr   esenr   r#   )r   accept_languages
best_matchr   )	user_langs    r"   redirect_homer+   1   s1     ((334FGO4Ia	{O$$    z/<lang_code>c                 J    | dvrd} t        |       }| |d<   t        d| |      S )Nr%   r   r    z
index.html)langcontent)r   r   )r    r/   s     r"   homer0   7   s3    **	y)G$GK<iIIr,   z/registre_clickPOST)methodsc                     t         j                  rt        j                         } n2t        j                  t         j
                  j                  d            } t         j                  dvrt        ddi      dfS | j                  dd      }|dk(  rt        dd	i      S t         j                  }t         j                  j                  d
d      }| j                  d      }| j                  d      }| j                  dd      }| j                  d      }	 t        j                  j                  |      j                  }| j                  d      }	| j                  d      }
t        |      }|j                   rd}n |j"                  rd}n|j$                  rd}nd}| j                  d      }| j                  d      }| j                  d      }t'               }t)        d/i dt+        j,                         d|d|d|d|d|d|d|d|d|	d|
dd d |d!|j.                  j0                  d"|j2                  j0                  d#|j4                  j0                  d|d|d|}t7        |      }|rd|d$   |_        |d%   |_        |d&   |_        |d'   |_        |d(   |_         |d)   |_!        |d*   |_"        |d+   |_#        |d,   |_$        |d-   |_%        |jM                  |       	 |jO                          |jW                          t        dd	i      S #  d}Y xY w# tP        $ r&}|jS                          tU        d.|       Y d }~Qd }~ww xY w# |jW                          w xY w)0Nr   )zapplication/jsonztext/plain;charset=UTF-8statusblockedi  paginadesconegudainiciokz
User-Agent refereridiomaidioma_basecodi_pais_natiu)alpha_2
Desconegutdurada	resoluciomobiltabletpcaltres
hora_localzona_horaria
scroll_max	data_horaip
user_agent
pais_natiugeolocalitzaciotipus_dispositiu	navegadorsistema_operatiumodel_dispositiulatlonciutatregio
pais_fisiccodi_pais_fisiczipisporgas_namezError guardant visita: ),r   is_jsonget_jsonr   loadsdatadecodecontent_typer   getremote_addrheaders	pycountry	countriesnamer   	is_mobile	is_tabletis_pcSessionr   r   utcnowbrowserfamilyosdevicer   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   addcommit	Exceptionrollbackprintclose)ra   r6   rK   rL   r;   r<   r=   r>   rM   rA   rB   uatipusrG   rH   rI   sessiovisitageoes                       r"   registre_clickr   B   sk    !zz',,--g67 #SS),-s22 XXh.F(D)9!::			B$$\26Jhhy!GXXhF+KHH./O"((,,_,EJJ
 XXhF%I 
z	B	||		,'J88N+L,'J YF //#  	
     (     !  JJ%%!" 55<<#$ 99++%(  )* $+,  -F6 b/C
Z
Z
H7|-!$%6!7Z
Z
Z
Y
JJv
 	Hd#$$Q"!
B  +&**+ 	s6   *L )L  L 	M)M
M 
MM M$z/visitesc                      t               } | j                  t              j                  t        j                  j                               j                         }| j                          t        d|      S )Nzvisites.html)visites)	rm   queryr   order_byrJ   descallrx   r   )r{   r   s     r"   veure_visitesr      sP    YFll6"++F,<,<,A,A,CDHHJG
LLN>7;;r,   z/descarrega_visitesc                  z   t               } | j                  t              j                  t        j                  j                               j                         | j                          t        j                  j                  D cg c]  }|j                   c}fd}t         |       dddi      S c c}w )Nc               3   b  K   t               } t        j                  | t        j                        }|j	                         D ]`  }D cg c]  }t        ||       }}|j	                  |       | j                          | j                  d       | j                  d       b y c c}w w)N)quotingr   )	r	   csvwriter	QUOTE_ALLwriterowgetattrgetvalueseektruncate)outputr   r|   colfilacolumnesr   s        r"   generar_csvz'descarrega_visites.<locals>.generar_csv   s     FCMM:! 	F4<=SGFC(=D=OOD!//##KKNOOA	=s   A
B/B* AB/ztext/csvzContent-Dispositionzattachment;filename=visites.csv)mimetyperf   )rm   r   r   r   rJ   r   r   rx   	__table__columnsri   r   )r{   cr   r   r   s      @@r"   descarrega_visitesr      s    YFll6"++F,<,<,A,A,CDHHJG
LLN & 0 0 8 8919H
 KMJ24UVX X :s   B8z/estadistiquesc                  ,    t                t        d      S )Nzestadistiques.html)r   r   r]   r,   r"   estadistiquesr      s    /00r,   __main__T)debug).flaskr   r   r   r   r   r   r   rg   r   ior	   
crea_dadesr
   modelsr   sqlalchemy.ormr   
sqlalchemyr   r   r}   r   user_agentsr   r   r   rq   recursosr   recursos_bp__name__appenvironrd   
secret_keyregister_blueprintrm   r   router+   r0   r   r   r   runr]   r,   r"   <module>r      sU   O N   
    '     / 	  &Ho.RS   { #
F
#	 3% %
 >J J vh/k% 0k%Z :< <  !X "XB 1 1
 zGG$G r,   