Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 

371 wiersze
9.8 KiB

  1. from enum import Enum
  2. from typing import Any, Callable, Dict, Optional, Sequence
  3. from pydantic.fields import FieldInfo, Undefined
  4. class ParamTypes(Enum):
  5. query = "query"
  6. header = "header"
  7. path = "path"
  8. cookie = "cookie"
  9. class Param(FieldInfo):
  10. in_: ParamTypes
  11. def __init__(
  12. self,
  13. default: Any,
  14. *,
  15. alias: Optional[str] = None,
  16. title: Optional[str] = None,
  17. description: Optional[str] = None,
  18. gt: Optional[float] = None,
  19. ge: Optional[float] = None,
  20. lt: Optional[float] = None,
  21. le: Optional[float] = None,
  22. min_length: Optional[int] = None,
  23. max_length: Optional[int] = None,
  24. regex: Optional[str] = None,
  25. example: Any = Undefined,
  26. examples: Optional[Dict[str, Any]] = None,
  27. deprecated: Optional[bool] = None,
  28. **extra: Any,
  29. ):
  30. self.deprecated = deprecated
  31. self.example = example
  32. self.examples = examples
  33. super().__init__(
  34. default,
  35. alias=alias,
  36. title=title,
  37. description=description,
  38. gt=gt,
  39. ge=ge,
  40. lt=lt,
  41. le=le,
  42. min_length=min_length,
  43. max_length=max_length,
  44. regex=regex,
  45. **extra,
  46. )
  47. def __repr__(self) -> str:
  48. return f"{self.__class__.__name__}({self.default})"
  49. class Path(Param):
  50. in_ = ParamTypes.path
  51. def __init__(
  52. self,
  53. default: Any,
  54. *,
  55. alias: Optional[str] = None,
  56. title: Optional[str] = None,
  57. description: Optional[str] = None,
  58. gt: Optional[float] = None,
  59. ge: Optional[float] = None,
  60. lt: Optional[float] = None,
  61. le: Optional[float] = None,
  62. min_length: Optional[int] = None,
  63. max_length: Optional[int] = None,
  64. regex: Optional[str] = None,
  65. example: Any = Undefined,
  66. examples: Optional[Dict[str, Any]] = None,
  67. deprecated: Optional[bool] = None,
  68. **extra: Any,
  69. ):
  70. self.in_ = self.in_
  71. super().__init__(
  72. ...,
  73. alias=alias,
  74. title=title,
  75. description=description,
  76. gt=gt,
  77. ge=ge,
  78. lt=lt,
  79. le=le,
  80. min_length=min_length,
  81. max_length=max_length,
  82. regex=regex,
  83. deprecated=deprecated,
  84. example=example,
  85. examples=examples,
  86. **extra,
  87. )
  88. class Query(Param):
  89. in_ = ParamTypes.query
  90. def __init__(
  91. self,
  92. default: Any,
  93. *,
  94. alias: Optional[str] = None,
  95. title: Optional[str] = None,
  96. description: Optional[str] = None,
  97. gt: Optional[float] = None,
  98. ge: Optional[float] = None,
  99. lt: Optional[float] = None,
  100. le: Optional[float] = None,
  101. min_length: Optional[int] = None,
  102. max_length: Optional[int] = None,
  103. regex: Optional[str] = None,
  104. example: Any = Undefined,
  105. examples: Optional[Dict[str, Any]] = None,
  106. deprecated: Optional[bool] = None,
  107. **extra: Any,
  108. ):
  109. super().__init__(
  110. default,
  111. alias=alias,
  112. title=title,
  113. description=description,
  114. gt=gt,
  115. ge=ge,
  116. lt=lt,
  117. le=le,
  118. min_length=min_length,
  119. max_length=max_length,
  120. regex=regex,
  121. deprecated=deprecated,
  122. example=example,
  123. examples=examples,
  124. **extra,
  125. )
  126. class Header(Param):
  127. in_ = ParamTypes.header
  128. def __init__(
  129. self,
  130. default: Any,
  131. *,
  132. alias: Optional[str] = None,
  133. convert_underscores: bool = True,
  134. title: Optional[str] = None,
  135. description: Optional[str] = None,
  136. gt: Optional[float] = None,
  137. ge: Optional[float] = None,
  138. lt: Optional[float] = None,
  139. le: Optional[float] = None,
  140. min_length: Optional[int] = None,
  141. max_length: Optional[int] = None,
  142. regex: Optional[str] = None,
  143. example: Any = Undefined,
  144. examples: Optional[Dict[str, Any]] = None,
  145. deprecated: Optional[bool] = None,
  146. **extra: Any,
  147. ):
  148. self.convert_underscores = convert_underscores
  149. super().__init__(
  150. default,
  151. alias=alias,
  152. title=title,
  153. description=description,
  154. gt=gt,
  155. ge=ge,
  156. lt=lt,
  157. le=le,
  158. min_length=min_length,
  159. max_length=max_length,
  160. regex=regex,
  161. deprecated=deprecated,
  162. example=example,
  163. examples=examples,
  164. **extra,
  165. )
  166. class Cookie(Param):
  167. in_ = ParamTypes.cookie
  168. def __init__(
  169. self,
  170. default: Any,
  171. *,
  172. alias: Optional[str] = None,
  173. title: Optional[str] = None,
  174. description: Optional[str] = None,
  175. gt: Optional[float] = None,
  176. ge: Optional[float] = None,
  177. lt: Optional[float] = None,
  178. le: Optional[float] = None,
  179. min_length: Optional[int] = None,
  180. max_length: Optional[int] = None,
  181. regex: Optional[str] = None,
  182. example: Any = Undefined,
  183. examples: Optional[Dict[str, Any]] = None,
  184. deprecated: Optional[bool] = None,
  185. **extra: Any,
  186. ):
  187. super().__init__(
  188. default,
  189. alias=alias,
  190. title=title,
  191. description=description,
  192. gt=gt,
  193. ge=ge,
  194. lt=lt,
  195. le=le,
  196. min_length=min_length,
  197. max_length=max_length,
  198. regex=regex,
  199. deprecated=deprecated,
  200. example=example,
  201. examples=examples,
  202. **extra,
  203. )
  204. class Body(FieldInfo):
  205. def __init__(
  206. self,
  207. default: Any,
  208. *,
  209. embed: bool = False,
  210. media_type: str = "application/json",
  211. alias: Optional[str] = None,
  212. title: Optional[str] = None,
  213. description: Optional[str] = None,
  214. gt: Optional[float] = None,
  215. ge: Optional[float] = None,
  216. lt: Optional[float] = None,
  217. le: Optional[float] = None,
  218. min_length: Optional[int] = None,
  219. max_length: Optional[int] = None,
  220. regex: Optional[str] = None,
  221. example: Any = Undefined,
  222. examples: Optional[Dict[str, Any]] = None,
  223. **extra: Any,
  224. ):
  225. self.embed = embed
  226. self.media_type = media_type
  227. self.example = example
  228. self.examples = examples
  229. super().__init__(
  230. default,
  231. alias=alias,
  232. title=title,
  233. description=description,
  234. gt=gt,
  235. ge=ge,
  236. lt=lt,
  237. le=le,
  238. min_length=min_length,
  239. max_length=max_length,
  240. regex=regex,
  241. **extra,
  242. )
  243. def __repr__(self) -> str:
  244. return f"{self.__class__.__name__}({self.default})"
  245. class Form(Body):
  246. def __init__(
  247. self,
  248. default: Any,
  249. *,
  250. media_type: str = "application/x-www-form-urlencoded",
  251. alias: Optional[str] = None,
  252. title: Optional[str] = None,
  253. description: Optional[str] = None,
  254. gt: Optional[float] = None,
  255. ge: Optional[float] = None,
  256. lt: Optional[float] = None,
  257. le: Optional[float] = None,
  258. min_length: Optional[int] = None,
  259. max_length: Optional[int] = None,
  260. regex: Optional[str] = None,
  261. example: Any = Undefined,
  262. examples: Optional[Dict[str, Any]] = None,
  263. **extra: Any,
  264. ):
  265. super().__init__(
  266. default,
  267. embed=True,
  268. media_type=media_type,
  269. alias=alias,
  270. title=title,
  271. description=description,
  272. gt=gt,
  273. ge=ge,
  274. lt=lt,
  275. le=le,
  276. min_length=min_length,
  277. max_length=max_length,
  278. regex=regex,
  279. example=example,
  280. examples=examples,
  281. **extra,
  282. )
  283. class File(Form):
  284. def __init__(
  285. self,
  286. default: Any,
  287. *,
  288. media_type: str = "multipart/form-data",
  289. alias: Optional[str] = None,
  290. title: Optional[str] = None,
  291. description: Optional[str] = None,
  292. gt: Optional[float] = None,
  293. ge: Optional[float] = None,
  294. lt: Optional[float] = None,
  295. le: Optional[float] = None,
  296. min_length: Optional[int] = None,
  297. max_length: Optional[int] = None,
  298. regex: Optional[str] = None,
  299. example: Any = Undefined,
  300. examples: Optional[Dict[str, Any]] = None,
  301. **extra: Any,
  302. ):
  303. super().__init__(
  304. default,
  305. media_type=media_type,
  306. alias=alias,
  307. title=title,
  308. description=description,
  309. gt=gt,
  310. ge=ge,
  311. lt=lt,
  312. le=le,
  313. min_length=min_length,
  314. max_length=max_length,
  315. regex=regex,
  316. example=example,
  317. examples=examples,
  318. **extra,
  319. )
  320. class Depends:
  321. def __init__(
  322. self, dependency: Optional[Callable[..., Any]] = None, *, use_cache: bool = True
  323. ):
  324. self.dependency = dependency
  325. self.use_cache = use_cache
  326. def __repr__(self) -> str:
  327. attr = getattr(self.dependency, "__name__", type(self.dependency).__name__)
  328. cache = "" if self.use_cache else ", use_cache=False"
  329. return f"{self.__class__.__name__}({attr}{cache})"
  330. class Security(Depends):
  331. def __init__(
  332. self,
  333. dependency: Optional[Callable[..., Any]] = None,
  334. *,
  335. scopes: Optional[Sequence[str]] = None,
  336. use_cache: bool = True,
  337. ):
  338. super().__init__(dependency=dependency, use_cache=use_cache)
  339. self.scopes = scopes or []