|
7 | 7 | __revision__ = "$Id$" |
8 | 8 |
|
9 | 9 | import sys, os, re |
| 10 | +from email import message_from_file |
10 | 11 |
|
11 | 12 | try: |
12 | 13 | import warnings |
@@ -1014,25 +1015,80 @@ class DistributionMetadata: |
1014 | 1015 | "provides", "requires", "obsoletes", |
1015 | 1016 | ) |
1016 | 1017 |
|
1017 | | - def __init__ (self): |
1018 | | - self.name = None |
1019 | | - self.version = None |
1020 | | - self.author = None |
1021 | | - self.author_email = None |
| 1018 | + def __init__(self, path=None): |
| 1019 | + if path is not None: |
| 1020 | + self.read_pkg_file(open(path)) |
| 1021 | + else: |
| 1022 | + self.name = None |
| 1023 | + self.version = None |
| 1024 | + self.author = None |
| 1025 | + self.author_email = None |
| 1026 | + self.maintainer = None |
| 1027 | + self.maintainer_email = None |
| 1028 | + self.url = None |
| 1029 | + self.license = None |
| 1030 | + self.description = None |
| 1031 | + self.long_description = None |
| 1032 | + self.keywords = None |
| 1033 | + self.platforms = None |
| 1034 | + self.classifiers = None |
| 1035 | + self.download_url = None |
| 1036 | + # PEP 314 |
| 1037 | + self.provides = None |
| 1038 | + self.requires = None |
| 1039 | + self.obsoletes = None |
| 1040 | + |
| 1041 | + def read_pkg_file(self, file): |
| 1042 | + """Reads the metadata values from a file object.""" |
| 1043 | + msg = message_from_file(file) |
| 1044 | + |
| 1045 | + def _read_field(name): |
| 1046 | + value = msg[name] |
| 1047 | + if value == 'UNKNOWN': |
| 1048 | + return None |
| 1049 | + return value |
| 1050 | + |
| 1051 | + def _read_list(name): |
| 1052 | + values = msg.get_all(name, None) |
| 1053 | + if values == []: |
| 1054 | + return None |
| 1055 | + return values |
| 1056 | + |
| 1057 | + metadata_version = msg['metadata-version'] |
| 1058 | + self.name = _read_field('name') |
| 1059 | + self.version = _read_field('version') |
| 1060 | + self.description = _read_field('summary') |
| 1061 | + # we are filling author only. |
| 1062 | + self.author = _read_field('author') |
1022 | 1063 | self.maintainer = None |
| 1064 | + self.author_email = _read_field('author-email') |
1023 | 1065 | self.maintainer_email = None |
1024 | | - self.url = None |
1025 | | - self.license = None |
1026 | | - self.description = None |
1027 | | - self.long_description = None |
1028 | | - self.keywords = None |
1029 | | - self.platforms = None |
1030 | | - self.classifiers = None |
1031 | | - self.download_url = None |
1032 | | - # PEP 314 |
1033 | | - self.provides = None |
1034 | | - self.requires = None |
1035 | | - self.obsoletes = None |
| 1066 | + self.url = _read_field('home-page') |
| 1067 | + self.license = _read_field('license') |
| 1068 | + |
| 1069 | + if 'download-url' in msg: |
| 1070 | + self.download_url = _read_field('download-url') |
| 1071 | + else: |
| 1072 | + self.download_url = None |
| 1073 | + |
| 1074 | + self.long_description = _read_field('description') |
| 1075 | + self.description = _read_field('summary') |
| 1076 | + |
| 1077 | + if 'keywords' in msg: |
| 1078 | + self.keywords = _read_field('keywords').split(',') |
| 1079 | + |
| 1080 | + self.platforms = _read_list('platform') |
| 1081 | + self.classifiers = _read_list('classifier') |
| 1082 | + |
| 1083 | + # PEP 314 - these fields only exist in 1.1 |
| 1084 | + if metadata_version == '1.1': |
| 1085 | + self.requires = _read_list('requires') |
| 1086 | + self.provides = _read_list('provides') |
| 1087 | + self.obsoletes = _read_list('obsoletes') |
| 1088 | + else: |
| 1089 | + self.requires = None |
| 1090 | + self.provides = None |
| 1091 | + self.obsoletes = None |
1036 | 1092 |
|
1037 | 1093 | def write_pkg_info(self, base_dir): |
1038 | 1094 | """Write the PKG-INFO file into the release tree. |
|
0 commit comments