diff options
author | Yu-Jie Lin <livibetter@gmail.com> | 2013-08-11 22:53:30 +0800 |
---|---|---|
committer | Yu-Jie Lin <livibetter@gmail.com> | 2013-08-11 22:53:30 +0800 |
commit | 7a6a404de3c0cdc15d9511c1596837e444c4a040 (patch) | |
tree | 9c060e6868e4dbaf6c097eb6ab4ceb20a947784d /setup.py | |
parent | 4fb3b42252a8d4c596065de833b27eb9a006fc23 (diff) | |
download | smartypants-7a6a404de3c0cdc15d9511c1596837e444c4a040.tar.gz |
set up setup.py, COPYING, and hgignore
Diffstat (limited to 'setup.py')
-rwxr-xr-x | setup.py | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/setup.py b/setup.py new file mode 100755 index 0000000..6ccb5ad --- /dev/null +++ b/setup.py @@ -0,0 +1,227 @@ +#!/usr/bin/env python +# Copyright (C) 2013 by Yu-Jie Lin +# For detail license information, See COPYING + +from __future__ import print_function +from distutils.core import Command, setup +from unittest import TestLoader, TextTestRunner +import sys + +# scripts to be exculded from checking +EXCLUDE_SCRIPTS = () + +script_name = 'smartypants.py' + +# ============================================================================ + + +class cmd_test(Command): + + description = 'run tests' + user_options = [] + + def initialize_options(self): + + pass + + def finalize_options(self): + + pass + + def run(self): + + loader = TestLoader() + tests = loader.discover(start_dir='tests') + runner = TextTestRunner(verbosity=2) + runner.run(tests) + + +class cmd_pep8(Command): + + description = 'run pep8' + user_options = [] + + def initialize_options(self): + + pass + + def finalize_options(self): + + pass + + def run(self): + + try: + import pep8 + except ImportError: + print(('Cannot import pep8, you forgot to install?\n' + 'run `pip install pep8` to install.'), file=sys.stderr) + sys.exit(1) + + p8 = pep8.StyleGuide() + + # do not include code not written in b.py + p8.options.exclude += EXCLUDE_SCRIPTS + # ignore four-space indentation error + p8.options.ignore += () + + print() + print('Options') + print('=======') + print() + print('Exclude:', p8.options.exclude) + print('Ignore :', p8.options.ignore) + + print() + print('Results') + print('=======') + print() + report = p8.check_files('.') + + print() + print('Statistics') + print('==========') + print() + report.print_statistics() + print('%-7d Total errors and warnings' % report.get_count()) + + +class cmd_pyflakes(Command): + + description = 'run Pyflakes' + user_options = [] + + def initialize_options(self): + + pass + + def finalize_options(self): + + pass + + def run(self): + + try: + from pyflakes import api + from pyflakes import reporter as modReporter + except ImportError: + print(('Cannot import pyflakes, you forgot to install?\n' + 'run `pip install pyflakes` to install.'), file=sys.stderr) + sys.exit(1) + + from os.path import basename + + reporter = modReporter._makeDefaultReporter() + + # monkey patch for exclusion of pathes + api_iterSourceCode = api.iterSourceCode + + def _iterSourceCode(paths): + for path in api_iterSourceCode(paths): + if basename(path) not in EXCLUDE_SCRIPTS: + yield path + api.iterSourceCode = _iterSourceCode + + print() + print('Options') + print('=======') + print() + print('Exclude:', EXCLUDE_SCRIPTS) + + print() + print('Results') + print('=======') + print() + warnings = api.checkRecursive('.', reporter) + print() + print('Total warnings: %d' % warnings) + + +class cmd_pylint(Command): + + description = 'run Pylint' + user_options = [] + + def initialize_options(self): + + pass + + def finalize_options(self): + + pass + + def run(self): + + from glob import glob + try: + from pylint import lint + except ImportError: + print(('Cannot import pylint, you forgot to install?\n' + 'run `pip install pylint` to install.'), file=sys.stderr) + sys.exit(1) + + print() + print('Options') + print('=======') + print() + print('Exclude:', EXCLUDE_SCRIPTS) + + files = ['setup.py', script_name] + glob('tests/*.py') + args = [ + '--ignore=%s' % ','.join(EXCLUDE_SCRIPTS), + '--output-format=colorized', + '--include-ids=y', + '--indent-string=" "', + ] + files + print() + lint.Run(args) + +# ============================================================================ + +with open(script_name) as f: + meta = dict( + (k.strip(' _'), eval(v)) for k, v in + # There will be a '\n', with eval(), it's safe to ignore + (line.split('=') for line in f if line.startswith('__')) + ) + + # renaming meta-data keys + meta_renames = [ + ('website', 'url'), + ('email', 'author_email'), + ] + for old, new in meta_renames: + if old in meta: + meta[new] = meta[old] + del meta[old] + + # keep these + meta_keys = ['name', 'description', 'version', 'license', 'url', 'author', + 'author_email'] + meta = dict([m for m in meta.items() if m[0] in meta_keys]) + +classifiers = [ + 'Development Status :: 5 - Production/Stable', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: BSD License', + 'Operating System :: OS Independent', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 3', + 'Topic :: Text Processing :: Filters', +] + +setup_d = dict( + name='smartypants', + cmdclass={ + 'pep8': cmd_pep8, + 'pyflakes': cmd_pyflakes, + 'pylint': cmd_pylint, + 'test': cmd_test, + }, + classifiers=classifiers, + py_modules=['smartypants'], + **meta +) + +if __name__ == '__main__': + setup(**setup_d) |