Skip to content

Commit 4bde625

Browse files
author
Pedro Crespo
committed
WIP
1 parent 5320cef commit 4bde625

File tree

21 files changed

+247
-564
lines changed

21 files changed

+247
-564
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
Profile:
2+
type: object
3+
properties:
4+
login:
5+
type: string
6+
format: email
7+
gravatar_id:
8+
type: string
9+
tokens_url:
10+
type: string
11+
format: url
12+
example:
13+
14+
gravatar_id: 205e460b479e2e5b48aec07710c08d50
15+
tokens_url: http://simcore.io/my/tokens
16+
17+
Token:
18+
description: api keys for third party services
19+
type: object
20+
properties:
21+
service:
22+
description: where this token is needed
23+
type: string
24+
token_key:
25+
description: basic token key
26+
type: string
27+
format: uuid
28+
token_secret:
29+
type: string
30+
format: uuid
31+
required:
32+
- service
33+
- token_key
34+
example:
35+
service: 'github-api-v1'
36+
token_key: foo
37+
38+
39+
# enveloped and array versions --------------------------
40+
41+
42+
# TODO: move this as base class??
43+
ErrorEnvelopeModel:
44+
type: object
45+
properties:
46+
error:
47+
$ref: "./error.yml#/ErrorType"
48+
nullable: true
49+
50+
51+
ProfileEnveloped:
52+
allOf:
53+
- $ref: '#/ErrorEnvelopeModel'
54+
- type: object
55+
properties:
56+
data:
57+
$ref: '#/Profile'
58+
nullable: true
59+
60+
61+
TokenEnveloped:
62+
allOf:
63+
- $ref: '#/ErrorEnvelopeModel'
64+
- type: object
65+
properties:
66+
data:
67+
$ref: '#/Token'
68+
nullable: true
69+
70+
71+
TokensArrayEnveloped:
72+
allOf:
73+
- $ref: '#/ErrorEnvelopeModel'
74+
- type: object
75+
properties:
76+
data:
77+
type: array
78+
items:
79+
$ref: '#/Token'
80+
nullable: true

packages/service-library/src/servicelib/openapi.py

+36-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
""" Facade for openapi functionality
22
33
"""
4+
import warnings
45
from pathlib import Path
6+
from typing import Dict, Tuple
57

68
import openapi_core
79
import yaml
8-
from openapi_core.schema.exceptions import OpenAPIError, OpenAPIMappingError #pylint: disable=W0611
10+
from aiohttp import ClientSession
11+
from openapi_core.schema.exceptions import \
12+
OpenAPIError # pylint: disable=W0611
13+
from openapi_core.schema.exceptions import OpenAPIMappingError
914
from openapi_core.schema.specs.models import Spec
15+
from yarl import URL
1016

1117
# Supported version of openapi
1218
OAI_VERSION = '3.0.1'
@@ -18,7 +24,36 @@
1824

1925
# TODO: ensure openapi_core.__version__ is up-to-date with OAI_VERSION
2026

27+
28+
29+
def load_from_path(filepath: Path) -> Tuple[Dict, str]:
30+
with filepath.open() as f:
31+
spec_dict = yaml.safe_load(f)
32+
return spec_dict, filepath.as_uri()
33+
34+
35+
async def load_from_url(url: URL) -> Tuple[Dict, str]:
36+
async with ClientSession() as session:
37+
async with session.get(url) as resp:
38+
spec_dict = yaml.safe_load(resp.content)
39+
return spec_dict, str(url)
40+
41+
42+
async def create_openapi_specs(location: str) -> OpenApiSpec:
43+
if URL(location).host:
44+
spec_dict, spec_url = await load_from_url(URL(location))
45+
else:
46+
spec_dict, spec_url = load_from_path(Path(location))
47+
48+
return openapi_core.create_spec(spec_dict, spec_url)
49+
50+
51+
2152
def create_specs(openapi_path: Path) -> OpenApiSpec:
53+
warnings.warn("Use instead create_openapi_specs",
54+
category=DeprecationWarning)
55+
56+
2257
# TODO: spec_from_file and spec_from_url
2358
with openapi_path.open() as f:
2459
spec_dict = yaml.safe_load(f)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
3+
4+
def get_server(servers, url):
5+
# Development server: http://{host}:{port}/{basePath}
6+
for server in servers:
7+
if server.url == url:
8+
return server
9+
raise ValueError("Cannot find server %s" % url)

services/web/server/scripts/codegen.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
REPO_ROOT=../../../..
1111
SOURCE_DIR=../src/simcore_service_webserver
12-
INPUT_SPEC=${SOURCE_DIR}/.openapi/v1/test_1.0.0-oas3.yaml
12+
INPUT_SPEC=${REPO_ROOT}/api/specs/webserver/v0/openapi.yaml
1313
OUTPUT_DIR=${SOURCE_DIR}/rest
1414
OUTPUT_DIR_GEN=${SOURCE_DIR}/rest/generated_code
1515
INIT_FILE_PATH=${OUTPUT_DIR}/__init__.py

services/web/server/setup.py

-2
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ def list_packages(*parts):
3434
package_data={
3535
'': [
3636
'config/*.y*ml',
37-
'oas3/**/*.yaml',
38-
'oas3/**/**/schemas/*.y*ml',
3937
'templates/**/*.html',
4038
]
4139
},

services/web/server/src/simcore_service_webserver/oas3/v0/components/schemas/error.yaml

-74
This file was deleted.

services/web/server/src/simcore_service_webserver/oas3/v0/components/schemas/fake.yaml

-36
This file was deleted.

services/web/server/src/simcore_service_webserver/oas3/v0/components/schemas/health_check.yaml

-32
This file was deleted.

services/web/server/src/simcore_service_webserver/oas3/v0/components/schemas/log_message.yaml

-44
This file was deleted.

services/web/server/src/simcore_service_webserver/oas3/v0/components/schemas/login.yaml

-28
This file was deleted.

0 commit comments

Comments
 (0)