|
"""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) |
|
|