2018-12-05 10:56:50 +04:00
|
|
|
from enum import Enum
|
2021-05-05 11:20:56 -07:00
|
|
|
from typing import Any, Callable, Dict, Optional, Sequence
|
2018-12-06 20:24:50 +04:00
|
|
|
|
2021-05-05 11:20:56 -07:00
|
|
|
from pydantic.fields import FieldInfo, Undefined
|
2018-12-05 10:56:50 +04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class ParamTypes(Enum):
|
|
|
|
|
query = "query"
|
|
|
|
|
header = "header"
|
|
|
|
|
path = "path"
|
|
|
|
|
cookie = "cookie"
|
|
|
|
|
|
|
|
|
|
|
2019-11-27 11:32:02 -08:00
|
|
|
class Param(FieldInfo):
|
2018-12-05 10:56:50 +04:00
|
|
|
in_: ParamTypes
|
2018-12-06 20:24:50 +04:00
|
|
|
|
2018-12-05 10:56:50 +04:00
|
|
|
def __init__(
|
|
|
|
|
self,
|
2022-05-13 18:38:22 -05:00
|
|
|
default: Any = Undefined,
|
2018-12-05 10:56:50 +04:00
|
|
|
*,
|
2020-08-03 16:59:07 +04:30
|
|
|
alias: Optional[str] = None,
|
|
|
|
|
title: Optional[str] = None,
|
|
|
|
|
description: Optional[str] = None,
|
|
|
|
|
gt: Optional[float] = None,
|
|
|
|
|
ge: Optional[float] = None,
|
|
|
|
|
lt: Optional[float] = None,
|
|
|
|
|
le: Optional[float] = None,
|
|
|
|
|
min_length: Optional[int] = None,
|
|
|
|
|
max_length: Optional[int] = None,
|
|
|
|
|
regex: Optional[str] = None,
|
2021-05-05 11:20:56 -07:00
|
|
|
example: Any = Undefined,
|
|
|
|
|
examples: Optional[Dict[str, Any]] = None,
|
2020-08-03 16:59:07 +04:30
|
|
|
deprecated: Optional[bool] = None,
|
2022-01-23 23:54:59 +08:00
|
|
|
include_in_schema: bool = True,
|
2018-12-07 19:12:16 +04:00
|
|
|
**extra: Any,
|
2018-12-05 10:56:50 +04:00
|
|
|
):
|
|
|
|
|
self.deprecated = deprecated
|
2021-05-05 11:20:56 -07:00
|
|
|
self.example = example
|
|
|
|
|
self.examples = examples
|
2022-01-23 23:54:59 +08:00
|
|
|
self.include_in_schema = include_in_schema
|
2018-12-05 10:56:50 +04:00
|
|
|
super().__init__(
|
2022-05-13 18:38:22 -05:00
|
|
|
default=default,
|
2018-12-05 10:56:50 +04:00
|
|
|
alias=alias,
|
|
|
|
|
title=title,
|
|
|
|
|
description=description,
|
|
|
|
|
gt=gt,
|
|
|
|
|
ge=ge,
|
|
|
|
|
lt=lt,
|
|
|
|
|
le=le,
|
|
|
|
|
min_length=min_length,
|
|
|
|
|
max_length=max_length,
|
|
|
|
|
regex=regex,
|
|
|
|
|
**extra,
|
|
|
|
|
)
|
|
|
|
|
|
2020-06-12 19:22:30 -04:00
|
|
|
def __repr__(self) -> str:
|
|
|
|
|
return f"{self.__class__.__name__}({self.default})"
|
|
|
|
|
|
2018-12-05 10:56:50 +04:00
|
|
|
|
|
|
|
|
class Path(Param):
|
|
|
|
|
in_ = ParamTypes.path
|
|
|
|
|
|
|
|
|
|
def __init__(
|
|
|
|
|
self,
|
2022-05-13 18:38:22 -05:00
|
|
|
default: Any = Undefined,
|
2018-12-05 10:56:50 +04:00
|
|
|
*,
|
2020-08-03 16:59:07 +04:30
|
|
|
alias: Optional[str] = None,
|
|
|
|
|
title: Optional[str] = None,
|
|
|
|
|
description: Optional[str] = None,
|
|
|
|
|
gt: Optional[float] = None,
|
|
|
|
|
ge: Optional[float] = None,
|
|
|
|
|
lt: Optional[float] = None,
|
|
|
|
|
le: Optional[float] = None,
|
|
|
|
|
min_length: Optional[int] = None,
|
|
|
|
|
max_length: Optional[int] = None,
|
|
|
|
|
regex: Optional[str] = None,
|
2021-05-05 11:20:56 -07:00
|
|
|
example: Any = Undefined,
|
|
|
|
|
examples: Optional[Dict[str, Any]] = None,
|
2020-08-03 16:59:07 +04:30
|
|
|
deprecated: Optional[bool] = None,
|
2022-01-23 23:54:59 +08:00
|
|
|
include_in_schema: bool = True,
|
2018-12-07 19:12:16 +04:00
|
|
|
**extra: Any,
|
2018-12-05 10:56:50 +04:00
|
|
|
):
|
|
|
|
|
self.in_ = self.in_
|
|
|
|
|
super().__init__(
|
2022-05-13 18:38:22 -05:00
|
|
|
default=...,
|
2018-12-05 10:56:50 +04:00
|
|
|
alias=alias,
|
|
|
|
|
title=title,
|
|
|
|
|
description=description,
|
|
|
|
|
gt=gt,
|
|
|
|
|
ge=ge,
|
|
|
|
|
lt=lt,
|
|
|
|
|
le=le,
|
|
|
|
|
min_length=min_length,
|
|
|
|
|
max_length=max_length,
|
|
|
|
|
regex=regex,
|
2018-12-13 20:05:35 +04:00
|
|
|
deprecated=deprecated,
|
2021-05-05 11:20:56 -07:00
|
|
|
example=example,
|
|
|
|
|
examples=examples,
|
2022-01-23 23:54:59 +08:00
|
|
|
include_in_schema=include_in_schema,
|
2018-12-05 10:56:50 +04:00
|
|
|
**extra,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Query(Param):
|
|
|
|
|
in_ = ParamTypes.query
|
|
|
|
|
|
|
|
|
|
def __init__(
|
|
|
|
|
self,
|
2022-05-13 18:38:22 -05:00
|
|
|
default: Any = Undefined,
|
2018-12-05 10:56:50 +04:00
|
|
|
*,
|
2020-08-03 16:59:07 +04:30
|
|
|
alias: Optional[str] = None,
|
|
|
|
|
title: Optional[str] = None,
|
|
|
|
|
description: Optional[str] = None,
|
|
|
|
|
gt: Optional[float] = None,
|
|
|
|
|
ge: Optional[float] = None,
|
|
|
|
|
lt: Optional[float] = None,
|
|
|
|
|
le: Optional[float] = None,
|
|
|
|
|
min_length: Optional[int] = None,
|
|
|
|
|
max_length: Optional[int] = None,
|
|
|
|
|
regex: Optional[str] = None,
|
2021-05-05 11:20:56 -07:00
|
|
|
example: Any = Undefined,
|
|
|
|
|
examples: Optional[Dict[str, Any]] = None,
|
2020-08-03 16:59:07 +04:30
|
|
|
deprecated: Optional[bool] = None,
|
2022-01-23 23:54:59 +08:00
|
|
|
include_in_schema: bool = True,
|
2018-12-07 19:12:16 +04:00
|
|
|
**extra: Any,
|
2018-12-05 10:56:50 +04:00
|
|
|
):
|
|
|
|
|
super().__init__(
|
2022-05-13 18:38:22 -05:00
|
|
|
default=default,
|
2018-12-05 10:56:50 +04:00
|
|
|
alias=alias,
|
|
|
|
|
title=title,
|
|
|
|
|
description=description,
|
|
|
|
|
gt=gt,
|
|
|
|
|
ge=ge,
|
|
|
|
|
lt=lt,
|
|
|
|
|
le=le,
|
|
|
|
|
min_length=min_length,
|
|
|
|
|
max_length=max_length,
|
|
|
|
|
regex=regex,
|
2018-12-13 20:05:35 +04:00
|
|
|
deprecated=deprecated,
|
2021-05-05 11:20:56 -07:00
|
|
|
example=example,
|
|
|
|
|
examples=examples,
|
2022-01-23 23:54:59 +08:00
|
|
|
include_in_schema=include_in_schema,
|
2018-12-05 10:56:50 +04:00
|
|
|
**extra,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Header(Param):
|
|
|
|
|
in_ = ParamTypes.header
|
|
|
|
|
|
|
|
|
|
def __init__(
|
|
|
|
|
self,
|
2022-05-13 18:38:22 -05:00
|
|
|
default: Any = Undefined,
|
2018-12-05 10:56:50 +04:00
|
|
|
*,
|
2020-08-03 16:59:07 +04:30
|
|
|
alias: Optional[str] = None,
|
2018-12-08 11:55:36 +04:00
|
|
|
convert_underscores: bool = True,
|
2020-08-03 16:59:07 +04:30
|
|
|
title: Optional[str] = None,
|
|
|
|
|
description: Optional[str] = None,
|
|
|
|
|
gt: Optional[float] = None,
|
|
|
|
|
ge: Optional[float] = None,
|
|
|
|
|
lt: Optional[float] = None,
|
|
|
|
|
le: Optional[float] = None,
|
|
|
|
|
min_length: Optional[int] = None,
|
|
|
|
|
max_length: Optional[int] = None,
|
|
|
|
|
regex: Optional[str] = None,
|
2021-05-05 11:20:56 -07:00
|
|
|
example: Any = Undefined,
|
|
|
|
|
examples: Optional[Dict[str, Any]] = None,
|
2020-08-03 16:59:07 +04:30
|
|
|
deprecated: Optional[bool] = None,
|
2022-01-23 23:54:59 +08:00
|
|
|
include_in_schema: bool = True,
|
2018-12-07 19:12:16 +04:00
|
|
|
**extra: Any,
|
2018-12-05 10:56:50 +04:00
|
|
|
):
|
2018-12-08 11:55:36 +04:00
|
|
|
self.convert_underscores = convert_underscores
|
2018-12-05 10:56:50 +04:00
|
|
|
super().__init__(
|
2022-05-13 18:38:22 -05:00
|
|
|
default=default,
|
2018-12-05 10:56:50 +04:00
|
|
|
alias=alias,
|
|
|
|
|
title=title,
|
|
|
|
|
description=description,
|
|
|
|
|
gt=gt,
|
|
|
|
|
ge=ge,
|
|
|
|
|
lt=lt,
|
|
|
|
|
le=le,
|
|
|
|
|
min_length=min_length,
|
|
|
|
|
max_length=max_length,
|
|
|
|
|
regex=regex,
|
2018-12-13 20:05:35 +04:00
|
|
|
deprecated=deprecated,
|
2021-05-05 11:20:56 -07:00
|
|
|
example=example,
|
|
|
|
|
examples=examples,
|
2022-01-23 23:54:59 +08:00
|
|
|
include_in_schema=include_in_schema,
|
2018-12-05 10:56:50 +04:00
|
|
|
**extra,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Cookie(Param):
|
|
|
|
|
in_ = ParamTypes.cookie
|
|
|
|
|
|
|
|
|
|
def __init__(
|
|
|
|
|
self,
|
2022-05-13 18:38:22 -05:00
|
|
|
default: Any = Undefined,
|
2018-12-05 10:56:50 +04:00
|
|
|
*,
|
2020-08-03 16:59:07 +04:30
|
|
|
alias: Optional[str] = None,
|
|
|
|
|
title: Optional[str] = None,
|
|
|
|
|
description: Optional[str] = None,
|
|
|
|
|
gt: Optional[float] = None,
|
|
|
|
|
ge: Optional[float] = None,
|
|
|
|
|
lt: Optional[float] = None,
|
|
|
|
|
le: Optional[float] = None,
|
|
|
|
|
min_length: Optional[int] = None,
|
|
|
|
|
max_length: Optional[int] = None,
|
|
|
|
|
regex: Optional[str] = None,
|
2021-05-05 11:20:56 -07:00
|
|
|
example: Any = Undefined,
|
|
|
|
|
examples: Optional[Dict[str, Any]] = None,
|
2020-08-03 16:59:07 +04:30
|
|
|
deprecated: Optional[bool] = None,
|
2022-01-23 23:54:59 +08:00
|
|
|
include_in_schema: bool = True,
|
2018-12-07 19:12:16 +04:00
|
|
|
**extra: Any,
|
2018-12-05 10:56:50 +04:00
|
|
|
):
|
|
|
|
|
super().__init__(
|
2022-05-13 18:38:22 -05:00
|
|
|
default=default,
|
2018-12-05 10:56:50 +04:00
|
|
|
alias=alias,
|
|
|
|
|
title=title,
|
|
|
|
|
description=description,
|
|
|
|
|
gt=gt,
|
|
|
|
|
ge=ge,
|
|
|
|
|
lt=lt,
|
|
|
|
|
le=le,
|
|
|
|
|
min_length=min_length,
|
|
|
|
|
max_length=max_length,
|
|
|
|
|
regex=regex,
|
2018-12-13 20:05:35 +04:00
|
|
|
deprecated=deprecated,
|
2021-05-05 11:20:56 -07:00
|
|
|
example=example,
|
|
|
|
|
examples=examples,
|
2022-01-23 23:54:59 +08:00
|
|
|
include_in_schema=include_in_schema,
|
2018-12-05 10:56:50 +04:00
|
|
|
**extra,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2019-11-27 11:32:02 -08:00
|
|
|
class Body(FieldInfo):
|
2018-12-06 20:24:50 +04:00
|
|
|
def __init__(
|
|
|
|
|
self,
|
2022-05-13 18:38:22 -05:00
|
|
|
default: Any = Undefined,
|
2018-12-06 20:24:50 +04:00
|
|
|
*,
|
2018-12-07 19:12:16 +04:00
|
|
|
embed: bool = False,
|
2018-12-06 20:24:50 +04:00
|
|
|
media_type: str = "application/json",
|
2020-08-03 16:59:07 +04:30
|
|
|
alias: Optional[str] = None,
|
|
|
|
|
title: Optional[str] = None,
|
|
|
|
|
description: Optional[str] = None,
|
|
|
|
|
gt: Optional[float] = None,
|
|
|
|
|
ge: Optional[float] = None,
|
|
|
|
|
lt: Optional[float] = None,
|
|
|
|
|
le: Optional[float] = None,
|
|
|
|
|
min_length: Optional[int] = None,
|
|
|
|
|
max_length: Optional[int] = None,
|
|
|
|
|
regex: Optional[str] = None,
|
2021-05-05 11:20:56 -07:00
|
|
|
example: Any = Undefined,
|
|
|
|
|
examples: Optional[Dict[str, Any]] = None,
|
2018-12-07 19:12:16 +04:00
|
|
|
**extra: Any,
|
2018-12-06 20:24:50 +04:00
|
|
|
):
|
|
|
|
|
self.embed = embed
|
|
|
|
|
self.media_type = media_type
|
2021-05-05 11:20:56 -07:00
|
|
|
self.example = example
|
|
|
|
|
self.examples = examples
|
2018-12-06 20:24:50 +04:00
|
|
|
super().__init__(
|
2022-05-13 18:38:22 -05:00
|
|
|
default=default,
|
2018-12-06 20:24:50 +04:00
|
|
|
alias=alias,
|
|
|
|
|
title=title,
|
|
|
|
|
description=description,
|
|
|
|
|
gt=gt,
|
|
|
|
|
ge=ge,
|
|
|
|
|
lt=lt,
|
|
|
|
|
le=le,
|
|
|
|
|
min_length=min_length,
|
|
|
|
|
max_length=max_length,
|
|
|
|
|
regex=regex,
|
|
|
|
|
**extra,
|
|
|
|
|
)
|
|
|
|
|
|
2020-06-12 19:22:30 -04:00
|
|
|
def __repr__(self) -> str:
|
|
|
|
|
return f"{self.__class__.__name__}({self.default})"
|
|
|
|
|
|
2018-12-06 20:24:50 +04:00
|
|
|
|
|
|
|
|
class Form(Body):
|
2018-12-05 10:56:50 +04:00
|
|
|
def __init__(
|
|
|
|
|
self,
|
2018-12-07 19:12:16 +04:00
|
|
|
default: Any,
|
2018-12-05 10:56:50 +04:00
|
|
|
*,
|
2018-12-06 20:24:50 +04:00
|
|
|
media_type: str = "application/x-www-form-urlencoded",
|
2020-08-03 16:59:07 +04:30
|
|
|
alias: Optional[str] = None,
|
|
|
|
|
title: Optional[str] = None,
|
|
|
|
|
description: Optional[str] = None,
|
|
|
|
|
gt: Optional[float] = None,
|
|
|
|
|
ge: Optional[float] = None,
|
|
|
|
|
lt: Optional[float] = None,
|
|
|
|
|
le: Optional[float] = None,
|
|
|
|
|
min_length: Optional[int] = None,
|
|
|
|
|
max_length: Optional[int] = None,
|
|
|
|
|
regex: Optional[str] = None,
|
2021-05-05 11:20:56 -07:00
|
|
|
example: Any = Undefined,
|
|
|
|
|
examples: Optional[Dict[str, Any]] = None,
|
2018-12-07 19:12:16 +04:00
|
|
|
**extra: Any,
|
2018-12-05 10:56:50 +04:00
|
|
|
):
|
|
|
|
|
super().__init__(
|
2022-05-13 18:38:22 -05:00
|
|
|
default=default,
|
2018-12-22 08:23:35 +04:00
|
|
|
embed=True,
|
2018-12-06 20:24:50 +04:00
|
|
|
media_type=media_type,
|
|
|
|
|
alias=alias,
|
|
|
|
|
title=title,
|
|
|
|
|
description=description,
|
|
|
|
|
gt=gt,
|
|
|
|
|
ge=ge,
|
|
|
|
|
lt=lt,
|
|
|
|
|
le=le,
|
|
|
|
|
min_length=min_length,
|
|
|
|
|
max_length=max_length,
|
|
|
|
|
regex=regex,
|
2021-05-05 11:20:56 -07:00
|
|
|
example=example,
|
|
|
|
|
examples=examples,
|
2018-12-06 20:24:50 +04:00
|
|
|
**extra,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class File(Form):
|
|
|
|
|
def __init__(
|
|
|
|
|
self,
|
2018-12-07 19:12:16 +04:00
|
|
|
default: Any,
|
2018-12-06 20:24:50 +04:00
|
|
|
*,
|
|
|
|
|
media_type: str = "multipart/form-data",
|
2020-08-03 16:59:07 +04:30
|
|
|
alias: Optional[str] = None,
|
|
|
|
|
title: Optional[str] = None,
|
|
|
|
|
description: Optional[str] = None,
|
|
|
|
|
gt: Optional[float] = None,
|
|
|
|
|
ge: Optional[float] = None,
|
|
|
|
|
lt: Optional[float] = None,
|
|
|
|
|
le: Optional[float] = None,
|
|
|
|
|
min_length: Optional[int] = None,
|
|
|
|
|
max_length: Optional[int] = None,
|
|
|
|
|
regex: Optional[str] = None,
|
2021-05-05 11:20:56 -07:00
|
|
|
example: Any = Undefined,
|
|
|
|
|
examples: Optional[Dict[str, Any]] = None,
|
2018-12-07 19:12:16 +04:00
|
|
|
**extra: Any,
|
2018-12-06 20:24:50 +04:00
|
|
|
):
|
|
|
|
|
super().__init__(
|
2022-05-13 18:38:22 -05:00
|
|
|
default=default,
|
2018-12-06 20:24:50 +04:00
|
|
|
media_type=media_type,
|
2018-12-05 10:56:50 +04:00
|
|
|
alias=alias,
|
|
|
|
|
title=title,
|
|
|
|
|
description=description,
|
|
|
|
|
gt=gt,
|
|
|
|
|
ge=ge,
|
|
|
|
|
lt=lt,
|
|
|
|
|
le=le,
|
|
|
|
|
min_length=min_length,
|
|
|
|
|
max_length=max_length,
|
|
|
|
|
regex=regex,
|
2021-05-05 11:20:56 -07:00
|
|
|
example=example,
|
|
|
|
|
examples=examples,
|
2018-12-05 10:56:50 +04:00
|
|
|
**extra,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Depends:
|
2020-08-03 16:59:07 +04:30
|
|
|
def __init__(
|
2020-12-20 19:50:00 +01:00
|
|
|
self, dependency: Optional[Callable[..., Any]] = None, *, use_cache: bool = True
|
2020-08-03 16:59:07 +04:30
|
|
|
):
|
2018-12-05 10:56:50 +04:00
|
|
|
self.dependency = dependency
|
2019-06-05 21:00:54 +04:00
|
|
|
self.use_cache = use_cache
|
2018-12-05 10:56:50 +04:00
|
|
|
|
2020-06-12 19:22:30 -04:00
|
|
|
def __repr__(self) -> str:
|
|
|
|
|
attr = getattr(self.dependency, "__name__", type(self.dependency).__name__)
|
|
|
|
|
cache = "" if self.use_cache else ", use_cache=False"
|
|
|
|
|
return f"{self.__class__.__name__}({attr}{cache})"
|
|
|
|
|
|
2018-12-05 10:56:50 +04:00
|
|
|
|
2018-12-06 20:24:50 +04:00
|
|
|
class Security(Depends):
|
2019-06-05 21:00:54 +04:00
|
|
|
def __init__(
|
|
|
|
|
self,
|
2020-12-20 19:50:00 +01:00
|
|
|
dependency: Optional[Callable[..., Any]] = None,
|
2019-06-05 21:00:54 +04:00
|
|
|
*,
|
2020-08-03 16:59:07 +04:30
|
|
|
scopes: Optional[Sequence[str]] = None,
|
2019-06-05 21:00:54 +04:00
|
|
|
use_cache: bool = True,
|
|
|
|
|
):
|
|
|
|
|
super().__init__(dependency=dependency, use_cache=use_cache)
|
2018-12-06 20:24:50 +04:00
|
|
|
self.scopes = scopes or []
|