diff options
author | Christian Heimes <cheimes@redhat.com> | 2015-07-01 13:15:30 +0200 |
---|---|---|
committer | Christian Heimes <cheimes@redhat.com> | 2015-07-10 10:35:54 +0200 |
commit | 597bf54f3e999867a3e42686b3063b169b52018c (patch) | |
tree | 30556ee484a2ff3eb931c92d0f0fad130f35aa72 | |
parent | fa302897b3e97d78b925e8ee763c822a1169f07a (diff) | |
download | pki-597bf54f3e999867a3e42686b3063b169b52018c.tar.gz pki-597bf54f3e999867a3e42686b3063b169b52018c.tar.xz pki-597bf54f3e999867a3e42686b3063b169b52018c.zip |
In-tree tests and linting with tox
Before the patch it wasn't possible to run pylint outside a RPM build.
The Python sources were split into common and server files in two
separate trees. With setup.py and tox the pki package can now be
installed and tested in a virtual env.
Tox enables developers to automate installation and testing in Python
virtual environment. The new tox.ini performs several tasks with one
command:
* It creates and installs a source distribution of pki packages and its
command line scripts
* It verifies that all CLI scripts can be execute (using its --help
argument).
* It runs pylint on all Python files and CLI scripts.
* It can run flake8 on all Python and CLI files (disabled for now).
* Finally it builds Sphinx autodocs.
I had to delay the root check in pkispawn and pkidestroy and modify two
files to get rid of Sphinx warnings.
https://fedorahosted.org/pki/ticket/696
http://tox.readthedocs.org
-rw-r--r-- | .gitignore | 3 | ||||
-rw-r--r-- | base/common/python/_static/.gitignore | 4 | ||||
-rw-r--r-- | base/common/python/pki/cert.py | 39 | ||||
-rwxr-xr-x | base/server/sbin/pkidestroy | 8 | ||||
-rwxr-xr-x | base/server/sbin/pkispawn | 8 | ||||
-rw-r--r-- | setup.py | 80 | ||||
-rw-r--r-- | tox.ini | 80 |
7 files changed, 194 insertions, 28 deletions
diff --git a/.gitignore b/.gitignore index d3b7a61be..d2ecc2f89 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ .metadata/ build/ tests/dogtag/dev_java_tests/bin/ +.tox +dist +MANIFEST diff --git a/base/common/python/_static/.gitignore b/base/common/python/_static/.gitignore new file mode 100644 index 000000000..5e7d2734c --- /dev/null +++ b/base/common/python/_static/.gitignore @@ -0,0 +1,4 @@ +# Ignore everything in this directory +* +# Except this file +!.gitignore diff --git a/base/common/python/pki/cert.py b/base/common/python/pki/cert.py index 1fe323f24..01d2a616b 100644 --- a/base/common/python/pki/cert.py +++ b/base/common/python/pki/cert.py @@ -1,26 +1,25 @@ #!/usr/bin/python -""" - 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; version 2 of the License. - 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. +# 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; version 2 of the License. +# +# 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Copyright (C) 2014 Red Hat, Inc. +# All rights reserved. +# +# Authors: +# Abhishek Koneru <akoneru@redhat.com> +# Ade Lee <alee@redhat.com> - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - Copyright (C) 2014 Red Hat, Inc. - All rights reserved. - -Authors: - Abhishek Koneru <akoneru@redhat.com> - Ade Lee <alee@redhat.com> - -""" import copy import json import types diff --git a/base/server/sbin/pkidestroy b/base/server/sbin/pkidestroy index c2eb91a5a..abc11dc8d 100755 --- a/base/server/sbin/pkidestroy +++ b/base/server/sbin/pkidestroy @@ -63,10 +63,6 @@ def main(argv): config.pki_deployment_executable = os.path.basename(argv[0]) - # Only run this program as "root". - if not os.geteuid() == 0: - sys.exit("'%s' must be run as root!" % argv[0]) - # Set the umask os.umask(config.PKI_DEPLOYMENT_DEFAULT_UMASK) @@ -130,6 +126,10 @@ def main(argv): interactive = False + # Only run this program as "root". + if not os.geteuid() == 0: + sys.exit("'%s' must be run as root!" % argv[0]) + while True: # -s <subsystem> diff --git a/base/server/sbin/pkispawn b/base/server/sbin/pkispawn index bebbf0b77..fb5a61a8f 100755 --- a/base/server/sbin/pkispawn +++ b/base/server/sbin/pkispawn @@ -66,10 +66,6 @@ def main(argv): config.pki_deployment_executable = os.path.basename(argv[0]) - # Only run this program as "root". - if not os.geteuid() == 0: - sys.exit("'%s' must be run as root!" % argv[0]) - # Set the umask os.umask(config.PKI_DEPLOYMENT_DEFAULT_UMASK) @@ -130,6 +126,10 @@ def main(argv): parser.indent = 0 print log.PKISPAWN_INTERACTIVE_INSTALLATION + # Only run this program as "root". + if not os.geteuid() == 0: + sys.exit("'%s' must be run as root!" % argv[0]) + while True: # -s <subsystem> if args.pki_subsystem is None: diff --git a/setup.py b/setup.py new file mode 100644 index 000000000..0d760c0ee --- /dev/null +++ b/setup.py @@ -0,0 +1,80 @@ +# Authors: +# Christian Heimes <cheimes@redhat.com> +# +# 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; version 2 of the License. +# +# 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# + +import os +from fnmatch import fnmatch +from distutils.core import setup + + +def find_upgrade(origroot, destroot): + upgrades = {} + for dirpath, dirnames, filenames in os.walk(origroot): + for filename in filenames: + if fnmatch(filename, '[0-9][0-9]-*'): + version = os.path.basename(dirpath) + orig = os.path.join(dirpath, filename) + dest = os.path.join(destroot, version) + upgrades.setdefault(dest, []).append(orig) + return upgrades + +upgrades = {} +upgrades.update(find_upgrade('base/common/upgrade', + 'share/pki/upgrade')) +upgrades.update(find_upgrade('base/server/upgrade', + 'share/pki/server/upgrade')) + +setup( + author='Dogtag Certificate System Team', + author_email='pki-devel@redhat.com', + name='Dogtag PKI', + version='10', + description='Dogtag Certificate System', + license='GPL', + keywords='pki', + url='http://pki.fedoraproject.org/', + package_dir={ + 'pki': 'base/common/python/pki', + 'pki.server': 'base/server/python/pki/server' + }, + packages=[ + 'pki', + 'pki.server', + 'pki.server.cli', + 'pki.server.deployment', + 'pki.server.deployment.scriptlets', + ], + scripts=[ + 'base/common/sbin/pki-upgrade', + 'base/server/sbin/pkidestroy', + 'base/server/sbin/pki-server', + 'base/server/sbin/pki-server-upgrade', + 'base/server/sbin/pkispawn', + 'base/java-tools/bin/pki', + ], + data_files=upgrades.items(), + classifiers=[ + 'Development Status :: 5 - Production/Stable', + 'Environment :: Web Environment', + 'Intended Audience :: System Administrators', + 'Operating System :: OS Independent', + 'Programming Language :: Python :: 2.7', + 'License :: OSI Approved :: GNU General Public License v2 (GPLv2)', + ], +) diff --git a/tox.ini b/tox.ini new file mode 100644 index 000000000..8b0c619c8 --- /dev/null +++ b/tox.ini @@ -0,0 +1,80 @@ +# Authors: +# Christian Heimes <cheimes@redhat.com> +# +# 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; version 2 of the License. +# +# 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# + +[tox] +envlist = py27,lint,docs + +[testenv] +# force installation of sphinx and lint in virtual env, otherwise +# the command pick up the `pki` package from the system's site packages. +install_command = pip install {opts} --force-reinstall --upgrade {packages} + +[testenv:py27] +sitepackages = True +commands = + python2.7 {envbindir}/pkidestroy --help + python2.7 {envbindir}/pkispawn --help + python2.7 {envbindir}/pki-server --help + python2.7 {envbindir}/pki-server-upgrade --help + python2.7 {envbindir}/pki-upgrade --help + +[testenv:lint] +basepython = python2.7 +sitepackages = True +deps = + pylint +commands = + pylint \ + {envsitepackagesdir}/pki \ + {envbindir}/pkidestroy \ + {envbindir}/pkispawn \ + {envbindir}/pki-server \ + {envbindir}/pki-server-upgrade \ + {envbindir}/pki-upgrade \ + {envbindir}/pki \ + --rcfile={toxinidir}/dogtag.pylintrc \ + {posargs} + +[testenv:pep8] +basepython = python2.7 +sitepackages = False +deps = + flake8 + # flake8-import-order + pep8-naming +commands = + flake8 {posargs} + +[testenv:docs] +basepython = python2.7 +sitepackages = True +changedir = base/common/python +deps = + sphinx < 1.3.0 +commands = + sphinx-build -v -W -b html -d {envtmpdir}/doctrees . {envtmpdir}/html + +[flake8] +exclude = .tox,*.egg,dist,build,conf.py,tests/* +include = *.py,pki-upgrade,pkidestroy,pki-server,pki-server-upgrade,pkispawn,pki +show-source = true +max-line-length = 99 +application-import-names = pki + |