U
    ¿d"                     @   s   d 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 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 ddlmZ ddlm Z  ddl!m"Z" G dd dej#Z$G dd dej#Z%dS )z>
Appraise evaluation framework

See LICENSE for usage details
    )currentframe)getframeinfo)compile)messages)User)models)ugettext_lazy)add_deprecated_method)ObjectID)DataAssessmentResult)DirectAssessmentResult)DirectAssessmentTask)DirectAssessmentContextResult)DirectAssessmentDocumentResult)MultiModalAssessmentResult)PairwiseAssessmentResult) PairwiseAssessmentDocumentResultc                   @   s   e Zd ZejeejeddZejdejeddZ	ej
edddedd	Zej
edd
dedd	ZG dd dZdd Zdd Zdd Zdd Zdd Zd)ddZdd Zd*ddZd d! Zd"d# Zeed$d% Zd&d' Zd(S )+
TaskAgendar   verbose_nameCampaign.CampaignCampaignT!%(app_label)s_%(class)s_opentasks%(app_label)s_%(class)ss_open
Open tasksblankrelated_namerelated_query_namer   &%(app_label)s_%(class)s_completedtasks"%(app_label)s_%(class)ss_completedCompleted tasksc                   @   s   e Zd ZdZdS )zTaskAgenda.Meta))reset_taskagendazCan reset task agendasN)__name__
__module____qualname__permissions r'   r'   J/var/www/rival/public_html/translation-eval/EvalData/models/task_agenda.pyMeta>   s   r)   c                 C   s   | j  dkS Nr   )_open_taskscountselfr'   r'   r(   	completedA   s    zTaskAgenda.completedc                 C   s   dd | j  D S )Nc                 s   s   | ]}|  V  qd S Nget_object_instance.0xr'   r'   r(   	<genexpr>E   s     z(TaskAgenda.open_tasks.<locals>.<genexpr>)r+   allr-   r'   r'   r(   
open_tasksD   s    zTaskAgenda.open_tasksc                 C   s   t | j S r0   )listr+   r7   r-   r'   r'   r(   serialized_open_tasksG   s    z TaskAgenda.serialized_open_tasksc                 C   s   dd | j  D S )Nc                 s   s   | ]}|  V  qd S r0   r1   r3   r'   r'   r(   r6   K   s     z-TaskAgenda.completed_tasks.<locals>.<genexpr>)_completed_tasksr7   r-   r'   r'   r(   completed_tasksJ   s    zTaskAgenda.completed_tasksc                 C   s   | j |ddS )NF)only_completed)activate_completed_taskr.   taskr'   r'   r(   activate_taskM   s    zTaskAgenda.activate_taskc                 C   sX   t |tstd||r.|| j kr.dS | j| || j krT| j| dS Nz(Invalid task {0!r} not ObjectID instanceFT)	
isinstancer
   
ValueErrorformatr;   r7   remover+   add)r.   r@   r=   r'   r'   r(   r>   P   s    
z"TaskAgenda.activate_completed_taskc                 C   s   | j |ddS )NF)	only_open)complete_open_taskr?   r'   r'   r(   complete_task^   s    zTaskAgenda.complete_taskFc                 C   sX   t |tstd||r.|| j kr.dS | j| || j krT| j| dS rB   )	rC   r
   rD   rE   r+   r7   rF   r;   rG   )r.   r@   rH   r'   r'   r(   rI   a   s    
zTaskAgenda.complete_open_taskc                 C   s(   || j  krdS || j kr$dS dS )zW
        Returns True if task is assigned in this TaskAgenda, False otherwise.
        TF)r+   r7   r;   r?   r'   r'   r(   contains_tasko   s
    zTaskAgenda.contains_taskc                 C   s$   d | jj| jj| j | j S Nz{0}/{1}[{2}:{3}])rE   userusernamecampaigncampaignNamer+   r,   r;   r-   r'   r'   r(   __str__|   s    zTaskAgenda.__str__c                 C   s$   t t j}d| |}t|d S )Nz#{0}.{1} deprecated as of 5/27/2019.)r   r   functionrE   NotImplementedError)clsZold_usernameZnew_username_method_msgr'   r'   r(   reassign_tasks   s    zTaskAgenda.reassign_tasksc                 C   s  t ttttttd}|| j	 d}|sNd
| j	 | j}tj}d||fS |jj| jd}| sd
| j}tj}d||fS td
| jj}tjj| jjd}d	}|D ]}	||	jr|d
7 }q|d
 dkrd
| j}tj}d||fS d
| jj|d
 }
tj|
}d|_|  |D ]}||_||_|  q"| j D ]}| j | | j!| qHd
| j|}tj}d||fS )a/  
        Resets annotations and state for this task agenda instance.

        This will do nothing if there are no annotations yet.

        Moves all annotations for the agenda owner to a new user account,
        named as '{self.user.username}-{number:02x}', preserving data for
        future analysis. This user is not added to the respective campaign
        team, so that these annotations will not affect final results.

        The reset moves all related tasks back into self._open_tasks.

        Returns True upon success, False otherwise.
        )DataAssessmentTaskr   DirectAssessmentContextTaskDirectAssessmentDocumentTaskMultiModalAssessmentTaskPairwiseAssessmentDocumentTaskPairwiseAssessmentTaskNz(Unknown annotation type {0} for user {1}F)	createdByz Nothing to be done for user {0}.z{0}-[0-9a-f]{{2}})Zusername__startswithr         z'Cannot create shadow copy for user {0}.z{0}-{1:02x}zESuccesfully reset task agenda for user {0}, creating shadow copy {1}.T)"r   r   r   r   r   r   r   getrO   Zget_campaign_typerE   rM   r   ERRORobjectsfilterexistsINFO
re_compilerN   r   matchWARNINGcreate_user	is_activesaver^   
modifiedByretirer;   r7   r+   rG   rF   )r.   Ztype_to_result_class_mappingZresult_classrV   Z_lvlZannotated_output_for_userZ_shadowZ_usersZ_shadow_copiesZ
_candidate_nameZ_shadow_copyZannotation_resultr@   r'   r'   r(   r"      sh    
  



 zTaskAgenda.reset_taskagendaN)T)F)r#   r$   r%   r   
ForeignKeyr   PROTECT_rM   rO   ManyToManyFieldr
   r+   r;   r)   r/   r8   r:   r<   rA   r>   rJ   rI   rK   rQ   classmethodr	   rW   r"   r'   r'   r'   r(   r   '   sF     

	r   c                   @   sx   e Zd ZejeejeddZejdejeddZ	ej
edddedd	Zej
edd
dedd	Zdd Zdd ZdS )
WorkAgendar   r   r   r   Tr   r   r   r   r   r    r!   c                 C   s   | j  dkS r*   )	openTasksr,   r-   r'   r'   r(   r/      s    zWorkAgenda.completedc                 C   s$   d | jj| jj| j | j S rL   )rE   rM   rN   rO   rP   rv   r,   completedTasksr-   r'   r'   r(   rQ      s    zWorkAgenda.__str__N)r#   r$   r%   r   rp   r   rq   rr   rM   rO   rs   r   rv   rw   r/   rQ   r'   r'   r'   r(   ru      s,     ru   N)&__doc__inspectr   r   rer   rg   Zdjango.contribr   django.contrib.auth.modelsr   	django.dbr   django.utils.translationr   rr   Z
deprecatedr	   ZEvalData.models.base_modelsr
   ZEvalData.models.data_assessmentr   Z!EvalData.models.direct_assessmentr   r   Z)EvalData.models.direct_assessment_contextr   Z*EvalData.models.direct_assessment_documentr   Z&EvalData.models.multi_modal_assessmentr   Z#EvalData.models.pairwise_assessmentr   Z,EvalData.models.pairwise_assessment_documentr   Modelr   ru   r'   r'   r'   r(   <module>   s(    :