diff --git a/MANIFEST.in b/MANIFEST.in index 9e43ffabac..b6939a4531 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,12 +4,13 @@ include README.rst include openstack-common.conf include run_tests.py include run_tests.sh +include setup.cfg include setup.py include TODO include tox.ini include etc/* graft bin -graft docs +graft doc graft tests graft tools recursive-include keystone *.json *.xml *.cfg README diff --git a/docs/Makefile b/doc/Makefile similarity index 100% rename from docs/Makefile rename to doc/Makefile diff --git a/docs/keystone_compat_flows.sdx b/doc/keystone_compat_flows.sdx similarity index 100% rename from docs/keystone_compat_flows.sdx rename to doc/keystone_compat_flows.sdx diff --git a/docs/source/_templates/.placeholder b/doc/source/_templates/.placeholder similarity index 100% rename from docs/source/_templates/.placeholder rename to doc/source/_templates/.placeholder diff --git a/docs/source/_theme/layout.html b/doc/source/_theme/layout.html similarity index 100% rename from docs/source/_theme/layout.html rename to doc/source/_theme/layout.html diff --git a/docs/source/_theme/theme.conf b/doc/source/_theme/theme.conf similarity index 100% rename from docs/source/_theme/theme.conf rename to doc/source/_theme/theme.conf diff --git a/docs/source/api_curl_examples.rst b/doc/source/api_curl_examples.rst similarity index 100% rename from docs/source/api_curl_examples.rst rename to doc/source/api_curl_examples.rst diff --git a/docs/source/architecture.rst b/doc/source/architecture.rst similarity index 100% rename from docs/source/architecture.rst rename to doc/source/architecture.rst diff --git a/docs/source/community.rst b/doc/source/community.rst similarity index 100% rename from docs/source/community.rst rename to doc/source/community.rst diff --git a/docs/source/conf.py b/doc/source/conf.py similarity index 100% rename from docs/source/conf.py rename to doc/source/conf.py diff --git a/docs/source/configuration.rst b/doc/source/configuration.rst similarity index 100% rename from docs/source/configuration.rst rename to doc/source/configuration.rst diff --git a/docs/source/configuringservices.rst b/doc/source/configuringservices.rst similarity index 100% rename from docs/source/configuringservices.rst rename to doc/source/configuringservices.rst diff --git a/docs/source/developing.rst b/doc/source/developing.rst similarity index 100% rename from docs/source/developing.rst rename to doc/source/developing.rst diff --git a/docs/source/images/authComp.svg b/doc/source/images/authComp.svg similarity index 100% rename from docs/source/images/authComp.svg rename to doc/source/images/authComp.svg diff --git a/docs/source/images/graphs_305.svg b/doc/source/images/graphs_305.svg similarity index 100% rename from docs/source/images/graphs_305.svg rename to doc/source/images/graphs_305.svg diff --git a/docs/source/images/graphs_authComp.svg b/doc/source/images/graphs_authComp.svg similarity index 100% rename from docs/source/images/graphs_authComp.svg rename to doc/source/images/graphs_authComp.svg diff --git a/docs/source/images/graphs_authCompDelegate.svg b/doc/source/images/graphs_authCompDelegate.svg similarity index 100% rename from docs/source/images/graphs_authCompDelegate.svg rename to doc/source/images/graphs_authCompDelegate.svg diff --git a/docs/source/images/graphs_both.svg b/doc/source/images/graphs_both.svg similarity index 100% rename from docs/source/images/graphs_both.svg rename to doc/source/images/graphs_both.svg diff --git a/docs/source/images/graphs_delegate_forbiden_basic.svg b/doc/source/images/graphs_delegate_forbiden_basic.svg similarity index 100% rename from docs/source/images/graphs_delegate_forbiden_basic.svg rename to doc/source/images/graphs_delegate_forbiden_basic.svg diff --git a/docs/source/images/graphs_delegate_forbiden_proxy.svg b/doc/source/images/graphs_delegate_forbiden_proxy.svg similarity index 100% rename from docs/source/images/graphs_delegate_forbiden_proxy.svg rename to doc/source/images/graphs_delegate_forbiden_proxy.svg diff --git a/docs/source/images/graphs_delegate_reject_basic.svg b/doc/source/images/graphs_delegate_reject_basic.svg similarity index 100% rename from docs/source/images/graphs_delegate_reject_basic.svg rename to doc/source/images/graphs_delegate_reject_basic.svg diff --git a/docs/source/images/graphs_delegate_reject_oauth.svg b/doc/source/images/graphs_delegate_reject_oauth.svg similarity index 100% rename from docs/source/images/graphs_delegate_reject_oauth.svg rename to doc/source/images/graphs_delegate_reject_oauth.svg diff --git a/docs/source/images/graphs_delegate_unimplemented.svg b/doc/source/images/graphs_delegate_unimplemented.svg similarity index 100% rename from docs/source/images/graphs_delegate_unimplemented.svg rename to doc/source/images/graphs_delegate_unimplemented.svg diff --git a/docs/source/images/graphs_mapper.svg b/doc/source/images/graphs_mapper.svg similarity index 100% rename from docs/source/images/graphs_mapper.svg rename to doc/source/images/graphs_mapper.svg diff --git a/docs/source/images/graphs_proxyAuth.svg b/doc/source/images/graphs_proxyAuth.svg similarity index 100% rename from docs/source/images/graphs_proxyAuth.svg rename to doc/source/images/graphs_proxyAuth.svg diff --git a/docs/source/images/images_layouts.svg b/doc/source/images/images_layouts.svg similarity index 100% rename from docs/source/images/images_layouts.svg rename to doc/source/images/images_layouts.svg diff --git a/docs/source/index.rst b/doc/source/index.rst similarity index 100% rename from docs/source/index.rst rename to doc/source/index.rst diff --git a/docs/source/man/keystone-all.rst b/doc/source/man/keystone-all.rst similarity index 100% rename from docs/source/man/keystone-all.rst rename to doc/source/man/keystone-all.rst diff --git a/docs/source/man/keystone-manage.rst b/doc/source/man/keystone-manage.rst similarity index 100% rename from docs/source/man/keystone-manage.rst rename to doc/source/man/keystone-manage.rst diff --git a/docs/source/middleware_architecture.rst b/doc/source/middleware_architecture.rst similarity index 100% rename from docs/source/middleware_architecture.rst rename to doc/source/middleware_architecture.rst diff --git a/docs/source/nova-api-paste.rst b/doc/source/nova-api-paste.rst similarity index 100% rename from docs/source/nova-api-paste.rst rename to doc/source/nova-api-paste.rst diff --git a/docs/source/old/backends.rst b/doc/source/old/backends.rst similarity index 100% rename from docs/source/old/backends.rst rename to doc/source/old/backends.rst diff --git a/docs/source/old/controllingservers.rst b/doc/source/old/controllingservers.rst similarity index 100% rename from docs/source/old/controllingservers.rst rename to doc/source/old/controllingservers.rst diff --git a/docs/source/old/endpoints.rst b/doc/source/old/endpoints.rst similarity index 100% rename from docs/source/old/endpoints.rst rename to doc/source/old/endpoints.rst diff --git a/docs/source/old/extensions.rst b/doc/source/old/extensions.rst similarity index 100% rename from docs/source/old/extensions.rst rename to doc/source/old/extensions.rst diff --git a/docs/source/old/middleware.rst b/doc/source/old/middleware.rst similarity index 100% rename from docs/source/old/middleware.rst rename to doc/source/old/middleware.rst diff --git a/docs/source/old/migration.rst b/doc/source/old/migration.rst similarity index 100% rename from docs/source/old/migration.rst rename to doc/source/old/migration.rst diff --git a/docs/source/old/releases.rst b/doc/source/old/releases.rst similarity index 100% rename from docs/source/old/releases.rst rename to doc/source/old/releases.rst diff --git a/docs/source/old/services.rst b/doc/source/old/services.rst similarity index 100% rename from docs/source/old/services.rst rename to doc/source/old/services.rst diff --git a/docs/source/old/ssl.rst b/doc/source/old/ssl.rst similarity index 100% rename from docs/source/old/ssl.rst rename to doc/source/old/ssl.rst diff --git a/docs/source/setup.rst b/doc/source/setup.rst similarity index 99% rename from docs/source/setup.rst rename to doc/source/setup.rst index 06303039d0..e18e5d6ef6 100644 --- a/docs/source/setup.rst +++ b/doc/source/setup.rst @@ -124,7 +124,7 @@ into your system from the requires files:: $ pip install -r tools/pip-requires # Install the dependencies for developing, testing, and running keystone - $ pip install -r tools/pip-requires-test + $ pip install -r tools/test-requires # Fake-install the project by symlinking Keystone into your Python site-packages $ python setup.py develop diff --git a/docs/source/static/basic.css b/doc/source/static/basic.css similarity index 100% rename from docs/source/static/basic.css rename to doc/source/static/basic.css diff --git a/docs/source/static/default.css b/doc/source/static/default.css similarity index 100% rename from docs/source/static/default.css rename to doc/source/static/default.css diff --git a/docs/source/static/jquery.tweet.js b/doc/source/static/jquery.tweet.js similarity index 100% rename from docs/source/static/jquery.tweet.js rename to doc/source/static/jquery.tweet.js diff --git a/docs/source/static/tweaks.css b/doc/source/static/tweaks.css similarity index 100% rename from docs/source/static/tweaks.css rename to doc/source/static/tweaks.css diff --git a/keystone/openstack/common/cfg.py b/keystone/openstack/common/cfg.py index e92a574acf..51c72ecd20 100644 --- a/keystone/openstack/common/cfg.py +++ b/keystone/openstack/common/cfg.py @@ -1,6 +1,5 @@ # vim: tabstop=4 shiftwidth=4 softtabstop=4 -# Copyright 2012 OpenStack, LLC # Copyright 2011 Red Hat, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); you may diff --git a/keystone/openstack/common/setup.py b/keystone/openstack/common/setup.py new file mode 100644 index 0000000000..9eabfcca3f --- /dev/null +++ b/keystone/openstack/common/setup.py @@ -0,0 +1,127 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2011 OpenStack LLC. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Utilities with minimum-depends for use in setup.py +""" + +import os +import re +import subprocess + + +def parse_mailmap(mailmap='.mailmap'): + mapping = {} + if os.path.exists(mailmap): + fp = open(mailmap, 'r') + for l in fp: + l = l.strip() + if not l.startswith('#') and ' ' in l: + canonical_email, alias = l.split(' ') + mapping[alias] = canonical_email + return mapping + + +def canonicalize_emails(changelog, mapping): + """ Takes in a string and an email alias mapping and replaces all + instances of the aliases in the string with their real email + """ + for alias, email in mapping.iteritems(): + changelog = changelog.replace(alias, email) + return changelog + + +# Get requirements from the first file that exists +def get_reqs_from_files(requirements_files): + reqs_in = [] + for requirements_file in requirements_files: + if os.path.exists(requirements_file): + return open(requirements_file, 'r').read().split('\n') + return [] + + +def parse_requirements(requirements_files=['requirements.txt', + 'tools/pip-requires']): + requirements = [] + for line in get_reqs_from_files(requirements_files): + if re.match(r'\s*-e\s+', line): + requirements.append(re.sub(r'\s*-e\s+.*#egg=(.*)$', r'\1', + line)) + elif re.match(r'\s*-f\s+', line): + pass + else: + requirements.append(line) + + return requirements + + +def parse_dependency_links(requirements_files=['requirements.txt', + 'tools/pip-requires']): + dependency_links = [] + for line in get_reqs_from_files(requirements_files): + if re.match(r'(\s*#)|(\s*$)', line): + continue + if re.match(r'\s*-[ef]\s+', line): + dependency_links.append(re.sub(r'\s*-[ef]\s+', '', line)) + return dependency_links + + +def write_requirements(): + venv = os.environ.get('VIRTUAL_ENV', None) + if venv is not None: + with open("requirements.txt", "w") as req_file: + output = subprocess.Popen(["pip", "-E", venv, "freeze", "-l"], + stdout=subprocess.PIPE) + requirements = output.communicate()[0].strip() + req_file.write(requirements) + + +def _run_shell_command(cmd): + output = subprocess.Popen(["/bin/sh", "-c", cmd], + stdout=subprocess.PIPE) + return output.communicate()[0].strip() + + +def write_vcsversion(location): + """ Produce a vcsversion dict that mimics the old one produced by bzr + """ + if os.path.isdir('.git'): + branch_nick_cmd = 'git branch | grep -Ei "\* (.*)" | cut -f2 -d" "' + branch_nick = _run_shell_command(branch_nick_cmd) + revid_cmd = "git rev-parse HEAD" + revid = _run_shell_command(revid_cmd).split()[0] + revno_cmd = "git log --oneline | wc -l" + revno = _run_shell_command(revno_cmd) + with open(location, 'w') as version_file: + version_file.write(""" +# This file is automatically generated by setup.py, So don't edit it. :) +version_info = { + 'branch_nick': '%s', + 'revision_id': '%s', + 'revno': %s +} +""" % (branch_nick, revid, revno)) + + +def write_git_changelog(): + """ Write a changelog based on the git changelog """ + if os.path.isdir('.git'): + git_log_cmd = 'git log --stat' + changelog = _run_shell_command(git_log_cmd) + mailmap = parse_mailmap() + with open("ChangeLog", "w") as changelog_file: + changelog_file.write(canonicalize_emails(changelog, mailmap)) diff --git a/openstack-common.conf b/openstack-common.conf index db2171c1e0..ee37ffd215 100644 --- a/openstack-common.conf +++ b/openstack-common.conf @@ -1,7 +1,7 @@ [DEFAULT] # The list of modules to copy from openstack-common -modules=cfg +modules=cfg,setup # The base module to hold the copy of openstack.common base=keystone diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000000..9e9481623a --- /dev/null +++ b/setup.cfg @@ -0,0 +1,21 @@ +[egg_info] +tag_build = +tag_date = 0 +tag_svn_revision = 0 + +[build_sphinx] +all_files = 1 +build-dir = doc/build +source-dir = doc/source + +[nosetests] +# NOTE(jkoelker) To run the test suite under nose install the following +# coverage http://pypi.python.org/pypi/coverage +# tissue http://pypi.python.org/pypi/tissue (pep8 checker) +# openstack-nose https://github.com/jkoelker/openstack-nose +verbosity=2 +detailed-errors=1 +with-openstack=1 +openstack-red=0.05 +openstack-yellow=0.025 +openstack-show-elapsed=1 diff --git a/setup.py b/setup.py index 343f165d89..b9f6f02588 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,57 @@ -from setuptools import setup, find_packages +# vim: tabstop=4 shiftwidth=4 softtabstop=4 +# Copyright 2012 OpenStack, LLC +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from setuptools import find_packages +from setuptools.command.sdist import sdist +from setuptools import setup + +from keystone.openstack.common.setup import parse_requirements +from keystone.openstack.common.setup import parse_dependency_links +from keystone.openstack.common.setup import write_requirements +from keystone.openstack.common.setup import write_git_changelog + + +class local_sdist(sdist): + """Customized sdist hook - builds the ChangeLog file from VC first""" + def run(self): + write_git_changelog() + sdist.run(self) +cmdclass = {'sdist': local_sdist} + + +try: + from sphinx.setup_command import BuildDoc + + class local_BuildDoc(BuildDoc): + def run(self): + for builder in ['html', 'man']: + self.builder = builder + self.finalize_options() + BuildDoc.run(self) + cmdclass['build_sphinx'] = local_BuildDoc + +except: + pass + + +requires = parse_requirements() +depend_links = parse_dependency_links() + +write_requirements() setup(name='keystone', version='2012.1', @@ -8,9 +60,12 @@ setup(name='keystone', author='OpenStack, LLC.', author_email='openstack@lists.launchpad.net', url='http://www.openstack.org', + cmdclass=cmdclass, packages=find_packages(exclude=['test', 'bin']), include_package_data=True, scripts=['bin/keystone-all', 'bin/keystone-manage'], zip_safe=False, - install_requires=['setuptools'], + install_requires=requires, + dependency_links=depend_links, + test_suite='nose.collector', )