[Python-checkins] distutils2: make sure 1.2 is picked when a 1.1 or 1.2 field is encoutered
tarek.ziade
python-checkins at python.org
Thu May 6 13:28:46 CEST 2010
tarek.ziade pushed 09e726d8a111 to distutils2:
http://hg.python.org/distutils2/rev/09e726d8a111
changeset: 125:09e726d8a111
user: Tarek Ziade <tarek at ziade.org>
date: Thu May 06 13:28:08 2010 +0200
summary: make sure 1.2 is picked when a 1.1 or 1.2 field is encoutered
files: src/distutils2/metadata.py, src/distutils2/tests/test_metadata.py
diff --git a/src/distutils2/metadata.py b/src/distutils2/metadata.py
--- a/src/distutils2/metadata.py
+++ b/src/distutils2/metadata.py
@@ -103,20 +103,44 @@
if marker in keys:
return True
return False
+
keys = fields.keys()
- is_1_1 = _has_marker(keys, _314_MARKERS)
- is_1_2 = _has_marker(keys, _345_MARKERS)
+ 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
+ for key in keys:
+ if key not in _241_FIELDS and '1.0' in possible_versions:
+ possible_versions.remove('1.0')
+ if key not in _314_FIELDS and '1.1' in possible_versions:
+ possible_versions.remove('1.1')
+ if key not in _345_FIELDS and '1.2' in possible_versions:
+ possible_versions.remove('1.2')
+
+ # possible_version contains qualified versions
+ if len(possible_versions) == 1:
+ return possible_versions[0] # found !
+ elif len(possible_versions) == 0:
+ raise MetadataConflictError('Unknown metadata set')
+
+ # let's see if one unique marker is found
+ is_1_1 = '1.1' in possible_versions and _has_marker(keys, _314_MARKERS)
+ is_1_2 = '1.2' in possible_versions and _has_marker(keys, _345_MARKERS)
if is_1_1 and is_1_2:
- raise MetadataConflictError('You used both 1.1 and 1.2 fields')
+ raise MetadataConflictError('You used incompatible 1.1 and 1.2 fields')
# we have the choice, either 1.0, or 1.2
# - 1.0 has a broken Summary field but work with all tools
# - 1.1 is to avoid
# - 1.2 fixes Summary but is not spreaded yet
if not is_1_1 and not is_1_2:
- return PKG_INFO_PREFERRED_VERSION
+ # we couldn't find any specific marker
+ if PKG_INFO_PREFERRED_VERSION in possible_versions:
+ return PKG_INFO_PREFERRED_VERSION
if is_1_1:
return '1.1'
+
+ # default marker when 1.0 is disqualified
return '1.2'
_ATTR2FIELD = {'metadata_version': 'Metadata-Version',
diff --git a/src/distutils2/tests/test_metadata.py b/src/distutils2/tests/test_metadata.py
--- a/src/distutils2/tests/test_metadata.py
+++ b/src/distutils2/tests/test_metadata.py
@@ -4,7 +4,8 @@
import sys
from StringIO import StringIO
-from distutils2.metadata import DistributionMetadata, _interpret
+from distutils2.metadata import (DistributionMetadata, _interpret,
+ PKG_INFO_PREFERRED_VERSION)
class DistributionMetadataTestCase(unittest2.TestCase):
@@ -200,6 +201,12 @@
self.assertEquals(missing, ['Name', 'Home-page'])
self.assertEquals(len(warnings), 2)
+ def test_best_choice(self):
+ metadata = DistributionMetadata()
+ metadata['Version'] = '1.0'
+ self.assertEquals(metadata.version, PKG_INFO_PREFERRED_VERSION)
+ metadata['Classifier'] = ['ok']
+ self.assertEquals(metadata.version, '1.2')
def test_suite():
return unittest2.makeSuite(DistributionMetadataTestCase)
--
Repository URL: http://hg.python.org/distutils2
More information about the Python-checkins
mailing list