Skip to content

Commit f5d2611

Browse files
authored
Merge pull request #130 from MCapitani/add-path-param
add support for path-level parameters
2 parents 391d664 + f232f74 commit f5d2611

File tree

4 files changed

+52
-2
lines changed

4 files changed

+52
-2
lines changed

openapi_core/schema/paths/generators.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from openapi_core.compat import lru_cache
55
from openapi_core.schema.operations.generators import OperationsGenerator
6+
from openapi_core.schema.parameters.generators import ParametersGenerator
67
from openapi_core.schema.paths.models import Path
78

89

@@ -16,9 +17,17 @@ def generate(self, paths):
1617
paths_deref = self.dereferencer.dereference(paths)
1718
for path_name, path in iteritems(paths_deref):
1819
operations = self.operations_generator.generate(path_name, path)
19-
yield path_name, Path(path_name, list(operations))
20+
parameters = self.parameters_generator.generate_from_list(
21+
path.get('parameters', {})
22+
)
23+
yield path_name, Path(path_name, list(operations), parameters)
2024

2125
@property
2226
@lru_cache()
2327
def operations_generator(self):
2428
return OperationsGenerator(self.dereferencer, self.schemas_registry)
29+
30+
@property
31+
@lru_cache()
32+
def parameters_generator(self):
33+
return ParametersGenerator(self.dereferencer, self.schemas_registry)

openapi_core/schema/paths/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
class Path(object):
55
"""Represents an OpenAPI Path."""
66

7-
def __init__(self, name, operations):
7+
def __init__(self, name, operations, parameters=None):
88
self.name = name
99
self.operations = dict(operations)
10+
self.parameters = dict(parameters) if parameters else {}
1011

1112
def __getitem__(self, http_method):
1213
return self.operations[http_method]
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
openapi: "3.0.0"
2+
info:
3+
title: Minimal OpenAPI specification with path parameters
4+
version: "0.1"
5+
paths:
6+
/resource/{resId}:
7+
parameters:
8+
- name: resId
9+
in: path
10+
required: true
11+
description: the ID of the resource to retrieve
12+
schema:
13+
type: string
14+
get:
15+
responses:
16+
default:
17+
description: Return the resource.

tests/integration/test_path_params.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import pytest
2+
3+
from openapi_core.schema.parameters.enums import ParameterLocation
4+
from openapi_core.shortcuts import create_spec
5+
6+
7+
class TestMinimal(object):
8+
9+
spec_paths = [
10+
"data/v3.0/path_param.yaml"
11+
]
12+
13+
@pytest.mark.parametrize("spec_path", spec_paths)
14+
def test_param_present(self, factory, spec_path):
15+
spec_dict = factory.spec_from_file(spec_path)
16+
spec = create_spec(spec_dict)
17+
18+
path = spec['/resource/{resId}']
19+
20+
assert len(path.parameters) == 1
21+
param = path.parameters['resId']
22+
assert param.required
23+
assert param.location == ParameterLocation.PATH

0 commit comments

Comments
 (0)