B
    ?F[>                 @   s  d dl ZG dd deZy d dlmZ G dd deZW n$ ek
r\   G dd deZY nX 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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G d d! d!e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G d,d- d-eZG d.d/ d/eZG d0d1 d1eZG d2d3 d3eZG d4d5 d5eZG d6d7 d7eZ dS )8    Nc               @   s,   e Zd ZdZd
ddZdddZdd	 ZdS )Questionz<Question>%(items)s</Question>FNc             C   s   | j t  | `d S )N)__dict__updatevarsself)r   
identifiercontentanswer_specis_requireddisplay_name r   2lib/python3.7/site-packages/boto/mturk/question.py__init__   s    zQuestion.__init__c             C   s   ||   iS )N)
get_as_xml)r   labelr   r   r   get_as_params!   s    zQuestion.get_as_paramsc             C   sf   t d| jt dt| j | j| jg}| jd k	rF|dt d| j d	dd |D }| j
t  S )NZQuestionIdentifierZ
IsRequired   ZDisplayName c             s   s   | ]}|  V  qd S )N)r   ).0itemr   r   r   	<genexpr>-   s    z&Question.get_as_xml.<locals>.<genexpr>)SimpleFieldr   strr
   lowerr   r	   r   insertjointemplater   )r   itemsr   r   r   r   $   s    

zQuestion.get_as_xml)FN)r   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r      s   

r   )etreec               @   s   e Zd Zdd ZdS )ValidatingXMLc             C   sD   dd l }|| j}t|}t|}t|  }|| d S )Nr   )	urllib2Zurlopen
schema_urlr!   parseZ	XMLSchemaZ
fromstringr   ZassertValid)r   r#   Zschema_src_fileZ
schema_docZschemadocr   r   r   validate5   s    

zValidatingXML.validateN)r   r   r    r'   r   r   r   r   r"   3   s   r"   c               @   s   e Zd Zdd ZdS )r"   c             C   s   d S )Nr   )r   r   r   r   r'   ?   s    zValidatingXML.validateN)r   r   r    r'   r   r   r   r   r"   =   s   c               @   s8   e Zd ZdZdZde  Zdd ZdddZdd	 Z	d
S )ExternalQuestionz:
    An object for constructing an External Question.
    z`http://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2006-07-14/ExternalQuestion.xsdz<ExternalQuestion xmlns="%(schema_url)s"><ExternalURL>%%(external_url)s</ExternalURL><FrameHeight>%%(frame_height)s</FrameHeight></ExternalQuestion>c             C   s   t jj|| _|| _d S )N)xmlZsaxZsaxutilsescapeexternal_urlframe_height)r   r+   r,   r   r   r   r   J   s    zExternalQuestion.__init__c             C   s   ||   iS )N)r   )r   r   r   r   r   r   N   s    zExternalQuestion.get_as_paramsc             C   s   | j t|  S )N)r   r   )r   r   r   r   r   Q   s    zExternalQuestion.get_as_xmlN)r(   )
r   r   r    __doc__r$   r   r   r   r   r   r   r   r   r   r(   C   s   

r(   c               @   s   e Zd Zdd ZdS )XMLTemplatec             C   s   | j t|  S )N)r   r   )r   r   r   r   r   V   s    zXMLTemplate.get_as_xmlN)r   r   r    r   r   r   r   r   r.   U   s   r.   c               @   s   e Zd ZdZdZdd ZdS )r   z
    A Simple name/value pair that can be easily rendered as XML.

    >>> SimpleField('Text', 'A text string').get_as_xml()
    '<Text>A text string</Text>'
    z <%(field)s>%(value)s</%(field)s>c             C   s   || _ || _d S )N)fieldvalue)r   r/   r0   r   r   r   r   c   s    zSimpleField.__init__N)r   r   r    r-   r   r   r   r   r   r   r   Z   s   r   c               @   s   e Zd ZdZdd ZdS )Binaryz<Binary><MimeType><Type>%(type)s</Type><SubType>%(subtype)s</SubType></MimeType><DataURL>%(url)s</DataURL><AltText>%(alt_text)s</AltText></Binary>c             C   s   | j t  | `d S )N)r   r   r   r   )r   typeZsubtypeurlZalt_textr   r   r   r   k   s    zBinary.__init__N)r   r   r    r   r   r   r   r   r   r1   h   s   r1   c               @   s   e Zd ZdZdd ZdS )Listz?A bulleted list suitable for OrderedContent or Overview contentc             C   s   d dd | D }d| S )Nr   c             s   s   | ]}d | V  qdS )z<ListItem>%s</ListItem>Nr   )r   r   r   r   r   r   s   s    z"List.get_as_xml.<locals>.<genexpr>z<List>%s</List>)r   )r   r   r   r   r   r   r   s    zList.get_as_xmlN)r   r   r    r-   r   r   r   r   r   r4   p   s   r4   c               @   s,   e Zd ZdZdZdd Zdd Zdd Zd	S )
Applicationz?<Application><%(class_)s>%(content)s</%(class_)s></Application>z-<Name>%(name)s</Name><Value>%(value)s</Value>c             K   s   || _ || _|| _d S )N)widthheight
parameters)r   r6   r7   r8   r   r   r   r   {   s    zApplication.__init__c             C   sP   | d| j | d| j x.| j D ] \}}| jt  }| d| q(W d S )NZWidthZHeightZApplicationParameter)append_fieldr6   r7   r8   r   parameter_templater   )r   r   namer0   r   r   r   get_inner_content   s
    zApplication.get_inner_contentc             C   s,   t  }| | | }| jj}| jt  S )N)OrderedContentr<   r   	__class__r   r   r   )r   r   Zclass_r   r   r   r      s
    
zApplication.get_as_xmlN)r   r   r    r   r:   r   r<   r   r   r   r   r   r5   w   s
   r5   c               @   s4   e Zd ZdZde  Zdd Zd
ddZdd Zd	S )HTMLQuestionz\http://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2011-11-11/HTMLQuestion.xsdz<HTMLQuestion xmlns="%(schema_url)s"><HTMLContent><![CDATA[<!DOCTYPE html>%%(html_form)s]]></HTMLContent><FrameHeight>%%(frame_height)s</FrameHeight></HTMLQuestion>c             C   s   || _ || _d S )N)	html_formr,   )r   r@   r,   r   r   r   r      s    zHTMLQuestion.__init__c             C   s   ||   iS )N)r   )r   r   r   r   r   r      s    zHTMLQuestion.get_as_paramsc             C   s   | j t|  S )N)r   r   )r   r   r   r   r      s    zHTMLQuestion.get_as_xmlN)r?   )	r   r   r    r$   r   r   r   r   r   r   r   r   r   r?      s
   

r?   c                   s(   e Zd Z fddZ fddZ  ZS )
JavaAppletc                s"   || _ || _tt| j|| d S )N)pathfilenamesuperrA   r   )r   rB   rC   argskwargs)r>   r   r   r      s    zJavaApplet.__init__c                s6   t  }|d| j |d| j tt| | d S )NZ
AppletPathZAppletFilename)r=   r9   rB   rC   rD   rA   r<   )r   r   )r>   r   r   r<      s    zJavaApplet.get_inner_content)r   r   r    r   r<   __classcell__r   r   )r>   r   rA      s   rA   c                   s(   e Zd Z fddZ fddZ  ZS )Flashc                s   || _ tt| j|| d S )N)r3   rD   rH   r   )r   r3   rE   rF   )r>   r   r   r      s    zFlash.__init__c                s(   t  }|d| j tt| | d S )NZFlashMovieURL)r=   r9   r3   rD   rH   r<   )r   r   )r>   r   r   r<      s    zFlash.get_inner_content)r   r   r    r   r<   rG   r   r   )r>   r   rH      s   rH   c               @   s   e Zd ZdZdZdd ZdS )FormattedContentzkhttp://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2006-07-14/FormattedContentXHTMLSubset.xsdz<<FormattedContent><![CDATA[%(content)s]]></FormattedContent>c             C   s
   || _ d S )N)r   )r   r   r   r   r   r      s    zFormattedContent.__init__N)r   r   r    r$   r   r   r   r   r   r   rI      s   rI   c               @   s   e Zd Zdd Zdd ZdS )r=   c             C   s   |  t|| d S )N)appendr   )r   r/   r0   r   r   r   r9      s    zOrderedContent.append_fieldc             C   s   d dd | D S )Nr   c             s   s   | ]}|  V  qd S )N)r   )r   r   r   r   r   r      s    z,OrderedContent.get_as_xml.<locals>.<genexpr>)r   )r   r   r   r   r      s    zOrderedContent.get_as_xmlN)r   r   r    r9   r   r   r   r   r   r=      s   r=   c                   s*   e Zd ZdZdddZ fddZ  ZS )Overviewz <Overview>%(content)s</Overview>c             C   s   ||   iS )N)r   )r   r   r   r   r   r      s    zOverview.get_as_paramsc                s   t t|  }| jt  S )N)rD   rK   r   r   r   )r   r   )r>   r   r   r      s    zOverview.get_as_xml)rK   )r   r   r    r   r   r   rG   r   r   )r>   r   rK      s   
rK   c               @   s.   e Zd ZdZdZde  Zdd Zdd ZdS )	QuestionForma  
    From the AMT API docs:

    The top-most element of the QuestionForm data structure is a
    QuestionForm element. This element contains optional Overview
    elements and one or more Question elements. There can be any
    number of these two element types listed in any order. The
    following example structure has an Overview element and a
    Question element followed by a second Overview element and
    Question element--all within the same QuestionForm.

    ::

        <QuestionForm xmlns="[the QuestionForm schema URL]">
            <Overview>
                [...]
            </Overview>
            <Question>
                [...]
            </Question>
            <Overview>
                [...]
            </Overview>
            <Question>
                [...]
            </Question>
            [...]
        </QuestionForm>

    QuestionForm is implemented as a list, so to construct a
    QuestionForm, simply append Questions and Overviews (with at least
    one Question).
    z\http://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2005-10-01/QuestionForm.xsdz><QuestionForm xmlns="%(schema_url)s">%%(items)s</QuestionForm>c             C   s$   t dd | D o"tdd | D S )Nc             s   s   | ]}t |tV  qd S )N)
isinstancer   )r   r   r   r   r   r      s    z(QuestionForm.is_valid.<locals>.<genexpr>c             s   s   | ]}t |ttfV  qd S )N)rM   r   rK   )r   r   r   r   r   r      s    )anyall)r   r   r   r   is_valid   s    zQuestionForm.is_validc             C   s0   |   stdddd | D }| jt  S )Nz&QuestionForm contains invalid elementsr   c             s   s   | ]}|  V  qd S )N)r   )r   r   r   r   r   r      s    z*QuestionForm.get_as_xml.<locals>.<genexpr>)rP   AssertionErrorr   xml_templater   )r   r   r   r   r   r      s    zQuestionForm.get_as_xmlN)	r   r   r    r-   r$   r   rR   rP   r   r   r   r   r   rL      s
   !
rL   c                   s    e Zd ZdZ fddZ  ZS )QuestionContentz.<QuestionContent>%(content)s</QuestionContent>c                s   t t|  }| jt  S )N)rD   rS   r   r   r   )r   r   )r>   r   r   r     s    zQuestionContent.get_as_xml)r   r   r    r   r   rG   r   r   )r>   r   rS     s   rS   c               @   s    e Zd ZdZdd Zdd ZdS )AnswerSpecificationz3<AnswerSpecification>%(spec)s</AnswerSpecification>c             C   s
   || _ d S )N)spec)r   rU   r   r   r   r     s    zAnswerSpecification.__init__c             C   s   | j  }| jt  S )N)rU   r   r   r   )r   rU   r   r   r   r     s    
zAnswerSpecification.get_as_xmlN)r   r   r    r   r   r   r   r   r   r   rT     s   rT   c                   s    e Zd ZdZ fddZ  ZS )Constraintsz&<Constraints>%(content)s</Constraints>c                s   t t|  }| jt  S )N)rD   rV   r   r   r   )r   r   )r>   r   r   r     s    zConstraints.get_as_xml)r   r   r    r   r   rG   r   r   )r>   r   rV     s   rV   c               @   s   e Zd Zdd Zdd ZdS )
Constraintc             C   s&   t | j| j}ddd |D }|S )N c             s   s&   | ]\}}|d k	rd||f V  qd S )Nz%s="%d"r   )r   r;   r0   r   r   r   r   #  s   z,Constraint.get_attributes.<locals>.<genexpr>)zipattribute_namesattribute_valuesr   )r   pairsattrsr   r   r   get_attributes   s
    
zConstraint.get_attributesc             C   s   |   }| jt  S )N)r^   r   r   )r   r]   r   r   r   r   )  s    zConstraint.get_as_xmlN)r   r   r    r^   r   r   r   r   r   rW     s   	rW   c               @   s   e Zd ZdZdZdddZdS )NumericConstraint)ZminValueZmaxValuez<IsNumeric %(attrs)s />Nc             C   s   ||f| _ d S )N)r[   )r   Z	min_valueZ	max_valuer   r   r   r   2  s    zNumericConstraint.__init__)NN)r   r   r    rZ   r   r   r   r   r   r   r_   .  s   r_   c               @   s   e Zd ZdZdZdddZdS )LengthConstraint)Z	minLengthZ	maxLengthz<Length %(attrs)s />Nc             C   s   ||f| _ d S )N)r[   )r   Z
min_lengthZ
max_lengthr   r   r   r   :  s    zLengthConstraint.__init__)NN)r   r   r    rZ   r   r   r   r   r   r   r`   6  s   r`   c               @   s&   e Zd ZdZdZdddZdd ZdS )	RegExConstraint)ZregexZ	errorTextflagsz<AnswerFormatRegex %(attrs)s />Nc             C   s   |||f| _ d S )N)r[   )r   patternZ
error_textrb   r   r   r   r   B  s    zRegExConstraint.__init__c             C   s&   t | j| j}ddd |D }|S )NrX   c             s   s&   | ]\}}|d k	rd||f V  qd S )Nz%s="%s"r   )r   r;   r0   r   r   r   r   H  s   z1RegExConstraint.get_attributes.<locals>.<genexpr>)rY   rZ   r[   r   )r   r\   r]   r   r   r   r^   E  s
    
zRegExConstraint.get_attributes)NN)r   r   r    rZ   r   r   r^   r   r   r   r   ra   >  s   
ra   c               @   s"   e Zd ZdZdddZdd ZdS )	NumberOfLinesSuggestionz@<NumberOfLinesSuggestion>%(num_lines)s</NumberOfLinesSuggestion>r   c             C   s
   || _ d S )N)	num_lines)r   re   r   r   r   r   R  s    z NumberOfLinesSuggestion.__init__c             C   s   | j }| jt  S )N)re   r   r   )r   re   r   r   r   r   U  s    z"NumberOfLinesSuggestion.get_as_xmlN)r   )r   r   r    r   r   r   r   r   r   r   rd   O  s   
rd   c               @   s"   e Zd ZdZdddZdd ZdS )FreeTextAnswerz*<FreeTextAnswer>%(items)s</FreeTextAnswer>Nc             C   s,   || _ |d krt | _n
t|| _|| _d S )N)defaultrV   constraintsre   )r   rg   rh   re   r   r   r   r   ]  s
    

zFreeTextAnswer.__init__c             C   sV   | j g}| jr |td| j | jr6|t| j ddd |D }| jt  S )NZDefaultTextr   c             s   s   | ]}|  V  qd S )N)r   )r   r   r   r   r   r   k  s    z,FreeTextAnswer.get_as_xml.<locals>.<genexpr>)	rh   rg   rJ   r   re   rd   r   r   r   )r   r   r   r   r   r   e  s    zFreeTextAnswer.get_as_xml)NNN)r   r   r    r   r   r   r   r   r   r   rf   Z  s   
rf   c               @   s    e Zd ZdZdd Zdd ZdS )FileUploadAnswerz<FileUploadAnswer><MaxFileSizeInBytes>%(max_bytes)d</MaxFileSizeInBytes><MinFileSizeInBytes>%(min_bytes)d</MinFileSizeInBytes></FileUploadAnswer>c             C   s4   d|  kr|  krdks$n t || _|| _d S )Nr   i 5w)rQ   	min_bytes	max_bytes)r   rj   rk   r   r   r   r   r  s    $zFileUploadAnswer.__init__c             C   s   | j t|  S )N)r   r   )r   r   r   r   r   w  s    zFileUploadAnswer.get_as_xmlN)r   r   r    r   r   r   r   r   r   r   ri   o  s   ri   c               @   sN   e Zd ZdZdZdZdZdZdZdZ	dd	d
dddgZ
dZdddZdd ZdS )SelectionAnswerzw
    A class to generate SelectionAnswer XML data structures.
    Does not yet implement Binary selection options.
    zB<SelectionAnswer>%s%s<Selections>%s</Selections></SelectionAnswer>zF<Selection><SelectionIdentifier>%s</SelectionIdentifier>%s</Selection>z<%s>%s</%s>z%<StyleSuggestion>%s</StyleSuggestion>z)<MinSelectionCount>%s</MinSelectionCount>z)<MaxSelectionCount>%s</MaxSelectionCount>radiobuttonZdropdownZcheckboxlistZcomboboxZmultichooserOtherSelectionr   NtextFc             C   s   |d k	r4|t jkr|| _q:td|dt jf nd | _|d krLtdn|| _|| _|| _t|| jkszt	d| j || _
|| _d S )Nz.style '%s' not recognized; should be one of %sz, z_SelectionAnswer.__init__(): selections must be a non-empty list of (content, identifier) tuplesz*# of selections is less than minimum of %d)rl   ACCEPTED_STYLESstyle_suggestion
ValueErrorr   
selectionsmin_selectionsmax_selectionslenrQ   r2   other)r   minmaxZstylert   r2   rx   r   r   r   r     s    

zSelectionAnswer.__init__c       	      C   s  | j dkrd}n"| j dkr d}ntdt| j  d}x<| jD ]2}tj||d |f }tj|d |f }||7 }q>W | jrt| jd	rt	| jt
std
|| j dd7 }n|d7 }| jd k	rtj| j }nd}| jdkrtj| j }|tj| j 7 }nd}tj|||f }|S )Nrp   ZTextZbinaryr1   z3illegal type: %s; must be either 'text' or 'binary'r   r   r   r   z+OtherSelection can only be a FreeTextAnswerrf   ro   z<OtherSelection />rm   )r2   rs   r   rt   rl   SELECTION_VALUE_XML_TEMPLATESELECTION_XML_TEMPLATErx   hasattrrM   rf   rQ   r   replacerr   STYLE_XML_TEMPLATE MIN_SELECTION_COUNT_XML_TEMPLATEru    MAX_SELECTION_COUNT_XML_TEMPLATErv   SELECTIONANSWER_XML_TEMPLATE)	r   ZTYPE_TAGZselections_xmlZtplZ	value_xmlZselection_xmlZ	style_xmlZ	count_xmlZretr   r   r   r     s0    



zSelectionAnswer.get_as_xml)r   r   NNrp   F)r   r   r    r-   r   r|   r{   r   r   r   rq   ZOTHER_SELECTION_ELEMENT_NAMEr   r   r   r   r   r   rl   {  s   
rl   )!Zxml.sax.saxutilsr)   objectr   Zlxmlr!   r"   ImportErrorr(   r.   r   r1   rn   r4   r5   r?   rA   rH   rI   r=   rK   rL   rS   rT   rV   rW   r_   r`   ra   rd   rf   ri   rl   r   r   r   r   <module>   s<   		2