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