[Patches] imaplib.py patch

Piers Lauder piers@cs.su.oz.au
Tue, 28 Mar 2000 20:14:37 +1000


--129.78.10.43.126.21197.954239451.188.10387
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hi!

Reason for patch:

	This patch fixes the "search" command in imaplib. The problem
	was that a search can take multiple arguments, but as defined,
	would only accept one.

	I have also made changes to the test code at the end to be less
	verbose by default, but to accept a verbosity argument.
        
        I've modified the code for search, and tested it, and here is the resulting
        "diff -c" patch against the version in the CVS tree as of 1/2 hour ago.

Standard disclaimer:

        I confirm that, to the best of my knowledge and belief, this contribution
        is free of any claims of third parties under copyright, patent or
        other rights or interests ("claims").  To the extent that I have
        any such claims, I hereby grant to CNRI a nonexclusive, irrevocable,
        royalty-free, worldwide license to reproduce, distribute, perform and/or
        display publicly, prepare derivative versions, and otherwise use this
        contribution as part of the Python software and its related documentation,
        or any derivative versions thereof, at no cost to CNRI or its licensed
        users, and to authorize others to do so.
        
        I acknowledge that CNRI may, at its sole discretion, decide whether
        or not to incorporate this contribution in the Python software and its
        related documentation.  I further grant CNRI permission to use my name
        and other identifying information provided to CNRI by me for use in
        connection with the Python software and its related documentation.

Piers Lauder.



--129.78.10.43.126.21197.954239451.188.10387
Content-Type: application/octet-stream; name=imaplib.diffs
Content-Transfer-Encoding: 7bit

*** dist/src/Lib/imaplib.py	Tue Mar 28 18:52:20 2000
--- piers/python/imaplib.py	Tue Mar 28 20:15:06 2000
***************
*** 15,21 ****
  # 
  # Authentication code contributed by Donn Cave <donn@u.washington.edu> June 1998.
  
! __version__ = "2.33"
  
  import binascii, re, socket, string, time, random, sys
  
--- 15,21 ----
  # 
  # Authentication code contributed by Donn Cave <donn@u.washington.edu> June 1998.
  
! __version__ = "2.36"
  
  import binascii, re, socket, string, time, random, sys
  
***************
*** 446,455 ****
  		return self._simple_command('RENAME', oldmailbox, newmailbox)
  
  
! 	def search(self, charset, criteria):
  		"""Search mailbox for matching messages.
  
! 		(typ, [data]) = <instance>.search(charset, criteria)
  
  		'data' is space separated list of matching message numbers.
  		"""
--- 446,455 ----
  		return self._simple_command('RENAME', oldmailbox, newmailbox)
  
  
! 	def search(self, charset, *criteria):
  		"""Search mailbox for matching messages.
  
! 		(typ, [data]) = <instance>.search(charset, criterium, ...)
  
  		'data' is space separated list of matching message numbers.
  		"""
***************
*** 456,462 ****
  		name = 'SEARCH'
  		if charset:
  			charset = 'CHARSET ' + charset
! 		typ, dat = self._simple_command(name, charset, criteria)
  		return self._untagged_response(typ, dat, name)
  
  
--- 456,462 ----
  		name = 'SEARCH'
  		if charset:
  			charset = 'CHARSET ' + charset
! 		typ, dat = apply(self._simple_command, (name, charset) + criteria)
  		return self._untagged_response(typ, dat, name)
  
  
***************
*** 1022,1032 ****
  
  if __name__ == '__main__':
  
! 	import getpass, sys
  
! 	host = ''
! 	if sys.argv[1:]: host = sys.argv[1]
  
  	USER = getpass.getuser()
  	PASSWD = getpass.getpass("IMAP password for %s on %s" % (USER, host or "localhost"))
  
--- 1022,1042 ----
  
  if __name__ == '__main__':
  
! 	import getopt, getpass, sys
  
! 	try:
! 		optlist, args = getopt.getopt(sys.argv[1:], 'd:')
! 	except getopt.error, val:
! 		pass
  
+ 	for opt,val in optlist:
+ 		if opt == '-d':
+ 			Debug = int(val)
+ 
+ 	if not args: args = ('',)
+ 
+ 	host = args[0]
+ 
  	USER = getpass.getuser()
  	PASSWD = getpass.getpass("IMAP password for %s on %s" % (USER, host or "localhost"))
  
***************
*** 1039,1045 ****
  	('append', ('/tmp/yyz 2', None, None, test_mesg)),
  	('list', ('/tmp', 'yy*')),
  	('select', ('/tmp/yyz 2',)),
! 	('search', (None, '(TO zork)')),
  	('partial', ('1', 'RFC822', 1, 1024)),
  	('store', ('1', 'FLAGS', '(\Deleted)')),
  	('expunge', ()),
--- 1049,1055 ----
  	('append', ('/tmp/yyz 2', None, None, test_mesg)),
  	('list', ('/tmp', 'yy*')),
  	('select', ('/tmp/yyz 2',)),
! 	('search', (None, 'SUBJECT', 'test')),
  	('partial', ('1', 'RFC822', 1, 1024)),
  	('store', ('1', 'FLAGS', '(\Deleted)')),
  	('expunge', ()),
***************
*** 1063,1088 ****
  		_mesg('%s => %s %s' % (cmd, typ, dat))
  		return dat
  
! 	Debug = 5
! 	M = IMAP4(host)
! 	_mesg('PROTOCOL_VERSION = %s' % M.PROTOCOL_VERSION)
  
! 	for cmd,args in test_seq1:
! 		run(cmd, args)
  
! 	for ml in run('list', ('/tmp/', 'yy%')):
! 		mo = re.match(r'.*"([^"]+)"$', ml)
! 		if mo: path = mo.group(1)
! 		else: path = string.split(ml)[-1]
! 		run('delete', (path,))
  
! 	for cmd,args in test_seq2:
! 		dat = run(cmd, args)
  
! 		if (cmd,args) != ('uid', ('SEARCH', 'ALL')):
! 			continue
  
! 		uid = string.split(dat[-1])
! 		if not uid: continue
! 		run('uid', ('FETCH', '%s' % uid[-1],
! 			'(FLAGS INTERNALDATE RFC822.SIZE RFC822.HEADER RFC822.TEXT)'))
--- 1073,1111 ----
  		_mesg('%s => %s %s' % (cmd, typ, dat))
  		return dat
  
! 	try:
! 		M = IMAP4(host)
! 		_mesg('PROTOCOL_VERSION = %s' % M.PROTOCOL_VERSION)
  
! 		for cmd,args in test_seq1:
! 			run(cmd, args)
  
! 		for ml in run('list', ('/tmp/', 'yy%')):
! 			mo = re.match(r'.*"([^"]+)"$', ml)
! 			if mo: path = mo.group(1)
! 			else: path = string.split(ml)[-1]
! 			run('delete', (path,))
  
! 		for cmd,args in test_seq2:
! 			dat = run(cmd, args)
  
! 			if (cmd,args) != ('uid', ('SEARCH', 'ALL')):
! 				continue
  
! 			uid = string.split(dat[-1])
! 			if not uid: continue
! 			run('uid', ('FETCH', '%s' % uid[-1],
! 				'(FLAGS INTERNALDATE RFC822.SIZE RFC822.HEADER RFC822.TEXT)'))
! 
! 		print '\nAll tests OK.'
! 
! 	except:
! 		print '\nTests failed.'
! 
! 		if not Debug:
! 			print '''
! If you would like to see debugging output,
! try: %s -d5
! ''' % sys.argv[0]
! 
! 		raise

--129.78.10.43.126.21197.954239451.188.10387--