From: steven stark Date: Wed, 24 Jul 2019 19:06:47 +0000 (+0000) Subject: Merge "[VVP] Tox support for installing Win pre-built libraries" X-Git-Tag: 5.0.0~10 X-Git-Url: https://gerrit.onap.org/r/gitweb?p=vvp%2Fvalidation-scripts.git;a=commitdiff_plain;h=107d6b6a59ba8bc012f35a073e609b53b2ce05e7;hp=1f02c5a5f2bbddfa375e44bc1d93e435d501f4ee Merge "[VVP] Tox support for installing Win pre-built libraries" --- diff --git a/install_win_deps.py b/install_win_deps.py new file mode 100644 index 0000000..01e9503 --- /dev/null +++ b/install_win_deps.py @@ -0,0 +1,96 @@ +# ============LICENSE_START==================================================== +# org.onap.vvp/validation-scripts +# =================================================================== +# Copyright © 2019 AT&T Intellectual Property. All rights reserved. +# =================================================================== +# +# Unless otherwise specified, all software contained herein is licensed +# under the Apache License, Version 2.0 (the "License"); +# you may not use this software 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. +# +# +# +# Unless otherwise specified, all documentation contained herein is licensed +# under the Creative Commons License, Attribution 4.0 Intl. (the "License"); +# you may not use this documentation except in compliance with the License. +# You may obtain a copy of the License at +# +# https://creativecommons.org/licenses/by/4.0/ +# +# Unless required by applicable law or agreed to in writing, documentation +# 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. +# +# ============LICENSE_END============================================ +# +import os +import platform +import subprocess #nosec +import sys +import tempfile +from urllib import request + +PREBUILT_DOWNLOAD_SITE = "https://download.lfd.uci.edu/pythonlibs/n5jyqt7p/" +PREBUILT_WIN_LIBS = [ + "yappi-1.0-cp{python_version}-cp{python_version}m-{arch}.whl", + "setproctitle-1.1.10-cp{python_version}-cp{python_version}m-{arch}.whl" +] + + +def is_windows(): + return os.name == 'nt' + + +def python_version(): + return sys.version[:3].replace(".", "") + + +def system_architecture(): + arch = platform.architecture() + return "win32" if arch[0] != "64bit" else "win_amd64" + + +def download_url(url): + resp = request.urlopen(url) #nosec + return resp.read() + + +def read_file(path): + with open(path, "r") as f: + return f.read() + + +def write_file(data, path, mode="w"): + with open(path, mode) as f: + f.write(data) + + +def install_prebuilt_binaries_on_windows(): + if not is_windows(): + return + temp_dir = tempfile.mkdtemp() + for lib in PREBUILT_WIN_LIBS: + filename = lib.format(python_version=python_version(), + arch=system_architecture()) + url = PREBUILT_DOWNLOAD_SITE + filename + print(f"Downloading {url}") + contents = download_url(url) + file_path = os.path.join(temp_dir, filename) + write_file(contents, file_path, mode="wb") + print("Download complete. Installing dependency.") + subprocess.call(["pip", "install", file_path]) #nosec + + +if __name__ == "__main__": + install_prebuilt_binaries_on_windows() diff --git a/tox.ini b/tox.ini index 84e1b14..8bbf1fc 100644 --- a/tox.ini +++ b/tox.ini @@ -42,22 +42,27 @@ skipsdist=True envlist = py36 [testenv] +whitelist_externals = + install_win_deps.py +passenv = + http_proxy + https_proxy distribute = False commands = - {envpython} --version + python install_win_deps.py + pip install -r requirements.txt + {envpython} --version pytest --version coverage run --module pytest ice_validator/tests --self-test -rxXs coverage xml flake8 --version flake8 ice_validator bandit -c bandit.yaml -r . -x ./.tox/**,./venv-tox/** -deps = --no-use-pep517 - -rrequirements.txt +deps = --no-use-pep517 flake8 coverage bandit - [flake8] ignore = W391, W503, E501 max-line-length = 88