[Python-checkins] distutils2: added support for more metadata and files
tarek.ziade
python-checkins at python.org
Fri Oct 1 23:36:37 CEST 2010
tarek.ziade pushed c7e47ada3eec to distutils2:
http://hg.python.org/distutils2/rev/c7e47ada3eec
changeset: 691:c7e47ada3eec
tag: tip
user: Tarek Ziade <tarek at ziade.org>
date: Fri Oct 01 23:36:27 2010 +0200
summary: added support for more metadata and files
files: distutils2/config.py, distutils2/metadata.py, distutils2/tests/test_config.py
diff --git a/distutils2/config.py b/distutils2/config.py
--- a/distutils2/config.py
+++ b/distutils2/config.py
@@ -75,16 +75,58 @@
# XXX
return value
+ def _multiline(self, value):
+ if '\n' in value:
+ value = [v for v in
+ [v.strip() for v in value.split('\n')]
+ if v != '']
+ return value
+
def _read_metadata(self, parser):
if parser.has_option('global', 'setup_hook'):
self.setup_hook = parser.get('global', 'setup_hook')
metadata = self.dist.metadata
+
# setting the metadata values
if 'metadata' in parser.sections():
for key, value in parser.items('metadata'):
+ key = key.replace('_', '-')
+ value = self._multiline(value)
+ if key == 'project-url':
+ value = [(label.strip(), url.strip())
+ for label, url in
+ [v.split(',') for v in value]]
if metadata.is_metadata_field(key):
metadata[key] = self._convert_metadata(key, value)
+ if 'files' in parser.sections():
+ files = dict([(key, self._multiline(value))
+ for key, value in parser.items('files')])
+ self.dist.packages = files.get('packages', [])
+ self.dist.py_modules = files.get('py_modules', [])
+ if isinstance(self.dist.py_modules, str):
+ self.dist.py_modules = [self.dist.py_modules]
+ self.dist.scripts = files.get('scripts', [])
+
+ self.dist.package_data = {}
+ for data in files.get('package_data', []):
+ data = data.split('=')
+ if len(data) != 2:
+ continue
+ key, value = data
+ self.dist.package_data[key.strip()] = value.strip()
+
+ self.dist.data_files = []
+ for data in files.get('data_files', []):
+ data = data.split('=')
+ if len(data) != 2:
+ continue
+ key, value = data
+ values = [v.strip() for v in value.split(',')]
+ self.dist.data_files.append((key, values))
+
+ # manifest template
+ # XXX see later
def parse_config_files(self, filenames=None):
if filenames is None:
diff --git a/distutils2/metadata.py b/distutils2/metadata.py
--- a/distutils2/metadata.py
+++ b/distutils2/metadata.py
@@ -368,7 +368,7 @@
if ((name in _ELEMENTSFIELD or name == 'Platform') and
not isinstance(value, (list, tuple))):
if isinstance(value, str):
- value = value.split(',')
+ value = [v.strip() for v in value.split(',')]
else:
value = []
elif (name in _LISTFIELDS and
diff --git a/distutils2/tests/test_config.py b/distutils2/tests/test_config.py
--- a/distutils2/tests/test_config.py
+++ b/distutils2/tests/test_config.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf8 -*-
"""Tests for distutils.config."""
import sys
import os
@@ -9,9 +10,67 @@
SETUP_CFG = """
[metadata]
-version = 1.0
-author = tarek
-author_email = tarek at ziade.org
+name = RestingParrot
+version = 0.6.4
+author = Carl Meyer
+author_email = carl at oddbird.net
+maintainer = Ãric Araujo
+maintainer_email = merwok at netwok.org
+summary = A sample project demonstrating distutils2 packaging
+description = README
+keywords = distutils2, packaging, sample project
+
+classifier =
+ Development Status :: 4 - Beta
+ Environment :: Console (Text Based)
+ Environment :: X11 Applications :: GTK; python_version < '3'
+ License :: OSI Approved :: MIT License
+ Programming Language :: Python
+ Programming Language :: Python :: 2
+ Programming Language :: Python :: 3
+
+requires_python = >=2.4, <3.2
+
+requires_dist =
+ PetShoppe
+ MichaelPalin (> 1.1)
+ pywin32; sys.platform == 'win32'
+ pysqlite2; python_version < '2.5'
+ inotify (0.0.1); sys.platform == 'linux2'
+
+requires_external = libxml2
+
+provides_dist = distutils2-sample-project (0.2)
+ unittest2-sample-project
+
+project_url =
+ Main repository, http://bitbucket.org/carljm/sample-distutils2-project
+ Fork in progress, http://bitbucket.org/Merwok/sample-distutils2-project
+
+[files]
+packages = one
+ two
+ three
+py_modules = haven
+
+scripts =
+ script1.py
+ scripts/find-coconuts
+ bin/taunt
+
+package_data =
+ cheese = data/templates/*
+
+data_files =
+ bitmaps = bm/b1.gif, bm/b2.gif
+ config = cfg/data.cfg
+ /etc/init.d = init-script
+
+# Replaces MANIFEST.in
+sdist_extra =
+ include THANKS HACKING
+ recursive-include examples *.txt *.py
+ prune examples/sample?/build
"""
class ConfigTestCase(support.TempdirManager,
@@ -39,9 +98,45 @@
sys.argv[:] = old_args
# check what was done
- self.assertEqual(dist.metadata['Author'], 'tarek')
- self.assertEqual(dist.metadata['Author-Email'], 'tarek at ziade.org')
- self.assertEqual(dist.metadata['Version'], '1.0')
+ self.assertEqual(dist.metadata['Author'], 'Carl Meyer')
+ self.assertEqual(dist.metadata['Author-Email'], 'carl at oddbird.net')
+ self.assertEqual(dist.metadata['Version'], '0.6.4')
+
+ wanted = ['Development Status :: 4 - Beta',
+ 'Environment :: Console (Text Based)',
+ "Environment :: X11 Applications :: GTK; python_version < '3'",
+ 'License :: OSI Approved :: MIT License',
+ 'Programming Language :: Python',
+ 'Programming Language :: Python :: 2',
+ 'Programming Language :: Python :: 3']
+ self.assertEqual(dist.metadata['Classifier'], wanted)
+
+ wanted = ['distutils2', 'packaging', 'sample project']
+ self.assertEqual(dist.metadata['Keywords'], wanted)
+
+ self.assertEqual(dist.metadata['Requires-Python'], '>=2.4, <3.2')
+
+ wanted = ['PetShoppe',
+ 'MichaelPalin (> 1.1)',
+ "pywin32; sys.platform == 'win32'",
+ "pysqlite2; python_version < '2.5'",
+ "inotify (0.0.1); sys.platform == 'linux2'"]
+
+ self.assertEqual(dist.metadata['Requires-Dist'], wanted)
+ urls = [('Main repository',
+ 'http://bitbucket.org/carljm/sample-distutils2-project'),
+ ('Fork in progress',
+ 'http://bitbucket.org/Merwok/sample-distutils2-project')]
+ self.assertEqual(dist.metadata['Project-Url'], urls)
+
+
+ self.assertEqual(dist.packages, ['one', 'two', 'three'])
+ self.assertEqual(dist.py_modules, ['haven'])
+ self.assertEqual(dist.package_data, {'cheese': 'data/templates/*'})
+ self.assertEqual(dist.data_files,
+ [('bitmaps ', ['bm/b1.gif', 'bm/b2.gif']),
+ ('config ', ['cfg/data.cfg']),
+ ('/etc/init.d ', ['init-script'])])
def test_suite():
--
Repository URL: http://hg.python.org/distutils2
More information about the Python-checkins
mailing list