commit b788389acce5ea0dd1fcbf16bc4f402d5229491f Author: Monty Taylor Date: Wed Jun 27 16:00:03 2012 -0700 Initial import. diff --git a/README.rst b/README.rst new file mode 100644 index 0000000000..af4405f22a --- /dev/null +++ b/README.rst @@ -0,0 +1,11 @@ +Global dependencies for OpenStack Projects + +To use this, run: + + python update.py path/to/project + +Entries in tools/pip-requires and tools/test-requires +will have their versions updated to match the entires +listed here. Any entries in the target project which +do not first exist here will be removed. No entries +will be added. diff --git a/tools/pip-requires b/tools/pip-requires new file mode 100644 index 0000000000..e1da8db5d8 --- /dev/null +++ b/tools/pip-requires @@ -0,0 +1,58 @@ +Babel>=0.9.6 # precise=0.9.6,oneiric=0.9.6 +BeautifulSoup>=3.2,<3.3 # precise=3.2.0,oneiric=3.2.0 +Cheetah>=2.4.4,<2.4.5 # precise=2.4.4,oneiric=2.4.4 +Django>=1.4,<1.5 # needs to be packaged for ubuntu +MySQL-python>=1.2.3,<1.2.4 # precise=1.2.3,oneiric=1.2.3 +Paste>=1.7.5.1,<1.7.6 # precise=1.7.5.1,oneiric=1.7.5.1 +PasteDeploy>=1.5.0,<1.5.1 # precise=1.5.0,oneiric=1.5.0 +PasteScript>=1.7.3,<1.7.6 # precise=1.7.5.1,oneiric=1.7.3 +SQLAlchemy>=0.7.3,<0.8 # precise=0.7.4,oneiric=0.6.8 +WebOb>=1.0.8,<1.2 # precise=1.1,oneiric=1.0.8 +amqplib>=1.0.0 # precise=1.0.0,oneiric=1.0.0 +anyjson>=0.3.1,<0.3.2 # precise=0.3.1,oneiric=0.3.1 +argparse>=1.1,<2 # precise=1.1,oneiric=1.1 +boto>=2.0,<2.3 # precise=2.2.2,oneiric=2.0 +carrot>=0.10.7,<0.10.8 # precise=0.10.7,oneiric=0.10.7 +cliff>=1.0,<2.0 # needs to be pacakged for ubuntu +configobj>=4.7.1,<4.7.3 # precise=4.7.2,oneiric=4.7.2 +django-openstack-auth +django-compressor +eventlet>=0.9.15,<0.9.17 # precise=0.6.16,oneiric=0.9.15 +factory_boy # needs to be packaged for ubuntu +feedparser>=5.0.1,<5.2 # precise=5.1,oneiric=5.0.1 +greenlet>=0.3.1,<0.4 # precise=0.3.1,oneiric=0.3.1 +glance>=2011.3.1 +httplib2>=0.7.2 # precise=0.7.2,oneiric=0.7.2 +iso8601>=0.1.4 # precise==0.1.4,oneiric=0.1.4 +jsonschema # need to be packaged for ubuntu +kombu>=1.0.4,<1.4.4 # precise==1.4.3,oneiric=1.0.4 +lockfile>=0.8,<0.9 # precise=0.8,oneiric=0.8 +lxml>=2.3,<2.4 # precise=2.3.2,oneiric=2.3 +netaddr>=0.7.5,<0.8 # precise=0.7.5,oneiric=0.7.5 +netifaces>=0.5,<0.7 # precise=0.6,oneiric=0.5 +numpy>=1.5.1,<1.6.2 # precise=1.6.1,oneiric=1.5.1 +pam==0.1.4 # needs to be packaged for ubuntu +paramiko>=1.7.7.1 # precise=1.7.7.1,oneiric=1.7.7.1 +passlib>=1.5.2,<1.6 # precise=1.5.3,oneiric=1.5.2 +prettytable>=0.6,0.7 # precise=0.5,oneiric=0.5 +py-bcrypt>=0.1,<0.2 # precise=0.1,oneiric=0.1 +pycrypto>=2.3 # precise=2.4.1,oneiric=2.3 +pysendfile==2.0.0 # needs to be packaged for ubuntu +pysqlite>=2.6.3,<2.6.4 # precise=2.6.3,oneiric=2.6.3 +python-cloudfiles +python-daemon>=1.5.5,<1.5.6 # precise=1.5.5,oneiric=1.5.5 +python-dateutil>=1.4.1,<1.6 # precise=1.5,oneiric=1.4.1 +python-gflags>=1.5.1,<1.6 # precise=1.5.1,oneiric=1.5.1 +python-glanceclient +python-keystoneclient +python-novaclient +python-swiftclient +python-warlock # needs to be packaged for ubuntu +pyyaml>=3.10 # precise=3.10,oneiric=3.10 +routes>=1.12.3,<1.13 # precise=1.12.3,oneiric=1.12.3 +simplejson>=2.1.6,<2.4 # precise=2.3.2,oneiric=2.1.6 +sqlalchemy-migrate>=0.7.1,<0.8 # precise=0.7.2,oneiric=0.7.1 +suds>=0.4,<0.5 # precise=0.4.1,oneiric=0.4.1 +tempita>=0.5.1,<0.5.2 # precise=0.5.1,oneiric=0.5.1 +wsgiref>=0.1.2,<0.1.3 # in python>=2.6 +xattr>=0.6 # precise=0.6.2,oneiric=0.6 diff --git a/tools/test-requires b/tools/test-requires new file mode 100644 index 0000000000..e5137d3291 --- /dev/null +++ b/tools/test-requires @@ -0,0 +1,26 @@ +Babel>=0.9.6 # precise=0.9.6,oneiric=0.9.6 +MySQL-python>=1.2.3,<1.2.4 # precise=1.2.3,oneiric=1.2.3 +Sphinx>=1.1.2 # required to build documentation +coverage # computes code coverage percentages +distribute>=0.6.24 # precise=0.6.24,oneiric=0.6.16 +django-nose>=0.1.2 # precise=0.1.3,oneiric=0.1.2 +eventlet>=0.9.15,<0.9.17 # precise=0.6.16,oneiric=0.9.15 +httplib2>=0.7.2 # precise=0.7.2,oneiric=0.7.2 +iso8601>=0.1.4 # precise==0.1.4,oneiric=0.1.4 +mock>=0.7.1 # precise=0.7.2,oneiric=0.7.1 +mox>=0.5.3 # precise=0.5.3,oneiric=0.5.3 +netaddr>=0.7.5,<0.8 # precise=0.7.5,oneiric=0.7.5 +netifaces>=0.5,<0.7 # precise=0.6,oneiric=0.5 +nose # for test discovery and console feedback +nose-exclude # needs to be packaged for ubuntu +nosexcover>=1.0.7 # precise=1.0.7 +openstack.nose_plugin>=0.7 +prettytable>=0.5 # precise=0.5,oneiric=0.5 +python-keystoneclient +python-ldap==2.3.13 # authenticate against an existing LDAP server +python-memcached +requests>=0.5.0 # precise=0.8.2,oneiric=0.5.0 +selenium # needs to be packaged for ubuntu +setuptools_git>=0.4 # needs to be packaged for ubuntu +unittest2 # precise=0.5.1,oneiric=0.5.1 backport of unittest lib in python 2.7 +webtest # precise=1.3.3,oneiric=1.2.3 test wsgi apps without starting an http server diff --git a/update.py b/update.py new file mode 100644 index 0000000000..9ab3aa4af9 --- /dev/null +++ b/update.py @@ -0,0 +1,94 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2012 OpenStack, LLC +# +# 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. + +r""" +A simple script to update the requirements files from a global set of +allowable requirements. + +The script can be called like this: + + $> python update.py ../myproj + +Any requirements listed in the target files will have their versions +updated to match the global requirements. Requirements not in the global +files will be dropped. +""" + +import os +import os.path +import sys + +from pip import req + + +def _mod_to_path(mod): + return os.path.join(*mod.split('.')) + + +def _dest_path(path, base, dest_dir): + return os.path.join(dest_dir, _mod_to_path(base), path) + + +def _parse_reqs(filename): + + reqs = dict() + + pip_requires = open(filename, "r").readlines() + for pip in pip_requires: + pip = pip.strip() + if pip.startswith("#") or len(pip) == 0: + continue + install_require = req.InstallRequirement.from_line(pip) + if install_require.editable: + reqs[pip] = pip + elif install_require.url: + reqs[pip] = pip + else: + reqs[install_require.req.key] = pip + return reqs + + +def _copy_requires(req, dest_dir): + """Copy requirements files.""" + + dest_path = _dest_path(req, 'tools', dest_dir) + source_path = os.path.join('tools', req) + + source_reqs = _parse_reqs(source_path) + dest_reqs = _parse_reqs(dest_path) + dest_keys = [key.lower() for key in dest_reqs.keys()] + dest_keys.sort() + + print "Syncing %s" % req + with open(dest_path, 'w') as new_reqs: + new_reqs.write("# This file is managed by openstack-depends\n") + for old_require in dest_keys: + # Special cases: + # versions of our stuff from tarballs.openstack.org are ok + # projects need to align pep8 version on their own time + if old_require in source_reqs or \ + "http://tarballs.openstack.org" in old_require: + new_reqs.write("%s\n" % source_reqs[old_require]) + if "pep8" in old_require: + new_reqs.write("%s\n" % dest_reqs[old_require]) + +def main(argv): + for req in ('pip-requires', 'test-requires'): + _copy_requires(req, argv[0]) + + +if __name__ == "__main__": + main(sys.argv[1:])