Repository: libcloud Updated Branches: refs/heads/trunk df93d65f6 -> 32558b522
http://git-wip-us.apache.org/repos/asf/libcloud/blob/8afcda91/apache-libcloud-1.0.0rc2/libcloud/test/test_utils.py ---------------------------------------------------------------------- diff --git a/apache-libcloud-1.0.0rc2/libcloud/test/test_utils.py b/apache-libcloud-1.0.0rc2/libcloud/test/test_utils.py deleted file mode 100644 index 4c1b6c0..0000000 --- a/apache-libcloud-1.0.0rc2/libcloud/test/test_utils.py +++ /dev/null @@ -1,385 +0,0 @@ -# -*- coding: utf-8 -*- -# Licensed to the Apache Software Foundation (ASF) under one or more§ -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You 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. - -import sys -import socket -import codecs -import unittest -import warnings -import os.path - -from itertools import chain - -# In Python > 2.7 DeprecationWarnings are disabled by default -warnings.simplefilter('default') - -import libcloud.utils.files - -from libcloud.utils.misc import get_driver, set_driver - -from libcloud.utils.py3 import PY3 -from libcloud.utils.py3 import StringIO -from libcloud.utils.py3 import b -from libcloud.utils.py3 import bchr -from libcloud.utils.py3 import hexadigits -from libcloud.utils.py3 import urlquote -from libcloud.compute.types import Provider -from libcloud.compute.providers import DRIVERS -from libcloud.utils.misc import get_secure_random_string -from libcloud.utils.networking import is_public_subnet -from libcloud.utils.networking import is_private_subnet -from libcloud.utils.networking import is_valid_ip_address -from libcloud.utils.networking import join_ipv4_segments -from libcloud.utils.networking import increment_ipv4_segments -from libcloud.storage.drivers.dummy import DummyIterator - - -WARNINGS_BUFFER = [] - -if PY3: - from io import FileIO as file - - -def show_warning(msg, cat, fname, lno, line=None): - WARNINGS_BUFFER.append((msg, cat, fname, lno)) - -original_func = warnings.showwarning - - -class TestUtils(unittest.TestCase): - def setUp(self): - global WARNINGS_BUFFER - WARNINGS_BUFFER = [] - - def tearDown(self): - global WARNINGS_BUFFER - WARNINGS_BUFFER = [] - warnings.showwarning = original_func - - def test_guess_file_mime_type(self): - file_path = os.path.abspath(__file__) - mimetype, encoding = libcloud.utils.files.guess_file_mime_type( - file_path=file_path) - - self.assertTrue(mimetype.find('python') != -1) - - def test_get_driver(self): - driver = get_driver(drivers=DRIVERS, provider=Provider.DUMMY) - self.assertTrue(driver is not None) - - try: - driver = get_driver(drivers=DRIVERS, provider='fooba') - except AttributeError: - pass - else: - self.fail('Invalid provider, but an exception was not thrown') - - def test_set_driver(self): - # Set an existing driver - try: - driver = set_driver(DRIVERS, Provider.DUMMY, - 'libcloud.storage.drivers.dummy', - 'DummyStorageDriver') - except AttributeError: - pass - - # Register a new driver - driver = set_driver(DRIVERS, 'testingset', - 'libcloud.storage.drivers.dummy', - 'DummyStorageDriver') - - self.assertTrue(driver is not None) - - # Register it again - try: - set_driver(DRIVERS, 'testingset', - 'libcloud.storage.drivers.dummy', - 'DummyStorageDriver') - except AttributeError: - pass - - # Register an invalid module - try: - set_driver(DRIVERS, 'testingnew', - 'libcloud.storage.drivers.dummy1', - 'DummyStorageDriver') - except ImportError: - pass - - # Register an invalid class - try: - set_driver(DRIVERS, 'testingnew', - 'libcloud.storage.drivers.dummy', - 'DummyStorageDriver1') - except AttributeError: - pass - - def test_deprecated_warning(self): - warnings.showwarning = show_warning - - libcloud.utils.SHOW_DEPRECATION_WARNING = False - self.assertEqual(len(WARNINGS_BUFFER), 0) - libcloud.utils.deprecated_warning('test_module') - self.assertEqual(len(WARNINGS_BUFFER), 0) - - libcloud.utils.SHOW_DEPRECATION_WARNING = True - self.assertEqual(len(WARNINGS_BUFFER), 0) - libcloud.utils.deprecated_warning('test_module') - self.assertEqual(len(WARNINGS_BUFFER), 1) - - def test_in_development_warning(self): - warnings.showwarning = show_warning - - libcloud.utils.SHOW_IN_DEVELOPMENT_WARNING = False - self.assertEqual(len(WARNINGS_BUFFER), 0) - libcloud.utils.in_development_warning('test_module') - self.assertEqual(len(WARNINGS_BUFFER), 0) - - libcloud.utils.SHOW_IN_DEVELOPMENT_WARNING = True - self.assertEqual(len(WARNINGS_BUFFER), 0) - libcloud.utils.in_development_warning('test_module') - self.assertEqual(len(WARNINGS_BUFFER), 1) - - def test_read_in_chunks_iterator_no_data(self): - iterator = DummyIterator() - generator1 = libcloud.utils.files.read_in_chunks(iterator=iterator, - yield_empty=False) - generator2 = libcloud.utils.files.read_in_chunks(iterator=iterator, - yield_empty=True) - - # yield_empty=False - count = 0 - for data in generator1: - count += 1 - self.assertEqual(data, b('')) - - self.assertEqual(count, 0) - - # yield_empty=True - count = 0 - for data in generator2: - count += 1 - self.assertEqual(data, b('')) - - self.assertEqual(count, 1) - - def test_read_in_chunks_iterator(self): - def iterator(): - for x in range(0, 1000): - yield 'aa' - - for result in libcloud.utils.files.read_in_chunks(iterator(), - chunk_size=10, - fill_size=False): - self.assertEqual(result, b('aa')) - - for result in libcloud.utils.files.read_in_chunks(iterator(), chunk_size=10, - fill_size=True): - self.assertEqual(result, b('aaaaaaaaaa')) - - def test_read_in_chunks_filelike(self): - class FakeFile(file): - def __init__(self): - self.remaining = 500 - - def read(self, size): - self.remaining -= 1 - if self.remaining == 0: - return '' - return 'b' * (size + 1) - - for index, result in enumerate(libcloud.utils.files.read_in_chunks( - FakeFile(), chunk_size=10, - fill_size=False)): - self.assertEqual(result, b('b' * 11)) - - self.assertEqual(index, 498) - - for index, result in enumerate(libcloud.utils.files.read_in_chunks( - FakeFile(), chunk_size=10, - fill_size=True)): - if index != 548: - self.assertEqual(result, b('b' * 10)) - else: - self.assertEqual(result, b('b' * 9)) - - self.assertEqual(index, 548) - - def test_exhaust_iterator(self): - def iterator_func(): - for x in range(0, 1000): - yield 'aa' - - data = b('aa' * 1000) - iterator = libcloud.utils.files.read_in_chunks(iterator=iterator_func()) - result = libcloud.utils.files.exhaust_iterator(iterator=iterator) - self.assertEqual(result, data) - - result = libcloud.utils.files.exhaust_iterator(iterator=iterator_func()) - self.assertEqual(result, data) - - data = '12345678990' - iterator = StringIO(data) - result = libcloud.utils.files.exhaust_iterator(iterator=iterator) - self.assertEqual(result, b(data)) - - def test_exhaust_iterator_empty_iterator(self): - data = '' - iterator = StringIO(data) - result = libcloud.utils.files.exhaust_iterator(iterator=iterator) - self.assertEqual(result, b(data)) - - def test_unicode_urlquote(self): - # Regression tests for LIBCLOUD-429 - if PY3: - # Note: this is a unicode literal - val = '\xe9' - else: - val = codecs.unicode_escape_decode('\xe9')[0] - - uri = urlquote(val) - self.assertEqual(b(uri), b('%C3%A9')) - - # Unicode without unicode characters - uri = urlquote('~abc') - self.assertEqual(b(uri), b('%7Eabc')) - - # Already-encoded bytestring without unicode characters - uri = urlquote(b('~abc')) - self.assertEqual(b(uri), b('%7Eabc')) - - def test_get_secure_random_string(self): - for i in range(1, 500): - value = get_secure_random_string(size=i) - self.assertEqual(len(value), i) - - def test_hexadigits(self): - self.assertEqual(hexadigits(b('')), []) - self.assertEqual(hexadigits(b('a')), ['61']) - self.assertEqual(hexadigits(b('AZaz09-')), - ['41', '5a', '61', '7a', '30', '39', '2d']) - - def test_bchr(self): - if PY3: - self.assertEqual(bchr(0), b'\x00') - self.assertEqual(bchr(97), b'a') - else: - self.assertEqual(bchr(0), '\x00') - self.assertEqual(bchr(97), 'a') - - -class NetworkingUtilsTestCase(unittest.TestCase): - def test_is_public_and_is_private_subnet(self): - public_ips = [ - '213.151.0.8', - '86.87.86.1', - '8.8.8.8', - '8.8.4.4' - ] - - private_ips = [ - '192.168.1.100', - '10.0.0.1', - '172.16.0.0' - ] - - for address in public_ips: - is_public = is_public_subnet(ip=address) - is_private = is_private_subnet(ip=address) - - self.assertTrue(is_public) - self.assertFalse(is_private) - - for address in private_ips: - is_public = is_public_subnet(ip=address) - is_private = is_private_subnet(ip=address) - - self.assertFalse(is_public) - self.assertTrue(is_private) - - def test_is_valid_ip_address(self): - valid_ipv4_addresses = [ - '192.168.1.100', - '10.0.0.1', - '213.151.0.8', - '77.77.77.77' - ] - - invalid_ipv4_addresses = [ - '10.1', - '256.256.256.256', - '0.567.567.567', - '192.168.0.257' - ] - - valid_ipv6_addresses = [ - 'fe80::200:5aee:feaa:20a2', - '2607:f0d0:1002:51::4', - '2607:f0d0:1002:0051:0000:0000:0000:0004', - '::1' - ] - - invalid_ipv6_addresses = [ - '2607:f0d', - '2607:f0d0:0004', - ] - - for address in valid_ipv4_addresses: - status = is_valid_ip_address(address=address, - family=socket.AF_INET) - self.assertTrue(status) - - for address in valid_ipv6_addresses: - status = is_valid_ip_address(address=address, - family=socket.AF_INET6) - self.assertTrue(status) - - for address in chain(invalid_ipv4_addresses, invalid_ipv6_addresses): - status = is_valid_ip_address(address=address, - family=socket.AF_INET) - self.assertFalse(status) - - for address in chain(invalid_ipv4_addresses, invalid_ipv6_addresses): - status = is_valid_ip_address(address=address, - family=socket.AF_INET6) - self.assertFalse(status) - - def test_join_ipv4_segments(self): - values = [ - (('127', '0', '0', '1'), '127.0.0.1'), - (('255', '255', '255', '0'), '255.255.255.0'), - ] - - for segments, joined_ip in values: - result = join_ipv4_segments(segments=segments) - self.assertEqual(result, joined_ip) - - def test_increment_ipv4_segments(self): - values = [ - (('127', '0', '0', '1'), '127.0.0.2'), - (('255', '255', '255', '0'), '255.255.255.1'), - (('254', '255', '255', '255'), '255.0.0.0'), - (('100', '1', '0', '255'), '100.1.1.0'), - ] - - for segments, incremented_ip in values: - result = increment_ipv4_segments(segments=segments) - result = join_ipv4_segments(segments=result) - self.assertEqual(result, incremented_ip) - - -if __name__ == '__main__': - sys.exit(unittest.main()) http://git-wip-us.apache.org/repos/asf/libcloud/blob/8afcda91/apache-libcloud-1.0.0rc2/requirements-tests.txt ---------------------------------------------------------------------- diff --git a/apache-libcloud-1.0.0rc2/requirements-tests.txt b/apache-libcloud-1.0.0rc2/requirements-tests.txt deleted file mode 100644 index 791dfb5..0000000 --- a/apache-libcloud-1.0.0rc2/requirements-tests.txt +++ /dev/null @@ -1,3 +0,0 @@ -pep8>=1.7.0,<1.8 -flake8>=2.5.1,<2.6 -mock>=1.0.1,<1.1 http://git-wip-us.apache.org/repos/asf/libcloud/blob/8afcda91/apache-libcloud-1.0.0rc2/setup.cfg ---------------------------------------------------------------------- diff --git a/apache-libcloud-1.0.0rc2/setup.cfg b/apache-libcloud-1.0.0rc2/setup.cfg deleted file mode 100644 index bcb0348..0000000 --- a/apache-libcloud-1.0.0rc2/setup.cfg +++ /dev/null @@ -1,5 +0,0 @@ -[wheel] -universal = 1 - -[nosetests] -exclude=TestCaseMixin http://git-wip-us.apache.org/repos/asf/libcloud/blob/8afcda91/apache-libcloud-1.0.0rc2/setup.py ---------------------------------------------------------------------- diff --git a/apache-libcloud-1.0.0rc2/setup.py b/apache-libcloud-1.0.0rc2/setup.py deleted file mode 100644 index e8cc1bf..0000000 --- a/apache-libcloud-1.0.0rc2/setup.py +++ /dev/null @@ -1,306 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You 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. -import os -import sys -import doctest - -from setuptools import setup -from distutils.core import Command -from unittest import TextTestRunner, TestLoader -from glob import glob -from os.path import splitext, basename, join as pjoin - -try: - import epydoc # NOQA - has_epydoc = True -except ImportError: - has_epydoc = False - -import libcloud.utils -from libcloud.utils.dist import get_packages, get_data_files - -libcloud.utils.SHOW_DEPRECATION_WARNING = False - -# Different versions of python have different requirements. We can't use -# libcloud.utils.py3 here because it relies on backports dependency being -# installed / available -PY2 = sys.version_info[0] == 2 -PY3 = sys.version_info[0] == 3 -PY2_pre_25 = PY2 and sys.version_info < (2, 5) -PY2_pre_26 = PY2 and sys.version_info < (2, 6) -PY2_pre_27 = PY2 and sys.version_info < (2, 7) -PY2_pre_279 = PY2 and sys.version_info < (2, 7, 9) -PY3_pre_32 = PY3 and sys.version_info < (3, 2) - -HTML_VIEWSOURCE_BASE = 'https://svn.apache.org/viewvc/libcloud/trunk' -PROJECT_BASE_DIR = 'http://libcloud.apache.org' -TEST_PATHS = ['libcloud/test', 'libcloud/test/common', 'libcloud/test/compute', - 'libcloud/test/storage', 'libcloud/test/loadbalancer', - 'libcloud/test/dns', 'libcloud/test/container', - 'libcloud/test/backup'] -DOC_TEST_MODULES = ['libcloud.compute.drivers.dummy', - 'libcloud.storage.drivers.dummy', - 'libcloud.dns.drivers.dummy', - 'libcloud.container.drivers.dummy', - 'libcloud.backup.drivers.dummy'] - -SUPPORTED_VERSIONS = ['2.5', '2.6', '2.7', 'PyPy', '3.x'] - -TEST_REQUIREMENTS = [ - 'mock' -] - -if PY2_pre_279 or PY3_pre_32: - TEST_REQUIREMENTS.append('backports.ssl_match_hostname') - -if PY2_pre_27: - unittest2_required = True -else: - unittest2_required = False - -if PY2_pre_25: - version = '.'.join([str(x) for x in sys.version_info[:3]]) - print('Version ' + version + ' is not supported. Supported versions are ' + - ', '.join(SUPPORTED_VERSIONS)) - sys.exit(1) - - -def read_version_string(): - version = None - sys.path.insert(0, pjoin(os.getcwd())) - from libcloud import __version__ - version = __version__ - sys.path.pop(0) - return version - - -def forbid_publish(): - argv = sys.argv - if 'upload'in argv: - print('You shouldn\'t use upload command to upload a release to PyPi. ' - 'You need to manually upload files generated using release.sh ' - 'script.\n' - 'For more information, see "Making a release section" in the ' - 'documentation') - sys.exit(1) - - -class TestCommand(Command): - description = "run test suite" - user_options = [] - unittest_TestLoader = TestLoader - unittest_TextTestRunner = TextTestRunner - - def initialize_options(self): - THIS_DIR = os.path.abspath(os.path.split(__file__)[0]) - sys.path.insert(0, THIS_DIR) - for test_path in TEST_PATHS: - sys.path.insert(0, pjoin(THIS_DIR, test_path)) - self._dir = os.getcwd() - - def finalize_options(self): - pass - - def run(self): - for module_name in TEST_REQUIREMENTS: - try: - __import__(module_name) - except ImportError: - print('Missing "%s" library. %s is library is needed ' - 'to run the tests. You can install it using pip: ' - 'pip install %s' % (module_name, module_name, - module_name)) - sys.exit(1) - - if unittest2_required: - try: - from unittest2 import TextTestRunner, TestLoader - self.unittest_TestLoader = TestLoader - self.unittest_TextTestRunner = TextTestRunner - except ImportError: - print('Python version: %s' % (sys.version)) - print('Missing "unittest2" library. unittest2 is library is ' - 'needed to run the tests. You can install it using pip: ' - 'pip install unittest2') - sys.exit(1) - - status = self._run_tests() - sys.exit(status) - - def _run_tests(self): - secrets_current = pjoin(self._dir, 'libcloud/test', 'secrets.py') - secrets_dist = pjoin(self._dir, 'libcloud/test', 'secrets.py-dist') - - if not os.path.isfile(secrets_current): - print("Missing " + secrets_current) - print("Maybe you forgot to copy it from -dist:") - print("cp libcloud/test/secrets.py-dist libcloud/test/secrets.py") - sys.exit(1) - - mtime_current = os.path.getmtime(secrets_current) - mtime_dist = os.path.getmtime(secrets_dist) - - if mtime_dist > mtime_current: - print("It looks like test/secrets.py file is out of date.") - print("Please copy the new secrets.py-dist file over otherwise" + - " tests might fail") - - if PY2_pre_26: - missing = [] - # test for dependencies - try: - import simplejson - simplejson # silence pyflakes - except ImportError: - missing.append("simplejson") - - try: - import ssl - ssl # silence pyflakes - except ImportError: - missing.append("ssl") - - if missing: - print("Missing dependencies: " + ", ".join(missing)) - sys.exit(1) - - testfiles = [] - for test_path in TEST_PATHS: - for t in glob(pjoin(self._dir, test_path, 'test_*.py')): - testfiles.append('.'.join( - [test_path.replace('/', '.'), splitext(basename(t))[0]])) - - # Test loader simply throws "'module' object has no attribute" error - # if there is an issue with the test module so we manually try to - # import each module so we get a better and more friendly error message - for test_file in testfiles: - try: - __import__(test_file) - except Exception: - e = sys.exc_info()[1] - print('Failed to import test module "%s": %s' % (test_file, - str(e))) - raise e - - tests = self.unittest_TestLoader().loadTestsFromNames(testfiles) - - for test_module in DOC_TEST_MODULES: - tests.addTests(doctest.DocTestSuite(test_module)) - - t = self.unittest_TextTestRunner(verbosity=2) - res = t.run(tests) - return not res.wasSuccessful() - - -class ApiDocsCommand(Command): - description = "generate API documentation" - user_options = [] - - def initialize_options(self): - pass - - def finalize_options(self): - pass - - def run(self): - if not has_epydoc: - raise RuntimeError('Missing "epydoc" package!') - - os.system( - 'pydoctor' - ' --add-package=libcloud' - ' --project-name=libcloud' - ' --make-html' - ' --html-viewsource-base="%s"' - ' --project-base-dir=`pwd`' - ' --project-url="%s"' - % (HTML_VIEWSOURCE_BASE, PROJECT_BASE_DIR)) - - -class CoverageCommand(Command): - description = "run test suite and generate coverage report" - user_options = [] - - def initialize_options(self): - pass - - def finalize_options(self): - pass - - def run(self): - import coverage - cov = coverage.coverage(config_file='.coveragerc') - cov.start() - - tc = TestCommand(self.distribution) - tc._run_tests() - - cov.stop() - cov.save() - cov.html_report() - -forbid_publish() - -install_requires = [] -if PY2_pre_26: - install_requires.extend(['ssl', 'simplejson']) - -if PY2_pre_279 or PY3_pre_32: - install_requires.append('backports.ssl_match_hostname') - -setup( - name='apache-libcloud', - version=read_version_string(), - description='A standard Python library that abstracts away differences' + - ' among multiple cloud provider APIs. For more information' + - ' and documentation, please see http://libcloud.apache.org', - author='Apache Software Foundation', - author_email='[email protected]', - install_requires=install_requires, - packages=get_packages('libcloud'), - package_dir={ - 'libcloud': 'libcloud', - }, - package_data={'libcloud': get_data_files('libcloud', parent='libcloud')}, - license='Apache License (2.0)', - url='http://libcloud.apache.org/', - cmdclass={ - 'test': TestCommand, - 'apidocs': ApiDocsCommand, - 'coverage': CoverageCommand - }, - zip_safe=False, - classifiers=[ - 'Development Status :: 4 - Beta', - 'Environment :: Console', - 'Intended Audience :: Developers', - 'Intended Audience :: System Administrators', - 'License :: OSI Approved :: Apache Software License', - 'Operating System :: OS Independent', - 'Programming Language :: Python', - 'Topic :: Software Development :: Libraries :: Python Modules', - 'Programming Language :: Python :: 2.5', - 'Programming Language :: Python :: 2.6', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.0', - 'Programming Language :: Python :: 3.1', - 'Programming Language :: Python :: 3.2', - 'Programming Language :: Python :: 3.3', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: Implementation :: CPython', - 'Programming Language :: Python :: Implementation :: PyPy'] - ) http://git-wip-us.apache.org/repos/asf/libcloud/blob/8afcda91/apache-libcloud-1.0.0rc2/tox.ini ---------------------------------------------------------------------- diff --git a/apache-libcloud-1.0.0rc2/tox.ini b/apache-libcloud-1.0.0rc2/tox.ini deleted file mode 100644 index c08c4c2..0000000 --- a/apache-libcloud-1.0.0rc2/tox.ini +++ /dev/null @@ -1,62 +0,0 @@ -[tox] -envlist = py{2.5,2.6,2.7,pypy,pypy3,3.2,3.3,3.4,3.5},lint - -[testenv] -deps = - -r{toxinidir}/requirements-tests.txt - lockfile - py{2.5,2.6,2.7}: paramiko - py{2.5,2.6}: unittest2 -commands = cp libcloud/test/secrets.py-dist libcloud/test/secrets.py - python setup.py test -basepython = - py2.5: python2.5 - py2.6: python2.6 - {py2.7,lint,pylint,docs}: python2.7 - pypypy: pypy - pypypy3: pypy3 - py3.2: python3.2 - py3.3: python3.3 - py3.4: python3.4 - py3.5: python3.5 -whitelist_externals = cp - -[testenv:docs] -deps = sphinx - pysphere - backports.ssl_match_hostname -changedir = docs -commands = python ../contrib/generate_provider_feature_matrix_table.py - sphinx-apidoc -d 4 ../libcloud/ -o apidocs/ - sphinx-build -W -b html -d {envtmpdir}/doctrees . _build/html - -[testenv:docs-travis] -# Note: We don't build API docs on Travis since it causes build failures because -# those API docs files are not included anywhere. -deps = sphinx - pysphere - backports.ssl_match_hostname -changedir = docs -commands = python ../contrib/generate_provider_feature_matrix_table.py - sphinx-build -W -b html -d {envtmpdir}/doctrees . _build/html - -[testenv:scrape-ec2-prices] -deps = requests - demjson -commands = python contrib/scrape-ec2-prices.py - -[testenv:pylint] -deps = pylint - backports.ssl_match_hostname -commands = pylint --rcfile=.pylintrc -E libcloud/ - -[testenv:lint] -deps = -r{toxinidir}/requirements-tests.txt - backports.ssl_match_hostname - -commands = flake8 --ignore=E402 --exclude="test" libcloud/ - flake8 --ignore=E402 --max-line-length=160 libcloud/test/ - flake8 --ignore=E402 demos/ - flake8 --ignore=E402,E902 docs/examples/ - flake8 --ignore=E402,E902 --max-line-length=160 contrib/ - python -mjson.tool libcloud/data/pricing.json
