3
ªôÁg+  ã               @   sD   d dl mZ d dlmZmZ ejƒ ZG dd„ dƒZG dd„ dƒZdS )é    )Úsettings)Ú	constantsÚutilsc               @   sJ   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zedd„ ƒZ	edd„ ƒZ
dS )ÚMessagez±
    Represent an actual message that can be stored in any of the supported
    storage classes (typically session- or cookie-based) and rendered in a view
    or template.
    Nc             C   s   t |ƒ| _|| _|| _d S )N)ÚintÚlevelÚmessageÚ
extra_tags)Úselfr   r   r	   © r   úb/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django/contrib/messages/storage/base.pyÚ__init__   s    
zMessage.__init__c             C   s*   t | jƒ| _| jdk	r t | jƒnd| _dS )z˜
        Prepare the message for serialization by forcing the ``message``
        and ``extra_tags`` to str in case they are lazy translations.
        N)Ústrr   r	   )r
   r   r   r   Ú_prepare   s    zMessage._preparec             C   s&   t |tƒstS | j|jko$| j|jkS )N)Ú
isinstancer   ÚNotImplementedr   r   )r
   Úotherr   r   r   Ú__eq__   s    
zMessage.__eq__c             C   s
   t | jƒS )N)r   r   )r
   r   r   r   Ú__str__    s    zMessage.__str__c             C   s   dj dd„ | j| jgD ƒƒS )Nú c             s   s   | ]}|r|V  qd S )Nr   )Ú.0Útagr   r   r   ú	<genexpr>%   s    zMessage.tags.<locals>.<genexpr>)Újoinr	   Ú	level_tag)r
   r   r   r   Útags#   s    zMessage.tagsc             C   s   t j| jdƒS )NÚ )Ú
LEVEL_TAGSÚgetr   )r
   r   r   r   r   '   s    zMessage.level_tag)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   Úpropertyr   r   r   r   r   r   r      s   
r   c                   sŒ   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Ze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eeeeƒZ‡  ZS )ÚBaseStoragezÖ
    This is the base backend for temporary message storage.

    This is not a complete class; to be a usable storage backend, it must be
    subclassed and the two methods ``_get`` and ``_store`` overridden.
    c                s*   || _ g | _d| _d| _tƒ j||Ž d S )NF)ÚrequestÚ_queued_messagesÚusedÚ	added_newÚsuperr   )r
   r%   ÚargsÚkwargs)Ú	__class__r   r   r   4   s
    zBaseStorage.__init__c             C   s   t | jƒt | jƒ S )N)ÚlenÚ_loaded_messagesr&   )r
   r   r   r   Ú__len__;   s    zBaseStorage.__len__c             C   s*   d| _ | jr | jj| jƒ g | _t| jƒS )NT)r'   r&   r.   ÚextendÚiter)r
   r   r   r   Ú__iter__>   s
    zBaseStorage.__iter__c             C   s   || j kp|| jkS )N)r.   r&   )r
   Úitemr   r   r   Ú__contains__E   s    zBaseStorage.__contains__c             C   s&   t | dƒs | jƒ \}}|pg | _| jS )zs
        Return a list of loaded messages, retrieving them first if they have
        not been loaded yet.
        Ú_loaded_data)ÚhasattrÚ_getr5   )r
   ÚmessagesZall_retrievedr   r   r   r.   H   s    

zBaseStorage._loaded_messagesc             O   s   t dƒ‚dS )a  
        Retrieve a list of stored messages. Return a tuple of the messages
        and a flag indicating whether or not all the messages originally
        intended to be stored in this storage were, in fact, stored and
        retrieved; e.g., ``(messages, all_retrieved)``.

        **This method must be implemented by a subclass.**

        If it is possible to tell if the backend was not used (as opposed to
        just containing no messages) then ``None`` should be returned in
        place of ``messages``.
        z6subclasses of BaseStorage must provide a _get() methodN)ÚNotImplementedError)r
   r*   r+   r   r   r   r7   S   s    zBaseStorage._getc             O   s   t dƒ‚dS )zï
        Store a list of messages and return a list of any messages which could
        not be stored.

        One type of object must be able to be stored, ``Message``.

        **This method must be implemented by a subclass.**
        z8subclasses of BaseStorage must provide a _store() methodN)r9   )r
   r8   Úresponser*   r+   r   r   r   Ú_storeb   s    	zBaseStorage._storec             C   s   x|D ]}|j ƒ  qW dS )z9
        Prepare a list of messages for storage.
        N)r   )r
   r8   r   r   r   r   Ú_prepare_messagesm   s    
zBaseStorage._prepare_messagesc             C   sB   | j | jƒ | jr | j| j|ƒS | jr>| j| j }| j||ƒS dS )zË
        Store all unread messages.

        If the backend has yet to be iterated, store previously stored messages
        again. Otherwise, only store messages added after the last iteration.
        N)r<   r&   r'   r;   r(   r.   )r
   r:   r8   r   r   r   Úupdatet   s    zBaseStorage.updater   c             C   sB   |sdS t |ƒ}|| jk rdS d| _t|||d}| jj|ƒ dS )zº
        Queue a message to be stored.

        The message is only queued if it contained something and its level is
        not less than the recording level (``self.level``).
        NT)r	   )r   r   r(   r   r&   Úappend)r
   r   r   r	   r   r   r   Úadd‚   s    
zBaseStorage.addc             C   s    t | dƒsttdtjƒ| _| jS )z«
        Return the minimum recorded level.

        The default level is the ``MESSAGE_LEVEL`` setting. If this is
        not found, the ``INFO`` level is used.
        Ú_levelZMESSAGE_LEVEL)r6   Úgetattrr   r   ÚINFOr@   )r
   r   r   r   Ú
_get_level”   s    
zBaseStorage._get_levelNc             C   s&   |dkrt | dƒr| `n
t|ƒ| _dS )z›
        Set a custom minimum recorded level.

        If set to ``None``, the default level will be used (see the
        ``_get_level`` method).
        Nr@   )r6   r@   r   )r
   Úvaluer   r   r   Ú
_set_levelŸ   s    zBaseStorage._set_level)r   )N)r   r    r!   r"   r   r/   r2   r4   r#   r.   r7   r;   r<   r=   r?   rC   rE   r   Ú__classcell__r   r   )r,   r   r$   ,   s   

r$   N)	Zdjango.confr   Zdjango.contrib.messagesr   r   Zget_level_tagsr   r   r$   r   r   r   r   Ú<module>   s   %