From ff7c1f1b9cdcc7e44f97d2230894fc9393545d10 Mon Sep 17 00:00:00 2001 From: Mike Oakley <18501112+mike-oakley@users.noreply.github.com> Date: Fri, 13 May 2022 15:52:48 +0100 Subject: [PATCH 1/2] feat: Add parameter location enum. --- openapi_schema_pydantic/v3/v3_0_3/__init__.py | 2 +- openapi_schema_pydantic/v3/v3_0_3/header.py | 4 ++-- openapi_schema_pydantic/v3/v3_0_3/parameter.py | 11 ++++++++++- openapi_schema_pydantic/v3/v3_1_0/__init__.py | 2 +- openapi_schema_pydantic/v3/v3_1_0/header.py | 4 ++-- openapi_schema_pydantic/v3/v3_1_0/parameter.py | 10 +++++++++- tests/test_alias.py | 5 +++-- 7 files changed, 28 insertions(+), 10 deletions(-) diff --git a/openapi_schema_pydantic/v3/v3_0_3/__init__.py b/openapi_schema_pydantic/v3/v3_0_3/__init__.py index 666664a..c6013b4 100644 --- a/openapi_schema_pydantic/v3/v3_0_3/__init__.py +++ b/openapi_schema_pydantic/v3/v3_0_3/__init__.py @@ -17,7 +17,7 @@ from .path_item import PathItem from .operation import Operation from .external_documentation import ExternalDocumentation -from .parameter import Parameter +from .parameter import Parameter, ParameterLocation from .request_body import RequestBody from .media_type import MediaType from .encoding import Encoding diff --git a/openapi_schema_pydantic/v3/v3_0_3/header.py b/openapi_schema_pydantic/v3/v3_0_3/header.py index c413cdc..6515f45 100644 --- a/openapi_schema_pydantic/v3/v3_0_3/header.py +++ b/openapi_schema_pydantic/v3/v3_0_3/header.py @@ -1,6 +1,6 @@ from pydantic import Extra, Field -from .parameter import Parameter +from .parameter import Parameter, ParameterLocation class Header(Parameter): @@ -14,7 +14,7 @@ class Header(Parameter): """ name = Field(default="", const=True) - param_in = Field(default="header", const=True, alias="in") + param_in = Field(default=ParameterLocation.HEADER, const=True, alias="in") class Config: extra = Extra.ignore diff --git a/openapi_schema_pydantic/v3/v3_0_3/parameter.py b/openapi_schema_pydantic/v3/v3_0_3/parameter.py index 0f72df3..3b2c884 100644 --- a/openapi_schema_pydantic/v3/v3_0_3/parameter.py +++ b/openapi_schema_pydantic/v3/v3_0_3/parameter.py @@ -1,3 +1,4 @@ +import enum from typing import Any, Dict, Optional, Union from pydantic import BaseModel, Field, Extra @@ -8,6 +9,14 @@ from .schema import Schema +class ParameterLocation(str, enum.Enum): + """The location of a given parameter.""" + + QUERY = "query" + HEADER = "header" + PATH = "path" + COOKIE = "cookie" + class Parameter(BaseModel): """ Describes a single operation parameter. @@ -30,7 +39,7 @@ class Parameter(BaseModel): - For all other cases, the `name` corresponds to the parameter name used by the [`in`](#parameterIn) property. """ - param_in: str = Field(alias="in") + param_in: ParameterLocation = Field(alias="in") """ **REQUIRED**. The location of the parameter. Possible values are `"query"`, `"header"`, `"path"` or `"cookie"`. """ diff --git a/openapi_schema_pydantic/v3/v3_1_0/__init__.py b/openapi_schema_pydantic/v3/v3_1_0/__init__.py index dd938d1..702668d 100644 --- a/openapi_schema_pydantic/v3/v3_1_0/__init__.py +++ b/openapi_schema_pydantic/v3/v3_1_0/__init__.py @@ -17,7 +17,7 @@ from .path_item import PathItem from .operation import Operation from .external_documentation import ExternalDocumentation -from .parameter import Parameter +from .parameter import Parameter, ParameterLocation from .request_body import RequestBody from .media_type import MediaType from .encoding import Encoding diff --git a/openapi_schema_pydantic/v3/v3_1_0/header.py b/openapi_schema_pydantic/v3/v3_1_0/header.py index c413cdc..6515f45 100644 --- a/openapi_schema_pydantic/v3/v3_1_0/header.py +++ b/openapi_schema_pydantic/v3/v3_1_0/header.py @@ -1,6 +1,6 @@ from pydantic import Extra, Field -from .parameter import Parameter +from .parameter import Parameter, ParameterLocation class Header(Parameter): @@ -14,7 +14,7 @@ class Header(Parameter): """ name = Field(default="", const=True) - param_in = Field(default="header", const=True, alias="in") + param_in = Field(default=ParameterLocation.HEADER, const=True, alias="in") class Config: extra = Extra.ignore diff --git a/openapi_schema_pydantic/v3/v3_1_0/parameter.py b/openapi_schema_pydantic/v3/v3_1_0/parameter.py index e4f69c4..ca275df 100644 --- a/openapi_schema_pydantic/v3/v3_1_0/parameter.py +++ b/openapi_schema_pydantic/v3/v3_1_0/parameter.py @@ -1,4 +1,5 @@ from typing import Any, Dict, Optional, Union +import enum from pydantic import BaseModel, Field, Extra @@ -7,6 +8,13 @@ from .reference import Reference from .schema import Schema +class ParameterLocation(str, enum.Enum): + """The location of a given parameter.""" + + QUERY = "query" + HEADER = "header" + PATH = "path" + COOKIE = "cookie" class Parameter(BaseModel): """ @@ -30,7 +38,7 @@ class Parameter(BaseModel): - For all other cases, the `name` corresponds to the parameter name used by the [`in`](#parameterIn) property. """ - param_in: str = Field(alias="in") + param_in: ParameterLocation = Field(alias="in") """ **REQUIRED**. The location of the parameter. Possible values are `"query"`, `"header"`, `"path"` or `"cookie"`. """ diff --git a/tests/test_alias.py b/tests/test_alias.py index 2cd0b0f..47db9b2 100644 --- a/tests/test_alias.py +++ b/tests/test_alias.py @@ -1,11 +1,12 @@ -from openapi_schema_pydantic import Header, MediaType, Parameter, PathItem, Reference, Schema, SecurityScheme +from openapi_schema_pydantic import Header, MediaType, Parameter, ParameterLocation, PathItem, Reference, Schema, SecurityScheme def test_header_alias(): header_1 = Header(param_in="header") header_2 = Header.parse_obj({"param_in": "header"}) header_3 = Header.parse_obj({"in": "header"}) - assert header_1 == header_2 == header_3 + header_4 = Header.parse_obj({"in": ParameterLocation.HEADER}) + assert header_1 == header_2 == header_3 == header_4 def test_media_type_alias(): From 8c8c364cbb270229e2d1e7b971d5bb5935944913 Mon Sep 17 00:00:00 2001 From: Mike Oakley <18501112+mike-oakley@users.noreply.github.com> Date: Fri, 13 May 2022 15:59:33 +0100 Subject: [PATCH 2/2] fix: Blacken. --- openapi_schema_pydantic/v3/v3_0_3/parameter.py | 1 + openapi_schema_pydantic/v3/v3_1_0/parameter.py | 2 ++ tests/test_alias.py | 11 ++++++++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/openapi_schema_pydantic/v3/v3_0_3/parameter.py b/openapi_schema_pydantic/v3/v3_0_3/parameter.py index 3b2c884..f0f8a37 100644 --- a/openapi_schema_pydantic/v3/v3_0_3/parameter.py +++ b/openapi_schema_pydantic/v3/v3_0_3/parameter.py @@ -17,6 +17,7 @@ class ParameterLocation(str, enum.Enum): PATH = "path" COOKIE = "cookie" + class Parameter(BaseModel): """ Describes a single operation parameter. diff --git a/openapi_schema_pydantic/v3/v3_1_0/parameter.py b/openapi_schema_pydantic/v3/v3_1_0/parameter.py index ca275df..44efc9b 100644 --- a/openapi_schema_pydantic/v3/v3_1_0/parameter.py +++ b/openapi_schema_pydantic/v3/v3_1_0/parameter.py @@ -8,6 +8,7 @@ from .reference import Reference from .schema import Schema + class ParameterLocation(str, enum.Enum): """The location of a given parameter.""" @@ -16,6 +17,7 @@ class ParameterLocation(str, enum.Enum): PATH = "path" COOKIE = "cookie" + class Parameter(BaseModel): """ Describes a single operation parameter. diff --git a/tests/test_alias.py b/tests/test_alias.py index 47db9b2..256f2f3 100644 --- a/tests/test_alias.py +++ b/tests/test_alias.py @@ -1,4 +1,13 @@ -from openapi_schema_pydantic import Header, MediaType, Parameter, ParameterLocation, PathItem, Reference, Schema, SecurityScheme +from openapi_schema_pydantic import ( + Header, + MediaType, + Parameter, + ParameterLocation, + PathItem, + Reference, + Schema, + SecurityScheme, +) def test_header_alias():