[issue38232] empty local-part in addr_spec displayed incorrectly

2019-10-04 Thread Abhilash Raj


Abhilash Raj  added the comment:

It is actually parsed correctly and serialized back when you try to convert it 
to a string representation:

from email.parser import BytesFeedParser
import email.policy

def main():
eml_string = 'From: Nobody <""@example.org>'
parser = BytesFeedParser(policy = email.policy.default)
parser.feed(eml_string.encode())
msg = parser.close()
print(msg.get('From').addresses[0].addr_spec)
print(repr(msg.get('From')._parse_tree))
print(msg.as_string())

Running this gives me:


@example.org
AddressList([Address([Mailbox([NameAddr([DisplayName([Atom([ValueTerminal('Nobody'),
 CFWSList([WhiteSpaceTerminal(' ')])])]), AngleAddr([ValueTerminal('<'), 
AddrSpec([LocalPart([QuotedString([BareQuotedString([ValueTerminal('')])])]), 
ValueTerminal('@'), Domain([DotAtom([DotAtomText([ValueTerminal('example'), 
ValueTerminal('.'), ValueTerminal('org')])])])]), ValueTerminal('>')])])])])])
From: Nobody <""@example.org>


Notice the : 
AddrSpec([LocalPart([QuotedString([BareQuotedString([ValueTerminal('')])])])

print() converts the addr-spec into a string, which omits the quotes. This is 
true for any non-none string too:


he...@example.org
AddressList([Address([Mailbox([NameAddr([DisplayName([Atom([ValueTerminal('Nobody'),
 CFWSList([WhiteSpaceTerminal(' ')])])]), AngleAddr([ValueTerminal('<'), 
AddrSpec([LocalPart([QuotedString([BareQuotedString([ValueTerminal('hello')])])]),
 ValueTerminal('@'), Domain([DotAtom([DotAtomText([ValueTerminal('example'), 
ValueTerminal('.'), ValueTerminal('org')])])])]), ValueTerminal('>')])])])])])
From: Nobody <"hello"@example.org>


If you prefer the string representation of the header's parsed value, you can 
try:

print(msg.get('From').fold(policy=email.policy.default))

Which prints:

From: Nobody <""@example.org>

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38232] empty local-part in addr_spec displayed incorrectly

2019-09-23 Thread Karthikeyan Singaravelan


Change by Karthikeyan Singaravelan :


--
nosy: +maxking

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38232] empty local-part in addr_spec displayed incorrectly

2019-09-23 Thread Andrei Troie


Andrei Troie  added the comment:

As far as I understand it, this is due to the following code in 
email.headerregistry.Address.addr_spec (in 3.8 and below):

if len(nameset) > len(nameset-parser.DOT_ATOM_ENDS):
lp = parser.quote_string(self.username)

or, in the current version on master:

lp = self.username
if not parser.DOT_ATOM_ENDS.isdisjoint(lp):
lp = parser.quote_string(lp)

Both of these tests will not work with the empty string since the empty string 
is always disjoint from anything, so it will never get quoted.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38232] empty local-part in addr_spec displayed incorrectly

2019-09-20 Thread Andrei Troie


Change by Andrei Troie :


--
versions: +Python 3.9

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38232] empty local-part in addr_spec displayed incorrectly

2019-09-20 Thread Andrei Troie


New submission from Andrei Troie :

Given an (RFC-legal) email address with the local part consisting of a quoted 
empty string (e.g. 'Nobody <""@example.org>'), when I call the 'addr_spec' 
property, the result no longer includes the quoted empty string (so, in this 
case, addr_spec would return '@example.org').

--
components: email
files: example_parser.py
messages: 352852
nosy: andreitroiebbc, barry, r.david.murray
priority: normal
severity: normal
status: open
title: empty local-part in addr_spec displayed incorrectly
type: behavior
versions: Python 3.6, Python 3.7, Python 3.8
Added file: https://bugs.python.org/file48617/example_parser.py

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com