Show
Ignore:
Timestamp:
11/04/09 23:28:10 (3 years ago)
Author:
Menno Smits <menno@…>
Branch:
default
convert_revision:
menno@pali-20090411222810-0r33czn9bjwh5fsy
Message:

Folder escaping is working. Live test is passing correctly. Still needs more testing and documentation updates.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • imapclient/imapclient.py

    r60 r62  
    2121#imaplib.Debug = 5 
    2222 
     23#XXX  
     24import imap_utf7 
     25 
    2326__all__ = ['IMAPClient', 'DELETED', 'SEEN', 'ANSWERED', 'FLAGGED', 'DRAFT', 
    2427    'RECENT'] 
     
    9194        self.folder_encode = True 
    9295 
    93      
    94     def _set_folder_encode(self, on_off): 
    95         if on_off: 
    96             self._folder_encode = True 
    97             self._decode_folder_name = decode_folder_name 
    98             self._encode_folder_name = encode_folder_name 
    99         else: 
    100             self._folder_encode = False 
    101             self._decode_folder_name = lambda x: x 
    102             self._encode_folder_name = self._decode_folder_name 
    103  
    104     folder_encode = property(lambda self: self._folder_encode, 
    105                              _set_folder_encode, 
    106                              None, 
    107                              "Set True to have folder names transparently encoded/decoded") 
    108  
    109  
     96    
    11097    def login(self, username, password): 
    11198        '''Perform a simple login 
     
    464451        flags_list = seq_to_parenlist(flags) 
    465452 
    466         typ, data = self._imap.append(folder, flags_list, time_val, msg) 
     453        typ, data = self._imap.append(self._encode_folder_name(folder), 
     454                                      flags_list, time_val, msg) 
    467455        self._checkok('append', typ, data) 
    468456 
     
    553541            for msgid, data in fetch_dict.iteritems() 
    554542            ]) 
     543 
     544    def _decode_folder_name(self, name): 
     545        if self.folder_encode: 
     546            return imap_utf7.decode(name) 
     547        return name 
     548 
     549 
     550    def _encode_folder_name(self, name): 
     551        if self.folder_encode: 
     552            return imap_utf7.encode(name) 
     553        return name 
    555554 
    556555 
     
    767766 
    768767 
    769 def encode_folder_name(name): 
    770     """Take a folder name and escape ampersands so that the correct name is 
    771     seen by the IMAP server. 
    772  
    773     @param name: Mailbox name (eg. "stuff & things") 
    774     @return: Encoded mailbox name (eg. "stuff &- things") 
    775     """ 
    776     #TODO - full UTF-7 handling 
    777     return name.replace('&', '&-') 
    778  
    779  
    780 #XXX test that decode name matched re-encoded name, if it doesn't return the original 
    781 def decode_folder_name(name): 
    782     """Take a folder name as returned by an IMAP server and unescape 
    783     ampersands so that the expected name is seen. 
    784  
    785     @param name: Encoded mailbox name (eg. "stuff &- things") 
    786     @return: Mailbox name (eg. "stuff & things") 
    787     """ 
    788     #TODO - full UTF-7 handling 
    789     return name.replace('&-', '&') 
    790