U
    cfW                     @   sT  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mZ d d	lmZ d d
lmZ d dlmZ d dlmZmZmZmZ d dlmZmZ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	Z+ee+ddddee(ej,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j/ddee)ej-geddddG dd deZ0dd Z1dd  Z2d!d" Z3ee+ddddee(ej4ddee)ej-geddddG d#d$ d$eZ5ee+ddddee(ej6ddee)ej-geddddG d%d& d&eZ7ee+ddddee(ej8ddee)ej-geddddee*eddddG d'd( d(eZ9ee+ddddee(ej:ddee)ej;geddddee*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=ee+ddddee(ej>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j@ddee)ej-geddddG d/d0 d0eZAee+ddddG d1d2 d2eZBee+ddddee(ejCddee)ej;ejDgeddddee*eddddG d3d4 d4eZEee+ddddee(ejFddee)ej;ejDgeddddee*eddddG d5d6 d6eZGee+ddddee(ejHddee)ej;ejDgeddddee*eddddG d7d8 d8eZIdS )9    N)#decorator_from_middleware_with_args)method_decoratorstatus)APIView)AuthorizatorMiddleware)defined_roles)CollaborationAccessMiddlewareSubscriptionAccessMiddleware)	Institute)Question)serializers)"QUESTIONBANK_ACCESSIBILITY_PRIVATE!QUESTIONBANK_ACCESSIBILITY_PUBLICQuestionBankQuestionBankDefaultIcon)QuestionBankModelSerializerQuestionBankGetSerializerQuestionBankListInputSerializer)check_institute_limitations)
MyResponse)sort_by_translator)SerializerValidationMiddlewareT)accept_user_tokenpost)nameidZcontext_institute_idc                   @   s   e Zd Zdd ZdS )CreateQuestionBankc                 C   s6  |j }|jd}|jd}|jd}|jd}|jd}tt|j sdt|dddtjd	S d }|rr|}nr|rztj	j|d
}	|	j
}W q   t|dddtjd	 Y S X n0tj	 }
|
rt|
}td|d }	|
|	 j
}|rtnt}tj	j|||||d}t|d|j idj}t|ddd|idtjd	S )Nr   descriptionpublicicondefault_icon_iderrorzPayment Requiredr   messager   r   $question_bank_default_icon not foundr      )r   	instituter   accessibilityr    context_institutecontextok
Successfulquestion_bankr   r$   data)middleware_institutemiddleware_serializer_datagetr   r   r   r   HTTP_402_PAYMENT_REQUIREDr   objectsr    HTTP_400_BAD_REQUESTalllenrandomrandintr   r   creater   r1   HTTP_200_OK)selfrequestr*   r   r   r   r    r!   Zquestion_bank_iconquestion_bank_default_icon!question_bank_default_icons_queryZ!question_bank_default_icons_countr)   r/   question_bank_data rC   //var/www/wikiazma_server/question_bank/views.pyr   #   sJ    


 zCreateQuestionBank.postN__name__
__module____qualname__r   rC   rC   rC   rD   r      s   r   question_bank_idc                   @   s   e Zd Zdd ZdS )EditQuestionBankc           
      C   s   |j d}|j d}|j d}|j d}|j d}|j}|rN||_nB|rztjj|d}|j|_W n"   t|ddd	tjd
 Y S X |d k	r||_	|d k	r||_
|dkrt|_|  t|d|jidj}	t|ddd|	idtjd
S )Nr   r   r   r    r!   r%   r"   r&   r#   r   Tr*   r+   r-   r.   r/   r0   )r3   r4   middleware_model_recordr    r   r6   r   r   r7   r   r   r   r)   saver   r2   r1   r=   )
r>   r?   r   r   r   r    r!   r/   r@   rB   rC   rC   rD   r   Y   s:    zEditQuestionBank.postNrE   rC   rC   rC   rD   rJ   S   s   rJ   c                 C   sX   g }d}t | D ]*\}}t|||\}}|| ||7 }qt| dkrPt|}||fS )Nr   )	enumeratehandle_filters_templateappendr9   )Zfilters_template_arrayquestions_listfilterstotal_stockorderfilter_templatefilterstockrC   rC   rD   handle_filters_template_array   s    

rW   c                 C   sx   t || d }g }d}t| D ]:\}\}}t| d |\}	}
||
7 }|||
||	d q"| d |||d}||fS )Nkeyr   children)valuerV   rS   rY   )rX   rS   rV   values)find_question_key_values_listrM   itemsrW   rO   )filters_templaterP   rS   
raw_valuesr[   rR   Zvalue_orderrZ   	questionsrY   rV   rU   rC   rC   rD   rN      s    
rN   c                 C   sL   i }| D ]>}|j  D ].\}}||kr||kr6g ||< || | qq|S )N)tagsr]   rO   )rP   Zsearching_keyr[   questionrX   rZ   rC   rC   rD   r\      s    r\   c                   @   s   e Zd Zdd ZdS )EditQuestionBankFiltersc                 C   sr   |j d}|j}tjj|d}t||\}}||_||_|	  t
|d|jidj}t|ddd|idtjd	S )
Nr^   )r/   r*   r+   r-   r.   r/   r0   r   )r3   r4   rK   r   r6   rU   rW   r^   _filtersrL   r   r2   r1   r   r   r=   )r>   r?   r^   r/   rP   rQ   rV   rB   rC   rC   rD   r      s    zEditQuestionBankFilters.postNrE   rC   rC   rC   rD   rc      s   rc   c                   @   s   e Zd Zdd ZdS )ArchiveQuestionBankc                 C   s*   |j }d|_|  t|dddtjdS )NTr-   r.   r#   r   )rK   archivedrL   r   r   r=   )r>   r?   r/   rC   rC   rD   r      s    zArchiveQuestionBank.postNrE   rC   rC   rC   rD   re      s   re   c                   @   s   e Zd Zdd ZdS )UnsubscribeQuestionBankc                 C   s2   |j d}|j}|| t|dddtjdS )NrI   r-   r.   r#   r   )r3   r4   r2   unsubscribe_qbr   r   r=   )r>   r?   rI   r*   rC   rC   rD   r      s    
zUnsubscribeQuestionBank.postNrE   rC   rC   rC   rD   rg      s   rg   c                   @   s   e Zd Zdd ZdS )GetQuestionBankc                 C   s6   |j }t|d|jidj}t|ddd|idtjdS )Nr*   r+   r-   r.   r/   r0   r   )middleware_question_bankr   r2   r1   r   r   r=   )r>   r?   r/   rB   rC   rC   rD   r      s    zGetQuestionBank.postNrE   rC   rC   rC   rD   ri      s   	ri   c                   @   s   e Zd Zdd ZdS )QuestionBankListc                 C   s   |j d}|j d}|j d}|j}|j d}|j d}t|}tjj|jd}	|rj|	j|d}	|dkr|	jd	d
}	n|dkr|	jdd
}	|	 }
|		||||  }	t
|	d|jiddj}t|dd||
ddtjdS )Nskiptakeqarchived_filtersort_bypk__inZname__icontainsexcludeFrf   onlyTr*   r,   manyr-   r.   question_bankstotal_countr0   r   )r3   r4   r2   r   r   r6   rU   _subscribed_question_bankscountorder_byr   r1   r   r   r=   )r>   r?   rl   rm   rn   r*   ro   rp   sort_by_attrZqb_querysetr{   Zquestion_banks_datarC   rC   rD   r      s2    zQuestionBankList.postNrE   rC   rC   rC   rD   rk      s   rk   c                   @   s   e Zd Zdd ZdS )QuestionBankMarketPlacec                 C   s  |j d}|j d}|j d}|j d}|j d}|j}tjjddj|jd}|d	krp|jdd
}n|dkr|jdd
}|d	kr|jdd}n|dkr|jdd}|r|j|d}| }	|	d|||  }t
|d|iddj}
t|dd|
|	ddtjdS )Nrl   rm   rn   free_filterfeatured_filterFru   rq   rt   )featuredrv   Tr   )Z	price__gt)pricers   z-created_atr*   rw   r-   r.   ry   r0   r   )r3   r4   r2   r   r6   rU   rt   r|   r}   r~   r   r1   r   r   r=   )r>   r?   rl   rm   rn   r   r   r*   rz   r{   Zquestions_bank_datarC   rC   rD   r   &  s6    
zQuestionBankMarketPlace.postNrE   rC   rC   rC   rD   r   !  s   r   c                   @   s   e Zd Zdd ZdS )QuestionBankPickc                 C   s   |j d}|j}ztjj|d}W n"   t|dddtjd Y S X |jrz|j	dkrz|
|j t|dd	dtjdS |jr|j	dkrt|d
d
dtjdS t|dddtjdS d S )NrI   r%   r"   
BadRequestr#   r   r   r-   r.   zPAYMENT REQUIRED	Forbidden)r3   r4   r2   r   r6   r   r   r7   r   r   subscribe_qbpkr=   r5   HTTP_403_FORBIDDEN)r>   r?   rI   r*   r/   rC   rC   rD   r   M  s    zQuestionBankPick.postNrE   rC   rC   rC   rD   r   G  s   r   c                   @   s   e Zd Zdd ZdS )QuestionBankDefaultIconsListc                 C   s6   t j }tj|ddj}t|ddd|idtjdS )NT)rx   r-   r.   Ziconsr0   r   )	r   r6   r8   question_bank_serializersZ+QuestionBankDefaultIconsListModelSerializerr1   r   r   r=   )r>   r?   rA   Z question_bank_default_icons_datarC   rC   rD   r   f  s    
 z!QuestionBankDefaultIconsList.postNrE   rC   rC   rC   rD   r   d  s   r   c                   @   s   e Zd Zdd ZdS )TagsListOfAQuestionBankc                 C   s(   |j }|j}t|ddd|idtjdS )Nr-   r.   ra   r0   r   )rj   _tagsr   r   r=   )r>   r?   r/   ra   rC   rC   rD   r   v  s    zTagsListOfAQuestionBank.postNrE   rC   rC   rC   rD   r   o  s   r   c                   @   s   e Zd Zdd ZdS )TagsKeysListOfAQuestionBankc                    sj   |j d}|j d}|j d |j}|j} fdd|D |||  }t|ddd|id	tjd
S )Nrl   rm   rn   c                    s   g | ]} |j kr|j qS rC   rX   .0tagrn   rC   rD   
<listcomp>  s     
 z4TagsKeysListOfAQuestionBank.post.<locals>.<listcomp>r-   r.   keysr0   r   )r3   r4   rj   ra   r   r   r=   )r>   r?   rl   rm   r/   ra   	tags_datarC   r   rD   r     s    z TagsKeysListOfAQuestionBank.postNrE   rC   rC   rC   rD   r   ~  s   r   c                   @   s   e Zd Zdd ZdS )TagsValuesListOfAQuestionBankc                    s   |j d |j d}|j d}|j d|j}|j} fdd|D }|rxfdd|d jD |||  }ng }t|d	d
d|idtjdS )NrX   rl   rm   rn   c                    s   g | ]}|j  kr|qS rC   r   r   r   rC   rD   r     s     
 z6TagsValuesListOfAQuestionBank.post.<locals>.<listcomp>c                    s   g | ]} |j kr|j qS rC   )rZ   )r   Zfilter_valuer   rC   rD   r     s     
 r   r-   r.   r[   r0   r   )r3   r4   rj   ra   r[   r   r   r=   )r>   r?   rl   rm   r/   ra   Zselected_tagr   rC   )rX   rn   rD   r     s      z"TagsValuesListOfAQuestionBank.postNrE   rC   rC   rC   rD   r     s   r   )Jr:   django.utils.decoratorsr   r   rest_frameworkr   rest_framework.viewsr   authenticate.middlewarer   collaboratorsr   drcollaborators.middlewarer	   r
   institute.modelsr   question.modelsr   r/   r   r   question_bank.modelsr   r   r   r   Zquestion_bank.serializersr   r   r   utils.limitationsr   utils.myresponser   utils.utilsr   wikiazma.middlewarer   Zserializer_decoratorZcontribution_decoratorZsubscribtion_decoratorZauthorization_decoratorZ!CreateQuestionBankInputSerializer!__PERMISSION_WRITE_QUESTIONBANK__r   ZEditQuestionBankInputSerializerrJ   rW   rN   r\   Z&EditQuestionBankFiltersInputSerializerrc   Z"ArchiveQuestionBankInputSerializerre   Z&UnsubscribeQuestionBankInputSerializerrg   ZGetQuestionBankInputSerializer __PERMISSION_READ_QUESTIONBANK__ri   rk   Z&QuestionBankMarketPlaceInputSerializerr   ZQuestionBankPickInputSerializerr   r   Z&TagsListOfAQuestionBankInputSerializer__PERMISSION_READ_TAG__r   Z*TagsKeysListOfAQuestionBankInputSerializerr   Z,TagsValuesListOfAQuestionBankInputSerializerr   rC   rC   rC   rD   <module>   s   2)	
("

