#!/usr/bin/env python2 # Copyright 2014 Lars Wirzenius # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # =*= License: GPL-3+ =*= from distutils.core import setup, Extension from distutils.cmd import Command import glob import os import cliapp import distixlib class Check(Command): user_options = [ ('unit-tests', 'u', 'run unit tests?'), ('yarns', 'y', 'run yarn tests locally?'), ('pep8', '8', 'run pep8 on the source?'), ('pylint', 'l', 'run pylint on the source?'), ] def set_all_options(self, new_value): self.unit_tests = new_value self.yarns = new_value self.pep8 = new_value self.pylint = new_value def initialize_options(self): self.set_all_options(False) def finalize_options(self): any_set = ( self.unit_tests or self.yarns or self.pep8 or self.pylint) if not any_set: self.set_all_options(True) def run(self): try: if self.unit_tests: self.run_unit_tests() if self.yarns: self.run_yarns() if self.pep8 and self.command_is_available('pep8'): self.run_pep8() if self.pylint and self.command_is_available('pylint'): self.run_pylint() except cliapp.AppException: raise SystemExit(1) def run_unit_tests(self): cliapp.runcmd( ['python', '-m', 'CoverageTestRunner', '--ignore-missing-from=without-tests'], stdout=None, stderr=None) if os.path.exists('.coverage'): os.remove('.coverage') def run_yarns(self): cliapp.runcmd( ['yarn', '--shell=python2', '--shell-arg', '', '--shell-library=yarns/lib.py', '--cd-datadir'] + glob.glob('yarns/*.yarn'), stdout=None, stderr=None) def command_is_available(self, command_name): exit_code, stdout, stderr = cliapp.runcmd_unchecked( ['sh', '-c', 'command -v "$1"', '--', command_name]) return exit_code == 0 def run_pep8(self): cliapp.runcmd(['pep8', 'distixlib'], stdout=None, stderr=None) def run_pylint(self): cliapp.runcmd( ['pylint', '--rcfile=pylint.conf', 'distixlib'], stdout=None, stderr=None) setup(name='distix', version=distixlib.__version__, description='Distributed ticketing system', author='Lars Wirzenius', author_email='liw@liw.fi', url='http://liw.fi/distix/', scripts=['distix'], packages=['distixlib', 'distixlib.plugins'], package_data={ 'distixlib': ['templates/*', 'distix.css'], }, cmdclass={ 'check': Check, }, )