summaryrefslogtreecommitdiff
path: root/setup.py
diff options
context:
space:
mode:
authorYu-Jie Lin <livibetter@gmail.com>2013-08-11 22:53:30 +0800
committerYu-Jie Lin <livibetter@gmail.com>2013-08-11 22:53:30 +0800
commit7a6a404de3c0cdc15d9511c1596837e444c4a040 (patch)
tree9c060e6868e4dbaf6c097eb6ab4ceb20a947784d /setup.py
parent4fb3b42252a8d4c596065de833b27eb9a006fc23 (diff)
downloadsmartypants-7a6a404de3c0cdc15d9511c1596837e444c4a040.tar.gz
set up setup.py, COPYING, and hgignore
Diffstat (limited to 'setup.py')
-rwxr-xr-xsetup.py227
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)