diff options
| author | ?ric Araujo <merwok@netwok.org> | 2012-05-21 16:54:12 -0400 |
|---|---|---|
| committer | ?ric Araujo <merwok@netwok.org> | 2012-05-21 16:54:12 -0400 |
| commit | ee6fb9f7f0863a1d0020d57f224947f7b795df6d (patch) | |
| tree | b8d155316b2f697621264a83a0ef2ef2802c6859 /distutils2/metadata.py | |
| parent | c57cf8ba29e0b51e614cac580413a183061834d5 (diff) | |
| parent | 1ed1781f2170be33392c3056f239766b1b1c6a58 (diff) | |
| download | disutils2-ee6fb9f7f0863a1d0020d57f224947f7b795df6d.tar.gz | |
Merge default
Diffstat (limited to 'distutils2/metadata.py')
| -rw-r--r-- | distutils2/metadata.py | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/distutils2/metadata.py b/distutils2/metadata.py index 00be03b..efcfe32 100644 --- a/distutils2/metadata.py +++ b/distutils2/metadata.py @@ -34,6 +34,8 @@ try: def system_message(self, level, message, *children, **kwargs): self.messages.append((level, message, children, kwargs)) + return nodes.system_message(message, level=level, type=self. + levels[level], *children, **kwargs) _HAS_DOCUTILS = True except ImportError: @@ -48,7 +50,7 @@ PKG_INFO_ENCODING = 'utf-8' # preferred version. Hopefully will be changed # to 1.2 once PEP 345 is supported everywhere -PKG_INFO_PREFERRED_VERSION = '1.0' +PKG_INFO_PREFERRED_VERSION = '1.1' _LINE_PREFIX = re.compile('\n \|') _241_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', @@ -101,7 +103,12 @@ def _best_version(fields): return True return False - keys = list(fields) + keys = [] + for key, value in fields.items(): + if value in ([], 'UNKNOWN', None): + continue + keys.append(key) + possible_versions = ['1.0', '1.1', '1.2'] # first let's try to see if a field is not part of one of the version @@ -214,8 +221,9 @@ class Metadata: self.read_file(fileobj) elif mapping is not None: self.update(mapping) + self.set_metadata_version() - def _set_best_version(self): + def set_metadata_version(self): self._fields['Metadata-Version'] = _best_version(self._fields) def _write_field(self, file, name, value): @@ -233,7 +241,6 @@ class Metadata: del self._fields[field_name] except KeyError: raise KeyError(name) - self._set_best_version() def __contains__(self, name): return (name in self._fields or @@ -332,6 +339,7 @@ class Metadata: value = msg[field] if value is not None and value != 'UNKNOWN': self.set(field, value) + self.set_metadata_version() def write(self, filepath): """Write the metadata fields to filepath.""" @@ -340,7 +348,8 @@ class Metadata: def write_file(self, fileobject): """Write the PKG-INFO format data to a file object.""" - self._set_best_version() + self.set_metadata_version() + for field in _version2fieldlist(self['Metadata-Version']): values = self.get(field) if field in _ELEMENTSFIELD: @@ -367,14 +376,6 @@ class Metadata: Keys that don't match a metadata field or that have an empty value are dropped. """ - # XXX the code should just use self.set, which does tbe same checks and - # conversions already, but that would break packaging.pypi: it uses the - # update method, which does not call _set_best_version (which set - # does), and thus allows having a Metadata object (as long as you don't - # modify or write it) with extra fields from PyPI that are not fields - # defined in Metadata PEPs. to solve it, the best_version system - # should be reworked so that it's called only for writing, or in a new - # strict mode, or with a new, more lax Metadata subclass in p7g.pypi def _set(key, value): if key in _ATTR2FIELD and value: self.set(self._convert_name(key), value) @@ -435,7 +436,6 @@ class Metadata: value = self._remove_line_prefix(value) self._fields[name] = value - self._set_best_version() def get(self, name, default=_MISSING): """Get a metadata field.""" @@ -475,8 +475,10 @@ class Metadata: return value def check(self, strict=False, restructuredtext=False): - """Check if the metadata is compliant. If strict is False then raise if + """Check if the metadata is compliant. If strict is True then raise if no Name or Version are provided""" + self.set_metadata_version() + # XXX should check the versions (if the file was loaded) missing, warnings = [], [] @@ -521,6 +523,7 @@ class Metadata: Field names will be converted to use the underscore-lowercase style instead of hyphen-mixed case (i.e. home_page instead of Home-page). """ + self.set_metadata_version() data = { 'metadata_version': self['Metadata-Version'], 'name': self['Name'], |
