From 185348345fdc0f0a410489f83b8ba59a8b6b831f Mon Sep 17 00:00:00 2001 From: Ask Solem Date: Thu, 21 Jun 2012 15:53:36 +0100 Subject: [PATCH] setup.py now takes reqs from requirements/ --- requirements/default.txt | 2 +- requirements/test-py25.txt | 1 + requirements/test.txt | 2 +- setup.py | 116 ++++++++++++++++++++++--------------- 4 files changed, 72 insertions(+), 49 deletions(-) create mode 100644 requirements/test-py25.txt diff --git a/requirements/default.txt b/requirements/default.txt index 93036d70..0998592b 100644 --- a/requirements/default.txt +++ b/requirements/default.txt @@ -1,2 +1,2 @@ -anyjson>=0.3.1 +anyjson>=0.3.2 amqplib>=1.0.2 diff --git a/requirements/test-py25.txt b/requirements/test-py25.txt new file mode 100644 index 00000000..322630ee --- /dev/null +++ b/requirements/test-py25.txt @@ -0,0 +1 @@ +simplejson diff --git a/requirements/test.txt b/requirements/test.txt index 2c80d83a..a509e3ff 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -2,7 +2,7 @@ nose nose-cover3 unittest2>=0.5.0 coverage>=3.0 -mock>=0.7.0 +mock==dev simplejson PyYAML==3.09 # 3.10 dropped 2.4 support msgpack-python==0.1.6 # 0.1.7 dropped 2.4 support diff --git a/setup.py b/setup.py index 84d61c2d..a1f4c748 100644 --- a/setup.py +++ b/setup.py @@ -3,20 +3,14 @@ import os import sys import codecs -import platform extra = {} -tests_require = ["nose", "nose-cover3"] -if sys.version_info >= (3, 0): +is_py3k = sys.version_info[0] == 3 +if is_py3k: extra.update(use_2to3=True) -elif sys.version_info <= (2, 6): - tests_require.append("unittest2") -elif sys.version_info <= (2, 5): - tests_require.append("simplejson") - if sys.version_info < (2, 4): - raise Exception("Kombu requires Python 2.4 or higher.") + raise Exception('Kombu requires Python 2.4 or higher.') try: from setuptools import setup @@ -32,24 +26,25 @@ re_vers = re.compile(r'VERSION\s*=\s*\((.*?)\)') re_doc = re.compile(r'^"""(.+?)"""') rq = lambda s: s.strip("\"'") + def add_default(m): attr_name, attr_value = m.groups() return ((attr_name, rq(attr_value)), ) def add_version(m): - v = list(map(rq, m.groups()[0].split(", "))) - return (("VERSION", ".".join(v[0:3]) + "".join(v[3:])), ) + v = list(map(rq, m.groups()[0].split(', '))) + return (('VERSION', '.'.join(v[0:3]) + ''.join(v[3:])), ) def add_doc(m): - return (("doc", m.groups()[0]), ) + return (('doc', m.groups()[0]), ) pats = {re_meta: add_default, re_vers: add_version, re_doc: add_doc} here = os.path.abspath(os.path.dirname(__file__)) -meta_fh = open(os.path.join(here, "kombu/__init__.py")) +meta_fh = open(os.path.join(here, 'kombu/__init__.py')) try: meta = {} for line in meta_fh: @@ -67,7 +62,7 @@ packages, data_files = [], [] root_dir = os.path.dirname(__file__) if root_dir != '': os.chdir(root_dir) -src_dir = "kombu" +src_dir = 'kombu' def fullsplit(path, result=None): @@ -87,55 +82,82 @@ for scheme in list(INSTALL_SCHEMES.values()): for dirpath, dirnames, filenames in os.walk(src_dir): # Ignore dirnames that start with '.' for i, dirname in enumerate(dirnames): - if dirname.startswith("."): + if dirname.startswith('.'): del dirnames[i] for filename in filenames: - if filename.endswith(".py"): + if filename.endswith('.py'): packages.append('.'.join(fullsplit(dirpath))) else: data_files.append([dirpath, [os.path.join(dirpath, f) for f in filenames]]) -if os.path.exists("README.rst"): - long_description = codecs.open('README.rst', "r", "utf-8").read() +if os.path.exists('README.rst'): + long_description = codecs.open('README.rst', 'r', 'utf-8').read() else: - long_description = "See http://pypi.python.org/pypi/kombu" + long_description = 'See http://pypi.python.org/pypi/kombu' + +# -*- Installation Requires -*- +py_version = sys.version_info +is_jython = sys.platform.startswith('java') +is_pypy = hasattr(sys, 'pypy_version_info') + + +def strip_comments(l): + return l.split('#', 1)[0].strip() + + +def reqs(f): + return filter(None, [strip_comments(l) for l in open( + os.path.join(os.getcwd(), 'requirements', f)).readlines()]) + +install_requires = reqs('default.txt') + +# -*- Tests Requires -*- + +if is_py3k: + tests_require = reqs('test-py3k.txt') +elif is_jython: + tests_require = reqs('test-jython.txt') +elif is_pypy: + tests_require = reqs('test-pypy.txt') +else: + tests_require = reqs('test.txt') + +if py_version[0:2] == (2, 5): + tests_require.extend('test-py25.txt') setup( name='kombu', - version=meta["VERSION"], - description=meta["doc"], - author=meta["author"], - author_email=meta["contact"], - url=meta["homepage"], - platforms=["any"], + version=meta['VERSION'], + description=meta['doc'], + author=meta['author'], + author_email=meta['contact'], + url=meta['homepage'], + platforms=['any'], packages=packages, data_files=data_files, zip_safe=False, - test_suite="nose.collector", - install_requires=[ - "anyjson>=0.3.1", - "amqplib>=1.0.2", - ], + test_suite='nose.collector', + install_requires=install_requires, tests_require=tests_require, classifiers=[ - "Development Status :: 5 - Production/Stable", - "License :: OSI Approved :: BSD License", - "Operating System :: OS Independent", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 2.7", - "Programming Language :: Python :: 2.6", - "Programming Language :: Python :: 2.5", - "Programming Language :: Python :: 2", - "Programming Language :: Python :: Implementation :: CPython", - "Programming Language :: Python :: Implementation :: PyPy", - "Programming Language :: Python :: Implementation :: Jython", - "Intended Audience :: Developers", - "Topic :: Communications", - "Topic :: System :: Distributed Computing", - "Topic :: System :: Networking", - "Topic :: Software Development :: Libraries :: Python Modules", + 'Development Status :: 5 - Production/Stable', + 'License :: OSI Approved :: BSD License', + 'Operating System :: OS Independent', + 'Programming Language :: Python', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 2.6', + 'Programming Language :: Python :: 2.5', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: Implementation :: CPython', + 'Programming Language :: Python :: Implementation :: PyPy', + 'Programming Language :: Python :: Implementation :: Jython', + 'Intended Audience :: Developers', + 'Topic :: Communications', + 'Topic :: System :: Distributed Computing', + 'Topic :: System :: Networking', + 'Topic :: Software Development :: Libraries :: Python Modules', ], long_description=long_description, **extra)