Skip to content

Is309/storage api specs #366

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 65 commits into from
Nov 27, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
2741834
Fixes typos in client after bad merge
Jul 6, 2018
9646035
Merge remote-tracking branch 'upstream/master'
Jul 6, 2018
c3ad81c
Merge remote-tracking branch 'upstream/master'
Jul 6, 2018
d7b91f7
Merge remote-tracking branch 'upstream/master'
Jul 10, 2018
a65aa8e
Merge remote-tracking branch 'upstream/master'
Jul 11, 2018
4edc12a
Merge remote-tracking branch 'upstream/master'
Jul 16, 2018
460bdea
Merge remote-tracking branch 'upstream/master'
Jul 16, 2018
408990d
Merge remote-tracking branch 'upstream/master'
Jul 18, 2018
ee1b91b
Merge remote-tracking branch 'upstream/master'
Jul 20, 2018
cf7b3f4
Merge remote-tracking branch 'upstream/master'
Aug 9, 2018
3f4eed8
Merge remote-tracking branch 'upstream/master'
Aug 22, 2018
14cbec2
Merge remote-tracking branch 'upstream/master'
Aug 23, 2018
b57188b
Merge remote-tracking branch 'upstream/master'
Sep 3, 2018
66e5cdc
Merge remote-tracking branch 'upstream/master'
Sep 4, 2018
31aeb8f
Merge remote-tracking branch 'upstream/master'
Sep 13, 2018
c0dbe36
Merge remote-tracking branch 'upstream/master'
Sep 18, 2018
81111e0
Merge remote-tracking branch 'upstream/master'
Sep 19, 2018
6b4c1bf
Merge remote-tracking branch 'upstream/master'
Sep 24, 2018
bbe7558
Merge remote-tracking branch 'upstream/master'
Sep 25, 2018
fd2befe
Merge remote-tracking branch 'upstream/master'
Oct 10, 2018
6b0dd8f
Merge remote-tracking branch 'upstream/master'
Oct 12, 2018
b706243
Merge remote-tracking branch 'upstream/master'
Oct 17, 2018
0bf32b8
Merge remote-tracking branch 'upstream/master'
Oct 17, 2018
d0664c9
Merge remote-tracking branch 'upstream/master'
Oct 19, 2018
5e895e0
Merge remote-tracking branch 'upstream/master'
Oct 19, 2018
90eb8f4
Merge remote-tracking branch 'upstream/master'
Oct 19, 2018
dc90291
Merge remote-tracking branch 'upstream/master'
Oct 19, 2018
152d2cc
Merge remote-tracking branch 'upstream/master'
pcrespov Oct 22, 2018
4628a6e
Merge remote-tracking branch 'upstream/master'
pcrespov Oct 23, 2018
9c49147
Merge remote-tracking branch 'upstream/master'
Oct 24, 2018
21aeab8
Merge branch 'master' of github.com:pcrespov/osparc-simcore
Oct 24, 2018
62eb5c5
Merge remote-tracking branch 'upstream/master'
Oct 26, 2018
65f510c
Merge remote-tracking branch 'upstream/master'
Oct 29, 2018
9e40d37
Merge remote-tracking branch 'upstream/master'
Oct 30, 2018
77d6ac1
Merge remote-tracking branch 'upstream/master'
pcrespov Oct 31, 2018
e733846
Merge branch 'master' of github.com:pcrespov/osparc-simcore
Oct 31, 2018
6ca6aad
Merge remote-tracking branch 'upstream/master'
Oct 31, 2018
d423dcc
Merge remote-tracking branch 'upstream/master'
Nov 2, 2018
0fd2975
Merge remote-tracking branch 'upstream/master'
Nov 5, 2018
4a8c093
Merge remote-tracking branch 'upstream/master'
Nov 7, 2018
cf6c63a
Merge remote-tracking branch 'upstream/master'
Nov 9, 2018
5320cef
Merge remote-tracking branch 'upstream/master'
Nov 9, 2018
e71ed59
Merge remote-tracking branch 'upstream/master'
Nov 13, 2018
0156ec8
Merge remote-tracking branch 'upstream/master'
Nov 13, 2018
ed07bfd
Merge remote-tracking branch 'upstream/master'
Nov 14, 2018
f5a7f50
Merge remote-tracking branch 'upstream/master'. Includes all storage PR
Nov 15, 2018
760a171
Merge remote-tracking branch 'upstream/master'
Nov 15, 2018
ff98b74
Merge remote-tracking branch 'upstream/master'
Nov 16, 2018
8840923
Merge remote-tracking branch 'upstream/master'
Nov 21, 2018
9447215
Merge remote-tracking branch 'upstream/master'
Nov 21, 2018
4268be3
Merge remote-tracking branch 'upstream/master'
Nov 21, 2018
2e8fd15
Merge remote-tracking branch 'upstream/master'
Nov 22, 2018
88b7c5f
Merge remote-tracking branch 'upstream/master'
Nov 23, 2018
df42c63
Moved oas3/v0 -> api/specs/storage/v0
Nov 23, 2018
552e601
servicelib: Added some utils to find repo dirs
Nov 23, 2018
ad23fdb
storage/tests/test_config passes
Nov 23, 2018
07f0154
Fixes pytest-asyncio loop issue in storage
Nov 23, 2018
e6dedaf
Fixes openapi servers in specs
Nov 23, 2018
3d634b2
Merge branch 'master' into is309/storage-api-specs
odeimaiz Nov 23, 2018
c9a5385
Merge branch 'master' into is309/storage-api-specs
pcrespov Nov 23, 2018
58c180d
tests cleanup: with pytest-aiohttp no need to mark async tests
Nov 26, 2018
ccb5904
Fixes node_ports tests.
Nov 26, 2018
96f37a2
Fixed pylint errors
Nov 26, 2018
f134c85
Merge branch 'master' into is309/storage-api-specs
pcrespov Nov 26, 2018
3ff7e12
Cleanup director/tests
Nov 27, 2018
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,12 @@ matrix:
- chmod +x docker-compose
- sudo mv docker-compose /usr/local/bin
- docker-compose --version
# shutdown postgres because sometimes is is alrady up ???
# shutdown postgres because sometimes is is already up ???
- sudo service postgresql stop
# wait for postgresql to shutdown
- while sudo lsof -Pi :5432 -sTCP:LISTEN -t; do sleep 1; done

install:
install:
- pip install --upgrade pip wheel setuptools && pip3 --version
- pip3 install pytest-travis-fold
- pip3 install packages/s3wrapper[test]
Expand All @@ -67,7 +67,7 @@ matrix:

script:
- export DOCKER_GID=1042
- docker-compose -f services/docker-compose.yml build storage
- docker-compose -f services/docker-compose.yml build storage apihub
- make pylint
- make test

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,19 @@ info:
name: MIT
url: https://github.com/ITISFoundation/osparc-simcore/blob/master/LICENSE
servers:
- description: API server
url: '/v0'
- description: Development server
url: 'http://{host}:{port}/{basePath}'
url: http://{host}:{port}/{basePath}
variables:
host:
default: 'localhost'
port:
default: '11111'
basePath:
default: 'v0'
- description: Production server
url: 'http://storage:{port}/v0'
variables:
port:
default: '8080'
enum:
- v0
default: v0
tags:
- name: admins
description: Secured Admin-only calls
Expand Down
29 changes: 29 additions & 0 deletions packages/service-library/src/servicelib/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
""" General utils

IMPORTANT: lowest level module
I order to avoid cyclic dependences, please
DO NOT IMPORT ANYTHING from .
"""
from pathlib import Path


def is_osparc_repo_dir(path: Path) -> bool:
# TODO: implement with git cli
expected = (".github", "packages", "services")
got = [p.name for p in path.iterdir() if p.is_dir()]
return all(d in got for d in expected)


def search_osparc_repo_dir(start, max_iterations=8):
""" Returns path to root repo dir or None if it does not exists

NOTE: assumes starts is a path within repo
"""
max_iterations = max(max_iterations, 1)
root_dir = Path(start)
it = 1
while not is_osparc_repo_dir(root_dir) and it<max_iterations:
root_dir = root_dir.parent
it += 1

return root_dir if is_osparc_repo_dir(root_dir) else None
13 changes: 13 additions & 0 deletions packages/service-library/tests/test_package.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,16 @@ def test_no_pdbs_in_place(package_dir):
# TODO: should return line number
assert not found, "pbd.set_trace found in %s" % pypth
dirs[:] = [d for d in dirs if d not in EXCLUDE]



from servicelib.utils import is_osparc_repo_dir, search_osparc_repo_dir

def test_utils(osparc_simcore_root_dir, package_dir):

assert is_osparc_repo_dir(osparc_simcore_root_dir)

assert search_osparc_repo_dir(package_dir) == osparc_simcore_root_dir
assert search_osparc_repo_dir(osparc_simcore_root_dir) == osparc_simcore_root_dir

assert not search_osparc_repo_dir(osparc_simcore_root_dir.parent)
14 changes: 8 additions & 6 deletions packages/simcore-sdk/tests/fixtures/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@

log = logging.getLogger(__name__)

API_VERSION = 'v0'

def _fake_logger_while_building_storage():
print("Hey Travis I'm still alive...")
print("Hey Travis I'm still alive ... don't give up on me :-)")

def _is_responsive(url, code=200):
try:
Expand All @@ -22,20 +24,20 @@ def _is_responsive(url, code=200):
return False

@pytest.fixture(scope="module")
def storage(bucket, engine, docker_ip, docker_services):
def storage(bucket, engine, docker_ip, docker_services):
host = docker_ip
port = docker_services.port_for('storage', 8080)
endpoint = "http://{}:{}".format(host, port)
endpoint = "http://{}:{}/{}/".format(host, port, API_VERSION)

# Wait until we can connect
keep_alive_timer = threading.Timer(interval=60.0, function=_fake_logger_while_building_storage)
keep_alive_timer.start()
docker_services.wait_until_responsive(
check=lambda: _is_responsive(endpoint, 404),
check=lambda: _is_responsive(endpoint, 200),
timeout=30.0,
pause=1.0,
)
keep_alive_timer.cancel()

yield endpoint
# cleanup

21 changes: 11 additions & 10 deletions packages/simcore-sdk/tests/node_ports/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
version: '3.6'
services:
storage:
# build:
# context: ../../../../
# dockerfile: services/storage/Dockerfile
# args:
# - DOCKER_GID_ARG=1500
# target: production
image: services_storage:latest
ports:
- 11111:8080
environment:
- APIHUB_HOST=apihub
- APIHUB_PORT=8043
- POSTGRES_ENDPOINT=postgres:5432
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pwd
Expand All @@ -25,9 +21,10 @@ services:
- BF_API_SECRET="none"
- BF_API_KEY="none"
restart: always
depends_on:
depends_on:
- postgres
# - minio
- apihub
# DEPENDENCIES ----------------------------------------------------
postgres:
restart: always
image: postgres:10
Expand All @@ -37,10 +34,14 @@ services:
- POSTGRES_DB=test
ports:
- "5432:5432"
# monitors databases
apihub:
image: services_apihub:latest
ports:
- '8043:8043'
# TOOLS -----------------------------------------------------------
adminer:
image: adminer
ports:
- 18080:8080
depends_on:
- postgres
- postgres
26 changes: 13 additions & 13 deletions packages/simcore-sdk/tests/node_ports/test_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,18 @@

def create_item(item_type, item_value):
key = "some key"
return Item(SchemaItem(key=key,
label="a label",
description="a description",
type=item_type,
displayOrder=2), DataItem(key=key,
return Item(SchemaItem(key=key,
label="a label",
description="a description",
type=item_type,
displayOrder=2), DataItem(key=key,
value=item_value))

def test_default_item():
with pytest.raises(exceptions.InvalidProtocolError, message="Expecting InvalidProtocolError"):
Item(None, None)

@pytest.mark.asyncio

async def test_item():
key = "my key"
label = "my label"
Expand All @@ -45,20 +45,20 @@ async def test_item():

assert await item.get() == item_value

@pytest.mark.asyncio

async def test_valid_type():
for item_type in config.TYPE_TO_PYTHON_TYPE_MAP:
item = create_item(item_type, None)
assert await item.get() is None

@pytest.mark.asyncio

async def test_invalid_type():
item = create_item("some wrong type", None)
with pytest.raises(exceptions.InvalidProtocolError, message="Expecting InvalidProtocolError") as excinfo:
await item.get()
assert "Invalid protocol used" in str(excinfo.value)

@pytest.mark.asyncio

async def test_invalid_value_type():
#pylint: disable=W0612
with pytest.raises(exceptions.InvalidItemTypeError, message="Expecting InvalidItemTypeError") as excinfo:
Expand All @@ -68,11 +68,11 @@ async def test_invalid_value_type():
("integer", 26, 26),
("number", -746.4748, -746.4748),
# ("data:*/*", __file__, {"store":"s3-z43", "path":"undefined/undefined/{filename}".format(filename=Path(__file__).name)}),
("boolean", False, False),
("boolean", False, False),
("string", "test-string", "test-string")
])
@pytest.mark.asyncio
async def test_set_new_value(bucket, item_type, item_value_to_set, expected_value): # pylint: disable=W0613

async def test_set_new_value(bucket, item_type, item_value_to_set, expected_value): # pylint: disable=W0613
mock_method = mock.Mock()
item = create_item(item_type, None)
item.new_data_cb = mock_method
Expand All @@ -87,7 +87,7 @@ async def test_set_new_value(bucket, item_type, item_value_to_set, expected_valu
("boolean", 123),
("string", True)
])
@pytest.mark.asyncio

async def test_set_new_invalid_value(bucket, item_type, item_value_to_set): # pylint: disable=W0613
item = create_item(item_type, None)
assert await item.get() is None
Expand Down
20 changes: 10 additions & 10 deletions packages/simcore-sdk/tests/node_ports/test_itemstlist.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,24 @@


def create_item(key, item_type, item_value):
return Item(SchemaItem(key=key,
label="a label",
description="a description",
type=item_type,
displayOrder=2),
DataItem(key=key,
return Item(SchemaItem(key=key,
label="a label",
description="a description",
type=item_type,
displayOrder=2),
DataItem(key=key,
value=item_value))

def create_items_list(key_item_value_tuples):
schemas = SchemaItemsList({key:SchemaItem(key=key, label="a label", description="a description", type=item_type, displayOrder=2) for (key, item_type, _) in key_item_value_tuples})
payloads = DataItemsList({key:DataItem(key=key, value=item_value) for key,_,item_value in key_item_value_tuples})
return ItemsList(schemas, payloads)


def test_default_list():
itemslist = ItemsList(SchemaItemsList(), DataItemsList())

assert not itemslist
assert not itemslist
assert not itemslist.change_notifier
assert not itemslist.get_node_from_node_uuid_cb

Expand All @@ -47,11 +47,11 @@ def test_accessing_by_key():

def test_access_by_wrong_key():
from simcore_sdk.node_ports import exceptions
itemslist = create_items_list([("1", "integer", 333), ("2", "integer", 333), ("3", "integer", 333)])
itemslist = create_items_list([("1", "integer", 333), ("2", "integer", 333), ("3", "integer", 333)])
with pytest.raises(exceptions.UnboundPortError, message="Expecting UnboundPortError"):
print(itemslist["fdoiht"])

@pytest.mark.asyncio

async def test_modifying_items_triggers_cb(): #pylint: disable=C0103
mock_method = mock.Mock()

Expand Down
Loading