FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
Source.Python/addons/source-python/Python3/email/parser.py at Data-Update · srpg/Source.Python · GitHub
srpg
Source.Python
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
Source.Python
/
addons
/
source-python
/
Python3
/
email
/
parser.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
127 lines (95 loc) · 4.86 KB
Breadcrumbs
Source.Python
/
addons
/
source-python
/
Python3
/
email
/
parser.py
Copy path
File metadata and controls
127 lines (95 loc) · 4.86 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# Copyright (C) 2001-2007 Python Software Foundation
# Author: Barry Warsaw, Thomas Wouters, Anthony Baxter
# Contact: email-sig@python.org
"""A parser of RFC 2822 and MIME email messages."""
__all__
=
[
'Parser'
,
'HeaderParser'
,
'BytesParser'
,
'BytesHeaderParser'
,
'FeedParser'
,
'BytesFeedParser'
]
from
io
import
StringIO
,
TextIOWrapper
from
email
.
feedparser
import
FeedParser
,
BytesFeedParser
from
email
.
_policybase
import
compat32
class
Parser
:
def
__init__
(
self
,
_class
=
None
,
*
,
policy
=
compat32
):
"""Parser of RFC 2822 and MIME email messages.
Creates an in-memory object tree representing the email message, which
can then be manipulated and turned over to a Generator to return the
textual representation of the message.
The string must be formatted as a block of RFC 2822 headers and header
continuation lines, optionally preceded by a `Unix-from' header. The
header block is terminated either by the end of the string or by a
blank line.
_class is the class to instantiate for new message objects when they
must be created. This class must have a constructor that can take
zero arguments. Default is Message.Message.
The policy keyword specifies a policy object that controls a number of
aspects of the parser's operation. The default policy maintains
backward compatibility.
"""
self
.
_class
=
_class
self
.
policy
=
policy
def
parse
(
self
,
fp
,
headersonly
=
False
):
"""Create a message structure from the data in a file.
Reads all the data from the file and returns the root of the message
structure. Optional headersonly is a flag specifying whether to stop
parsing after reading the headers or not. The default is False,
meaning it parses the entire contents of the file.
"""
feedparser
=
FeedParser
(
self
.
_class
,
policy
=
self
.
policy
)
if
headersonly
:
feedparser
.
_set_headersonly
()
while
data
:=
fp
.
read
(
8192
):
feedparser
.
feed
(
data
)
return
feedparser
.
close
()
def
parsestr
(
self
,
text
,
headersonly
=
False
):
"""Create a message structure from a string.
Returns the root of the message structure. Optional headersonly is a
flag specifying whether to stop parsing after reading the headers or
not. The default is False, meaning it parses the entire contents of
the file.
"""
return
self
.
parse
(
StringIO
(
text
),
headersonly
=
headersonly
)
class
HeaderParser
(
Parser
):
def
parse
(
self
,
fp
,
headersonly
=
True
):
return
Parser
.
parse
(
self
,
fp
,
True
)
def
parsestr
(
self
,
text
,
headersonly
=
True
):
return
Parser
.
parsestr
(
self
,
text
,
True
)
class
BytesParser
:
def
__init__
(
self
,
*
args
,
**
kw
):
"""Parser of binary RFC 2822 and MIME email messages.
Creates an in-memory object tree representing the email message, which
can then be manipulated and turned over to a Generator to return the
textual representation of the message.
The input must be formatted as a block of RFC 2822 headers and header
continuation lines, optionally preceded by a `Unix-from' header. The
header block is terminated either by the end of the input or by a
blank line.
_class is the class to instantiate for new message objects when they
must be created. This class must have a constructor that can take
zero arguments. Default is Message.Message.
"""
self
.
parser
=
Parser
(
*
args
,
**
kw
)
def
parse
(
self
,
fp
,
headersonly
=
False
):
"""Create a message structure from the data in a binary file.
Reads all the data from the file and returns the root of the message
structure. Optional headersonly is a flag specifying whether to stop
parsing after reading the headers or not. The default is False,
meaning it parses the entire contents of the file.
"""
fp
=
TextIOWrapper
(
fp
,
encoding
=
'ascii'
,
errors
=
'surrogateescape'
)
try
:
return
self
.
parser
.
parse
(
fp
,
headersonly
)
finally
:
fp
.
detach
()
def
parsebytes
(
self
,
text
,
headersonly
=
False
):
"""Create a message structure from a byte string.
Returns the root of the message structure. Optional headersonly is a
flag specifying whether to stop parsing after reading the headers or
not. The default is False, meaning it parses the entire contents of
the file.
"""
text
=
text
.
decode
(
'ASCII'
,
errors
=
'surrogateescape'
)
return
self
.
parser
.
parsestr
(
text
,
headersonly
)
class
BytesHeaderParser
(
BytesParser
):
def
parse
(
self
,
fp
,
headersonly
=
True
):
return
BytesParser
.
parse
(
self
,
fp
,
headersonly
=
True
)
def
parsebytes
(
self
,
text
,
headersonly
=
True
):
return
BytesParser
.
parsebytes
(
self
,
text
,
headersonly
=
True
)
Back
|
FazBrowse Home
|
New Git URL