o
    .Lâ^á*  ã                   @   sP  d dl T 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T 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mZ d dlmZ d dlZd dlZd dlm 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%G dd„ deƒZ&dS )é    )Ú*)ÚAllowAny)ÚUser)ÚAPIView)ÚJsonResponse)Úrender)Úauthenticate)ÚToken)ÚResponse)ÚTemplateViewN)ÚObtainAuthToken©Ústatus)ÚHttpResponseÚHttpResponseRedirect)Úsettings)ÚImagec                   @   s   e Zd ZdZefZdd„ ZdS )ÚUserAppLoginz5
	For the  login operations of the userinfo master 
	c              
   C   s"  g }zJt |jd |jd d�}|d urF|jdkrd\}}}n-tjj|jd� ¡ }|r@tjj	|d�\}}t
|ƒ}|j}d\}}}nd	\}}}nd	\}}}W n tyj }	 zd
t|	ƒ dd}}}W Y d }	~	nd }	~	ww z|rq|j}W n ty† }
 zd}W Y d }
~
nd }
~
ww t|||||dœƒS )NÚusernameÚpassword)r   r   T)zAdmin cannot login.éÈ   Úsuccess©Ú
user_id_id)Úuser)zLogin Successfulr   r   )zUser Credentials were incorrectr   r   zSomething went wrong:éô  ÚerrorÚ )Úmessager   ÚcodeÚtokenÚinfo)r   ÚPOSTÚis_superuserÚUserInfoÚobjectsÚfilterÚidÚfirstr	   Úget_or_createÚUserInfoSerializerÚdataÚ	ExceptionÚstrÚkeyr   )ÚselfÚrequestÚuser_info_datar   r   r   r   Ú	user_infor    r   Úe© r4   ú7/home/esfera/Documents/myproject/userapp/api/userapp.pyÚpost   s8   

€$€ÿ€€ÿzUserAppLogin.postN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpermission_classesr6   r4   r4   r4   r5   r      s    r   c                   @   s   e Zd Zddd„ZdS )ÚUserAppLogoutNc                 C   s   |j j ¡  ttjd�S )Nr   )r   Ú
auth_tokenÚdeleter
   r   ÚHTTP_200_OK)r/   r0   Úformatr4   r4   r5   Úget:   s   zUserAppLogout.get)N©r7   r8   r9   rA   r4   r4   r4   r5   r<   9   s    r<   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú	UserPostsz.
	For the job operations of the users posts 
	c           
   
   C   s¸   i }z2|j j}|r.i }tjjt|ƒd� d¡}|r(t|dd�}|j}d\}}}nd\}}}nd\}}}W n t	yR }	 zdt
|	ƒ d	d
}}}W Y d }	~	nd }	~	ww t||||dœƒS )N©Úuserinfo_id__user_id_idú-idT)Úmany)zFetched successfully.r   r   )zNo post data.r   r   ©zInvalid User.r   r   úSomething went wrong :r   r   )r   r   r   r!   )r   r'   ÚUserAddedPostr%   r&   ÚintÚorder_byÚUserPostSerializerr+   r,   r-   r   )
r/   r0   r1   Úuser_idÚ	user_postÚuser_posts_serializerr   r   r   r3   r4   r4   r5   rA   D   s$   
€$€ÿzUserPosts.getc              
   C   sÌ  �z=|j j}|�r8|j d¡}|j d¡}|j d¡}d|jvr)tddddœƒW S d|jvr7tddddœƒW S |jd d ksE|jd d	krNtd
dddœƒW S d|jvr\tddddœƒW S |jd d ksj|jd d	krstddddœƒW S tjjt	|ƒd� 
¡ }|�r2t	|jƒt	|ƒd k r¦tdt|jƒ d tt	|ƒd ƒ d dddœƒW S t	|jƒt	|ƒd  |_z`tjjt	|ƒd� 
¡ }|�r|j}tjjt	|ƒ|t	|ƒ||d�}	| ¡  |	jj}
tj tjd |
 ¡}t |¡}| d¡ dt|
ƒ }tj tjd | ¡}| |¡ d\}}}nd\}}}W n* t�y1 } zdt|ƒ dd}}}W Y d }~nd }~ww d\}}}nd\}}}W n t�y] } zdt|ƒ dd}}}W Y d }~nd }~ww t|||dœƒS )NÚimageÚtarget_usersÚkeyboard_idzPlease enter the image.r   r   ©r   r   r   zPlease enter the target_usersr   z%Enter the value for the  target_userszPlease enter the keyboard_idz#Enter the value for the keyboard_idr   é   z	User has z coins. It requires min z coins for this target users.)Úuserinfo_id_idrQ   Úkeyboard_id_idÚpost_view_accessÚ
total_viewú/)éd   r[   Ú100X100_)z!Post has been added successfully.r   r   rH   rI   r   r   )r   r'   ÚFILESrA   r"   r   r$   r%   r&   rK   r(   Úcoinsr-   rJ   ÚcreateÚsaverQ   ÚnameÚosÚpathÚjoinr   Ú
MEDIA_ROOTr   ÚopenÚ	thumbnailr,   )r/   r0   rN   rQ   rR   rS   ÚobjÚuserinfo_idÚpost_owner_idÚsave_objÚ
image_nameÚfileÚimra   Ú
thumb_filer   r   r   r3   r4   r4   r5   r6   X   sb   


4



€$€ÿ
€$€ÿzUserPosts.postc           	   
   C   sÊ   z>|j j}|r8d|jvrtddddœƒW S |j d¡}tjjt|ƒd� 	¡ }|r2| 
¡  d\}}}nd\}}}nd	\}}}W n ty\ } zd
t|ƒ dd}}}W Y d }~nd }~ww t|||dœƒS )NÚpost_idúpost_id is missing.r   r   rT   ©r'   )zPost deleted successfully.r   r   ©zInvalid post_id.r   r   rH   rI   r   r   )r   r'   r"   r   rA   rJ   r%   r&   rK   r(   r>   r,   r-   )	r/   r0   rN   rp   Úto_be_deletedr   r   r   r3   r4   r4   r5   r>   �   s$   

€$€ÿzUserPosts.deleteN)r7   r8   r9   r:   rA   r6   r>   r4   r4   r4   r5   rC   @   s
    5rC   c                   @   s   e Zd ZdZdd„ ZdS )ÚUserPostsCSVz.
	For the perations of the users posts csv  
	c              
   C   s4  zs|j j}|rmtjjt|ƒd� d¡}|rgtdd�}d|d< t 	|¡}d}| 
g d¢¡ |D ]5}t|ƒ}ttjƒt|jjƒ }	t|jƒ}
|j}|jd	krNd
}|jdkrUd}| 
||	|
||g¡ |d }q.|W S d\}}}nd\}}}W n ty‘ } zdt|ƒ dd}}}W Y d }~nd }~ww t|||dœƒS )NrD   rF   útext/csv©Úcontent_typeú&attachment; filename="post_report.csv"úContent-Dispositioné   )zS.Noz	Post Linkz
View LimitzCurrent ViewsÚIs_offensiveTÚYesFÚNo)zNo Post Information.r   r   rH   rI   r   r   rT   )r   r'   rJ   r%   r&   rK   rL   r   ÚcsvÚwriterÚwriterowr-   r   Ú
API_SERVERrQ   ra   rY   Úcurrent_viewÚ	offensiver,   r   )r/   r0   rN   rh   Úresponser€   ÚcÚiÚs_noÚ	post_linkÚ
view_limitÚcurrent_viewsÚoffr   r   r   r3   r4   r4   r5   rA   ¨   s<   






€$€ÿzUserPostsCSV.getN)r7   r8   r9   r:   rA   r4   r4   r4   r5   ru   ¤   s    ru   c                   @   ó   e Zd Zdd„ ZdS )ÚSinglePostCsvc                 C   s8  |j j}|r�d|jvrtddddœƒS |jd d ks!|jd dkr)tddddœƒS |j d¡}tjjt|ƒd�}t	d	d
�}d|d< t
j|ddt
jd�}tjjt|ƒd� ¡ }|r‰t|jƒt|jƒkrjtddddœƒS |jdkryd}| |g¡ |S |D ]}	|	j}| |g¡ q{|S d\}
}}nd\}
}}t|
||dœƒS )Nrp   rq   r   r   rT   r   úEnter the value for the post_id)Ú
post_id_idrv   rw   ry   rz   ú )Ú	delimiterÚ
escapecharÚquotingrr   zJob is not completed.Tr|   rs   rH   )r   r'   ÚGETr   rA   ÚOtherUsersReactionr%   r&   rK   r   r   r€   Ú
QUOTE_NONErJ   r(   rƒ   rY   r„   r�   Úrank)r/   r0   rN   rp   rh   r…   r€   Ú	check_objÚrank_submittedr‡   r   r   r   r4   r4   r5   rA   Ê   s8   

ÿ

zSinglePostCsv.getNrB   r4   r4   r4   r5   rŽ   É   ó    rŽ   c                   @   r�   )ÚJobCompletec           	   
   C   s  ze|j j}|r_d|jvrtddddœƒW S |jd d ks#|jd dkr,tddddœƒW S |j d¡}tjjt|ƒd� 	¡ }|rYd	|_
t|jƒ|_|j|_d
|_| ¡  d\}}}nd\}}}nd\}}}W n tyƒ } zdt|ƒ dd}}}W Y d }~nd }~ww t|||dœƒS )Nrp   rq   r   r   rT   r   r�   rr   Tr   )zSuccessfully completed the job.r   r   )zInvalid post id.r   r   rH   rI   r   r   )r   r'   r•   r   rA   rJ   r%   r&   rK   r(   r„   rƒ   Úoffensive_atrY   rX   r`   r,   r-   )	r/   r0   rN   rp   Úobj1r   r   r   r3   r4   r4   r5   rA   ó   s0   

€$€ÿzJobComplete.getNrB   r4   r4   r4   r5   rœ   ò   r›   rœ   )'Úuserapp.modelsÚrest_framework.permissionsr   Údjango.contrib.auth.modelsr   Úrest_framework.viewsr   Údjango.httpr   Údjango.shortcutsr   Údjango.contrib.authr   Úrest_framework.authtoken.modelsr	   Úrest_framework.responser
   Údjango.views.generic.baser   Ú&userapp.serializers.userapp_serializerÚjsonÚrest_framework.authtoken.viewsr   Úrest_frameworkr   r   r   Údjango.confr   r   rb   ÚPILr   r   r<   rC   ru   rŽ   rœ   r4   r4   r4   r5   Ú<module>   s4    #d%)