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..f0f8a37 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,15 @@ 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 +40,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..44efc9b 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 @@ -8,6 +9,15 @@ 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 +40,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..256f2f3 100644 --- a/tests/test_alias.py +++ b/tests/test_alias.py @@ -1,11 +1,21 @@ -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():