| Viewing file:  _adapters.py (1.82 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
import reimport textwrap
 import email.message
 
 from ._text import FoldedCase
 
 
 class Message(email.message.Message):
 multiple_use_keys = set(
 map(
 FoldedCase,
 [
 'Classifier',
 'Obsoletes-Dist',
 'Platform',
 'Project-URL',
 'Provides-Dist',
 'Provides-Extra',
 'Requires-Dist',
 'Requires-External',
 'Supported-Platform',
 'Dynamic',
 ],
 )
 )
 """
 Keys that may be indicated multiple times per PEP 566.
 """
 
 def __new__(cls, orig: email.message.Message):
 res = super().__new__(cls)
 vars(res).update(vars(orig))
 return res
 
 def __init__(self, *args, **kwargs):
 self._headers = self._repair_headers()
 
 # suppress spurious error from mypy
 def __iter__(self):
 return super().__iter__()
 
 def _repair_headers(self):
 def redent(value):
 "Correct for RFC822 indentation"
 if not value or '\n' not in value:
 return value
 return textwrap.dedent(' ' * 8 + value)
 
 headers = [(key, redent(value)) for key, value in vars(self)['_headers']]
 if self._payload:
 headers.append(('Description', self.get_payload()))
 return headers
 
 @property
 def json(self):
 """
 Convert PackageMetadata to a JSON-compatible format
 per PEP 0566.
 """
 
 def transform(key):
 value = self.get_all(key) if key in self.multiple_use_keys else self[key]
 if key == 'Keywords':
 value = re.split(r'\s+', value)
 tk = key.lower().replace('-', '_')
 return tk, value
 
 return dict(map(transform, map(FoldedCase, self)))
 
 |