U
    gc                     @   s  d dl 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
ZdZeefeefgZeegZdZdZdZdZeefeefeefeefgZeeegZG dd de
jZG dd de
jZe
jdddgddZdd Z dd Z!dd Z"dS )    N)reduce)and_or_)
ArrayField)HStoreField)models)Q)FieldTracker)QuestionBankZdescriptivezmultiple-choiceZ
markdownV1ZhtmlV1ZjsonV1textc                   @   s"  e Zd ZejdddejddZeje	ej
ddddZejdddddZejdddZe Zejd	d
ZeddZeejdd
ddZejddZejddZejd	dedZejddZejddZededZ ejdddZ!ejdddZ"ej#dddZ$ej#dddZ%e&dgdZ'dd Z(dS )QuestionTF)primary_keyuniquedb_indexdefaulteditable)	on_deleter   nullblankiX  )
max_lengthr   r   r   r   )r   r      )r   )r   
   )r   r   choices)r   )r   r   )r   r   auto_now_addr   auto_nowr   tags)fieldsc                 C   s   t | jpdS )N-)strkeywords)self r#   +/var/www/wikiazma_server/question/models.py__str__F   s    zQuestion.__str__N))__name__
__module____qualname__r   	UUIDFielduuiduuid4id
ForeignKeyr
   SET_NULLquestion_bank	CharFieldr!   PositiveBigIntegerFieldZ
popularity	TextFieldZquestion_textformatr   r   r   Zcorrect_choices	JSONFieldZinput_rulesZsolutionQUESTION_TYPE_DATABASE_CHOICESZquestion_typeZanswer_rulesBooleanFieldZauto_correctabledictr   archived	meta_dataDateTimeField
created_atmodified_atr	   trackerr%   r#   r#   r#   r$   r   '   sN            
  r   c                   @   sd   e Zd ZejdddZejdddZejeej	ddZ
ejdddZejdddZG dd dZd	S )
	ScopedTag   T)r   r   )r   r   r   r   c                   @   s"   e Zd ZejdddgddgZdS )zScopedTag.Metakeyvaluer/   Zkey_and_value_and_qb_uniquer   nameN)r&   r'   r(   r   UniqueConstraintconstraintsr#   r#   r#   r$   MetaR   s    rF   N)r&   r'   r(   r   r0   r@   rA   r-   r
   CASCADEr/   r:   r;   r<   rF   r#   r#   r#   r$   r>   J   s     r>   r/   r@   rA   &question_bank_and_key_and_value_uniquerB   c                 C   s   t tdd | D S )Nc                 s   s   | ]}t |V  qd S )N)get_query_from_tag_filter).0
tag_filterr#   r#   r$   	<genexpr>\   s    z2get_query_from_tag_filters_list.<locals>.<genexpr>)r   r   )Ztag_filtersr#   r#   r$   get_query_from_tag_filters_list[   s    
rM   c                 C   sJ   t |d dkr4ttt| |d idt|d fS t| |d idS d S )Nchildrenr   rA   )Ztags__contains)lenr   r   r   rM   )r@   tag_filter_valuer#   r#   r$   get_query_from_tag_filter_valuea   s    
rQ   c                    s   t t fdd d D S )Nc                 3   s   | ]}t  d  |V  qdS )r@   N)rQ   )rJ   rP   rK   r#   r$   rL   l   s    z,get_query_from_tag_filter.<locals>.<genexpr>values)r   r   rR   r#   rR   r$   rI   k   s    rI   )#r*   	functoolsr   operatorr   r   django.contrib.postgres.fieldsr   r   	django.dbr   django.db.modelsr   model_utilsr	   question_bank.modelsr
   ZQUESTION_TYPE_DESCRIPTIVEZQUESTION_TYPE_MULTIPLE_CHOICEr5   Z QUESTION_TYPE_SERIALIZER_CHOICESZQUESTION_FORMAT_MD_V1ZQUESTION_FORMAT_HTML_V1ZQUESTION_FORMAT_JSON_V1ZQUESTION_FORMAT_TEXTZ QUESTION_FORMAT_DATABASE_CHOICESZ"QUESTION_FORMAT_SERIALIZER_CHOICESModelr   r>   rD   rH   rM   rQ   rI   r#   r#   r#   r$   <module>   sJ     #
