Skip to content

Commit 62fb06f

Browse files
authored
Merge pull request #91 from MarketSquare/17_support_parameters_at_path_level
update operation parameters with path parameters
2 parents 2d7f906 + 3fdd3f4 commit 62fb06f

File tree

3 files changed

+28
-39
lines changed

3 files changed

+28
-39
lines changed

src/OpenApiLibCore/models.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -711,10 +711,13 @@ class OperationObject(BaseModel):
711711
summary: str = ""
712712
description: str = ""
713713
tags: list[str] = []
714-
parameters: list[ParameterObject] | None = None
714+
parameters: list[ParameterObject] = []
715715
requestBody: RequestBodyObject | None = None
716716
responses: dict[str, ResponseObject] = {}
717717

718+
def update_parameters(self, parameters: list[ParameterObject]) -> None:
719+
self.parameters.extend(parameters)
720+
718721

719722
class PathItemObject(BaseModel):
720723
get: OperationObject | None = None
@@ -724,13 +727,21 @@ class PathItemObject(BaseModel):
724727
delete: OperationObject | None = None
725728
summary: str = ""
726729
description: str = ""
727-
parameters: list[ParameterObject] | None = None
730+
parameters: list[ParameterObject] = []
728731

729732
def get_operations(self) -> dict[str, OperationObject]:
730733
return {
731734
k: v for k, v in self.__dict__.items() if isinstance(v, OperationObject)
732735
}
733736

737+
def update_operation_parameters(self) -> None:
738+
if not self.parameters:
739+
return
740+
741+
operations_to_update = self.get_operations()
742+
for operation_object in operations_to_update.values():
743+
operation_object.update_parameters(self.parameters)
744+
734745

735746
class InfoObject(BaseModel):
736747
title: str
@@ -742,3 +753,7 @@ class InfoObject(BaseModel):
742753
class OpenApiObject(BaseModel):
743754
info: InfoObject
744755
paths: dict[str, PathItemObject]
756+
757+
def model_post_init(self, context: object) -> None:
758+
for path_object in self.paths.values():
759+
path_object.update_operation_parameters()

src/OpenApiLibCore/parameter_utils.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,6 @@ def _register_path_parameter(parameter_object: ParameterObject) -> None:
8686
_ = get_safe_name_for_oas_name(parameter_object.name)
8787

8888
for path_item in paths_data.values():
89-
if parameters := path_item.parameters:
90-
for parameter in path_item.parameters:
91-
_register_path_parameter(parameter_object=parameter)
92-
9389
operations = path_item.get_operations()
9490
for operation in operations.values():
9591
if parameters := operation.parameters:

tests/files/altered_openapi.json

Lines changed: 11 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -363,20 +363,20 @@
363363
}
364364
},
365365
"/wagegroups/{wagegroup_id}": {
366+
"parameters": [
367+
{
368+
"name": "wagegroup_id",
369+
"in": "path",
370+
"required": true,
371+
"schema": {
372+
"type": "string",
373+
"title": "Wagegroup Id"
374+
}
375+
}
376+
],
366377
"get": {
367378
"summary": "Get Wagegroup",
368379
"operationId": "get_wagegroup_wagegroups__wagegroup_id__get",
369-
"parameters": [
370-
{
371-
"name": "wagegroup_id",
372-
"in": "path",
373-
"required": true,
374-
"schema": {
375-
"type": "string",
376-
"title": "Wagegroup Id"
377-
}
378-
}
379-
],
380380
"responses": {
381381
"200": {
382382
"description": "Successful Response",
@@ -413,17 +413,6 @@
413413
"put": {
414414
"summary": "Put Wagegroup",
415415
"operationId": "put_wagegroup_wagegroups__wagegroup_id__put",
416-
"parameters": [
417-
{
418-
"name": "wagegroup_id",
419-
"in": "path",
420-
"required": true,
421-
"schema": {
422-
"type": "string",
423-
"title": "Wagegroup Id"
424-
}
425-
}
426-
],
427416
"requestBody": {
428417
"required": true,
429418
"content": {
@@ -480,17 +469,6 @@
480469
"delete": {
481470
"summary": "Delete Wagegroup",
482471
"operationId": "delete_wagegroup_wagegroups__wagegroup_id__delete",
483-
"parameters": [
484-
{
485-
"name": "wagegroup_id",
486-
"in": "path",
487-
"required": true,
488-
"schema": {
489-
"type": "string",
490-
"title": "Wagegroup Id"
491-
}
492-
}
493-
],
494472
"responses": {
495473
"204": {
496474
"description": "Successful Response"

0 commit comments

Comments
 (0)