U
    "MîhÁ  ã                   @   s¼   d dl mZ d dlmZmZ d dlmZ d dlmZmZ d dl	Z	d dl
Z
d dlZeedœdd„Zeed	œd
d„Zeedœdd„Zee
jdœdd„Zeeedœdd„Zeeeedœdd„ZdS )é    )ÚSession)ÚfuncÚand_)Údatetime)ÚListÚDictN©ÚdbÚuser_idc                 C   s   |   tj¡ tjj|k¡ ¡ S ©N)ÚqueryÚmodelsÚUserÚfilterÚidÚfirstr   © r   ú	./crud.pyÚget_user   s    r   ©r	   Úusernamec                 C   s   |   tj¡ tjj|k¡ ¡ S r   )r   r   r   r   r   r   r   r   r   r   Úget_user_by_username
   s    r   ©r	   Úemailc                 C   s   |   tj¡ tjj|k¡ ¡ S r   )r   r   r   r   r   r   r   r   r   r   Úget_user_by_email   s    r   )r	   Úuserc                 C   s@   t  |j¡}tj|j|j|d}|  |¡ |  ¡  |  	|¡ |S )N)r   r   Úhashed_password)
ÚauthZget_password_hashZpasswordr   r   r   r   ÚaddÚcommitÚrefresh)r	   r   r   Zdb_userr   r   r   Úcreate_user   s    ý

r!   )r	   Úactivity_datar
   c                 C   sÀ  ddl m} | dd¡d |d< | d¡r8| d¡dkrb| dd¡}d	|krb| d	¡d  ¡ |d< |  tj¡ t	tjj
|ktjj| d
d¡ktjj| dd¡ktjj| dt ¡ ¡ktjj| dd¡kƒ¡ ¡ }|r|js||ƒ}| d¡|_| d¡|_| d¡|_|  ¡  |S ||ƒ}tj|| d
d¡| dd¡| d¡| d¡| d¡| d¡| d¡| dd¡| dd¡| dt ¡ ¡| d¡| d¡| d¡d}|  |¡ |  ¡  |  |¡ |S )z2Create a new activity record (prevents duplicates)r   )Úextract_project_infoÚdurationiè  Úproject_nameZgeneralÚwindow_titleÚ z - Úapplication_nameZUnknownÚ	timestampÚproject_typeÚproject_fileÚurlÚ	file_pathÚdatabase_connectionÚspecific_processÚdetailed_activityÚcategoryÚother)r
   r(   r&   r,   r-   r.   r/   r0   r1   r$   r)   r%   r*   r+   )Zimproved_project_extractorr#   ÚgetÚsplitÚstripr   r   ÚActivityRecordr   r   r
   r(   r&   r)   r   Znowr$   r   r%   r*   r+   r   r   r    )r	   r"   r
   r#   r&   Zexisting_recordZproject_infoZdb_activityr   r   r   Úcreate_activity_record   sX    
ûÿ




ñ

r7   )r	   r
   Ú
start_dateÚend_datec                 C   sj  ddl m} |  ¡ j}dt|ƒkrŒ|  tjjt	 
tjjd¡ d¡t	 tjj¡ d¡¡ ttjj|ktjj|ktjj|kƒ¡ tjj¡ ¡ }nf|  tjjt	 tjj¡ d¡t	 tjj¡ d¡¡ ttjj|ktjj|ktjj|kƒ¡ tjj¡ ¡ }tdd„ |D ƒƒ}g }|D ]D}	tt|	jr*|	j d¡ng ƒƒ}
d	d
„ |
D ƒ}
|  tj¡ ttjj|ktjj|	jktjj|ktjj|kƒ¡ tjj ¡ ¡ ¡ }| |	j|r¤|jnd|	j|dkrÂ|	j| d nd|
rÖ|
dd… ng |rä|jnd|rò|j nd|r |j!nd|r|j"nd|r|j#nd|r*|j$nd|r8|j%nd|rF|j&nddœ¡ q|j'dd„ dd |S )z+Get activity summary grouped by applicationr   )ÚtextZ
postgresqlú,ÚurlsÚtotal_durationc                 s   s   | ]}|j V  qd S r   )r=   )Ú.0Úresultr   r   r   Ú	<genexpr>~   s     z'get_activity_summary.<locals>.<genexpr>c                 S   s   g | ]}|r|d kr|‘qS )ÚNoner   )r>   r,   r   r   r   Ú
<listcomp>ƒ   s       z(get_activity_summary.<locals>.<listcomp>r2   éd   Né
   )r(   r1   r$   Z
percentager<   r-   r.   r/   r0   r&   r%   r*   r+   c                 S   s   | d S )Nr$   r   )Úxr   r   r   Ú<lambda>¡   ó    z&get_activity_summary.<locals>.<lambda>T)ÚkeyÚreverse)(Ú
sqlalchemyr:   Zget_bindr,   Ústrr   r   r6   r(   r   Z
string_aggZlabelÚsumr$   r   r   r
   r)   Zgroup_byÚallZgroup_concatÚlistÚsetr<   r4   Zorder_byZdescr   Úappendr1   r=   r-   r.   r/   r0   r&   r%   r*   r+   Úsort)r	   r
   r8   r9   r:   Zdatabase_urlÚresultsZ
total_timeZsummaryr?   r<   Zsample_recordr   r   r   Úget_activity_summaryY   sz    
ý


ýûõ
ý


ýûõ
 


üÿ
ù	òrS   )Zsqlalchemy.ormr   rJ   r   r   r   Útypingr   r   r   Zschemasr   Úintr   rK   r   r   Z
UserCreater!   r7   rS   r   r   r   r   Ú<module>   s   =