summaryrefslogtreecommitdiff
path: root/distutils2
diff options
context:
space:
mode:
authorTarek Ziade <tarek@ziade.org>2010-10-02 14:53:36 +0200
committerTarek Ziade <tarek@ziade.org>2010-10-02 14:53:36 +0200
commitaecc3b54d42e67251c449a4243e9945d9c1917e6 (patch)
tree77a96d30db0f8ccf05d24fe77404a7690adb98cd /distutils2
parentbe3b9c010c3143ad6ef3d0fc3035ea35f86e1399 (diff)
parent9e0c71db7a75bc1cd37f4299ede28006230d77e3 (diff)
downloaddisutils2-aecc3b54d42e67251c449a4243e9945d9c1917e6.tar.gz
merged
Diffstat (limited to 'distutils2')
-rw-r--r--distutils2/metadata.py31
1 files changed, 19 insertions, 12 deletions
diff --git a/distutils2/metadata.py b/distutils2/metadata.py
index 1049d8b..047912f 100644
--- a/distutils2/metadata.py
+++ b/distutils2/metadata.py
@@ -179,6 +179,7 @@ _ELEMENTSFIELD = ('Keywords',)
_UNICODEFIELDS = ('Author', 'Maintainer', 'Summary', 'Description')
+_MISSING = object()
class DistributionMetadata(object):
"""The metadata of a release.
@@ -228,9 +229,17 @@ class DistributionMetadata(object):
return self.set(name, value)
def __delitem__(self, name):
- del self._fields[name]
+ field_name = self._convert_name(name)
+ try:
+ del self._fields[field_name]
+ except KeyError:
+ raise KeyError(name)
self._set_best_version()
+ def __contains__(self, name):
+ return (name in self._fields or
+ self._convert_name(name) in self._fields)
+
def _convert_name(self, name):
if name in _ALL_FIELDS:
return name
@@ -305,7 +314,7 @@ class DistributionMetadata(object):
else:
# single line
value = msg[field]
- if value is not None:
+ if value is not None and value != 'UNKNOWN':
self.set(field, value)
def write(self, filepath):
@@ -376,7 +385,7 @@ class DistributionMetadata(object):
if isinstance(value, str):
value = [value]
else:
- value = None
+ value = []
if name in _PREDICATE_FIELDS and value is not None:
for v in value:
@@ -402,11 +411,13 @@ class DistributionMetadata(object):
self._fields[name] = value
self._set_best_version()
- def get(self, name):
+ def get(self, name, default=_MISSING):
"""Get a metadata field."""
name = self._convert_name(name)
if name not in self._fields:
- return self._default_value(name)
+ if default is _MISSING:
+ default = self._default_value(name)
+ return default
if name in _UNICODEFIELDS:
value = self._fields[name]
return self._encode_field(value)
@@ -442,8 +453,7 @@ class DistributionMetadata(object):
# XXX should check the versions (if the file was loaded)
missing, warnings = [], []
for attr in ('Name', 'Version', 'Home-page'):
- value = self[attr]
- if value == 'UNKNOWN':
+ if attr not in self:
missing.append(attr)
if _HAS_DOCUTILS:
@@ -463,11 +473,8 @@ class DistributionMetadata(object):
(_VERSIONS_FIELDS, is_valid_versions),
(_VERSION_FIELDS, is_valid_version)):
for field in fields:
- value = self[field]
- if value == 'UNKNOWN':
- continue
-
- if not controller(value):
+ value = self.get(field, None)
+ if value is not None and not controller(value):
warnings.append('Wrong value for %r: %s' % (field, value))
return missing, warnings