diff --git a/Makefile b/Makefile index ef2dfa7fec8..71e34f82d28 100644 --- a/Makefile +++ b/Makefile @@ -6,11 +6,11 @@ # - In windows, only WSL is supported # # by sanderegg, pcrespov +# .DEFAULT_GOAL := help -SHELL := /bin/bash +SHELL := /bin/bash -# TOOLS -------------------------------------- MAKE_C := $(MAKE) --no-print-directory --directory @@ -60,7 +60,9 @@ export SWARM_STACK_NAME ?= simcore export DOCKER_IMAGE_TAG ?= latest export DOCKER_REGISTRY ?= itisfoundation + .PHONY: help + help: ## help on rule's targets ifeq ($(IS_WIN),) @awk --posix 'BEGIN {FS = ":.*?## "} /^[[:alpha:][:space:]_-]+:.*?## / {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) @@ -70,7 +72,7 @@ endif -## docker BUILD ------------------------------- +## DOCKER BUILD ------------------------------- # # - all builds are inmediatly tagged as 'local/{service}:${BUILD_TARGET}' where BUILD_TARGET='development', 'production', 'cache' # - only production and cache images are released (i.e. tagged pushed into registry) @@ -127,7 +129,6 @@ endif endif -# TODO: should download cache if any?? build-cache build-cache-nc build-cache-kit build-cache-x: .env ## Build cache images and tags them as 'local/{service-name}:cache' ifeq ($(target),) # Compiling front-end @@ -152,7 +153,7 @@ shell: docker run -it local/$(target):production /bin/sh -## docker SWARM ------------------------------- +## DOCKER SWARM ------------------------------- # # - All resolved configuration are named as .stack-${name}-*.yml to distinguish from docker-compose files which can be parametrized # @@ -179,6 +180,7 @@ docker-compose-configs = $(wildcard services/docker-compose*.yml) # Creating config for ops stack to $@ @docker-compose -f services/docker-compose-ops.yml --log-level=ERROR config > $@ + .PHONY: up-devel up-prod up-version up-latest .deploy-ops .deploy-ops: .stack-ops.yml @@ -235,7 +237,7 @@ leave: ## Forces to stop all services, networks, etc by the node leaving the swa $(if $(SWARM_HOSTS),,docker swarm init) -## docker TAGS ------------------------------- +## DOCKER TAGS ------------------------------- .PHONY: tag-local tag-cache tag-version tag-latest @@ -263,10 +265,10 @@ tag-latest: ## Tags last locally built production images as '${DOCKER_REGISTRY}/ -## docker PULL/PUSH ------------------------------- +## DOCKER PULL/PUSH ------------------------------- # -# TODO: cannot push modified/untracke -# TODO: cannot push discetedD +# TODO: cannot push modified/untracked +# TODO: cannot push disceted # .PHONY: pull-cache pull-version pull-cache: .env @@ -296,21 +298,7 @@ push-version: tag-version ) -## PYTHON ------------------------------- -.PHONY: pylint - -pylint: ## Runs python linter framework's wide - # See exit codes and command line https://pylint.readthedocs.io/en/latest/user_guide/run.html#exit-codes - # TODO: NOT windows friendly - /bin/bash -c "pylint --jobs=0 --rcfile=.pylintrc $(strip $(shell find services packages -iname '*.py' \ - -not -path "*egg*" \ - -not -path "*migration*" \ - -not -path "*datcore.py" \ - -not -path "*sandbox*" \ - -not -path "*-sdk/python*" \ - -not -path "*generated_code*" \ - -not -path "*datcore.py" \ - -not -path "*web/server*"))" +## ENVIRONMENT ------------------------------- .PHONY: devenv devenv-all @@ -332,25 +320,42 @@ devenv-all: devenv ## sets up extra development tools (everything else besides p @$(MAKE_C) scripts/json-schema-to-openapi-schema -## MISC ------------------------------- - -.PHONY: new-service -new-service: .venv ## Bakes a new project from cookiecutter-simcore-pyservice and drops it under services/ [UNDER DEV] - $ - +

+ -[`master`](https://github.com/itisfoundation/osparc-simcore/tree/master) [![Code style: black]](https://github.com/psf/black) [![Requires.io]](https://requires.io/github/ITISFoundation/osparc-simcore/requirements/?branch=master "State of third party python dependencies") [![travis-ci]](https://travis-ci.org/ITISFoundation/osparc-simcore "State of CI: build, test and pushing images") @@ -14,10 +14,10 @@ [![codecov.io]](https://codecov.io/gh/ITISFoundation/osparc-simcore) [![github.io]](https://itisfoundation.github.io/) [![itis.dockerhub]](https://hub.docker.com/u/itisfoundation) +[![license]](./LICENSE) - - + [Code style: black]:https://img.shields.io/badge/code%20style-black-000000.svg [Requires.io]:https://img.shields.io/requires/github/ITISFoundation/osparc-simcore.svg [travis-ci]:https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master @@ -25,8 +25,8 @@ [itis.dockerhub]:https://img.shields.io/website/https/hub.docker.com/u/itisfoundation.svg?down_color=red&label=dockerhub%20repos&up_color=green [coveralls.io]:https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master [codecov.io]:https://codecov.io/gh/ITISFoundation/osparc-simcore/branch/master/graph/badge.svg - - +[license]:https://img.shields.io/github/license/ITISFoundation/osparc-simcore + The SIM-CORE, named **o2S2PARC** – **O**pen **O**nline **S**imulations for **S**timulating **P**eripheral **A**ctivity to **R**elieve **C**onditions – is one of the three integrative cores of the SPARC program’s Data Resource Center (DRC). diff --git a/api/tests/requirements.txt b/api/tests/requirements.txt index 0bfa736a91b..81de68bb585 100644 --- a/api/tests/requirements.txt +++ b/api/tests/requirements.txt @@ -11,11 +11,11 @@ chardet==3.0.4 # via aiohttp coverage==5.1 # via -r requirements.in, pytest-cov idna-ssl==1.1.0 # via aiohttp idna==2.9 # via idna-ssl, yarl -importlib-metadata==1.6.0 # via jsonschema, pluggy, pytest +importlib-metadata==1.6.1 # via jsonschema, pluggy, pytest isodate==0.6.0 # via openapi-schema-validator jsonschema==3.2.0 # via openapi-schema-validator, openapi-spec-validator -lazy-object-proxy==1.4.3 # via openapi-core -more-itertools==8.3.0 # via openapi-core, pytest +lazy-object-proxy==1.5.0 # via openapi-core +more-itertools==8.4.0 # via openapi-core, pytest multidict==4.7.6 # via aiohttp, yarl openapi-core==0.13.3 # via -r requirements.in openapi-schema-validator==0.1.1 # via openapi-core @@ -23,12 +23,12 @@ openapi-spec-validator==0.2.8 # via openapi-core packaging==20.4 # via pytest, pytest-sugar parse==1.15.0 # via openapi-core pluggy==0.13.1 # via pytest -py==1.8.1 # via pytest +py==1.8.2 # via pytest pyparsing==2.4.7 # via packaging pyrsistent==0.16.0 # via jsonschema pytest-aiohttp==0.3.0 # via -r requirements.in -pytest-cov==2.9.0 # via -r requirements.in -pytest-instafail==0.4.1.post0 # via -r requirements.in +pytest-cov==2.10.0 # via -r requirements.in +pytest-instafail==0.4.2 # via -r requirements.in pytest-sugar==0.9.3 # via -r requirements.in pytest==5.4.3 # via -r requirements.in, pytest-aiohttp, pytest-cov, pytest-instafail, pytest-sugar pyyaml==5.3.1 # via openapi-spec-validator @@ -36,7 +36,7 @@ six==1.15.0 # via isodate, jsonschema, openapi-core, openapi-schem strict-rfc3339==0.7 # via openapi-schema-validator termcolor==1.1.0 # via pytest-sugar typing-extensions==3.7.4.2 # via aiohttp -wcwidth==0.1.9 # via pytest +wcwidth==0.2.4 # via pytest werkzeug==1.0.1 # via openapi-core yarl==1.4.2 # via aiohttp zipp==3.1.0 # via importlib-metadata diff --git a/packages/postgres-database/requirements/_migration.txt b/packages/postgres-database/requirements/_migration.txt index 999ad388cb4..850c491883a 100644 --- a/packages/postgres-database/requirements/_migration.txt +++ b/packages/postgres-database/requirements/_migration.txt @@ -5,18 +5,18 @@ # pip-compile --output-file=requirements/_migration.txt requirements/_migration.in # alembic==1.4.2 # via -r requirements/_migration.in -certifi==2020.4.5.1 # via requests +certifi==2020.6.20 # via requests chardet==3.0.4 # via requests click==7.1.2 # via -r requirements/_migration.in docker==4.2.1 # via -r requirements/_migration.in idna==2.9 # via -r requirements/_base.txt, requests, yarl -mako==1.1.2 # via alembic +mako==1.1.3 # via alembic markupsafe==1.1.1 # via mako multidict==4.7.6 # via -r requirements/_base.txt, yarl psycopg2-binary==2.8.5 # via -r requirements/_base.txt, sqlalchemy python-dateutil==2.8.1 # via alembic python-editor==1.0.4 # via alembic -requests==2.23.0 # via docker +requests==2.24.0 # via docker six==1.15.0 # via docker, python-dateutil, tenacity, websocket-client sqlalchemy[postgresql_psycopg2binary]==1.3.17 # via -r requirements/_base.txt, alembic tenacity==6.2.0 # via -r requirements/_migration.in diff --git a/packages/postgres-database/requirements/_test.in b/packages/postgres-database/requirements/_test.in index 0b4c92a022f..fadd6b3aa47 100644 --- a/packages/postgres-database/requirements/_test.in +++ b/packages/postgres-database/requirements/_test.in @@ -20,5 +20,5 @@ pytest-runner pytest-docker # CI -pylint==2.5.0 # 2.5.3 fails to run in parallel +pylint coveralls diff --git a/packages/postgres-database/requirements/_test.txt b/packages/postgres-database/requirements/_test.txt index 7de06d70860..d51075d48a3 100644 --- a/packages/postgres-database/requirements/_test.txt +++ b/packages/postgres-database/requirements/_test.txt @@ -7,10 +7,10 @@ aiohttp==3.6.2 # via pytest-aiohttp aiopg[sa]==1.0.0 # via -r requirements/_test.in alembic==1.4.2 # via -r requirements/_migration.txt -astroid==2.4.1 # via pylint +astroid==2.4.2 # via pylint async-timeout==3.0.1 # via aiohttp attrs==19.3.0 # via aiohttp, pytest, pytest-docker -certifi==2020.4.5.1 # via -r requirements/_migration.txt, requests +certifi==2020.6.20 # via -r requirements/_migration.txt, requests chardet==3.0.4 # via -r requirements/_migration.txt, aiohttp, requests click==7.1.2 # via -r requirements/_migration.txt coverage==5.1 # via -r requirements/_test.in, coveralls, pytest-cov @@ -18,37 +18,42 @@ coveralls==2.0.0 # via -r requirements/_test.in docker==4.2.1 # via -r requirements/_migration.txt docopt==0.6.2 # via coveralls faker==4.1.1 # via -r requirements/_test.in +idna-ssl==1.1.0 # via aiohttp idna==2.9 # via -r requirements/_migration.txt, requests, yarl +importlib-metadata==1.6.1 # via pluggy, pytest isort==4.3.21 # via pylint lazy-object-proxy==1.4.3 # via astroid -mako==1.1.2 # via -r requirements/_migration.txt, alembic +mako==1.1.3 # via -r requirements/_migration.txt, alembic markupsafe==1.1.1 # via -r requirements/_migration.txt, mako mccabe==0.6.1 # via pylint -more-itertools==8.3.0 # via pytest +more-itertools==8.4.0 # via pytest multidict==4.7.6 # via -r requirements/_migration.txt, aiohttp, yarl packaging==20.4 # via pytest pluggy==0.13.1 # via pytest psycopg2-binary==2.8.5 # via -r requirements/_migration.txt, aiopg, sqlalchemy -py==1.8.1 # via pytest -pylint==2.5.0 # via -r requirements/_test.in +py==1.8.2 # via pytest +pylint==2.5.3 # via -r requirements/_test.in pyparsing==2.4.7 # via packaging pytest-aiohttp==0.3.0 # via -r requirements/_test.in -pytest-cov==2.9.0 # via -r requirements/_test.in +pytest-cov==2.10.0 # via -r requirements/_test.in pytest-docker==0.7.2 # via -r requirements/_test.in -pytest-instafail==0.4.1.post0 # via -r requirements/_test.in +pytest-instafail==0.4.2 # via -r requirements/_test.in pytest-runner==5.2 # via -r requirements/_test.in pytest==5.4.3 # via -r requirements/_test.in, pytest-aiohttp, pytest-cov, pytest-instafail python-dateutil==2.8.1 # via -r requirements/_migration.txt, alembic, faker python-editor==1.0.4 # via -r requirements/_migration.txt, alembic pyyaml==5.3.1 # via -r requirements/_test.in -requests==2.23.0 # via -r requirements/_migration.txt, coveralls, docker +requests==2.24.0 # via -r requirements/_migration.txt, coveralls, docker six==1.15.0 # via -r requirements/_migration.txt, astroid, docker, packaging, python-dateutil, tenacity, websocket-client sqlalchemy[postgresql_psycopg2binary]==1.3.17 # via -r requirements/_migration.txt, aiopg, alembic tenacity==6.2.0 # via -r requirements/_migration.txt text-unidecode==1.3 # via faker toml==0.10.1 # via pylint +typed-ast==1.4.1 # via astroid +typing-extensions==3.7.4.2 # via aiohttp urllib3==1.25.9 # via -r requirements/_migration.txt, requests -wcwidth==0.1.9 # via pytest +wcwidth==0.2.4 # via pytest websocket-client==0.57.0 # via -r requirements/_migration.txt, docker wrapt==1.12.1 # via astroid yarl==1.4.2 # via -r requirements/_migration.txt, aiohttp +zipp==3.1.0 # via importlib-metadata diff --git a/packages/pytest-simcore/src/pytest_simcore/helpers/utils_pylint.py b/packages/pytest-simcore/src/pytest_simcore/helpers/utils_pylint.py index 73483c028d9..2553e383981 100644 --- a/packages/pytest-simcore/src/pytest_simcore/helpers/utils_pylint.py +++ b/packages/pytest-simcore/src/pytest_simcore/helpers/utils_pylint.py @@ -13,7 +13,7 @@ def assert_pylint_is_passing(pylintrc, package_dir, number_of_jobs: int = AUTODE command = f"pylint --jobs={number_of_jobs} --rcfile {pylintrc} -v {package_dir}".split( " " ) - pipes = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + pipes = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) std_out, _ = pipes.communicate() if pipes.returncode != 0: print(f'>>>> Exit code "{pipes.returncode}"\n{std_out.decode("utf-8")}\n<<<<') diff --git a/packages/s3wrapper/requirements/_base.txt b/packages/s3wrapper/requirements/_base.txt index 8aedfb9abb7..9349477f2f9 100644 --- a/packages/s3wrapper/requirements/_base.txt +++ b/packages/s3wrapper/requirements/_base.txt @@ -4,7 +4,7 @@ # # pip-compile --output-file=requirements/_base.txt requirements/_base.in # -certifi==2020.4.5.1 # via minio +certifi==2020.6.20 # via minio configparser==5.0.0 # via minio minio==5.0.10 # via -r requirements/_base.in python-dateutil==2.8.1 # via minio diff --git a/packages/s3wrapper/requirements/_test.in b/packages/s3wrapper/requirements/_test.in index 9c0bdb53f36..b5b1c1af315 100644 --- a/packages/s3wrapper/requirements/_test.in +++ b/packages/s3wrapper/requirements/_test.in @@ -16,5 +16,5 @@ pytest-runner requests # tools for CI -pylint==2.5.0 # 2.5.3 fails to run in parallel +pylint coveralls diff --git a/packages/s3wrapper/requirements/_test.txt b/packages/s3wrapper/requirements/_test.txt index e6d34318a92..68c746fa78e 100644 --- a/packages/s3wrapper/requirements/_test.txt +++ b/packages/s3wrapper/requirements/_test.txt @@ -4,37 +4,37 @@ # # pip-compile --output-file=requirements/_test.txt requirements/_test.in # -astroid==2.4.1 # via pylint +astroid==2.4.2 # via pylint attrs==19.3.0 # via pytest, pytest-docker -certifi==2020.4.5.1 # via -r requirements/_base.txt, minio, requests +certifi==2020.6.20 # via -r requirements/_base.txt, minio, requests chardet==3.0.4 # via requests configparser==5.0.0 # via -r requirements/_base.txt, minio coverage==5.1 # via -r requirements/_test.in, coveralls, pytest-cov coveralls==2.0.0 # via -r requirements/_test.in docopt==0.6.2 # via coveralls idna==2.9 # via requests -importlib-metadata==1.6.0 # via pluggy, pytest +importlib-metadata==1.6.1 # via pluggy, pytest isort==4.3.21 # via pylint lazy-object-proxy==1.4.3 # via astroid mccabe==0.6.1 # via pylint minio==5.0.10 # via -r requirements/_base.txt -more-itertools==8.3.0 # via pytest +more-itertools==8.4.0 # via pytest packaging==20.4 # via pytest pluggy==0.13.1 # via pytest -py==1.8.1 # via pytest -pylint==2.5.0 # via -r requirements/_test.in +py==1.8.2 # via pytest +pylint==2.5.3 # via -r requirements/_test.in pyparsing==2.4.7 # via packaging -pytest-cov==2.9.0 # via -r requirements/_test.in +pytest-cov==2.10.0 # via -r requirements/_test.in pytest-docker==0.7.2 # via -r requirements/_test.in pytest-runner==5.2 # via -r requirements/_test.in pytest==5.4.3 # via -r requirements/_test.in, pytest-cov python-dateutil==2.8.1 # via -r requirements/_base.txt, minio pytz==2020.1 # via -r requirements/_base.txt, minio -requests==2.23.0 # via -r requirements/_test.in, coveralls +requests==2.24.0 # via -r requirements/_test.in, coveralls six==1.15.0 # via -r requirements/_base.txt, astroid, packaging, python-dateutil toml==0.10.1 # via pylint typed-ast==1.4.1 # via astroid urllib3==1.25.9 # via -r requirements/_base.txt, minio, requests -wcwidth==0.1.9 # via pytest +wcwidth==0.2.4 # via pytest wrapt==1.12.1 # via astroid zipp==3.1.0 # via importlib-metadata diff --git a/packages/service-library/requirements/_base.in b/packages/service-library/requirements/_base.in index 1edd0b10c94..78d7c098b63 100644 --- a/packages/service-library/requirements/_base.in +++ b/packages/service-library/requirements/_base.in @@ -2,11 +2,11 @@ # Specifies third-party dependencies for 'service-library' # -sqlalchemy>=1.3.3 # https://nvd.nist.gov/vuln/detail/CVE-2019-7164 -pyyaml>=5.3 # Vulnerable -psycopg2-binary # enforces binary version - http://initd.org/psycopg/docs/install.html#binary-install-from-pypi -openapi-core==0.12.0 # frozen until https://github.com/ITISFoundation/osparc-simcore/pull/1396 is CLOSED - +sqlalchemy>=1.3.3 # https://nvd.nist.gov/vuln/detail/CVE-2019-7164 +pyyaml>=5.3 # Vulnerable +psycopg2-binary # enforces binary version - http://initd.org/psycopg/docs/install.html#binary-install-from-pypi +openapi-core==0.12.0 # frozen until https://github.com/ITISFoundation/osparc-simcore/pull/1396 is CLOSED +lazy-object-proxy~=1.4.3 # cannot upgrade due to contraints in openapi-core aiohttp aiopg[sa] diff --git a/packages/service-library/requirements/_base.txt b/packages/service-library/requirements/_base.txt index 36a65894d15..ff9829ac502 100644 --- a/packages/service-library/requirements/_base.txt +++ b/packages/service-library/requirements/_base.txt @@ -11,10 +11,12 @@ aiozipkin==0.6.0 # via -r requirements/_base.in async-timeout==3.0.1 # via aiohttp attrs==19.3.0 # via -r requirements/_base.in, aiohttp, jsonschema, openapi-core chardet==3.0.4 # via aiohttp -idna==2.9 # via yarl +idna-ssl==1.1.0 # via aiohttp +idna==2.9 # via idna-ssl, yarl +importlib-metadata==1.6.1 # via jsonschema isodate==0.6.0 # via openapi-core jsonschema==3.2.0 # via -r requirements/_base.in, openapi-spec-validator -lazy-object-proxy==1.4.3 # via openapi-core +lazy-object-proxy==1.4.3 # via -r requirements/_base.in, openapi-core multidict==4.7.6 # via aiohttp, yarl openapi-core==0.12.0 # via -r requirements/_base.in openapi-spec-validator==0.2.8 # via openapi-core @@ -27,9 +29,11 @@ sqlalchemy[postgresql_psycopg2binary]==1.3.17 # via -r requirements/_base.in, a strict-rfc3339==0.7 # via openapi-core tenacity==6.2.0 # via -r requirements/_base.in trafaret==2.0.2 # via -r requirements/_base.in +typing-extensions==3.7.4.2 # via aiohttp ujson==3.0.0 # via -r requirements/_base.in werkzeug==1.0.1 # via -r requirements/_base.in yarl==1.4.2 # via aiohttp +zipp==3.1.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/packages/service-library/requirements/_test.in b/packages/service-library/requirements/_test.in index 1e78d11fdf2..f958c7097cf 100644 --- a/packages/service-library/requirements/_test.in +++ b/packages/service-library/requirements/_test.in @@ -17,5 +17,5 @@ pytest-mock pytest-sugar # tools -pylint==2.5.0 # 2.5.3 fails to run in parallel +pylint # NOTE: The version in pylint at _text.txt is used as a reference for ci/helpers/install_pylint.bash coveralls diff --git a/packages/service-library/requirements/_test.txt b/packages/service-library/requirements/_test.txt index 2a4e82d35b0..bd2752ccc37 100644 --- a/packages/service-library/requirements/_test.txt +++ b/packages/service-library/requirements/_test.txt @@ -8,23 +8,23 @@ aiodebug==1.1.2 # via -r requirements/_base.txt aiohttp==3.6.2 # via -r requirements/_base.txt, aiozipkin, pytest-aiohttp aiopg[sa]==1.0.0 # via -r requirements/_base.txt aiozipkin==0.6.0 # via -r requirements/_base.txt -astroid==2.4.1 # via pylint +astroid==2.4.2 # via pylint async-timeout==3.0.1 # via -r requirements/_base.txt, aiohttp attrs==19.3.0 # via -r requirements/_base.txt, aiohttp, jsonschema, openapi-core, pytest, pytest-docker -certifi==2020.4.5.1 # via requests +certifi==2020.6.20 # via requests chardet==3.0.4 # via -r requirements/_base.txt, aiohttp, requests coverage==5.1 # via -r requirements/_test.in, coveralls, pytest-cov coveralls==2.0.0 # via -r requirements/_test.in docopt==0.6.2 # via coveralls -idna-ssl==1.1.0 # via -r requirements/_base.txt +idna-ssl==1.1.0 # via -r requirements/_base.txt, aiohttp idna==2.9 # via -r requirements/_base.txt, idna-ssl, requests, yarl -importlib-metadata==1.6.0 # via -r requirements/_base.txt +importlib-metadata==1.6.1 # via -r requirements/_base.txt, jsonschema, pluggy, pytest isodate==0.6.0 # via -r requirements/_base.txt, openapi-core isort==4.3.21 # via pylint jsonschema==3.2.0 # via -r requirements/_base.txt, openapi-spec-validator lazy-object-proxy==1.4.3 # via -r requirements/_base.txt, astroid, openapi-core mccabe==0.6.1 # via pylint -more-itertools==8.3.0 # via pytest +more-itertools==8.4.0 # via pytest multidict==4.7.6 # via -r requirements/_base.txt, aiohttp, yarl openapi-core==0.12.0 # via -r requirements/_base.txt openapi-spec-validator==0.2.8 # via -r requirements/_base.txt, openapi-core @@ -32,20 +32,20 @@ packaging==20.4 # via pytest, pytest-sugar pluggy==0.13.1 # via pytest prometheus-client==0.8.0 # via -r requirements/_base.txt psycopg2-binary==2.8.5 # via -r requirements/_base.txt, aiopg, sqlalchemy -py==1.8.1 # via pytest -pylint==2.5.0 # via -r requirements/_test.in +py==1.8.2 # via pytest +pylint==2.5.3 # via -r requirements/_test.in pyparsing==2.4.7 # via packaging pyrsistent==0.16.0 # via -r requirements/_base.txt, jsonschema pytest-aiohttp==0.3.0 # via -r requirements/_test.in -pytest-cov==2.9.0 # via -r requirements/_test.in +pytest-cov==2.10.0 # via -r requirements/_test.in pytest-docker==0.7.2 # via -r requirements/_test.in -pytest-instafail==0.4.1.post0 # via -r requirements/_test.in +pytest-instafail==0.4.2 # via -r requirements/_test.in pytest-mock==3.1.1 # via -r requirements/_test.in pytest-runner==5.2 # via -r requirements/_test.in pytest-sugar==0.9.3 # via -r requirements/_test.in pytest==5.4.3 # via -r requirements/_test.in, pytest-aiohttp, pytest-cov, pytest-instafail, pytest-mock, pytest-sugar pyyaml==5.3.1 # via -r requirements/_base.txt, openapi-spec-validator -requests==2.23.0 # via coveralls +requests==2.24.0 # via coveralls six==1.15.0 # via -r requirements/_base.txt, astroid, isodate, jsonschema, openapi-core, openapi-spec-validator, packaging, pyrsistent, tenacity sqlalchemy[postgresql_psycopg2binary]==1.3.17 # via -r requirements/_base.txt, aiopg strict-rfc3339==0.7 # via -r requirements/_base.txt, openapi-core @@ -53,12 +53,15 @@ tenacity==6.2.0 # via -r requirements/_base.txt termcolor==1.1.0 # via pytest-sugar toml==0.10.1 # via pylint trafaret==2.0.2 # via -r requirements/_base.txt +typed-ast==1.4.1 # via astroid +typing-extensions==3.7.4.2 # via -r requirements/_base.txt, aiohttp ujson==3.0.0 # via -r requirements/_base.txt urllib3==1.25.9 # via requests -wcwidth==0.1.9 # via pytest +wcwidth==0.2.4 # via pytest werkzeug==1.0.1 # via -r requirements/_base.txt wrapt==1.12.1 # via astroid yarl==1.4.2 # via -r requirements/_base.txt, aiohttp +zipp==3.1.0 # via -r requirements/_base.txt, importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/packages/simcore-sdk/requirements/_test.in b/packages/simcore-sdk/requirements/_test.in index 4a124236c11..6316344ba96 100644 --- a/packages/simcore-sdk/requirements/_test.in +++ b/packages/simcore-sdk/requirements/_test.in @@ -22,5 +22,5 @@ requests docker # tools for CI -pylint==2.5.0 # 2.5.3 fails to run in parallel +pylint coveralls diff --git a/packages/simcore-sdk/requirements/_test.txt b/packages/simcore-sdk/requirements/_test.txt index c54809e303d..8b8c9aef0a3 100644 --- a/packages/simcore-sdk/requirements/_test.txt +++ b/packages/simcore-sdk/requirements/_test.txt @@ -7,10 +7,10 @@ aiofiles==0.5.0 # via -r requirements/_base.txt aiohttp==3.6.2 # via -r requirements/_base.txt, pytest-aiohttp aiopg[sa]==1.0.0 # via -r requirements/_base.txt -astroid==2.4.1 # via pylint +astroid==2.4.2 # via pylint async-timeout==3.0.1 # via -r requirements/_base.txt, aiohttp attrs==19.3.0 # via -r requirements/_base.txt, aiohttp, pytest, pytest-docker -certifi==2020.4.5.1 # via requests +certifi==2020.6.20 # via requests chardet==3.0.4 # via -r requirements/_base.txt, aiohttp, requests coverage==5.1 # via -r requirements/_test.in, coveralls, pytest-cov coveralls==2.0.0 # via -r requirements/_test.in @@ -20,31 +20,31 @@ docker==4.2.1 # via -r requirements/_test.in docopt==0.6.2 # via coveralls idna-ssl==1.1.0 # via -r requirements/_base.txt, aiohttp idna==2.9 # via -r requirements/_base.txt, idna-ssl, requests, yarl -importlib-metadata==1.6.0 # via pluggy, pytest +importlib-metadata==1.6.1 # via pluggy, pytest isort==4.3.21 # via pylint lazy-object-proxy==1.4.3 # via astroid mccabe==0.6.1 # via pylint mock==4.0.2 # via -r requirements/_test.in -more-itertools==8.3.0 # via pytest +more-itertools==8.4.0 # via pytest multidict==4.7.6 # via -r requirements/_base.txt, aiohttp, yarl networkx==2.4 # via -r requirements/_base.txt packaging==20.4 # via pytest, pytest-sugar pluggy==0.13.1 # via pytest psycopg2-binary==2.8.5 # via -r requirements/_base.txt, aiopg, sqlalchemy -py==1.8.1 # via pytest +py==1.8.2 # via pytest pydantic==1.5.1 # via -r requirements/_base.txt -pylint==2.5.0 # via -r requirements/_test.in +pylint==2.5.3 # via -r requirements/_test.in pyparsing==2.4.7 # via packaging pytest-aiohttp==0.3.0 # via -r requirements/_test.in -pytest-cov==2.9.0 # via -r requirements/_test.in +pytest-cov==2.10.0 # via -r requirements/_test.in pytest-docker==0.7.2 # via -r requirements/_test.in -pytest-instafail==0.4.1.post0 # via -r requirements/_test.in -pytest-mock==3.1.0 # via -r requirements/_test.in +pytest-instafail==0.4.2 # via -r requirements/_test.in +pytest-mock==3.1.1 # via -r requirements/_test.in pytest-runner==5.2 # via -r requirements/_test.in pytest-sugar==0.9.3 # via -r requirements/_test.in pytest==5.4.3 # via -r requirements/_test.in, pytest-aiohttp, pytest-cov, pytest-instafail, pytest-mock, pytest-sugar pyyaml==5.3.1 # via -r requirements/_base.txt, trafaret-config -requests==2.23.0 # via -r requirements/_test.in, coveralls, docker +requests==2.24.0 # via -r requirements/_test.in, coveralls, docker six==1.15.0 # via -r requirements/_base.txt, astroid, docker, packaging, tenacity, websocket-client sqlalchemy[postgresql_psycopg2binary]==1.3.17 # via -r requirements/_base.txt, aiopg tenacity==6.2.0 # via -r requirements/_base.txt @@ -55,7 +55,7 @@ trafaret==2.0.2 # via -r requirements/_base.txt, trafaret-config typed-ast==1.4.1 # via astroid typing-extensions==3.7.4.2 # via -r requirements/_base.txt, aiohttp urllib3==1.25.9 # via requests -wcwidth==0.1.9 # via pytest +wcwidth==0.2.4 # via pytest websocket-client==0.57.0 # via docker wrapt==1.12.1 # via astroid yarl==1.4.2 # via -r requirements/_base.txt, aiohttp diff --git a/scripts/demo/create_portal_markdown.py b/scripts/demo/create_portal_markdown.py index 75cd698039b..bce8fa96786 100644 --- a/scripts/demo/create_portal_markdown.py +++ b/scripts/demo/create_portal_markdown.py @@ -121,7 +121,7 @@ def main(mock_codes): print("", file=fh) - today = datetime.today() + today: datetime = datetime.today() file_path = current_path.parent / CONFIRMATIONS_FILENAME with _open(file_path) as fh: print("code,user_id,action,data,created_at", file=fh) diff --git a/services/api-server/src/simcore_service_api_server/core/redoc.py b/services/api-server/src/simcore_service_api_server/core/redoc.py index 45ff4d407db..b3f256d466e 100644 --- a/services/api-server/src/simcore_service_api_server/core/redoc.py +++ b/services/api-server/src/simcore_service_api_server/core/redoc.py @@ -4,7 +4,7 @@ from fastapi.applications import HTMLResponse, Request from fastapi.openapi.docs import get_redoc_html -# from ..__version__ import api_vtag +# TODO: move all these static resources away from the server! FAVICON = "https://osparc.io/resource/osparc/favicon.png" LOGO = "https://raw.githubusercontent.com/ITISFoundation/osparc-manual/b809d93619512eb60c827b7e769c6145758378d0/_media/osparc-logo.svg" @@ -14,9 +14,8 @@ def compose_long_description(description: str) -> str: desc = f"**{description}**\n" desc += "## Python Library\n" - desc += "- Documentation (https://itisfoundation.github.io/osparc-simcore-python-client/#/)\n" + desc += "- Check the [documentation](https://itisfoundation.github.io/osparc-simcore-python-client)\n" desc += "- Quick install: ``pip install git+https://github.com/ITISFoundation/osparc-simcore-python-client.git``\n" - return desc diff --git a/services/web/server/requirements/Makefile b/services/web/server/requirements/Makefile index 9e3b90f7e91..8903b3c1bc6 100644 --- a/services/web/server/requirements/Makefile +++ b/services/web/server/requirements/Makefile @@ -6,6 +6,6 @@ include ../../../../scripts/requirements.Makefile # Add here any extra explicit dependency: e.g. _migration.txt: _base.txt packages_input_reqs = $(shell grep "requirements/_base.in" _base.in | awk '{print $$2}') -$(info in-repo deps: $(packages_input_reqs)) + _base.txt: _base.in $(packages_input_reqs) diff --git a/services/web/server/requirements/_base.txt b/services/web/server/requirements/_base.txt index da1514401d2..f251b56bebc 100644 --- a/services/web/server/requirements/_base.txt +++ b/services/web/server/requirements/_base.txt @@ -16,29 +16,30 @@ aioredis==1.3.1 # via -r requirements/_base.in aiormq==3.2.2 # via aio-pika aiosmtplib==1.1.3 # via -r requirements/_base.in aiozipkin==0.6.0 # via -r requirements/../../../../packages/service-library/requirements/_base.in -amqp==2.5.2 # via kombu +amqp==2.6.0 # via kombu async-timeout==3.0.1 # via aiohttp, aioredis asyncpg==0.20.1 # via -r requirements/_base.in attrs==19.3.0 # via -r requirements/../../../../packages/service-library/requirements/_base.in, aiohttp, jsonschema, openapi-core billiard==3.6.3.0 # via celery -celery==4.4.2 # via -r requirements/_base.in +celery==4.4.5 # via -r requirements/_base.in cffi==1.14.0 # via cryptography change-case==0.5.2 # via -r requirements/_base.in chardet==3.0.4 # via aiohttp cryptography==2.9.2 # via -r requirements/_base.in, aiohttp-session -expiringdict==1.2.0 # via -r requirements/_base.in +expiringdict==1.2.1 # via -r requirements/_base.in +future==0.18.2 # via celery hiredis==1.0.1 # via aioredis idna-ssl==1.1.0 # via aiohttp idna==2.9 # via idna-ssl, yarl -importlib-metadata==1.6.0 # via jsonschema, kombu +importlib-metadata==1.6.1 # via jsonschema, kombu isodate==0.6.0 # via openapi-core jinja-app-loader==1.0.2 # via -r requirements/_base.in jinja2==2.11.2 # via aiohttp-jinja2, aiohttp-swagger json2html==1.3.0 # via -r requirements/_base.in jsondiff==1.2.0 # via -r requirements/_base.in jsonschema==3.2.0 # via -r requirements/../../../../packages/service-library/requirements/_base.in, openapi-spec-validator -kombu==4.6.8 # via celery -lazy-object-proxy==1.4.3 # via openapi-core +kombu==4.6.10 # via celery +lazy-object-proxy==1.4.3 # via -r requirements/../../../../packages/service-library/requirements/_base.in, openapi-core markupsafe==1.1.1 # via jinja2 multidict==4.7.6 # via aiohttp, yarl openapi-core==0.12.0 # via -r requirements/../../../../packages/service-library/requirements/_base.in @@ -60,8 +61,7 @@ strict-rfc3339==0.7 # via openapi-core tenacity==6.2.0 # via -r requirements/../../../../packages/service-library/requirements/_base.in trafaret==2.0.2 # via -r requirements/../../../../packages/service-library/requirements/_base.in typing-extensions==3.7.4.2 # via aiohttp -typing==3.7.4.1 # via expiringdict -ujson==2.0.3 # via -r requirements/../../../../packages/service-library/requirements/_base.in, aiohttp-swagger +ujson==3.0.0 # via -r requirements/../../../../packages/service-library/requirements/_base.in, aiohttp-swagger vine==1.3.0 # via amqp, celery werkzeug==1.0.1 # via -r requirements/../../../../packages/service-library/requirements/_base.in yarl==1.4.2 # via -r requirements/../../../../packages/postgres-database/requirements/_base.in, aio-pika, aiohttp, aiormq diff --git a/services/web/server/requirements/_test.in b/services/web/server/requirements/_test.in index eefd14bf731..f56a752e56e 100644 --- a/services/web/server/requirements/_test.in +++ b/services/web/server/requirements/_test.in @@ -30,7 +30,7 @@ docker redis # tools -pylint==2.5.0 # 2.5.3 fails to run in parallel +pylint==2.5.0 # 2.5.3 fails to run in parallel. SEE https://github.com/PyCQA/pylint/releases for updates coveralls codecov ptvsd diff --git a/services/web/server/requirements/_test.txt b/services/web/server/requirements/_test.txt index 006ae8d7cb1..b37c8c46a0e 100644 --- a/services/web/server/requirements/_test.txt +++ b/services/web/server/requirements/_test.txt @@ -16,29 +16,30 @@ aioredis==1.3.1 # via -r requirements/_base.txt aiormq==3.2.2 # via -r requirements/_base.txt, aio-pika aiosmtplib==1.1.3 # via -r requirements/_base.txt aiozipkin==0.6.0 # via -r requirements/_base.txt -amqp==2.5.2 # via -r requirements/_base.txt, kombu -astroid==2.4.1 # via pylint +amqp==2.6.0 # via -r requirements/_base.txt, kombu +astroid==2.4.2 # via pylint async-timeout==3.0.1 # via -r requirements/_base.txt, aiohttp, aioredis asyncpg==0.20.1 # via -r requirements/_base.txt attrs==19.3.0 # via -r requirements/_base.txt, aiohttp, jsonschema, openapi-core, pytest, pytest-docker billiard==3.6.3.0 # via -r requirements/_base.txt, celery -celery==4.4.2 # via -r requirements/_base.txt -certifi==2020.4.5.1 # via requests +celery==4.4.5 # via -r requirements/_base.txt +certifi==2020.6.20 # via requests cffi==1.14.0 # via -r requirements/_base.txt, cryptography change-case==0.5.2 # via -r requirements/_base.txt chardet==3.0.4 # via -r requirements/_base.txt, aiohttp, requests -codecov==2.1.3 # via -r requirements/_test.in +codecov==2.1.7 # via -r requirements/_test.in coverage==5.1 # via -r requirements/_test.in, codecov, coveralls, pytest-cov coveralls==2.0.0 # via -r requirements/_test.in cryptography==2.9.2 # via -r requirements/_base.txt, aiohttp-session -docker==4.2.0 # via -r requirements/_test.in +docker==4.2.1 # via -r requirements/_test.in docopt==0.6.2 # via coveralls -expiringdict==1.2.0 # via -r requirements/_base.txt -faker==4.1.0 # via -r requirements/_test.in +expiringdict==1.2.1 # via -r requirements/_base.txt +faker==4.1.1 # via -r requirements/_test.in +future==0.18.2 # via -r requirements/_base.txt, celery hiredis==1.0.1 # via -r requirements/_base.txt, aioredis idna-ssl==1.1.0 # via -r requirements/_base.txt, aiohttp idna==2.9 # via -r requirements/_base.txt, idna-ssl, requests, yarl -importlib-metadata==1.6.0 # via -r requirements/_base.txt, jsonschema, kombu, pluggy, pytest +importlib-metadata==1.6.1 # via -r requirements/_base.txt, jsonschema, kombu, pluggy, pytest isodate==0.6.0 # via -r requirements/_base.txt, openapi-core isort==4.3.21 # via pylint jinja-app-loader==1.0.2 # via -r requirements/_base.txt @@ -46,12 +47,12 @@ jinja2==2.11.2 # via -r requirements/_base.txt, aiohttp-jinja2, aioht json2html==1.3.0 # via -r requirements/_base.txt jsondiff==1.2.0 # via -r requirements/_base.txt jsonschema==3.2.0 # via -r requirements/_base.txt, -r requirements/_test.in, openapi-spec-validator -kombu==4.6.8 # via -r requirements/_base.txt, celery +kombu==4.6.10 # via -r requirements/_base.txt, celery lazy-object-proxy==1.4.3 # via -r requirements/_base.txt, astroid, openapi-core markupsafe==1.1.1 # via -r requirements/_base.txt, jinja2 mccabe==0.6.1 # via pylint mock==4.0.2 # via -r requirements/_test.in -more-itertools==8.3.0 # via pytest +more-itertools==8.4.0 # via pytest multidict==4.7.6 # via -r requirements/_base.txt, aiohttp, yarl openapi-core==0.12.0 # via -r requirements/_base.txt openapi-spec-validator==0.2.8 # via -r requirements/_base.txt, -r requirements/_test.in, openapi-core @@ -62,16 +63,16 @@ pluggy==0.13.1 # via pytest prometheus-client==0.8.0 # via -r requirements/_base.txt psycopg2-binary==2.8.5 # via -r requirements/_base.txt, aiopg, sqlalchemy ptvsd==4.3.2 # via -r requirements/_test.in -py==1.8.1 # via pytest +py==1.8.2 # via pytest pycparser==2.20 # via -r requirements/_base.txt, cffi pylint==2.5.0 # via -r requirements/_test.in pyparsing==2.4.7 # via packaging pyrsistent==0.16.0 # via -r requirements/_base.txt, jsonschema pytest-aiohttp==0.3.0 # via -r requirements/_test.in -pytest-cov==2.9.0 # via -r requirements/_test.in +pytest-cov==2.10.0 # via -r requirements/_test.in pytest-docker==0.7.2 # via -r requirements/_test.in -pytest-instafail==0.4.1.post0 # via -r requirements/_test.in -pytest-mock==3.1.0 # via -r requirements/_test.in +pytest-instafail==0.4.2 # via -r requirements/_test.in +pytest-mock==3.1.1 # via -r requirements/_test.in pytest-runner==5.2 # via -r requirements/_test.in pytest-sugar==0.9.3 # via -r requirements/_test.in pytest==5.4.3 # via -r requirements/_test.in, pytest-aiohttp, pytest-cov, pytest-instafail, pytest-mock, pytest-sugar @@ -80,8 +81,8 @@ python-engineio==3.13.0 # via -r requirements/_base.txt, python-socketio python-socketio==4.6.0 # via -r requirements/_base.txt pytz==2020.1 # via -r requirements/_base.txt, celery pyyaml==5.3.1 # via -r requirements/_base.txt, aiohttp-swagger, openapi-spec-validator -redis==3.5.2 # via -r requirements/_test.in -requests==2.23.0 # via codecov, coveralls, docker +redis==3.5.3 # via -r requirements/_test.in +requests==2.24.0 # via codecov, coveralls, docker semantic-version==2.8.5 # via -r requirements/_base.txt six==1.15.0 # via -r requirements/_base.txt, astroid, cryptography, docker, isodate, jsonschema, openapi-core, openapi-spec-validator, packaging, pyrsistent, python-dateutil, python-engineio, python-socketio, tenacity, websocket-client sqlalchemy[postgresql_psycopg2binary]==1.3.17 # via -r requirements/_base.txt, aiopg @@ -93,11 +94,10 @@ toml==0.10.1 # via pylint trafaret==2.0.2 # via -r requirements/_base.txt typed-ast==1.4.1 # via astroid typing-extensions==3.7.4.2 # via -r requirements/_base.txt, aiohttp -typing==3.7.4.1 # via -r requirements/_base.txt, expiringdict -ujson==2.0.3 # via -r requirements/_base.txt, aiohttp-swagger +ujson==3.0.0 # via -r requirements/_base.txt, aiohttp-swagger urllib3==1.25.9 # via requests vine==1.3.0 # via -r requirements/_base.txt, amqp, celery -wcwidth==0.1.9 # via pytest +wcwidth==0.2.4 # via pytest websocket-client==0.57.0 # via docker websockets==8.1 # via -r requirements/_test.in werkzeug==1.0.1 # via -r requirements/_base.txt diff --git a/services/web/server/src/simcore_service_webserver/__version__.py b/services/web/server/src/simcore_service_webserver/__version__.py index 8f4c858af49..9267ec38c28 100644 --- a/services/web/server/src/simcore_service_webserver/__version__.py +++ b/services/web/server/src/simcore_service_webserver/__version__.py @@ -2,7 +2,6 @@ """ import pkg_resources - from semantic_version import Version __version__: str = pkg_resources.get_distribution("simcore_service_webserver").version diff --git a/services/web/server/src/simcore_service_webserver/activity/__init__.py b/services/web/server/src/simcore_service_webserver/activity/__init__.py index 8c7520cb601..b212dc44027 100644 --- a/services/web/server/src/simcore_service_webserver/activity/__init__.py +++ b/services/web/server/src/simcore_service_webserver/activity/__init__.py @@ -2,6 +2,7 @@ import logging from aiohttp import web + from servicelib.application_keys import APP_CONFIG_KEY from servicelib.application_setup import ModuleCategory, app_module_setup from servicelib.rest_routing import ( diff --git a/services/web/server/src/simcore_service_webserver/application_config.py b/services/web/server/src/simcore_service_webserver/application_config.py index 1c3698eb905..4ea666d6f72 100644 --- a/services/web/server/src/simcore_service_webserver/application_config.py +++ b/services/web/server/src/simcore_service_webserver/application_config.py @@ -9,20 +9,21 @@ The app configuration is created before the application instance exists. - -TODO: add more strict checks with re -TODO: add support for versioning. - - check shema fits version - - parse/format version in schema """ +# TODO: add more strict checks with re +# TODO: add support for versioning. +# - check shema fits version +# - parse/format version in schema + import logging from pathlib import Path from typing import Dict import trafaret as T +from trafaret_config.simple import read_and_validate + from servicelib import application_keys # pylint:disable=unused-import from servicelib.config_schema_utils import addon_section, minimal_addon_schema -from trafaret_config.simple import read_and_validate from . import ( catalog_config, @@ -101,9 +102,9 @@ def create_schema() -> T.Dict: section_names = [k.name for k in schema.keys] - assert len(section_names) == len(set(section_names)), ( - "Found repeated section names in %s" % section_names - ) # nosec + # fmt: off + assert len(section_names) == len(set(section_names)), f"Found repeated section names in {section_names}" # nosec + # fmt: on return schema @@ -113,4 +114,4 @@ def load_default_config(environs=None) -> Dict: return read_and_validate(filepath, trafaret=app_schema, vars=environs) -app_schema = create_schema() # TODO: rename as schema +app_schema = create_schema() diff --git a/services/web/server/src/simcore_service_webserver/cli.py b/services/web/server/src/simcore_service_webserver/cli.py index 492b0632828..49facafcece 100644 --- a/services/web/server/src/simcore_service_webserver/cli.py +++ b/services/web/server/src/simcore_service_webserver/cli.py @@ -18,8 +18,8 @@ from argparse import ArgumentParser from typing import Dict, List, Optional -from aiohttp.log import access_logger from aiodebug import log_slow_callbacks +from aiohttp.log import access_logger from .application import run_service from .application_config import CLI_DEFAULT_CONFIGFILE, app_schema diff --git a/services/web/server/src/simcore_service_webserver/cli_config.py b/services/web/server/src/simcore_service_webserver/cli_config.py index 08e2f8cee03..d5c3276678a 100644 --- a/services/web/server/src/simcore_service_webserver/cli_config.py +++ b/services/web/server/src/simcore_service_webserver/cli_config.py @@ -1,6 +1,6 @@ import argparse -import os import logging +import os import trafaret_config import trafaret_config.commandline as commandline diff --git a/services/web/server/src/simcore_service_webserver/db.py b/services/web/server/src/simcore_service_webserver/db.py index c9e5bd289ba..a78e2126444 100644 --- a/services/web/server/src/simcore_service_webserver/db.py +++ b/services/web/server/src/simcore_service_webserver/db.py @@ -5,6 +5,8 @@ import logging from aiohttp import web +from tenacity import Retrying + from servicelib.aiopg_utils import ( DataSourceName, PostgresRetryPolicyUponInitialization, @@ -15,7 +17,6 @@ ) from servicelib.application_keys import APP_CONFIG_KEY, APP_DB_ENGINE_KEY from servicelib.application_setup import ModuleCategory, app_module_setup -from tenacity import Retrying from .db_config import CONFIG_SECTION_NAME from .db_models import metadata diff --git a/services/web/server/src/simcore_service_webserver/db_models.py b/services/web/server/src/simcore_service_webserver/db_models.py index 76972e49aea..18564c97303 100644 --- a/services/web/server/src/simcore_service_webserver/db_models.py +++ b/services/web/server/src/simcore_service_webserver/db_models.py @@ -4,17 +4,17 @@ from simcore_postgres_database.models.base import metadata from simcore_postgres_database.webserver_models import ( ConfirmationAction, + GroupType, UserRole, UserStatus, + api_keys, confirmations, - tokens, - users, groups, - GroupType, - user_to_groups, - tags, study_tags, - api_keys, + tags, + tokens, + user_to_groups, + users, ) # TODO: roles table that maps every role with allowed tasks e.g. read/write,...?? diff --git a/services/web/server/src/simcore_service_webserver/diagnostics_monitoring.py b/services/web/server/src/simcore_service_webserver/diagnostics_monitoring.py index e678bf44f9d..5852d8bc881 100644 --- a/services/web/server/src/simcore_service_webserver/diagnostics_monitoring.py +++ b/services/web/server/src/simcore_service_webserver/diagnostics_monitoring.py @@ -10,9 +10,10 @@ from prometheus_client import CONTENT_TYPE_LATEST, Counter, Gauge, Histogram from prometheus_client.registry import CollectorRegistry -from .diagnostics_core import DelayWindowProbe, kLATENCY_PROBE from servicelib.monitor_services import add_instrumentation +from .diagnostics_core import DelayWindowProbe, kLATENCY_PROBE + log = logging.getLogger(__name__) kSTART_TIME = f"{__name__}.start_time" @@ -44,9 +45,9 @@ async def _middleware_handler(request: web.Request, handler): resp = await handler(request) log_exception = None - assert isinstance( - resp, web.StreamResponse - ), "Forgot envelope middleware?" # nsec + # fmt: off + assert isinstance(resp, web.StreamResponse), "Forgot envelope middleware?" # nsec + # fmt: om except web.HTTPServerError as exc: # Transforms exception into response object and log exception diff --git a/services/web/server/src/simcore_service_webserver/director/config.py b/services/web/server/src/simcore_service_webserver/director/config.py index 29f23a2f603..79033b5c422 100644 --- a/services/web/server/src/simcore_service_webserver/director/config.py +++ b/services/web/server/src/simcore_service_webserver/director/config.py @@ -7,9 +7,10 @@ import trafaret as T from aiohttp import ClientSession, web -from servicelib.application_keys import APP_CONFIG_KEY, APP_CLIENT_SESSION_KEY from yarl import URL +from servicelib.application_keys import APP_CLIENT_SESSION_KEY, APP_CONFIG_KEY + APP_DIRECTOR_API_KEY = __name__ + ".director_api" CONFIG_SECTION_NAME = "director" diff --git a/services/web/server/src/simcore_service_webserver/email_config.py b/services/web/server/src/simcore_service_webserver/email_config.py index 6550b7c613a..93c6201e221 100644 --- a/services/web/server/src/simcore_service_webserver/email_config.py +++ b/services/web/server/src/simcore_service_webserver/email_config.py @@ -5,7 +5,6 @@ """ import trafaret as T - CONFIG_SECTION_NAME = "smtp" diff --git a/services/web/server/src/simcore_service_webserver/login/__init__.py b/services/web/server/src/simcore_service_webserver/login/__init__.py index 12ee926619c..ba36f4bb41a 100644 --- a/services/web/server/src/simcore_service_webserver/login/__init__.py +++ b/services/web/server/src/simcore_service_webserver/login/__init__.py @@ -9,6 +9,7 @@ import asyncpg from aiohttp import web + from servicelib.aiopg_utils import DSN from servicelib.application_keys import APP_CONFIG_KEY from servicelib.application_setup import ModuleCategory, app_module_setup diff --git a/services/web/server/src/simcore_service_webserver/login/decorators.py b/services/web/server/src/simcore_service_webserver/login/decorators.py index 275957047b4..924c935f30d 100644 --- a/services/web/server/src/simcore_service_webserver/login/decorators.py +++ b/services/web/server/src/simcore_service_webserver/login/decorators.py @@ -1,6 +1,7 @@ from functools import wraps from aiohttp_security.api import check_authorized + from servicelib.request_keys import RQT_USERID_KEY from servicelib.requests_utils import get_request diff --git a/services/web/server/src/simcore_service_webserver/login/handlers.py b/services/web/server/src/simcore_service_webserver/login/handlers.py index ff1c5c1bacd..86e43439926 100644 --- a/services/web/server/src/simcore_service_webserver/login/handlers.py +++ b/services/web/server/src/simcore_service_webserver/login/handlers.py @@ -1,9 +1,10 @@ import logging from aiohttp import web +from yarl import URL + from servicelib import observer from servicelib.rest_utils import extract_and_validate -from yarl import URL from ..db_models import ConfirmationAction, UserRole, UserStatus from ..security_api import check_password, encrypt_password, forget, remember diff --git a/services/web/server/src/simcore_service_webserver/login/routes.py b/services/web/server/src/simcore_service_webserver/login/routes.py index 8a8554217e6..56df605b7d9 100644 --- a/services/web/server/src/simcore_service_webserver/login/routes.py +++ b/services/web/server/src/simcore_service_webserver/login/routes.py @@ -12,8 +12,8 @@ from servicelib import openapi from servicelib.rest_routing import iter_path_operations, map_handlers_with_operations -from . import handlers as login_handlers from . import api_keys_handlers +from . import handlers as login_handlers log = logging.getLogger(__name__) diff --git a/services/web/server/src/simcore_service_webserver/login/settings.py b/services/web/server/src/simcore_service_webserver/login/settings.py index cd092905e45..8a04cbbae99 100644 --- a/services/web/server/src/simcore_service_webserver/login/settings.py +++ b/services/web/server/src/simcore_service_webserver/login/settings.py @@ -1,6 +1,5 @@ from aiohttp import web - APP_LOGIN_CONFIG = __name__ + ".config" CFG_LOGIN_STORAGE = "STORAGE" # Needs to match login.cfg!!! diff --git a/services/web/server/src/simcore_service_webserver/login/sql.py b/services/web/server/src/simcore_service_webserver/login/sql.py index 5876bfa6dd4..b371973f298 100644 --- a/services/web/server/src/simcore_service_webserver/login/sql.py +++ b/services/web/server/src/simcore_service_webserver/login/sql.py @@ -1,5 +1,6 @@ from logging import getLogger +# FIXME: Possible SQL injection vector through string-based query construction. log = getLogger(__name__) LOG_TPL = "%s <--%s" @@ -21,7 +22,7 @@ def find_one_sql(table, filter_, fields=None): keys, values = _split_dict(filter_) fields = ", ".join(fields) if fields else "*" where = _pairs(keys) - sql = "SELECT {} FROM {} WHERE {}".format(fields, table, where) + sql = "SELECT {} FROM {} WHERE {}".format(fields, table, where) # nosec return sql, values @@ -43,7 +44,7 @@ def insert_sql(table, data, returning="id"): ('INSERT INTO tbl (foo, id) VALUES ($1, $2) RETURNING pk', ['bar', 1]) """ keys, values = _split_dict(data) - sql = "INSERT INTO {} ({}) VALUES ({}){}".format( + sql = "INSERT INTO {} ({}) VALUES ({}){}".format( # nosec table, ", ".join(keys), ", ".join(_placeholders(data)), @@ -67,7 +68,7 @@ def update_sql(table, filter_, updates): up_keys, up_vals = _split_dict(updates) changes = _pairs(up_keys, sep=", ") where = _pairs(where_keys, start=len(up_keys) + 1) - sql = "UPDATE {} SET {} WHERE {}".format(table, changes, where) + sql = "UPDATE {} SET {} WHERE {}".format(table, changes, where) # nosec return sql, up_vals + where_vals @@ -84,7 +85,7 @@ def delete_sql(table, filter_): """ keys, values = _split_dict(filter_) where = _pairs(keys) - sql = "DELETE FROM {} WHERE {}".format(table, where) + sql = "DELETE FROM {} WHERE {}".format(table, where) # nosec return sql, values diff --git a/services/web/server/src/simcore_service_webserver/login/storage.py b/services/web/server/src/simcore_service_webserver/login/storage.py index ca908ae205b..540e86550b4 100644 --- a/services/web/server/src/simcore_service_webserver/login/storage.py +++ b/services/web/server/src/simcore_service_webserver/login/storage.py @@ -1,13 +1,12 @@ -from logging import getLogger -from datetime import datetime import enum +from datetime import datetime +from logging import getLogger + import asyncpg -from .utils import get_random_string +from ..db_models import ConfirmationAction, UserRole, UserStatus from . import sql - -from ..db_models import UserRole, UserStatus, ConfirmationAction - +from .utils import get_random_string log = getLogger(__name__) diff --git a/services/web/server/src/simcore_service_webserver/login/utils.py b/services/web/server/src/simcore_service_webserver/login/utils.py index 6a3a3db971e..c1ff8854fb6 100644 --- a/services/web/server/src/simcore_service_webserver/login/utils.py +++ b/services/web/server/src/simcore_service_webserver/login/utils.py @@ -7,15 +7,15 @@ from logging import getLogger from os.path import join from pprint import pformat -from typing import Mapping, Optional, Tuple, List - -import attr +from typing import List, Mapping, Optional, Tuple import aiosmtplib +import attr import passlib.hash from aiohttp import web from aiohttp_jinja2 import render_string from passlib import pwd + from servicelib.rest_models import LogMessageType from ..resources import resources diff --git a/services/web/server/src/simcore_service_webserver/projects/__init__.py b/services/web/server/src/simcore_service_webserver/projects/__init__.py index 66cd4423026..f1ed58e39e3 100644 --- a/services/web/server/src/simcore_service_webserver/projects/__init__.py +++ b/services/web/server/src/simcore_service_webserver/projects/__init__.py @@ -4,11 +4,11 @@ It contains metadata about the study (e.g. name, description, owner, etc) and a workbench section that describes the study pipeline """ import asyncio +import json import logging from pprint import pformat import jsonschema -import json from aiohttp import ClientSession, web from tenacity import before_sleep_log, retry, stop_after_attempt, wait_fixed diff --git a/services/web/server/src/simcore_service_webserver/projects/nodes_handlers.py b/services/web/server/src/simcore_service_webserver/projects/nodes_handlers.py index 32409184359..2ee923e0ba6 100644 --- a/services/web/server/src/simcore_service_webserver/projects/nodes_handlers.py +++ b/services/web/server/src/simcore_service_webserver/projects/nodes_handlers.py @@ -6,10 +6,11 @@ :raises NotImplementedError """ -from aiohttp import web import logging -from ..login.decorators import login_required +from aiohttp import web + +from ..login.decorators import login_required log = logging.getLogger(__name__) diff --git a/services/web/server/src/simcore_service_webserver/projects/projects_access.py b/services/web/server/src/simcore_service_webserver/projects/projects_access.py index 0a71e902d8a..c09ec4a0000 100644 --- a/services/web/server/src/simcore_service_webserver/projects/projects_access.py +++ b/services/web/server/src/simcore_service_webserver/projects/projects_access.py @@ -1,7 +1,7 @@ import jsondiff from aiohttp import web -from ..security_api import get_access_model, UserRole +from ..security_api import UserRole, get_access_model async def can_update_node_inputs(context): diff --git a/services/web/server/src/simcore_service_webserver/resource_manager/garbage_collector.py b/services/web/server/src/simcore_service_webserver/resource_manager/garbage_collector.py index 14e01df6d0c..c7d3adfe2ce 100644 --- a/services/web/server/src/simcore_service_webserver/resource_manager/garbage_collector.py +++ b/services/web/server/src/simcore_service_webserver/resource_manager/garbage_collector.py @@ -13,24 +13,24 @@ from servicelib.observer import emit from servicelib.utils import logged_gather - -from .config import APP_GARBAGE_COLLECTOR_KEY, get_garbage_collector_interval -from .registry import RedisResourceRegistry, get_registry -from simcore_service_webserver.projects.projects_api import delete_project_from_db -from simcore_service_webserver.users_api import is_user_guest, delete_user -from simcore_service_webserver.projects.projects_exceptions import ProjectNotFoundError -from simcore_service_webserver.projects.projects_api import ( - get_workbench_node_ids_from_project_uuid, - is_node_id_present_in_any_project_workbench, -) from simcore_service_webserver.director.director_api import ( get_running_interactive_services, stop_service, ) from simcore_service_webserver.director.director_exceptions import ( - ServiceNotFoundError, DirectorException, + ServiceNotFoundError, +) +from simcore_service_webserver.projects.projects_api import ( + delete_project_from_db, + get_workbench_node_ids_from_project_uuid, + is_node_id_present_in_any_project_workbench, ) +from simcore_service_webserver.projects.projects_exceptions import ProjectNotFoundError +from simcore_service_webserver.users_api import delete_user, is_user_guest + +from .config import APP_GARBAGE_COLLECTOR_KEY, get_garbage_collector_interval +from .registry import RedisResourceRegistry, get_registry logger = logging.getLogger(__name__) diff --git a/services/web/server/src/simcore_service_webserver/resource_manager/redis.py b/services/web/server/src/simcore_service_webserver/resource_manager/redis.py index fef9636e658..005b0347984 100644 --- a/services/web/server/src/simcore_service_webserver/resource_manager/redis.py +++ b/services/web/server/src/simcore_service_webserver/resource_manager/redis.py @@ -2,8 +2,9 @@ import aioredis from aiohttp import web +from tenacity import Retrying, before_log, stop_after_attempt, wait_random + from servicelib.application_keys import APP_CONFIG_KEY -from tenacity import Retrying, stop_after_attempt, wait_random, before_log from .config import APP_CLIENT_REDIS_CLIENT_KEY, CONFIG_SECTION_NAME diff --git a/services/web/server/src/simcore_service_webserver/reverse_proxy/handlers/aiohttp_client_extension.py b/services/web/server/src/simcore_service_webserver/reverse_proxy/handlers/aiohttp_client_extension.py index 87f6fe328ff..a817f210215 100644 --- a/services/web/server/src/simcore_service_webserver/reverse_proxy/handlers/aiohttp_client_extension.py +++ b/services/web/server/src/simcore_service_webserver/reverse_proxy/handlers/aiohttp_client_extension.py @@ -13,13 +13,13 @@ import traceback import warnings from types import SimpleNamespace, TracebackType +from typing import List # noqa from typing import ( Any, Coroutine, Generator, Generic, Iterable, - List, # noqa Mapping, Optional, Set, @@ -77,12 +77,8 @@ strip_auth_from_url, ) from aiohttp.http import WS_KEY, HttpVersion, WebSocketReader, WebSocketWriter -from aiohttp.http_websocket import ( - WSHandshakeError, - WSMessage, # noqa - ws_ext_gen, - ws_ext_parse, -) +from aiohttp.http_websocket import WSMessage # noqa +from aiohttp.http_websocket import WSHandshakeError, ws_ext_gen, ws_ext_parse from aiohttp.streams import FlowControlDataQueue from aiohttp.tracing import Trace, TraceConfig from aiohttp.typedefs import JSONEncoder, LooseCookies, LooseHeaders, StrOrURL diff --git a/services/web/server/src/simcore_service_webserver/reverse_proxy/handlers/jupyter.py b/services/web/server/src/simcore_service_webserver/reverse_proxy/handlers/jupyter.py index 59fd867a7e0..9e9bcdc5bf2 100644 --- a/services/web/server/src/simcore_service_webserver/reverse_proxy/handlers/jupyter.py +++ b/services/web/server/src/simcore_service_webserver/reverse_proxy/handlers/jupyter.py @@ -8,9 +8,9 @@ import aiohttp from aiohttp import web -from .aiohttp_client_extension import client_request from yarl import URL +from .aiohttp_client_extension import client_request APP_SOCKETS_KEY = "simcore_service_webserver.reverse_proxy.settings.sockets" # FIXME: Image tag should determine the handler instead of the opposite!!! diff --git a/services/web/server/src/simcore_service_webserver/security_roles.py b/services/web/server/src/simcore_service_webserver/security_roles.py index 368fafde3ab..903056cd6b9 100644 --- a/services/web/server/src/simcore_service_webserver/security_roles.py +++ b/services/web/server/src/simcore_service_webserver/security_roles.py @@ -6,7 +6,6 @@ from simcore_postgres_database.models.users import UserRole - # A role defines a set of operations that the user *can* perform # - Every operation is named as a resource and an action # - Resource is named hierarchically diff --git a/services/web/server/src/simcore_service_webserver/socketio/config.py b/services/web/server/src/simcore_service_webserver/socketio/config.py index cc4e3d5526b..0b88d8db69b 100644 --- a/services/web/server/src/simcore_service_webserver/socketio/config.py +++ b/services/web/server/src/simcore_service_webserver/socketio/config.py @@ -7,9 +7,9 @@ import trafaret as T from aiohttp import web +from socketio import AsyncServer from servicelib.application_keys import APP_CONFIG_KEY -from socketio import AsyncServer CONFIG_SECTION_NAME = "socketio" APP_CLIENT_SOCKET_SERVER_KEY = __name__ + ".socketio_socketio" diff --git a/services/web/server/src/simcore_service_webserver/socketio/handlers.py b/services/web/server/src/simcore_service_webserver/socketio/handlers.py index daa271f8773..51681a1b992 100644 --- a/services/web/server/src/simcore_service_webserver/socketio/handlers.py +++ b/services/web/server/src/simcore_service_webserver/socketio/handlers.py @@ -8,20 +8,20 @@ import asyncio import logging -from typing import Dict, List, Optional, Any +from typing import Any, Dict, List, Optional from aiohttp import web +from socketio.exceptions import ConnectionRefusedError as SocketIOConnectionError from servicelib.observer import observe from servicelib.utils import fire_and_forget_task, logged_gather -from socketio.exceptions import ConnectionRefusedError as SocketIOConnectionError from ..login.decorators import RQT_USERID_KEY, login_required -from ..resource_manager.websocket_manager import managed_resource from ..resource_manager.config import get_service_deletion_timeout +from ..resource_manager.websocket_manager import managed_resource from .config import get_socket_server -from .handlers_utils import register_socketio_handler from .events import post_messages +from .handlers_utils import register_socketio_handler ANONYMOUS_USER_ID = -1 _SOCKET_IO_AIOHTTP_REQUEST_KEY = "aiohttp.request" diff --git a/services/web/server/src/simcore_service_webserver/socketio/handlers_utils.py b/services/web/server/src/simcore_service_webserver/socketio/handlers_utils.py index eb56ef26129..4f10ef951e6 100644 --- a/services/web/server/src/simcore_service_webserver/socketio/handlers_utils.py +++ b/services/web/server/src/simcore_service_webserver/socketio/handlers_utils.py @@ -6,7 +6,6 @@ from .config import APP_CLIENT_SOCKET_DECORATED_HANDLERS_KEY, get_socket_server - socketio_handlers_registry = [] diff --git a/services/web/server/src/simcore_service_webserver/storage.py b/services/web/server/src/simcore_service_webserver/storage.py index 734283adb61..b7a71934a1c 100644 --- a/services/web/server/src/simcore_service_webserver/storage.py +++ b/services/web/server/src/simcore_service_webserver/storage.py @@ -5,13 +5,13 @@ import logging from aiohttp import web + from servicelib.application_keys import APP_OPENAPI_SPECS_KEY +from servicelib.application_setup import ModuleCategory, app_module_setup from . import storage_routes from .storage_config import get_config -from servicelib.application_setup import app_module_setup, ModuleCategory - log = logging.getLogger(__name__) diff --git a/services/web/server/src/simcore_service_webserver/storage_api.py b/services/web/server/src/simcore_service_webserver/storage_api.py index cac23f492cb..d846dd524ab 100644 --- a/services/web/server/src/simcore_service_webserver/storage_api.py +++ b/services/web/server/src/simcore_service_webserver/storage_api.py @@ -5,9 +5,10 @@ from pprint import pformat from aiohttp import web -from servicelib.rest_responses import unwrap_envelope from yarl import URL +from servicelib.rest_responses import unwrap_envelope + from .storage_config import get_client_session, get_config log = logging.getLogger(__name__) diff --git a/services/web/server/src/simcore_service_webserver/storage_config.py b/services/web/server/src/simcore_service_webserver/storage_config.py index 905b0cbd113..35c48099ce3 100644 --- a/services/web/server/src/simcore_service_webserver/storage_config.py +++ b/services/web/server/src/simcore_service_webserver/storage_config.py @@ -7,6 +7,7 @@ import trafaret as T from aiohttp import ClientSession, web + from servicelib.application_keys import APP_CLIENT_SESSION_KEY, APP_CONFIG_KEY CONFIG_SECTION_NAME = "storage" diff --git a/services/web/server/src/simcore_service_webserver/storage_handlers.py b/services/web/server/src/simcore_service_webserver/storage_handlers.py index 700829442db..f1ca3d12051 100644 --- a/services/web/server/src/simcore_service_webserver/storage_handlers.py +++ b/services/web/server/src/simcore_service_webserver/storage_handlers.py @@ -4,9 +4,10 @@ """ from aiohttp import web +from yarl import URL + from servicelib.request_keys import RQT_USERID_KEY from servicelib.rest_utils import extract_and_validate -from yarl import URL from .login.decorators import login_required from .security_api import check_permission diff --git a/services/web/server/src/simcore_service_webserver/storage_routes.py b/services/web/server/src/simcore_service_webserver/storage_routes.py index a1f31ae18d8..663ccd5dbe8 100644 --- a/services/web/server/src/simcore_service_webserver/storage_routes.py +++ b/services/web/server/src/simcore_service_webserver/storage_routes.py @@ -7,6 +7,7 @@ from typing import List from aiohttp import web + from servicelib import openapi from . import storage_handlers diff --git a/services/web/server/src/simcore_service_webserver/tag_handlers.py b/services/web/server/src/simcore_service_webserver/tag_handlers.py index 14f9a835bd0..991f77202e8 100644 --- a/services/web/server/src/simcore_service_webserver/tag_handlers.py +++ b/services/web/server/src/simcore_service_webserver/tag_handlers.py @@ -1,8 +1,9 @@ import sqlalchemy as sa from aiohttp import web -from servicelib.application_keys import APP_DB_ENGINE_KEY from sqlalchemy import and_ +from servicelib.application_keys import APP_DB_ENGINE_KEY + from .db_models import tags from .login.decorators import RQT_USERID_KEY, login_required from .security_api import check_permission diff --git a/services/web/server/src/simcore_service_webserver/tracing/__init__.py b/services/web/server/src/simcore_service_webserver/tracing/__init__.py index ffb1a0621dc..717f626777c 100644 --- a/services/web/server/src/simcore_service_webserver/tracing/__init__.py +++ b/services/web/server/src/simcore_service_webserver/tracing/__init__.py @@ -4,9 +4,7 @@ from servicelib.application_keys import APP_CONFIG_KEY from servicelib.application_setup import ModuleCategory, app_module_setup -from servicelib.tracing import setup_tracing -from servicelib.tracing import schema - +from servicelib.tracing import schema, setup_tracing CONFIG_SECTION_NAME = "tracing" diff --git a/services/web/server/src/simcore_service_webserver/users_api.py b/services/web/server/src/simcore_service_webserver/users_api.py index 451a9e2aae6..ea35c123b37 100644 --- a/services/web/server/src/simcore_service_webserver/users_api.py +++ b/services/web/server/src/simcore_service_webserver/users_api.py @@ -94,6 +94,7 @@ async def update_user_profile( assert resp.rowcount == 1 # nosec + async def is_user_guest(app: web.Application, user_id: int) -> bool: """Returns True if the user exists and is a GUEST""" db = get_storage(app) diff --git a/services/web/server/tests/unit/conftest.py b/services/web/server/tests/unit/conftest.py index 0adccde9cb9..70d54fa9d22 100644 --- a/services/web/server/tests/unit/conftest.py +++ b/services/web/server/tests/unit/conftest.py @@ -11,10 +11,10 @@ import json import logging import sys +from asyncio import Future from pathlib import Path from typing import Dict from uuid import uuid4 -from asyncio import Future import pytest diff --git a/services/web/server/tests/unit/test_catalog_setup.py b/services/web/server/tests/unit/test_catalog_setup.py index 6b1aa9f3046..3e219c93c0d 100644 --- a/services/web/server/tests/unit/test_catalog_setup.py +++ b/services/web/server/tests/unit/test_catalog_setup.py @@ -7,7 +7,6 @@ import pytest from yarl import URL - from servicelib.application import create_safe_application from servicelib.client_session import APP_CLIENT_SESSION_KEY from simcore_service_webserver.__version__ import api_version_prefix diff --git a/services/web/server/tests/unit/test_healthcheck.py b/services/web/server/tests/unit/test_healthcheck.py index d4bc839fb77..4a13aa8c51e 100644 --- a/services/web/server/tests/unit/test_healthcheck.py +++ b/services/web/server/tests/unit/test_healthcheck.py @@ -10,6 +10,7 @@ import pytest from aiohttp import web from tenacity import before_log, retry, stop_after_attempt, wait_fixed +from yarl import URL from pytest_simcore.helpers.utils_assert import assert_status from servicelib.application import create_safe_application @@ -25,7 +26,6 @@ ) from simcore_service_webserver.rest import setup_rest from simcore_service_webserver.security import setup_security -from yarl import URL logger = logging.getLogger(__name__) diff --git a/services/web/server/tests/unit/test_package.py b/services/web/server/tests/unit/test_package.py index 53366274c55..d8c244b01c7 100644 --- a/services/web/server/tests/unit/test_package.py +++ b/services/web/server/tests/unit/test_package.py @@ -2,13 +2,13 @@ # pylint:disable=unused-argument # pylint:disable=redefined-outer-name -import pytest -from pytest_simcore.helpers.utils_pylint import assert_pylint_is_passing import os import re - from pathlib import Path +import pytest + +from pytest_simcore.helpers.utils_pylint import assert_pylint_is_passing from simcore_service_webserver.cli import main diff --git a/services/web/server/tests/unit/test_template_projects.py b/services/web/server/tests/unit/test_template_projects.py index 0ca947e87cb..e5edf23c420 100644 --- a/services/web/server/tests/unit/test_template_projects.py +++ b/services/web/server/tests/unit/test_template_projects.py @@ -9,6 +9,8 @@ import aiohttp import pytest from jsonschema import SchemaError, ValidationError +from yarl import URL + from servicelib.jsonschema_specs import create_jsonschema_specs from servicelib.jsonschema_validation import validate_instance from simcore_service_webserver.projects.projects_fakes import Fake @@ -17,7 +19,6 @@ variable_pattern, ) from simcore_service_webserver.resources import resources -from yarl import URL @pytest.fixture diff --git a/tests/swarm-deploy/requirements/requirements.txt b/tests/swarm-deploy/requirements/requirements.txt index 7f356bd52b0..e34055bce2b 100644 --- a/tests/swarm-deploy/requirements/requirements.txt +++ b/tests/swarm-deploy/requirements/requirements.txt @@ -4,40 +4,40 @@ # # pip-compile --output-file=requirements/requirements.txt requirements/requirements.in # -aio-pika==6.6.0 # via -r requirements/requirements.in +aio-pika==6.6.1 # via -r requirements/requirements.in aiohttp==3.6.2 # via pytest-aiohttp aiormq==3.2.2 # via aio-pika async-timeout==3.0.1 # via aiohttp attrs==19.3.0 # via aiohttp, pytest -certifi==2020.4.5.1 # via requests +certifi==2020.6.20 # via requests chardet==3.0.4 # via aiohttp, requests coverage==5.1 # via -r requirements/requirements.in, pytest-cov docker==4.2.1 # via -r requirements/requirements.in idna-ssl==1.1.0 # via aiohttp idna==2.9 # via requests, yarl -importlib-metadata==1.6.0 # via pluggy, pytest -more-itertools==8.3.0 # via pytest +importlib-metadata==1.6.1 # via pluggy, pytest +more-itertools==8.4.0 # via pytest multidict==4.7.6 # via aiohttp, yarl packaging==20.4 # via pytest, pytest-sugar pamqp==2.3.0 # via aiormq pluggy==0.13.1 # via pytest -py==1.8.1 # via pytest +py==1.8.2 # via pytest pyparsing==2.4.7 # via packaging pytest-aiohttp==0.3.0 # via -r requirements/requirements.in -pytest-cov==2.9.0 # via -r requirements/requirements.in -pytest-instafail==0.4.1.post0 # via -r requirements/requirements.in -pytest-mock==3.1.0 # via -r requirements/requirements.in +pytest-cov==2.10.0 # via -r requirements/requirements.in +pytest-instafail==0.4.2 # via -r requirements/requirements.in +pytest-mock==3.1.1 # via -r requirements/requirements.in pytest-runner==5.2 # via -r requirements/requirements.in pytest-sugar==0.9.3 # via -r requirements/requirements.in pytest==5.4.3 # via -r requirements/requirements.in, pytest-aiohttp, pytest-cov, pytest-instafail, pytest-mock, pytest-sugar pyyaml==5.3.1 # via -r requirements/requirements.in -requests==2.23.0 # via docker +requests==2.24.0 # via docker six==1.15.0 # via docker, packaging, tenacity, websocket-client tenacity==6.2.0 # via -r requirements/requirements.in termcolor==1.1.0 # via pytest-sugar typing-extensions==3.7.4.2 # via aiohttp urllib3==1.25.9 # via requests -wcwidth==0.1.9 # via pytest +wcwidth==0.2.4 # via pytest websocket-client==0.57.0 # via docker yarl==1.4.2 # via aio-pika, aiohttp, aiormq zipp==3.1.0 # via importlib-metadata