o
    rMf>                     @   s  d dl ZG dd deZzd dlmZ G dd deZW n ey-   G dd deZY nw 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      | j t  | `d S N__dict__updatevarsself)r	   
identifiercontentanswer_specis_requireddisplay_name r   U/var/www/html/analyze/labelStudio/lib/python3.10/site-packages/boto/mturk/question.py__init__   s   zQuestion.__init__c                 C      ||   iS r   
get_as_xmlr	   labelr   r   r   get_as_params!      zQuestion.get_as_paramsc                 C   sf   t d| jt dt| j | j| jg}| jd ur#|dt d| j d	dd |D }| j
t  S )NQuestionIdentifier
IsRequired   DisplayName c                 s       | ]}|  V  qd S r   r   .0itemr   r   r   	<genexpr>-       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                   @      e Zd Zdd ZdS )ValidatingXMLc                 C   sD   dd l }|| j}t|}t|}t|  }|| d S )Nr   )	urllib2urlopen
schema_urlr/   parse	XMLSchema
fromstringr   assertValid)r	   r2   schema_src_file
schema_docschemadocr   r   r   validate5   s   

ValidatingXML.validateNr,   r-   r.   r=   r   r   r   r   r1   3       r1   c                   @   r0   )r1   c                 C   s   d S r   r   r	   r   r   r   r=   ?   s   r>   Nr?   r   r   r   r   r1   =   r@   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 r   )xmlsaxsaxutilsescapeexternal_urlframe_height)r	   rG   rH   r   r   r   r   J   s   
zExternalQuestion.__init__c                 C   r   r   r   r   r   r   r   r   N   r   zExternalQuestion.get_as_paramsc                 C      | j t|  S r   r)   r   rA   r   r   r   r   Q      zExternalQuestion.get_as_xmlN)rB   )
r,   r-   r.   __doc__r4   r   r)   r   r   r   r   r   r   r   rB   C   s    

rB   c                   @   r0   )XMLTemplatec                 C   rI   r   rJ   rA   r   r   r   r   V   rK   zXMLTemplate.get_as_xmlN)r,   r-   r.   r   r   r   r   r   rM   U   s    rM   c                   @      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      || _ || _d S r   )fieldvaluer	   rP   rQ   r   r   r   r   c      
zSimpleField.__init__N)r,   r-   r.   rL   r)   r   r   r   r   r   r$   Z   s    r$   c                   @      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   r   r   r   )r	   typesubtypeurlalt_textr   r   r   r   k   s   zBinary.__init__N)r,   r-   r.   r)   r   r   r   r   r   rU   h   s    rU   c                   @   rT   )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"   s   r#   z"List.get_as_xml.<locals>.<genexpr>z<List>%s</List>r(   r*   r   r   r   r   r   s   zList.get_as_xmlN)r,   r-   r.   rL   r   r   r   r   r   rZ   p   s    rZ   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 r   )widthheight
parameters)r	   r]   r^   r_   r   r   r   r   {   s   
zApplication.__init__c                 C   sL   | d| j | d| j | j D ]\}}| jt  }| d| qd S )NWidthHeightApplicationParameter)append_fieldr]   r^   r_   r+   parameter_templater   )r	   r   namerQ   r   r   r   get_inner_content   s   zApplication.get_inner_contentc                 C   s,   t  }| | | }| jj}| jt  S r   )OrderedContentrf   r   	__class__r,   r)   r   )r	   r   class_r   r   r   r      s
   
zApplication.get_as_xmlN)r,   r-   r.   r)   rd   r   rf   r   r   r   r   r   r\   w   s    r\   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   rO   r   )	html_formrH   )r	   rk   rH   r   r   r   r      rS   zHTMLQuestion.__init__c                 C   r   r   r   r   r   r   r   r      r   zHTMLQuestion.get_as_paramsc                 C   rI   r   rJ   rA   r   r   r   r      rK   zHTMLQuestion.get_as_xmlN)rj   )	r,   r-   r.   r4   r   r)   r   r   r   r   r   r   r   rj      s    

rj   c                       (   e Zd Z fddZ fddZ  ZS )
JavaAppletc                    s&   || _ || _tt| j|i | d S r   )pathfilenamesuperrm   r   )r	   rn   ro   argskwargsrh   r   r   r      s   zJavaApplet.__init__c                    s6   t  }|d| j |d| j tt| | d S )N
AppletPathAppletFilename)rg   rc   rn   ro   rp   rm   rf   r	   r   rs   r   r   rf      s   zJavaApplet.get_inner_contentr,   r-   r.   r   rf   __classcell__r   r   rs   r   rm      s    rm   c                       rl   )Flashc                    s    || _ tt| j|i | d S r   )rX   rp   ry   r   )r	   rX   rq   rr   rs   r   r   r      s   zFlash.__init__c                    s(   t  }|d| j tt| | d S )NFlashMovieURL)rg   rc   rX   rp   ry   rf   rv   rs   r   r   rf      s   zFlash.get_inner_contentrw   r   r   rs   r   ry      s    ry   c                   @   rN   )FormattedContentzkhttp://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2006-07-14/FormattedContentXHTMLSubset.xsdz<<FormattedContent><![CDATA[%(content)s]]></FormattedContent>c                 C   
   || _ d S r   )r   rv   r   r   r   r         
zFormattedContent.__init__N)r,   r-   r.   r4   r)   r   r   r   r   r   r{      s    r{   c                   @      e Zd Zdd Zdd ZdS )rg   c                 C   s   |  t|| d S r   )appendr$   rR   r   r   r   rc         zOrderedContent.append_fieldc                 C   s   d dd | D S )Nr   c                 s   r   r   r   r   r   r   r   r"      r#   z,OrderedContent.get_as_xml.<locals>.<genexpr>r[   rA   r   r   r   r      r   zOrderedContent.get_as_xmlN)r,   r-   r.   rc   r   r   r   r   r   rg      s    rg   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   r   r   r   r   r   r   r   r      r   zOverview.get_as_paramsc                       t t|  }| jt  S r   )rp   r   r   r)   r   rv   rs   r   r   r         zOverview.get_as_xml)r   )r,   r-   r.   r)   r   r   rx   r   r   rs   r   r      s    
r   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 r   )
isinstancer   r   r   r   r   r"      s    z(QuestionForm.is_valid.<locals>.<genexpr>c                 s   s    | ]
}t |ttfV  qd S r   )r   r   r   r   r   r   r   r"      s    )anyallrA   r   r   r   is_valid   s   zQuestionForm.is_validc                 C   s0   |   sJ dddd | D }| jt  S )Nz&QuestionForm contains invalid elementsr   c                 s   r   r   r   r   r   r   r   r"      r#   z*QuestionForm.get_as_xml.<locals>.<genexpr>)r   r(   xml_templater   r*   r   r   r   r      s   zQuestionForm.get_as_xmlN)	r,   r-   r.   rL   r4   r   r   r   r   r   r   r   r   r      s    !
r   c                           e Zd ZdZ fddZ  ZS )QuestionContentz.<QuestionContent>%(content)s</QuestionContent>c                    r   r   )rp   r   r   r)   r   rv   rs   r   r   r     r   zQuestionContent.get_as_xmlr,   r-   r.   r)   r   rx   r   r   rs   r   r         r   c                   @       e Zd ZdZdd Zdd ZdS )AnswerSpecificationz3<AnswerSpecification>%(spec)s</AnswerSpecification>c                 C   r|   r   )specr	   r   r   r   r   r     r}   zAnswerSpecification.__init__c                 C   s   | j  }| jt  S r   )r   r   r)   r   r   r   r   r   r     s   
zAnswerSpecification.get_as_xmlNr,   r-   r.   r)   r   r   r   r   r   r   r     s    r   c                       r   )Constraintsz&<Constraints>%(content)s</Constraints>c                    r   r   )rp   r   r   r)   r   rv   rs   r   r   r     r   zConstraints.get_as_xmlr   r   r   rs   r   r     r   r   c                   @   r~   )
Constraintc                 C   &   t | j| j}ddd |D }|S )N c                 s   (    | ]\}}|d urd||f V  qd S )Nz%s="%d"r   r    re   rQ   r   r   r   r"   "      
z,Constraint.get_attributes.<locals>.<genexpr>zipattribute_namesattribute_valuesr(   r	   pairsattrsr   r   r   get_attributes   
   
zConstraint.get_attributesc                 C   s   |   }| jt  S r   )r   r)   r   )r	   r   r   r   r   r   )  s   zConstraint.get_as_xmlN)r,   r-   r.   r   r   r   r   r   r   r     s    	r   c                   @      e Zd ZdZdZdddZdS )NumericConstraint)minValuemaxValuez<IsNumeric %(attrs)s />Nc                 C      ||f| _ d S r   r   )r	   	min_value	max_valuer   r   r   r   2  rK   zNumericConstraint.__init__NNr,   r-   r.   r   r)   r   r   r   r   r   r   .      r   c                   @   r   )LengthConstraint)	minLength	maxLengthz<Length %(attrs)s />Nc                 C   r   r   r   )r	   
min_length
max_lengthr   r   r   r   :  rK   zLengthConstraint.__init__r   r   r   r   r   r   r   6  r   r   c                   @   s&   e Zd ZdZdZdddZdd ZdS )	RegExConstraint)regex	errorTextflagsz<AnswerFormatRegex %(attrs)s />Nc                 C   s   |||f| _ d S r   r   )r	   pattern
error_textr   r   r   r   r   B  s   zRegExConstraint.__init__c                 C   r   )Nr   c                 s   r   )Nz%s="%s"r   r   r   r   r   r"   G  r   z1RegExConstraint.get_attributes.<locals>.<genexpr>r   r   r   r   r   r   E  r   zRegExConstraint.get_attributesr   )r,   r-   r.   r   r)   r   r   r   r   r   r   r   >  s
    
r   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   r|   r   )	num_linesr	   r   r   r   r   r   R  r}   z NumberOfLinesSuggestion.__init__c                 C   s   | j }| jt  S r   )r   r)   r   r   r   r   r   r   U  s   z"NumberOfLinesSuggestion.get_as_xmlN)r   r   r   r   r   r   r   O  s    
r   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 u rt | _nt|| _|| _d S r   )defaultr   constraintsr   )r	   r   r   r   r   r   r   r   ]  s
   


zFreeTextAnswer.__init__c                 C   sV   | j g}| jr|td| j | jr|t| j ddd |D }| jt  S )NDefaultTextr   c                 s   r   r   r   r   r   r   r   r"   k  r#   z,FreeTextAnswer.get_as_xml.<locals>.<genexpr>)	r   r   r   r$   r   r   r(   r)   r   r*   r   r   r   r   e  s   zFreeTextAnswer.get_as_xml)NNNr   r   r   r   r   r   Z  s    
r   c                   @   r   )FileUploadAnswerz<FileUploadAnswer><MaxFileSizeInBytes>%(max_bytes)d</MaxFileSizeInBytes><MinFileSizeInBytes>%(min_bytes)d</MinFileSizeInBytes></FileUploadAnswer>c                 C   s6   d|  kr|  krdksJ  J || _ || _d S )Nr   i 5w)	min_bytes	max_bytes)r	   r   r   r   r   r   r   r  s   &
zFileUploadAnswer.__init__c                 C   rI   r   rJ   rA   r   r   r   r   w  rK   zFileUploadAnswer.get_as_xmlNr   r   r   r   r   r   o  s    r   c                   @   sF   e Zd ZdZdZdZdZdZdZdZ	g d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>)radiobuttondropdowncheckboxlistcomboboxmultichooserOtherSelectionr   NtextFc                 C   s   |d ur|t jv r|| _ntd|dt jf d | _|d u r$td|| _|| _|| _t|| jks;J 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)r   ACCEPTED_STYLESstyle_suggestion
ValueErrorr(   
selectionsmin_selectionsmax_selectionslenrV   other)r	   minmaxstyler   rV   r   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}| jD ]}tj||d |f }tj|d |f }||7 }q| jr[t| jd	rWt	| jt
sKJ d
|| j dd7 }n|d7 }| jd urgtj| j }nd}| jdkr}tj| j }|tj| j 7 }nd}tj|||f }|S )Nr   TextbinaryrU   z3illegal type: %s; must be either 'text' or 'binary'r   r   r   r   z+OtherSelection can only be a FreeTextAnswerr   r   z<OtherSelection />r   )rV   r   r%   r   r   SELECTION_VALUE_XML_TEMPLATESELECTION_XML_TEMPLATEr   hasattrr   r   r   replacer   STYLE_XML_TEMPLATE MIN_SELECTION_COUNT_XML_TEMPLATEr    MAX_SELECTION_COUNT_XML_TEMPLATEr   SELECTIONANSWER_XML_TEMPLATE)	r	   TYPE_TAGselections_xmltpl	value_xmlselection_xml	style_xml	count_xmlretr   r   r   r     s0   





zSelectionAnswer.get_as_xml)r   r   NNr   F)r,   r-   r.   rL   r   r   r   r   r   r   r   OTHER_SELECTION_ELEMENT_NAMEr   r   r   r   r   r   r   {  s    
r   )!xml.sax.saxutilsrC   objectr   lxmlr/   r1   ImportErrorrB   rM   r$   rU   r   rZ   r\   rj   rm   ry   r{   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s@   		2