summaryrefslogtreecommitdiff
path: root/distutils2/metadata.py
diff options
context:
space:
mode:
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
commitee6fb9f7f0863a1d0020d57f224947f7b795df6d (patch)
treeb8d155316b2f697621264a83a0ef2ef2802c6859 /distutils2/metadata.py
parentc57cf8ba29e0b51e614cac580413a183061834d5 (diff)
parent1ed1781f2170be33392c3056f239766b1b1c6a58 (diff)
downloaddisutils2-ee6fb9f7f0863a1d0020d57f224947f7b795df6d.tar.gz
Merge default
Diffstat (limited to 'distutils2/metadata.py')
-rw-r--r--distutils2/metadata.py33
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'],