diff --git a/bin/run_test.py b/bin/run_test.py index 075c4d08..bee65de4 100755 --- a/bin/run_test.py +++ b/bin/run_test.py @@ -1,6 +1,9 @@ #!/usr/bin/env python3 -import os, sys, subprocess, shutil +import argparse +import os +import subprocess +import sys def single_run(test_project): @@ -11,8 +14,6 @@ def single_run(test_project): if __name__ == '__main__': - import argparse - parser = argparse.ArgumentParser() parser.add_argument("test_project_dir") args = parser.parse_args() diff --git a/bin/run_tests.py b/bin/run_tests.py index a0413dcf..4963a883 100755 --- a/bin/run_tests.py +++ b/bin/run_tests.py @@ -1,17 +1,19 @@ #!/usr/bin/env python3 -import os, sys, subprocess, shutil, json +import os +import subprocess +import sys from glob import glob if __name__ == '__main__': # move cwd to the project root os.chdir(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) - ### run the unit tests + # run the unit tests subprocess.check_call([sys.executable, '-m', 'pytest', 'unit_test']) - ### run the integration tests + # run the integration tests test_projects = sorted(glob('test/??_*')) diff --git a/cibuildwheel/__main__.py b/cibuildwheel/__main__.py index 314512a9..2d309788 100644 --- a/cibuildwheel/__main__.py +++ b/cibuildwheel/__main__.py @@ -1,10 +1,20 @@ -import argparse, os, subprocess, sys, textwrap +import argparse +import os +import sys +import textwrap +import traceback import cibuildwheel -import cibuildwheel.linux, cibuildwheel.windows, cibuildwheel.macos -from cibuildwheel.environment import parse_environment, EnvironmentParseError +import cibuildwheel.linux +import cibuildwheel.macos +import cibuildwheel.windows +from cibuildwheel.environment import ( + EnvironmentParseError, + parse_environment, +) from cibuildwheel.util import BuildSelector, Unbuffered + def get_option_from_environment(option_name, platform=None, default=None): ''' Returns an option from the environment, optionally scoped by the platform. @@ -84,7 +94,6 @@ def main(): file=sys.stderr) exit(2) - output_dir = args.output_dir test_command = get_option_from_environment('CIBW_TEST_COMMAND', platform=platform) test_requires = get_option_from_environment('CIBW_TEST_REQUIRES', platform=platform, default='').split() @@ -112,9 +121,8 @@ def main(): try: environment = parse_environment(environment_config) - except (EnvironmentParseError, ValueError) as e: + except (EnvironmentParseError, ValueError): print('cibuildwheel: Malformed environment option "%s"' % environment_config, file=sys.stderr) - import traceback traceback.print_exc(None, sys.stderr) exit(2) @@ -210,6 +218,7 @@ def detect_obsolete_options(): )) os.environ[option] = os.environ[option].replace(deprecated, alternative) + def print_preamble(platform, build_options): print(textwrap.dedent(''' _ _ _ _ _ _ _ @@ -220,7 +229,6 @@ def print_preamble(platform, build_options): print('cibuildwheel version %s\n' % cibuildwheel.__version__) - print('Build options:') print(' platform: %r' % platform) for option, value in sorted(build_options.items()): diff --git a/cibuildwheel/bashlex_eval.py b/cibuildwheel/bashlex_eval.py index 1caddd8f..7e2d7f4a 100644 --- a/cibuildwheel/bashlex_eval.py +++ b/cibuildwheel/bashlex_eval.py @@ -1,9 +1,13 @@ -import subprocess, shlex, sys +import shlex +import subprocess +import sys from collections import namedtuple + import bashlex NodeExecutionContext = namedtuple('NodeExecutionContext', ['environment', 'input']) + def evaluate(value, environment): if not value: # empty string evaluates to empty string @@ -16,9 +20,9 @@ def evaluate(value, environment): raise ValueError('"%s" has too many parts' % value) value_word_node = command_node.parts[0] - + return evaluate_node( - value_word_node, + value_word_node, context=NodeExecutionContext(environment=environment, input=value) ) @@ -63,5 +67,6 @@ def evaluate_command_node(node, context): return subprocess.check_output(shlex.split(command), env=context.environment, universal_newlines=True) + def evaluate_parameter_node(node, context): return context.environment.get(node.value, '') diff --git a/cibuildwheel/environment.py b/cibuildwheel/environment.py index 5d548f57..f016c780 100644 --- a/cibuildwheel/environment.py +++ b/cibuildwheel/environment.py @@ -1,4 +1,5 @@ import bashlex + from . import bashlex_eval diff --git a/cibuildwheel/linux.py b/cibuildwheel/linux.py index 11a15413..24a034d6 100644 --- a/cibuildwheel/linux.py +++ b/cibuildwheel/linux.py @@ -1,6 +1,15 @@ -import os, shlex, subprocess, sys, textwrap, uuid +import os +import shlex +import subprocess +import sys +import textwrap +import uuid from collections import namedtuple -from .util import prepare_command, get_build_verbosity_extra_flags + +from .util import ( + get_build_verbosity_extra_flags, + prepare_command, +) def get_python_configurations(build_selector): @@ -27,7 +36,7 @@ def get_python_configurations(build_selector): def build(project_dir, output_dir, test_command, test_requires, test_extras, before_build, build_verbosity, build_selector, repair_command, environment, manylinux_images): try: subprocess.check_call(['docker', '--version']) - except: + except Exception: print('cibuildwheel: Docker not found. Docker is required to run Linux builds. ' 'If you\'re building on Travis CI, add `services: [docker]` to your .travis.yml.' 'If you\'re building on Circle CI in Linux, add a `setup_remote_docker` step to your .circleci/config.yml', @@ -123,7 +132,7 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef for repaired_wheel in "${{repaired_wheels[@]}}"; do chown {uid}:{gid} "/output/$(basename "$repaired_wheel")"; done done '''.format( - pybin_paths=' '.join(c.path+'/bin' for c in platform_configs), + pybin_paths=' '.join(c.path + '/bin' for c in platform_configs), test_requires=' '.join(test_requires), test_extras=test_extras, test_command=shlex.quote( @@ -147,9 +156,8 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef '--env', 'CIBUILDWHEEL', '--name', container_name, '-i', - '-v', '/:/host', # ignored on CircleCI - docker_image, '/bin/bash'], - check=True) + '-v', '/:/host', # ignored on CircleCI + docker_image, '/bin/bash'], check=True) subprocess.run(['docker', 'cp', os.path.abspath(project_dir) + '/.', container_name + ':/project'], check=True) subprocess.run(['docker', 'start', '-i', '-a', container_name], input=bash_script, universal_newlines=True, check=True) subprocess.run(['docker', 'cp', container_name + ':/output/.', os.path.abspath(output_dir)], check=True) @@ -184,5 +192,5 @@ def troubleshoot(project_dir, error): ''')) print(' Files detected:') - print('\n'.join([' '+f for f in so_files])) + print('\n'.join([' ' + f for f in so_files])) print('') diff --git a/cibuildwheel/macos.py b/cibuildwheel/macos.py index 304e594a..c79c5a95 100644 --- a/cibuildwheel/macos.py +++ b/cibuildwheel/macos.py @@ -1,9 +1,16 @@ +import os +import shlex +import shutil +import subprocess import tempfile -import os, subprocess, shlex, sys, shutil from collections import namedtuple from glob import glob -from .util import prepare_command, get_build_verbosity_extra_flags, download +from .util import ( + download, + get_build_verbosity_extra_flags, + prepare_command, +) def get_python_configurations(build_selector): @@ -31,7 +38,7 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef get_pip_url = 'https://bootstrap.pypa.io/get-pip.py' get_pip_script = '/tmp/get-pip.py' - pkgs_output = subprocess.check_output(['pkgutil', '--pkgs'], universal_newlines=True) + pkgs_output = subprocess.check_output(['pkgutil', '--pkgs'], universal_newlines=True) installed_system_packages = pkgs_output.splitlines() def call(args, env=None, cwd=None, shell=False): diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index fbee1728..4b80a399 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -1,6 +1,6 @@ +import os +import urllib.request from fnmatch import fnmatch -import warnings -import os, urllib.request from time import sleep @@ -64,7 +64,7 @@ def download(url, dest): for i in range(repeat_num): try: response = urllib.request.urlopen(url) - except: + except Exception: if i == repeat_num - 1: raise sleep(3) diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py index 175edda3..abb3a0a2 100644 --- a/cibuildwheel/windows.py +++ b/cibuildwheel/windows.py @@ -1,8 +1,15 @@ -import os, tempfile, subprocess, shutil, sys +import os +import shutil +import subprocess +import tempfile from collections import namedtuple from glob import glob -from .util import prepare_command, get_build_verbosity_extra_flags, download +from .util import ( + download, + get_build_verbosity_extra_flags, + prepare_command, +) IS_RUNNING_ON_AZURE = os.path.exists('C:\\hostedtoolcache') @@ -20,6 +27,7 @@ def get_nuget_args(configuration): python_name = python_name + "x86" return [python_name, "-Version", configuration.version, "-OutputDirectory", "C:/cibw/python"] + def get_python_configurations(build_selector): PythonConfiguration = namedtuple('PythonConfiguration', ['version', 'arch', 'identifier']) python_configurations = [ @@ -40,7 +48,7 @@ def get_python_configurations(build_selector): # try with (and similar): msiexec /i VCForPython27.msi ALLUSERS=1 ACCEPT=YES /passive python_configurations = [c for c in python_configurations if not c.version.startswith('2.7.')] - # skip builds as required + # skip builds as required python_configurations = [c for c in python_configurations if build_selector(c.identifier)] return python_configurations diff --git a/docs/mkdocs_include_markdown_plugin/mkdocs_include_markdown_plugin/plugin.py b/docs/mkdocs_include_markdown_plugin/mkdocs_include_markdown_plugin/plugin.py index 55fadf2f..2f43d0f3 100644 --- a/docs/mkdocs_include_markdown_plugin/mkdocs_include_markdown_plugin/plugin.py +++ b/docs/mkdocs_include_markdown_plugin/mkdocs_include_markdown_plugin/plugin.py @@ -1,4 +1,9 @@ -import mkdocs, re, os, io, cgi +import cgi +import io +import os +import re + +import mkdocs INCLUDE_TAG_REGEX = re.compile( r''' @@ -28,6 +33,7 @@ INCLUDEMARKDOWN_TAG_REGEX = re.compile( flags=re.VERBOSE, ) + class ImportMarkdownPlugin(mkdocs.plugins.BasePlugin): def on_page_markdown(self, markdown, page, **kwargs): page_src_path = page.file.abs_src_path @@ -62,13 +68,13 @@ class ImportMarkdownPlugin(mkdocs.plugins.BasePlugin): with io.open(file_path_abs, encoding='utf8') as f: text_to_include = f.read() - + if start: _, _, text_to_include = text_to_include.partition(start) if end: text_to_include, _, _ = text_to_include.partition(end) - + return ( '\n' % ( filename, cgi.escape(start or ''), cgi.escape(end or '') @@ -80,4 +86,3 @@ class ImportMarkdownPlugin(mkdocs.plugins.BasePlugin): markdown = re.sub(INCLUDE_TAG_REGEX, found_include_tag, markdown) markdown = re.sub(INCLUDEMARKDOWN_TAG_REGEX, found_includemarkdown_tag, markdown) return markdown - \ No newline at end of file diff --git a/setup.cfg b/setup.cfg index 42b782c4..6c170e29 100644 --- a/setup.cfg +++ b/setup.cfg @@ -19,3 +19,6 @@ replace = cibuildwheel=={new_version} [bdist_wheel] universal = 1 +[flake8] +ignore = E501,W503 +application-import-names = cibuildwheel diff --git a/setup.py b/setup.py index bb6db2ca..010d5621 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- -import os, io +import io +import os try: from setuptools import setup @@ -20,7 +21,7 @@ setup( author="Joe Rickerby", author_email='joerick@mac.com', url='https://github.com/joerick/cibuildwheel', - packages=['cibuildwheel',], + packages=['cibuildwheel', ], license="BSD", zip_safe=False, package_data={ diff --git a/test/01_basic/cibuildwheel_test.py b/test/01_basic/cibuildwheel_test.py index ea6abb39..76dd4857 100644 --- a/test/01_basic/cibuildwheel_test.py +++ b/test/01_basic/cibuildwheel_test.py @@ -1,9 +1,10 @@ import os + import utils - project_dir = os.path.dirname(__file__) + def test(): # build the wheels actual_wheels = utils.cibuildwheel_run(project_dir) @@ -20,6 +21,6 @@ def test_build_identifiers(): # can be multiple wheels for each wheel, though, so we need to limit # the expected wheels expected_wheels = [w for w in utils.expected_wheels('spam', '0.1.0') - if not '-manylinux' in w or '-manylinux1' in w] + if '-manylinux' not in w or '-manylinux1' in w] build_identifiers = utils.cibuildwheel_get_build_identifiers(project_dir) assert len(expected_wheels) == len(build_identifiers) diff --git a/test/01_basic/setup.py b/test/01_basic/setup.py index 48d7c00b..83f6d53d 100644 --- a/test/01_basic/setup.py +++ b/test/01_basic/setup.py @@ -1,6 +1,9 @@ import os -from setuptools import setup, Extension +from setuptools import ( + Extension, + setup, +) if os.environ.get('CIBUILDWHEEL', '0') != '1': raise Exception('CIBUILDWHEEL environment variable is not set to 1') diff --git a/test/02_test/cibuildwheel_test.py b/test/02_test/cibuildwheel_test.py index e197a16d..ca084d65 100644 --- a/test/02_test/cibuildwheel_test.py +++ b/test/02_test/cibuildwheel_test.py @@ -1,7 +1,11 @@ -import os, subprocess +import os +import subprocess + import pytest + import utils + def test(): project_dir = os.path.dirname(__file__) diff --git a/test/02_test/setup.py b/test/02_test/setup.py index 1609aad6..3a150b3d 100644 --- a/test/02_test/setup.py +++ b/test/02_test/setup.py @@ -1,4 +1,7 @@ -from setuptools import setup, Extension +from setuptools import ( + Extension, + setup, +) setup( name="spam", diff --git a/test/02_test/test/spam_test.py b/test/02_test/test/spam_test.py index a4c17e93..faf7e6bc 100644 --- a/test/02_test/test/spam_test.py +++ b/test/02_test/test/spam_test.py @@ -1,4 +1,5 @@ from unittest import TestCase + import spam diff --git a/test/03_before_build/cibuildwheel_test.py b/test/03_before_build/cibuildwheel_test.py index e3d8ce55..8b0bfcb6 100644 --- a/test/03_before_build/cibuildwheel_test.py +++ b/test/03_before_build/cibuildwheel_test.py @@ -1,6 +1,8 @@ import os + import utils + def test(): project_dir = os.path.dirname(__file__) diff --git a/test/03_before_build/setup.py b/test/03_before_build/setup.py index b7b802fe..fd78c005 100644 --- a/test/03_before_build/setup.py +++ b/test/03_before_build/setup.py @@ -1,5 +1,10 @@ -from setuptools import setup, Extension -import sys, os +import os +import sys + +from setuptools import ( + Extension, + setup, +) # assert that the Python version as written to pythonversion.txt in the CIBW_BEFORE_BUILD step # is the same one as is currently running. diff --git a/test/04_build_skip/cibuildwheel_test.py b/test/04_build_skip/cibuildwheel_test.py index a2999a73..2c6a622c 100644 --- a/test/04_build_skip/cibuildwheel_test.py +++ b/test/04_build_skip/cibuildwheel_test.py @@ -1,6 +1,8 @@ import os + import utils + def test(): project_dir = os.path.dirname(__file__) diff --git a/test/04_build_skip/setup.py b/test/04_build_skip/setup.py index 94f3eb13..2e3fd5c6 100644 --- a/test/04_build_skip/setup.py +++ b/test/04_build_skip/setup.py @@ -1,6 +1,10 @@ -from setuptools import setup, Extension import sys +from setuptools import ( + Extension, + setup, +) + # explode if run on Python 2.7 or Python 3.4 (these should be skipped) if sys.version_info[0:2] == (2, 7): raise Exception('Python 2.7 should not be built') diff --git a/test/05_environment/cibuildwheel_test.py b/test/05_environment/cibuildwheel_test.py index 9efeafc1..4f0b922d 100644 --- a/test/05_environment/cibuildwheel_test.py +++ b/test/05_environment/cibuildwheel_test.py @@ -1,6 +1,8 @@ import os + import utils + def test(): project_dir = os.path.dirname(__file__) diff --git a/test/05_environment/setup.py b/test/05_environment/setup.py index 61abd814..da5e8d59 100644 --- a/test/05_environment/setup.py +++ b/test/05_environment/setup.py @@ -1,5 +1,9 @@ -from setuptools import setup, Extension -import sys, os +import os + +from setuptools import ( + Extension, + setup, +) # explode if environment isn't correct, as set in CIBW_ENVIRONMENT CIBW_TEST_VAR = os.environ.get('CIBW_TEST_VAR') @@ -15,7 +19,6 @@ if '/opt/cibw_test_path' not in PATH: if '$PATH' in PATH: raise Exception('$PATH should be expanded in PATH. It was "%s"' % PATH) - setup( name="spam", ext_modules=[Extension('spam', sources=['spam.c'])], diff --git a/test/06_docker_images/cibuildwheel_test.py b/test/06_docker_images/cibuildwheel_test.py index 1bfc50a7..9f243664 100644 --- a/test/06_docker_images/cibuildwheel_test.py +++ b/test/06_docker_images/cibuildwheel_test.py @@ -1,6 +1,10 @@ -import os, pytest +import os + +import pytest + import utils + def test(): project_dir = os.path.dirname(__file__) diff --git a/test/06_docker_images/setup.py b/test/06_docker_images/setup.py index 8084d9fe..5680349d 100644 --- a/test/06_docker_images/setup.py +++ b/test/06_docker_images/setup.py @@ -1,6 +1,10 @@ -import os, sys +import os +import sys -from setuptools import setup, Extension +from setuptools import ( + Extension, + setup, +) # check that we're running in the correct docker image as specified in the # environment options CIBW_MANYLINUX1_*_IMAGE diff --git a/test/07_ssl/cibuildwheel_test.py b/test/07_ssl/cibuildwheel_test.py index fd3fff87..787ba866 100644 --- a/test/07_ssl/cibuildwheel_test.py +++ b/test/07_ssl/cibuildwheel_test.py @@ -1,6 +1,8 @@ import os + import utils + def test(): project_dir = os.path.dirname(__file__) # this test checks that SSL is working in the build environment using diff --git a/test/07_ssl/setup.py b/test/07_ssl/setup.py index aa60f382..4b6a4f24 100644 --- a/test/07_ssl/setup.py +++ b/test/07_ssl/setup.py @@ -1,6 +1,10 @@ import ssl import sys -from setuptools import setup, Extension + +from setuptools import ( + Extension, + setup, +) if sys.version_info[0] == 2: from urllib2 import urlopen diff --git a/test/08_manylinuxXXXX_only/cibuildwheel_test.py b/test/08_manylinuxXXXX_only/cibuildwheel_test.py index 69c28fcd..439f428f 100644 --- a/test/08_manylinuxXXXX_only/cibuildwheel_test.py +++ b/test/08_manylinuxXXXX_only/cibuildwheel_test.py @@ -1,4 +1,7 @@ -import os, pytest +import os + +import pytest + import utils diff --git a/test/08_manylinuxXXXX_only/setup.py b/test/08_manylinuxXXXX_only/setup.py index 866fa22c..209f45b0 100644 --- a/test/08_manylinuxXXXX_only/setup.py +++ b/test/08_manylinuxXXXX_only/setup.py @@ -1,4 +1,7 @@ -from setuptools import setup, Extension +from setuptools import ( + Extension, + setup, +) setup( name="spam", diff --git a/test/09_setup_cfg/cibuildwheel_test.py b/test/09_setup_cfg/cibuildwheel_test.py index 9e9ffce6..b6c3de01 100644 --- a/test/09_setup_cfg/cibuildwheel_test.py +++ b/test/09_setup_cfg/cibuildwheel_test.py @@ -1,9 +1,10 @@ import os + import utils - project_dir = os.path.dirname(__file__) + def test(): # build the wheels actual_wheels = utils.cibuildwheel_run(project_dir) diff --git a/test/09_setup_cfg/setup.py b/test/09_setup_cfg/setup.py index 0fbbe75e..a4c19252 100644 --- a/test/09_setup_cfg/setup.py +++ b/test/09_setup_cfg/setup.py @@ -1,7 +1,7 @@ -import os - -from setuptools import setup, Extension - +from setuptools import ( + Extension, + setup, +) setup( ext_modules=[Extension('spam.spam', sources=['spam/spam.c'])], diff --git a/test/09_setup_cfg/spam/__init__.py b/test/09_setup_cfg/spam/__init__.py index a68927d6..3dc1f76b 100644 --- a/test/09_setup_cfg/spam/__init__.py +++ b/test/09_setup_cfg/spam/__init__.py @@ -1 +1 @@ -__version__ = "0.1.0" \ No newline at end of file +__version__ = "0.1.0" diff --git a/test/shared/utils.py b/test/shared/utils.py index 09923326..4d6b96d0 100644 --- a/test/shared/utils.py +++ b/test/shared/utils.py @@ -4,10 +4,12 @@ Utility functions used by the cibuildwheel tests. This file is added to the PYTHONPATH in the test runner at bin/run_test.py. ''' -import subprocess, sys, os, shutil -from tempfile import mkdtemp +import os +import shutil +import subprocess +import sys from contextlib import contextmanager - +from tempfile import mkdtemp IS_WINDOWS_RUNNING_ON_AZURE = os.path.exists('C:\\hostedtoolcache') IS_WINDOWS_RUNNING_ON_TRAVIS = os.environ.get('TRAVIS_OS_NAME') == 'windows' diff --git a/unit_test/environment_test.py b/unit_test/environment_test.py index 1bc95374..b8b961a8 100644 --- a/unit_test/environment_test.py +++ b/unit_test/environment_test.py @@ -1,4 +1,5 @@ import os + from cibuildwheel.environment import parse_environment @@ -13,6 +14,7 @@ def test_basic_parsing(): assert environment_dict == {'VAR': '1', 'VBR': '2'} assert environment_cmds == ['export VAR=1', 'export VBR=2'] + def test_quotes(): environment_recipe = parse_environment('A=1 VAR="1 NOT_A_VAR=2" VBR=\'vbr\'') @@ -24,6 +26,7 @@ def test_quotes(): assert environment_dict == {'A': '1', 'VAR': '1 NOT_A_VAR=2', 'VBR': 'vbr'} assert environment_cmds == ['export A=1', 'export VAR="1 NOT_A_VAR=2"', 'export VBR=\'vbr\''] + def test_inheritance(): environment_recipe = parse_environment('PATH=$PATH:/usr/local/bin') @@ -35,6 +38,7 @@ def test_inheritance(): assert environment_dict == {'PATH': '/usr/bin:/usr/local/bin'} assert environment_cmds == ['export PATH=$PATH:/usr/local/bin'] + def test_shell_eval(): environment_recipe = parse_environment('VAR="$(echo "a test" string)"') @@ -49,6 +53,7 @@ def test_shell_eval(): assert environment_dict['VAR'] == 'a test string' assert environment_cmds == ['export VAR="$(echo "a test" string)"'] + def test_shell_eval_and_env(): environment_recipe = parse_environment('VAR="$(echo "$PREV_VAR" string)"') @@ -60,6 +65,7 @@ def test_shell_eval_and_env(): assert environment_dict == {'PREV_VAR': '1 2 3', 'VAR': '1 2 3 string'} assert environment_cmds == ['export VAR="$(echo "$PREV_VAR" string)"'] + def test_empty_var(): environment_recipe = parse_environment('CFLAGS=') @@ -71,6 +77,7 @@ def test_empty_var(): assert environment_dict == {'CFLAGS': ''} assert environment_cmds == ['export CFLAGS='] + def test_no_vars(): environment_recipe = parse_environment('') @@ -80,6 +87,7 @@ def test_no_vars(): assert environment_dict == {} assert environment_cmds == [] + def test_no_vars_pass_through(): environment_recipe = parse_environment('')