ó
TR¹Nc           @   sx   d  d l  m Z d  d l m Z m Z d  d l m Z m Z e j ƒ  Z	 d e f d „  ƒ  YZ
 d e f d „  ƒ  YZ d S(	   iÿÿÿÿ(   t   settings(   t   force_unicodet   StrAndUnicode(   t	   constantst   utilst   Messagec           B   sJ   e  Z d  Z d d „ Z d „  Z d „  Z d „  Z d „  Z e	 e ƒ Z
 RS(   s²   
    Represents 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.
    c         C   s%   t  | ƒ |  _ | |  _ | |  _ d  S(   N(   t   intt   levelt   messaget
   extra_tags(   t   selfR   R   R	   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyt   __init__   s    	c         C   s4   t  |  j d t ƒ|  _ t  |  j d t ƒ|  _ d S(   s"  
        Prepares the message for serialization by forcing the ``message``
        and ``extra_tags`` to unicode in case they are lazy translations.

        Known "safe" types (None, int, etc.) are not converted (see Django's
        ``force_unicode`` implementation for details).
        t   strings_onlyN(   R   R   t   TrueR	   (   R
   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyt   _prepare   s    c         C   s1   t  | t ƒ o0 |  j | j k o0 |  j | j k S(   N(   t
   isinstanceR   R   R   (   R
   t   other(    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyt   __eq__    s    !c         C   s   t  |  j ƒ S(   N(   R   R   (   R
   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyt   __unicode__$   s    c         C   sm   t  t j |  j d ƒ d t ƒ} t  |  j d t ƒ} | rU | rU d j | | g ƒ S| r_ | S| ri | Sd S(   Nt    R   u    (   R   t
   LEVEL_TAGSt   getR   R   R	   t   join(   R
   t	   label_tagR	   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyt	   _get_tags'   s    	N(   t   __name__t
   __module__t   __doc__t   NoneR   R   R   R   R   t   propertyt   tags(    (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyR   	   s   				t   BaseStoragec           B   s˜   e  Z d  Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 d „ Z d „  Z d d „ Z e e e e ƒ Z RS(   sÖ   
    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         O   sA   | |  _  g  |  _ t |  _ t |  _ t t |  ƒ j | | Ž  d  S(   N(   t   requestt   _queued_messagest   Falset   usedt	   added_newt   superR   R   (   R
   R    t   argst   kwargs(    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyR   =   s
    				c         C   s   t  |  j ƒ t  |  j ƒ S(   N(   t   lent   _loaded_messagesR!   (   R
   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyt   __len__D   s    c         C   s>   t  |  _ |  j r1 |  j j |  j ƒ g  |  _ n  t |  j ƒ S(   N(   R   R#   R!   R)   t   extendt   iter(   R
   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyt   __iter__G   s
    		c         C   s   | |  j  k p | |  j k S(   N(   R)   R!   (   R
   t   item(    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyt   __contains__N   s    c         C   s:   t  |  d ƒ s3 |  j ƒ  \ } } | p* g  |  _ n  |  j S(   st   
        Returns a list of loaded messages, retrieving them first if they have
        not been loaded yet.
        t   _loaded_data(   t   hasattrt   _getR0   (   R
   t   messagest   all_retrieved(    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyR)   Q   s    c         O   s   t  ƒ  ‚ d S(   s  
        Retrieves a list of stored messages. Returns 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``.
        N(   t   NotImplementedError(   R
   R&   R'   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyR2   \   s    c         O   s   t  ƒ  ‚ d S(   sð   
        Stores a list of messages, returning 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.**
        N(   R5   (   R
   R3   t   responseR&   R'   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyt   _storek   s    	c         C   s   x | D] } | j  ƒ  q Wd S(   s:   
        Prepares a list of messages for storage.
        N(   R   (   R
   R3   R   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyt   _prepare_messagesv   s    c         C   sY   |  j  |  j ƒ |  j r, |  j |  j | ƒ S|  j rU |  j |  j } |  j | | ƒ Sd S(   sæ   
        Stores all unread messages.

        If the backend has yet to be iterated, previously stored messages will
        be stored again. Otherwise, only messages added after the last
        iteration will be stored.
        N(   R8   R!   R#   R7   R$   R)   (   R
   R6   R3   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyt   update}   s    		R   c         C   s[   | s
 d St  | ƒ } | |  j k  r) d St |  _ t | | d | ƒ} |  j j | ƒ d S(   s»   
        Queues 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``).
        NR	   (   R   R   R   R$   R   R!   t   append(   R
   R   R   R	   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyt   addŒ   s    	c         C   s1   t  |  d ƒ s* t t d t j ƒ |  _ n  |  j S(   s¬   
        Returns the minimum recorded level.

        The default level is the ``MESSAGE_LEVEL`` setting. If this is
        not found, the ``INFO`` level is used.
        t   _levelt   MESSAGE_LEVEL(   R1   t   getattrR    R   t   INFOR<   (   R
   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyt
   _get_levelž   s    c         C   s7   | d k r$ t |  d ƒ r$ |  ` n t | ƒ |  _ d S(   sœ   
        Sets a custom minimum recorded level.

        If set to ``None``, the default level will be used (see the
        ``_get_level`` method).
        R<   N(   R   R1   R<   R   (   R
   t   value(    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyt
   _set_level©   s    	N(   R   R   R   R   R*   R-   R/   R   R)   R2   R7   R8   R9   R;   R@   R   RB   R   (    (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyR   5   s   									N(   t   django.confR    t   django.utils.encodingR   R   t   django.contrib.messagesR   R   t   get_level_tagsR   R   t   objectR   (    (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/contrib/messages/storage/base.pyt   <module>   s
   ,