Ńň
uŠ×Nc           @   sŰ   d  d k  Z  d  d k Z d  d k Z d  d k l Z y e Wn# e j
 o d  d k l Z n Xe  i	 d  Z
 d   Z d   Z d   Z d   Z d	   Z d
   Z d d d d d g Z d   Z d   Z d   Z d S(   i˙˙˙˙N(   t   getglobalui(   t   Sets   ^("(?:[^"]|\\")*")c          G   sJ   g  } x! |  D] } | i  t |   q Wt   i d d i |   d  S(   Nt   imapt    (   t   appendt   strR    t   debugt   join(   t   argst   msgt   arg(    (    sx   /projectLibrary/707976 EPBuoyPrototypeAndTesting/SpotWatchCircleAlarm/spaetz-offlineimap-5f3ac2c/offlineimap/imaputil.pyR      s
     c         C   s`   |  oU |  i  d  oE |  i d  o5 |  d d !}  |  i d d  }  |  i d d  }  n |  S(   sŤ   Takes string which may or may not be quoted and unquotes it.

    It only considers double quotes. This function does NOT consider
    parenthised lists to be quoted.
    t   "i   i˙˙˙˙s   \"s   \\s   \(   t
   startswitht   endswitht   replace(   t   string(    (    sx   /projectLibrary/707976 EPBuoyPrototypeAndTesting/SpotWatchCircleAlarm/spaetz-offlineimap-5f3ac2c/offlineimap/imaputil.pyt   dequote$   s
    'c         C   sD   |  d d j p |  d d j o t  d |   n t |  d d ! S(   sĐ   Converts a string of IMAP flags to a list

    :returns: E.g. '(\Draft \Deleted)' returns  ['\Draft','\Deleted'].
        (FLAGS (\Seen Old) UID 4807) returns
        ['FLAGS,'(\Seen Old)','UID', '4807']
    i    t   (i˙˙˙˙t   )s%   Passed string '%s' is not a flag listi   (   t
   ValueErrort	   imapsplit(   R   (    (    sx   /projectLibrary/707976 EPBuoyPrototypeAndTesting/SpotWatchCircleAlarm/spaetz-offlineimap-5f3ac2c/offlineimap/imaputil.pyt	   flagsplit0   s    "c         C   sX   h  } d } x8 | t  |   j  o$ |  | d | |  | <| d 7} q Wt d |  | S(   s-   convert list [1,2,3,4,5,6] to {1:2, 3:4, 5:6}i    i   i   s   options2hash returning:(   t   lenR   (   t   listt   retvalt   counter(    (    sx   /projectLibrary/707976 EPBuoyPrototypeAndTesting/SpotWatchCircleAlarm/spaetz-offlineimap-5f3ac2c/offlineimap/imaputil.pyt   options2hash;   s     c         C   s   t  t |    S(   s    Converts IMAP response string from eg IMAP4.fetch() to a hash.
    
    E.g. '(FLAGS (\Seen Old) UID 4807)' leads to
    {'FLAGS': '(\Seen Old)', 'UID': '4807'}(   R   R   (   t   flags(    (    sx   /projectLibrary/707976 EPBuoyPrototypeAndTesting/SpotWatchCircleAlarm/spaetz-offlineimap-5f3ac2c/offlineimap/imaputil.pyt
   flags2hashH   s    c         C   sŹ  t  |   t i j oô t d  g  } xČ t t |    D]´ } | d o] |  | } | i d d  } | i d d  } d | } t d | | f  | i |  q9 |  | } t i	 d	 d
 |  } t d | | f  | i
 t |   q9 Wt d t |   | S|  i   } g  } xt |  o{| d d j o d } d } xT | oL | | d j o | d 8} n  | | d j o | d 7} n | d 7} qLW| d | !} | | i   } | i |  q| d d j o? t i |  i d  } | t |  i   } | i |  qt i | d d }	 t |	  }
 |
 d j o" | i |	 d  |	 d } qq|
 d j o | i |	 d  Pq|
 d j o PqqW| S(   ső   Takes a string from an IMAP conversation and returns a list containing
    its components.  One example string is:

    (\HasNoChildren) "." "INBOX.Sent"

    The result from parsing this will be:

    ['(\HasNoChildren)', '"."', '"INBOX.Sent"']s3   imapsplit() got a non-string input; working around.i   s   \s   \\R   s   \"s   "%s"s)   imapsplit() non-string [%d]: Appending %ss   \{\d+\}$t    s4   imapsplit() non-string [%d]: Feeding %s to recursions$   imapsplit() non-string: returning %si    R   i   R   t   maxsplit(   t   typet   typest
   StringTypeR   t   rangeR   R   R   t   ret   subt   extendR   R   t   stript   lstript   quoteret   searcht   groupR   t   split(   t
   imapstringR   t   iR
   t   workstrt   rparenct   rparenit	   parenlistt	   quotelistt   splitst	   splitslen(    (    sx   /projectLibrary/707976 EPBuoyPrototypeAndTesting/SpotWatchCircleAlarm/spaetz-offlineimap-5f3ac2c/offlineimap/imaputil.pyR   O   sj    

 


  

s   \Seent   Ss	   \Answeredt   Rs   \Flaggedt   Fs   \Deletedt   Ts   \Draftt   Dc         C   sU   t    } |  d d !i   } x2 t D]* \ } } | | j o | i |  q# q# W| S(   s7   Convert string '(\Draft \Deleted)' into a flags set(DR)i   i˙˙˙˙(   t   setR+   t   flagmapt   add(   t
   flagstringR   t   imapflaglistt   imapflagt   maildirflag(    (    sx   /projectLibrary/707976 EPBuoyPrototypeAndTesting/SpotWatchCircleAlarm/spaetz-offlineimap-5f3ac2c/offlineimap/imaputil.pyt   flagsimap2maildirŹ   s    	 c         C   sZ   g  } x2 t  D]* \ } } | |  j o | i |  q q W| i   d d i |  d S(   s=   Convert set of flags ([DR]) into a string '(\Draft \Deleted)'R   R   R   (   R;   R   t   sortR   (   t   maildirflaglistR   R?   R@   (    (    sx   /projectLibrary/707976 EPBuoyPrototypeAndTesting/SpotWatchCircleAlarm/spaetz-offlineimap-5f3ac2c/offlineimap/imaputil.pyt   flagsmaildir2imapľ   s     
c         C   sä   d   } t  |   p d Sd \ } } g  } t t t |    } x| t |  D]n } t |  } | d j o | | } } qO | | d j o
 | } qO | i | | |   | | } } qO W| i | | |   d i |  S(   sě   Collapse UID lists into shorter sequence sets

    [1,2,3,4,5,10,12,13] will return "1:5,10,12:13".  This function sorts
    the list, and only collapses if subsequent entries form a range.
    :returns: The collapsed UID list as stringc         S   s&   |  | j o t  |   Sd |  | f S(   Ns   %s:%s(   R   (   t   startt   end(    (    sx   /projectLibrary/707976 EPBuoyPrototypeAndTesting/SpotWatchCircleAlarm/spaetz-offlineimap-5f3ac2c/offlineimap/imaputil.pyt   getrangeÄ   s    R   i   t   ,N(   NN(   R   t   Nonet   sortedt   mapt   intt   iterR   R   (   t   uidlistRG   RE   RF   R   t   sorted_uidst   item(    (    sx   /projectLibrary/707976 EPBuoyPrototypeAndTesting/SpotWatchCircleAlarm/spaetz-offlineimap-5f3ac2c/offlineimap/imaputil.pyt   uid_sequencež   s"    	  
(   s   \SeenR5   (   s	   \AnsweredR6   (   s   \FlaggedR7   (   s   \DeletedR8   (   s   \DraftR9   (   R#   R   R    t   offlineimap.uiR    R:   t	   NameErrort   setsR   t   compileR(   R   R   R   R   R   R   R;   RA   RD   RQ   (    (    (    sx   /projectLibrary/707976 EPBuoyPrototypeAndTesting/SpotWatchCircleAlarm/spaetz-offlineimap-5f3ac2c/offlineimap/imaputil.pyt   <module>   s,   						W					