Mercurial > public > mercurial-scm > hg
comparison mercurial/mail.py @ 43576:14b96072797d
mail: let addressencode() / addrlistencode() return native strings
Avoids conversion to "str" on py3.
author | Denis Laxalde <denis@laxalde.org> |
---|---|
date | Sat, 09 Nov 2019 15:16:52 +0100 |
parents | 67b4439c09b2 |
children | 599e25add437 |
comparison
equal
deleted
inserted
replaced
43575:67b4439c09b2 | 43576:14b96072797d |
---|---|
383 try: | 383 try: |
384 # too strict? | 384 # too strict? |
385 addr.decode('ascii') | 385 addr.decode('ascii') |
386 except UnicodeDecodeError: | 386 except UnicodeDecodeError: |
387 raise error.Abort(_(b'invalid local address: %s') % addr) | 387 raise error.Abort(_(b'invalid local address: %s') % addr) |
388 return pycompat.bytesurl( | 388 return email.utils.formataddr((name, encoding.strfromlocal(addr))) |
389 email.utils.formataddr((name, encoding.strfromlocal(addr))) | |
390 ) | |
391 | 389 |
392 | 390 |
393 def addressencode(ui, address, charsets=None, display=False): | 391 def addressencode(ui, address, charsets=None, display=False): |
394 '''Turns address into RFC-2047 compliant header.''' | 392 '''Turns address into RFC-2047 compliant header.''' |
395 if display or not address: | 393 if display or not address: |
396 return address or b'' | 394 return encoding.strfromlocal(address or b'') |
397 name, addr = email.utils.parseaddr(encoding.strfromlocal(address)) | 395 name, addr = email.utils.parseaddr(encoding.strfromlocal(address)) |
398 return _addressencode(ui, name, encoding.strtolocal(addr), charsets) | 396 return _addressencode(ui, name, encoding.strtolocal(addr), charsets) |
399 | 397 |
400 | 398 |
401 def addrlistencode(ui, addrs, charsets=None, display=False): | 399 def addrlistencode(ui, addrs, charsets=None, display=False): |
403 A single element of input list may contain multiple addresses, but output | 401 A single element of input list may contain multiple addresses, but output |
404 always has one address per item''' | 402 always has one address per item''' |
405 for a in addrs: | 403 for a in addrs: |
406 assert isinstance(a, bytes), '%r unexpectedly not a bytestr' % a | 404 assert isinstance(a, bytes), '%r unexpectedly not a bytestr' % a |
407 if display: | 405 if display: |
408 return [a.strip() for a in addrs if a.strip()] | 406 return [encoding.strfromlocal(a.strip()) for a in addrs if a.strip()] |
409 | 407 |
410 result = [] | 408 result = [] |
411 for name, addr in email.utils.getaddresses( | 409 for name, addr in email.utils.getaddresses( |
412 [encoding.strfromlocal(a) for a in addrs] | 410 [encoding.strfromlocal(a) for a in addrs] |
413 ): | 411 ): |