U
    d                  	   @   sD  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	d
ddZeg ZddgddggZdddddgZdZzleD ]bZejjed seedZe  eD ]4Zed e Zejjed seedZe  qqW n e	e
fk
r
   Y nX dd Zdd 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
    )uuid4)Group)User)models)OperationalError)ProgrammingErrorZMalteseEnglishBasqueSpanish)mltengeusspar   r   r   r   ZbeginnerZintermediateZadvancedZfluentZnative)name-c                    sH   dd t D  d}t| ttfr8t fdd| D }n|   k}|S )zt
    Validates given language code string or list of code strings.

    Returns True if valid, False otherwise.
    c                 S   s   g | ]}|  qS  lower.0xr   r   ?/var/www/rival/public_html/translation-eval/Dashboard/models.py
<listcomp>@   s     z*validate_language_code.<locals>.<listcomp>Fc                    s   g | ]}|   kqS r   r   r   Zvalid_codesr   r   r   C   s     )LANGUAGE_CODES_AND_NAMES
isinstancelisttupleallr   )Zcode_or_codesvalidr   r   r   validate_language_code:   s    r    c                   C   s   t  jdd S )z*
    Creates a new UUID4-based token.
    N   )r   hexr   r   r   r   create_uuid4_tokenK   s    r#   c                   @   sv   e Zd ZdZejeejddZeje	ejddddZ
ejddeddddZejddd	d
dZG dd dZdd ZdS )UserInviteTokenz=
    User invite tokens allowing to register an account.
    T)db_index)r%   blanknullr!   zUnique invite tokenzInvite token)
max_lengthr%   defaultunique	help_textverbose_namez-Indicates that this invite can still be used.zActive?)r%   r)   r+   r,   c                   @   s   e Zd ZdZdZdZdS )zUserInviteToken.MetazH
        Metadata options for the UserInviteToken object model.
        zUser invite tokenzUser invite tokensN)__name__
__module____qualname____doc__r,   verbose_name_pluralr   r   r   r   Metal   s   r2   c                 C   s   d | j| j| j| jjS )zK
        Returns a Unicode String for this UserInviteToken object.
        z=<user-invite id="{0}" token="{1}" active="{2}" group="{3}" />)formatidtokenactivegroupr   )selfr   r   r   __str__t   s       zUserInviteToken.__str__N)r-   r.   r/   r0   r   
ForeignKeyr   PROTECTr7   r   user	CharFieldr#   r5   BooleanFieldr6   r2   r9   r   r   r   r   r$   S   s&   	r$   c                   @   sL   e Zd ZdZejddddZejdddZej	dddddZ
edd	 Zd
S )TimedKeyValueDataz,
    Stores a simple (key, value) pair.
    d   F)r(   r&   r'   )r&   r'   T)r&   r'   editableauto_now_addc                 C   sR   | j j|d}|d }|jddd}|r:|d |krN| ||d}|  dS )	zV
        Stores a new TimedKeyValueData instance if value for key has changed
        )keydate_and_timevalueT)flatr   )rC   rE   N)objectsfilterorder_byreversevalues_listsave)clsrC   	new_valueZ_latest_valuesZnew_datar   r   r   update_status_if_changed   s    z*TimedKeyValueData.update_status_if_changedN)r-   r.   r/   r0   r   r=   rC   	TextFieldrE   DateTimeFieldrD   classmethodrO   r   r   r   r   r?   ~   s      r?   N)r0   uuidr   django.contrib.auth.modelsr   r   	django.dbr   django.db.utilsr   r   r   setZSIGN_LANGUAGE_CODESZLANGUAGE_PAIRSZPROFICIENCY_LEVELSZMIN_PROFICIENCYcoderG   rH   existsZnew_language_grouprL   level
group_nameZ	new_groupr    r#   Modelr$   r?   r   r   r   r   <module>   sL   

+