Skip to content

Commit

Permalink
vxx/glue - paths/security, honor empty Operation security settings
Browse files Browse the repository at this point in the history
empty Operation security settings were ignored and global scope used instead
  • Loading branch information
commonism committed Dec 27, 2023
1 parent f414b03 commit da08d4c
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 7 deletions.
2 changes: 1 addition & 1 deletion aiopenapi3/v20/glue.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ def return_value(self, http_status: int = 200, content_type: str = "application/
return None

def _prepare_security(self):
security = self.operation.security or self.api._root.security
security = self.operation.security if self.operation.security is not None else self.api._root.security

if not security:
return
Expand Down
2 changes: 1 addition & 1 deletion aiopenapi3/v30/glue.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ def return_value(self, http_status: int = 200, content_type: str = "application/
return None

def _prepare_security(self) -> None:
security = self.operation.security or self.api._root.security
security = self.operation.security if self.operation.security is not None else self.api._root.security

if not security:
return
Expand Down
2 changes: 1 addition & 1 deletion aiopenapi3/v30/paths.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ class Operation(ObjectExtended, OperationBase):
responses: Dict[str, Union[Response, Reference]] = Field(...)
callbacks: Dict[str, Union["Callback", Reference]] = Field(default_factory=dict)
deprecated: Optional[bool] = Field(default=None)
security: List[SecurityRequirement] = Field(default_factory=list)
security: Optional[List[SecurityRequirement]] = Field(default=None)
servers: Optional[List[Server]] = Field(default=None)


Expand Down
2 changes: 1 addition & 1 deletion aiopenapi3/v31/paths.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ class Operation(ObjectExtended, OperationBase):
responses: Dict[str, Union[Response, Reference]] = Field(default_factory=dict)
callbacks: Dict[str, Union["Callback", Reference]] = Field(default_factory=dict)
deprecated: Optional[bool] = Field(default=None)
security: List[SecurityRequirement] = Field(default_factory=list)
security: Optional[List[SecurityRequirement]] = Field(default=None)
servers: Optional[List[Server]] = Field(default=None)


Expand Down
17 changes: 16 additions & 1 deletion tests/fixtures/paths-security.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ servers:
- url: http://127.0.0.1/api

security:
- {}
- cookieAuth: []

paths:
Expand Down Expand Up @@ -80,6 +79,22 @@ paths:
token: []


/api/v1/auth/null/:
get:
operationId: api_v1_auth_login_null
description: ''
tags:
- api
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Login'
description: ''
security: []


components:
schemas:
Login:
Expand Down
5 changes: 3 additions & 2 deletions tests/path_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,9 +169,10 @@ def test_paths_security(httpx_mock, with_paths_security):
request = httpx_mock.get_requests()[-1]
assert request.headers["Authorization"] == "Bearer %s" % (auth,)

# null session
# null session - via empty Operation Security
api.authenticate(None)
api._.api_v1_auth_login_info(data={}, parameters={})
r = api._.api_v1_auth_login_null()
request = httpx_mock.get_requests()[-1]


def test_paths_security_combined(httpx_mock, with_paths_security):
Expand Down

0 comments on commit da08d4c

Please sign in to comment.