U
    jd                     @   s  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mZ d dlmZ d dlmZ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' eeZ(ee!Z)eeZ*ee)ddddee(eddee*e	j+geddddG dd deZ,ee)ddddee(eddee*e	j+geddddG dd deZ-dS )    N)method_decorator)APIView)ZipFile)defined_rolesstatus),split_xmls_element_to_questions_with_answers)xml_to_element_list)%json_data_parser_input_data_validator)PublicResource)
MyResponse)#decorator_from_middleware_with_args)JsonParserInputSerializerDocParserInputSerializer)	Institute)SerializerValidationMiddleware)CollaborationAccessMiddleware)AuthorizatorMiddleware)allowed_formats_for_image)ContentFile)BeautifulSoupT)accept_user_tokenpostnameidcontext_institute_idc                   @   s   e Zd Zdd Zdd ZdS )DocParserApic              
   C   sx   |D ]n}|d dkr|d  tr|jd|d  d d}tjj||d dt||d dd d	d
}|jj	|d< qd S )Ntypeimgvaluezword/pwdimage/r   usertitle	file_typefile)
endswithr   readr   objectscreater   splitr*   url)selfdocumentelementscallerelementimage_bytespublic_resource r8   ,/var/www/wikiazma_server/doc_parser/views.pysave_element_images4   s    z DocParserApi.save_element_imagesc                 C   s  |j d}|j d}|j d}zt|}|jdd d}|jdd d}t|||d}|dkrr| j|||jd	 |rt|}	|	jdd d}
|	jdd d}t|
|}|dkr| j|	||jd	 nd }t||}t|d
d|dt	j
dW S    t|dddt	jd Y S X d S )Nquestions_docxanswers_docxskip_imageszword/document.xmlr!   zword/_rels/document.xml.rels)r=   F)r2   r3   r4   ok
Successful)r   messagedatar   error
BadRequest)r   r@   )middleware_serializer_datagetr   r,   r	   r:   middleware_userr   r   r   HTTP_200_OKHTTP_400_BAD_REQUEST)r1   requestr;   r<   r=   Zquestion_documentZquestion_document_xml_strZquestion_document_rel_strZquestion_elementsZanswer_documentZanswer_document_xml_strZanswer_document_rel_strZanswer_elementsoutputr8   r8   r9   r   D   sx          
zDocParserApi.postN)__name__
__module____qualname__r:   r   r8   r8   r8   r9   r   $   s   r   c                   @   s   e Zd Zdd Zdd ZdS )JsonParserApic              	   C   s   t |dd}|d}|D ]`}|d }|dr2q|jd| d d}|dd	 }	tjj||	d
t||	dd}
|
j	j
|d< qt|S )Nzhtml.parser)featuresr   srcz
data:image r!   r$   r%   r#   r   r&   )r   Zfind_all
startswithr,   r/   r   r-   r.   r   r*   r0   str)r1   htmlr2   r4   soupZimgsr   rP   r6   Z
image_namer7   r8   r8   r9   localized_html_resource   s     


z%JsonParserApi.localized_html_resourcec           
      C   s
  |j d}|j}t|}|jdd d}t|}t|rg }|D ]}z| j|d d ||d|d d< |dr|d d r| j|d d ||dnd |d d< |dr|d D ]}	| j|	d ||d|	d< q|	| W qD   Y qDX qDt
|d	|d
tjdS d S )Nzip_filez	data.jsonr!   questionrT   )rT   r2   r4   answerchoicessuccess)r   rA   r   )rD   rE   rF   r   r,   jsonloadsr
   rV   appendr   r   rG   )
r1   rI   rW   r4   r2   Zjson_data_strZ	json_datarJ   itemchoicer8   r8   r9   r      sL    


  



	
  zJsonParserApi.postN)rK   rL   rM   rV   r   r8   r8   r8   r9   rN      s   rN   ).r\   django.utils.decoratorsr   rest_framework.viewsr   zipfiler   collaboratorsr   drrest_frameworkr   Z(doc_parser.utils.section_separator_utilsr   Zdoc_parser.utils.xml_utilsr	   Zdoc_parser.validatorsr
   Zpublic_resources.modelsr   utils.myresponser   r   Zdoc_parser.serializersr   r   institute.modelsr   wikiazma.middlewarer   collaborators.middlewarer   authenticate.middlewarer   Zpublic_resources.confr   django.core.files.baser   bs4r    serializer_validation_middlewareIuser_token_or_server_token_or_server_API_key_validation_and_authorization"check_access_permission_middleware__PERMISSION_WRITE_QUESTION__r   rN   r8   r8   r8   r9   <module>   s       U    