__init__.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. # Copyright (C) 2001-2006 Python Software Foundation
  2. # Author: Barry Warsaw
  3. # Contact: email-sig@python.org
  4. """A package for parsing, handling, and generating email messages."""
  5. __version__ = '4.0.3'
  6. __all__ = [
  7. # Old names
  8. 'base64MIME',
  9. 'Charset',
  10. 'Encoders',
  11. 'Errors',
  12. 'Generator',
  13. 'Header',
  14. 'Iterators',
  15. 'Message',
  16. 'MIMEAudio',
  17. 'MIMEBase',
  18. 'MIMEImage',
  19. 'MIMEMessage',
  20. 'MIMEMultipart',
  21. 'MIMENonMultipart',
  22. 'MIMEText',
  23. 'Parser',
  24. 'quopriMIME',
  25. 'Utils',
  26. 'message_from_string',
  27. 'message_from_file',
  28. # new names
  29. 'base64mime',
  30. 'charset',
  31. 'encoders',
  32. 'errors',
  33. 'generator',
  34. 'header',
  35. 'iterators',
  36. 'message',
  37. 'mime',
  38. 'parser',
  39. 'quoprimime',
  40. 'utils',
  41. ]
  42. # Some convenience routines. Don't import Parser and Message as side-effects
  43. # of importing email since those cascadingly import most of the rest of the
  44. # email package.
  45. def message_from_string(s, *args, **kws):
  46. """Parse a string into a Message object model.
  47. Optional _class and strict are passed to the Parser constructor.
  48. """
  49. from email.parser import Parser
  50. return Parser(*args, **kws).parsestr(s)
  51. def message_from_file(fp, *args, **kws):
  52. """Read a file and parse its contents into a Message object model.
  53. Optional _class and strict are passed to the Parser constructor.
  54. """
  55. from email.parser import Parser
  56. return Parser(*args, **kws).parse(fp)
  57. # Lazy loading to provide name mapping from new-style names (PEP 8 compatible
  58. # email 4.0 module names), to old-style names (email 3.0 module names).
  59. import sys
  60. class LazyImporter(object):
  61. def __init__(self, module_name):
  62. self.__name__ = 'email.' + module_name
  63. def __getattr__(self, name):
  64. __import__(self.__name__)
  65. mod = sys.modules[self.__name__]
  66. self.__dict__.update(mod.__dict__)
  67. return getattr(mod, name)
  68. _LOWERNAMES = [
  69. # email.<old name> -> email.<new name is lowercased old name>
  70. 'Charset',
  71. 'Encoders',
  72. 'Errors',
  73. 'FeedParser',
  74. 'Generator',
  75. 'Header',
  76. 'Iterators',
  77. 'Message',
  78. 'Parser',
  79. 'Utils',
  80. 'base64MIME',
  81. 'quopriMIME',
  82. ]
  83. _MIMENAMES = [
  84. # email.MIME<old name> -> email.mime.<new name is lowercased old name>
  85. 'Audio',
  86. 'Base',
  87. 'Image',
  88. 'Message',
  89. 'Multipart',
  90. 'NonMultipart',
  91. 'Text',
  92. ]
  93. for _name in _LOWERNAMES:
  94. importer = LazyImporter(_name.lower())
  95. sys.modules['email.' + _name] = importer
  96. setattr(sys.modules['email'], _name, importer)
  97. import email.mime
  98. for _name in _MIMENAMES:
  99. importer = LazyImporter('mime.' + _name.lower())
  100. sys.modules['email.MIME' + _name] = importer
  101. setattr(sys.modules['email'], 'MIME' + _name, importer)
  102. setattr(sys.modules['email.mime'], _name, importer)