U
    gc                     @   s   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 d dlmZ ddlmZ ddlmZmZm	Z	m
Z
 dd Zdd	 Zd
d ZdddgZdd Zdd Zdd Zdd Zdd ZdS )    )serializers)dic_validetor   )conf) QUESTION_TYPE_SERIALIZER_CHOICESQUESTION_TYPE_DESCRIPTIVEQUESTION_TYPE_MULTIPLE_CHOICE"QUESTION_FORMAT_SERIALIZER_CHOICESc                 C   s"   | t krtddt  | S )Nz&question_text_format should be one of , )r	   r   ValidationErrorjoin)Zquestion_text_format r   //var/www/wikiazma_server/question/validators.pyquestion_format_validator   s
    r   c                 C   s"   | t krtddt  | S )Nzquestion_type should be one of r
   )r   r   r   r   )question_typer   r   r   question_type_validator   s
    r   c                 C   s   t | tk	rtdt| tjkr8tdtj d| D ]F}t |tk	sxt | | tk	sxt|dksxt| | dkr<tdq<d S )Nztags should be a dictionaryz&tags should be an object with at most z itemsd   zEAll keys and values must be strings with a maximum of 100 characters.)typedictr   r   lenr   Zmaximum_tags_itemsstr)tagstagr   r   r   tags_validator   s    
8r   
markdownV1htmlV1jsonV1c                 C   s.   ddddg}| |kr*t dd| | S )Nkeywords_asckeywords_desccreated_at_asccreated_at_descsort_by should be one of r
   r   r   r   sort_byallowed_questions_sort_by_itemsr   r   r   questions_sort_by_validator+   s       r&   c                    s   t | tkrtddi|tkrVdtdd d}dtd}t| ||gdd	dd
d nH|tkrdt fdddd}|g}t| |dd	dd
d ntddid S )Ninput_rulesz"input_rules should be a dictionarymax_charactersc                 S   s   d|   kodkS   S )Nr   i r   )valuer   r   r   <lambda>=       z'input_rules_validator.<locals>.<lambda>)keyr   	validator
attachment)r,   r   FT)datarequired_items	error_keymanycontainer_nameraise_error_for_unexpected_keymax_selectable_choicesc                    s   d|   kot  kS   S )Nr   )r   )r5   choicesr   r   r*   O   r+   zKmax_selectable_choices should be an integer between 1 and number of choices)r,   r   r-   validator_error_messagez	bad state)	r   r   r   r   r   intboolr   r   )r'   r7   r   r(   r.   r5   Zanswer_rules_required_itemsr   r6   r   input_rules_validator4   s<    
   
   r;   c                 C   s   t | tks*dt|    kr(dks8n tddi|  D ]V\}}t |tks`t|dkrvtdd| iq@t |tkr@tdd| iq@|D ].}t |tks|| krtdd| d	iqd S )
N   
   r7   z>choices should be a dict of at least 2 and at most 10 childrenzInvalid choice id z(Invalid choice value for choice with id=correct_choiceszInvalid correct choice id ())r   r   r   itemsr   r   r   )r7   r>   Z	choice_idchoice_valueZcorrect_choicer   r   r   choices_validator\   s$    *rB   c                 C   s0   dddddg}| |kr,t dd| | S )Nr   r   r   r    randomr!   r
   r"   r#   r   r   r   r&   q   s        c                 C   s   t | tk	rtdd S )Nzmeta should be a dictionary)r   r   r   r   )metar   r   r   meta_validatorz   s    rE   N)rest_frameworkr   utils.validatorsr    r   modelsr   r   r   r	   r   r   r   Zallowed_answer_text_formatsr&   r;   rB   rE   r   r   r   r   <module>   s    
	(	