You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
3 years ago
|
"""Tools for reading and writing PKG-INFO / METADATA without caring
|
||
|
about the encoding."""
|
||
|
|
||
|
from email.parser import Parser
|
||
|
|
||
|
try:
|
||
|
unicode
|
||
|
_PY3 = False
|
||
|
except NameError:
|
||
|
_PY3 = True
|
||
|
|
||
|
if not _PY3:
|
||
|
from email.generator import Generator
|
||
|
|
||
|
def read_pkg_info_bytes(bytestr):
|
||
|
return Parser().parsestr(bytestr)
|
||
|
|
||
|
def read_pkg_info(path):
|
||
|
with open(path, "r") as headers:
|
||
|
message = Parser().parse(headers)
|
||
|
return message
|
||
|
|
||
|
def write_pkg_info(path, message):
|
||
|
with open(path, 'w') as metadata:
|
||
|
Generator(metadata, mangle_from_=False, maxheaderlen=0).flatten(message)
|
||
|
else:
|
||
|
from email.generator import BytesGenerator
|
||
|
|
||
|
def read_pkg_info_bytes(bytestr):
|
||
|
headers = bytestr.decode(encoding="ascii", errors="surrogateescape")
|
||
|
message = Parser().parsestr(headers)
|
||
|
return message
|
||
|
|
||
|
def read_pkg_info(path):
|
||
|
with open(path, "r",
|
||
|
encoding="ascii",
|
||
|
errors="surrogateescape") as headers:
|
||
|
message = Parser().parse(headers)
|
||
|
return message
|
||
|
|
||
|
def write_pkg_info(path, message):
|
||
|
with open(path, "wb") as out:
|
||
|
BytesGenerator(out, mangle_from_=False, maxheaderlen=0).flatten(message)
|