diff --git a/setup.py b/setup.py index 703b181..8fb6579 100644 --- a/setup.py +++ b/setup.py @@ -1,17 +1,49 @@ #!/usr/bin/env python +import io import os import sys from codecs import open +from shutil import rmtree -from setuptools import setup +from setuptools import setup, Command + +here = os.path.abspath(os.path.dirname(__file__)) +with io.open(os.path.join(here, 'README.rst'), encoding='utf-8') as f: + long_description = '\n' + f.read() -if sys.argv[-1] == 'publish': - os.system('python setup.py register') - os.system('python setup.py sdist upload') - os.system('python setup.py bdist_wheel upload --universal') - sys.exit() +class PublishCommand(Command): + """Support setup.py publish.""" + + description = 'Build and publish the package.' + user_options = [] + + @staticmethod + def status(s): + """Prints things in bold.""" + print('\033[1m{0}\033[0m'.format(s)) + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + try: + self.status('Removing previous builds…') + rmtree(os.path.join(here, 'dist')) + except FileNotFoundError: + pass + + self.status('Building Source and Wheel (universal) distribution…') + os.system('{0} setup.py sdist bdist_wheel --universal'.format(sys.executable)) + + self.status('Uploading the package to PyPi via Twine…') + os.system('twine upload dist/*') + + sys.exit() requires = ['SQLAlchemy', 'tablib', 'docopt'] version = '0.5.2' @@ -37,6 +69,9 @@ setup( install_requires=requires, extras_require={ 'pandas': ['tablib[pandas]'], + 'pg': ['psycopg2'], + 'redshift': ['sqlalchemy-redshift', 'psychopg2'] + # TODO: Add the rest. }, license='ISC', zip_safe=False, @@ -53,5 +88,8 @@ setup( 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: Implementation :: CPython', - ) + ), + cmdclass={ + 'publish': PublishCommand, + } )