Skip to content

Commit 9545b21

Browse files
authored
Clean up tests and add public openapi_spec (#247)
1 parent 392862e commit 9545b21

File tree

10 files changed

+43
-26
lines changed

10 files changed

+43
-26
lines changed

jupyterlab_server/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from .app import LabServerApp
55
from .licenses_app import LicensesApp
66
from .handlers import add_handlers, LabHandler, LabConfig
7+
from .spec import openapi_spec, openapi_spec_dict
78
from .translation_utils import translator
89
from .workspaces_app import WorkspaceExportApp, WorkspaceImportApp, WorkspaceListApp
910
from .workspaces_handler import slugify, WORKSPACE_EXTENSION

jupyterlab_server/spec.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import os
2+
from pathlib import Path
3+
4+
from ruamel.yaml import YAML
5+
from openapi_core import create_spec
6+
7+
HERE = Path(os.path.dirname(__file__)).resolve()
8+
path = HERE / 'rest-api.yml'
9+
yaml = YAML(typ='safe')
10+
openapi_spec_dict = yaml.load(path.read_text(encoding='utf-8'))
11+
openapi_spec = create_spec(openapi_spec_dict)

tests/utils.py renamed to jupyterlab_server/test_utils.py

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,27 @@
1-
import errno
21
import json
32
import os
43
import sys
54
from contextlib import contextmanager
65
from http.cookies import SimpleCookie
76
from pathlib import Path
8-
from urllib.parse import parse_qs, urlparse, urljoin
7+
from urllib.parse import parse_qs, urlparse
98

109
from openapi_core.validation.request.datatypes import (
1110
RequestParameters, OpenAPIRequest
1211
)
1312
from openapi_core.validation.response.datatypes import OpenAPIResponse
14-
from openapi_core import create_spec
1513
from openapi_core.validation.request.validators import RequestValidator
1614
from openapi_core.validation.response.validators import ResponseValidator
1715
import requests
18-
from ruamel.yaml import YAML
1916
import tornado
2017

18+
from jupyterlab_server.spec import openapi_spec
2119

22-
here = os.path.dirname(__file__)
20+
21+
HERE = Path(os.path.dirname(__file__)).resolve()
2322

2423
with open(
25-
os.path.abspath(os.path.join(here, '..', 'jupyterlab_server', 'test_data', 'app-settings', 'overrides.json')),
24+
HERE / 'test_data' / 'app-settings' / 'overrides.json',
2625
encoding='utf-8'
2726
) as fpt:
2827
big_unicode_string = json.load(fpt)["@jupyterlab/unicode-extension:plugin"]["comment"]
@@ -96,18 +95,13 @@ def wrap_response(response):
9695

9796
def validate_request(response):
9897
"""Validate an API request"""
99-
path = (Path(here) / '../jupyterlab_server/rest-api.yml').resolve()
100-
yaml = YAML(typ='safe')
101-
spec_dict = yaml.load(path.read_text(encoding='utf-8'))
102-
spec = create_spec(spec_dict)
103-
104-
validator = RequestValidator(spec)
105-
request = wrap_request(response.request, spec)
98+
validator = RequestValidator(openapi_spec)
99+
request = wrap_request(response.request, openapi_spec)
106100
result = validator.validate(request)
107101
print(result.errors)
108102
result.raise_for_errors()
109103

110-
validator = ResponseValidator(spec)
104+
validator = ResponseValidator(openapi_spec)
111105
response = wrap_response(response)
112106
result = validator.validate(request, response)
113107
print(result.errors)

setup.cfg

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,23 @@ install_requires =
3232
jinja2>=3.0.3
3333
json5
3434
jsonschema>=3.0.1
35+
openapi_core>=0.14.2
3536
packaging
3637
requests
38+
ruamel.yaml
3739
jupyter_server~=1.8
3840

3941
[options.extras_require]
40-
test = codecov; ipykernel; pytest>=5.3.2; pytest-cov; jupyter_server[test]; openapi_core>=0.14.2; pytest-console-scripts; strict-rfc3339; ruamel.yaml; wheel; openapi-spec-validator<0.5
42+
test =
43+
codecov
44+
ipykernel
45+
pytest>=5.3.2
46+
pytest-cov
47+
jupyter_server[test]
48+
pytest-console-scripts
49+
strict-rfc3339
50+
wheel
51+
openapi-spec-validator<0.5
4152

4253
[options.packages.find]
4354
exclude =

tests/test_labapp.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import pytest
55
import tornado
66

7-
from .utils import expected_http_error
7+
from jupyterlab_server.test_utils import expected_http_error
88

99

1010
@pytest.fixture

tests/test_listings_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
from .utils import validate_request
2+
from jupyterlab_server.test_utils import validate_request
33

44

55
async def test_get_listing(jp_fetch, labserverapp):

tests/test_settings_api.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99

1010
from strict_rfc3339 import rfc3339_to_timestamp
1111

12-
from .utils import expected_http_error
13-
from .utils import maybe_patch_ioloop, big_unicode_string
14-
from .utils import validate_request
12+
from jupyterlab_server.test_utils import expected_http_error
13+
from jupyterlab_server.test_utils import maybe_patch_ioloop, big_unicode_string
14+
from jupyterlab_server.test_utils import validate_request
1515

1616

1717
async def test_get_settings_overrides_dicts(jp_fetch, labserverapp):

tests/test_themes_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
from .utils import validate_request
2+
from jupyterlab_server.test_utils import validate_request
33

44

55
async def test_get_theme(jp_fetch, labserverapp):

tests/test_translation_api.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import subprocess
88
import sys
99

10-
from .utils import expected_http_error
1110
from jupyterlab_server.translation_utils import (_get_installed_language_pack_locales,
1211
_get_installed_package_locales,
1312
get_display_name,
@@ -16,8 +15,9 @@
1615
is_valid_locale, merge_locale_data,
1716
translator)
1817

19-
from .utils import maybe_patch_ioloop
20-
from .utils import validate_request
18+
from jupyterlab_server.test_utils import expected_http_error
19+
from jupyterlab_server.test_utils import maybe_patch_ioloop
20+
from jupyterlab_server.test_utils import validate_request
2121

2222
maybe_patch_ioloop()
2323

tests/test_workspaces_api.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77

88
from strict_rfc3339 import rfc3339_to_timestamp
99

10-
from .utils import expected_http_error, maybe_patch_ioloop, big_unicode_string
11-
from .utils import validate_request
10+
from jupyterlab_server.test_utils import expected_http_error, maybe_patch_ioloop, big_unicode_string
11+
from jupyterlab_server.test_utils import validate_request
1212

1313
maybe_patch_ioloop()
1414

0 commit comments

Comments
 (0)