fastapi 0.96.1__py3-none-any.whl → 0.100.0b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of fastapi might be problematic. Click here for more details.

fastapi/utils.py CHANGED
@@ -1,7 +1,6 @@
1
1
  import re
2
2
  import warnings
3
3
  from dataclasses import is_dataclass
4
- from enum import Enum
5
4
  from typing import (
6
5
  TYPE_CHECKING,
7
6
  Any,
@@ -16,13 +15,19 @@ from typing import (
16
15
  from weakref import WeakKeyDictionary
17
16
 
18
17
  import fastapi
18
+ from fastapi._compat import (
19
+ PYDANTIC_V2,
20
+ BaseConfig,
21
+ ModelField,
22
+ PydanticSchemaGenerationError,
23
+ Undefined,
24
+ UndefinedType,
25
+ Validator,
26
+ lenient_issubclass,
27
+ )
19
28
  from fastapi.datastructures import DefaultPlaceholder, DefaultType
20
- from fastapi.openapi.constants import REF_PREFIX
21
- from pydantic import BaseConfig, BaseModel, create_model
22
- from pydantic.class_validators import Validator
23
- from pydantic.fields import FieldInfo, ModelField, UndefinedType
24
- from pydantic.schema import model_process_schema
25
- from pydantic.utils import lenient_issubclass
29
+ from pydantic import BaseModel, create_model
30
+ from pydantic.fields import FieldInfo
26
31
 
27
32
  if TYPE_CHECKING: # pragma: nocover
28
33
  from .routing import APIRoute
@@ -50,24 +55,6 @@ def is_body_allowed_for_status_code(status_code: Union[int, str, None]) -> bool:
50
55
  return not (current_status_code < 200 or current_status_code in {204, 304})
51
56
 
52
57
 
53
- def get_model_definitions(
54
- *,
55
- flat_models: Set[Union[Type[BaseModel], Type[Enum]]],
56
- model_name_map: Dict[Union[Type[BaseModel], Type[Enum]], str],
57
- ) -> Dict[str, Any]:
58
- definitions: Dict[str, Dict[str, Any]] = {}
59
- for model in flat_models:
60
- m_schema, m_definitions, m_nested_models = model_process_schema(
61
- model, model_name_map=model_name_map, ref_prefix=REF_PREFIX
62
- )
63
- definitions.update(m_definitions)
64
- model_name = model_name_map[model]
65
- if "description" in m_schema:
66
- m_schema["description"] = m_schema["description"].split("\f")[0]
67
- definitions[model_name] = m_schema
68
- return definitions
69
-
70
-
71
58
  def get_path_param_names(path: str) -> Set[str]:
72
59
  return set(re.findall("{(.*?)}", path))
73
60
 
@@ -76,8 +63,8 @@ def create_response_field(
76
63
  name: str,
77
64
  type_: Type[Any],
78
65
  class_validators: Optional[Dict[str, Validator]] = None,
79
- default: Optional[Any] = None,
80
- required: Union[bool, UndefinedType] = True,
66
+ default: Optional[Any] = Undefined,
67
+ required: Union[bool, UndefinedType] = Undefined,
81
68
  model_config: Type[BaseConfig] = BaseConfig,
82
69
  field_info: Optional[FieldInfo] = None,
83
70
  alias: Optional[str] = None,
@@ -86,20 +73,27 @@ def create_response_field(
86
73
  Create a new response field. Raises if type_ is invalid.
87
74
  """
88
75
  class_validators = class_validators or {}
89
- field_info = field_info or FieldInfo()
90
-
91
- try:
92
- return ModelField(
93
- name=name,
94
- type_=type_,
95
- class_validators=class_validators,
96
- default=default,
97
- required=required,
98
- model_config=model_config,
99
- alias=alias,
100
- field_info=field_info,
76
+ if PYDANTIC_V2:
77
+ field_info = field_info or FieldInfo(
78
+ annotation=type_, default=default, alias=alias
79
+ )
80
+ else:
81
+ field_info = field_info or FieldInfo()
82
+ kwargs = {"name": name, "field_info": field_info}
83
+ if not PYDANTIC_V2:
84
+ kwargs.update(
85
+ {
86
+ "type_": type_,
87
+ "class_validators": class_validators,
88
+ "default": default,
89
+ "required": required,
90
+ "model_config": model_config,
91
+ "alias": alias,
92
+ }
101
93
  )
102
- except RuntimeError:
94
+ try:
95
+ return ModelField(**kwargs) # type: ignore[arg-type]
96
+ except (RuntimeError, PydanticSchemaGenerationError):
103
97
  raise fastapi.exceptions.FastAPIError(
104
98
  "Invalid args for response field! Hint: "
105
99
  f"check that {type_} is a valid Pydantic field type. "
@@ -116,6 +110,8 @@ def create_cloned_field(
116
110
  *,
117
111
  cloned_types: Optional[MutableMapping[Type[BaseModel], Type[BaseModel]]] = None,
118
112
  ) -> ModelField:
113
+ if PYDANTIC_V2:
114
+ return field
119
115
  # cloned_types caches already cloned types to support recursive models and improve
120
116
  # performance by avoiding unecessary cloning
121
117
  if cloned_types is None:
@@ -136,30 +132,30 @@ def create_cloned_field(
136
132
  f, cloned_types=cloned_types
137
133
  )
138
134
  new_field = create_response_field(name=field.name, type_=use_type)
139
- new_field.has_alias = field.has_alias
140
- new_field.alias = field.alias
141
- new_field.class_validators = field.class_validators
142
- new_field.default = field.default
143
- new_field.required = field.required
144
- new_field.model_config = field.model_config
135
+ new_field.has_alias = field.has_alias # type: ignore[attr-defined]
136
+ new_field.alias = field.alias # type: ignore[misc]
137
+ new_field.class_validators = field.class_validators # type: ignore[attr-defined]
138
+ new_field.default = field.default # type: ignore[misc]
139
+ new_field.required = field.required # type: ignore[misc]
140
+ new_field.model_config = field.model_config # type: ignore[attr-defined]
145
141
  new_field.field_info = field.field_info
146
- new_field.allow_none = field.allow_none
147
- new_field.validate_always = field.validate_always
148
- if field.sub_fields:
149
- new_field.sub_fields = [
142
+ new_field.allow_none = field.allow_none # type: ignore[attr-defined]
143
+ new_field.validate_always = field.validate_always # type: ignore[attr-defined]
144
+ if field.sub_fields: # type: ignore[attr-defined]
145
+ new_field.sub_fields = [ # type: ignore[attr-defined]
150
146
  create_cloned_field(sub_field, cloned_types=cloned_types)
151
- for sub_field in field.sub_fields
147
+ for sub_field in field.sub_fields # type: ignore[attr-defined]
152
148
  ]
153
- if field.key_field:
154
- new_field.key_field = create_cloned_field(
155
- field.key_field, cloned_types=cloned_types
149
+ if field.key_field: # type: ignore[attr-defined]
150
+ new_field.key_field = create_cloned_field( # type: ignore[attr-defined]
151
+ field.key_field, cloned_types=cloned_types # type: ignore[attr-defined]
156
152
  )
157
- new_field.validators = field.validators
158
- new_field.pre_validators = field.pre_validators
159
- new_field.post_validators = field.post_validators
160
- new_field.parse_json = field.parse_json
161
- new_field.shape = field.shape
162
- new_field.populate_validators()
153
+ new_field.validators = field.validators # type: ignore[attr-defined]
154
+ new_field.pre_validators = field.pre_validators # type: ignore[attr-defined]
155
+ new_field.post_validators = field.post_validators # type: ignore[attr-defined]
156
+ new_field.parse_json = field.parse_json # type: ignore[attr-defined]
157
+ new_field.shape = field.shape # type: ignore[attr-defined]
158
+ new_field.populate_validators() # type: ignore[attr-defined]
163
159
  return new_field
164
160
 
165
161
 
@@ -220,3 +216,9 @@ def get_value_or_default(
220
216
  if not isinstance(item, DefaultPlaceholder):
221
217
  return item
222
218
  return first_item
219
+
220
+
221
+ def match_pydantic_error_url(error_type: str) -> Any:
222
+ from dirty_equals import IsStr
223
+
224
+ return IsStr(regex=rf"^https://errors\.pydantic\.dev/.*/v/{error_type}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastapi
3
- Version: 0.96.1
3
+ Version: 0.100.0b1
4
4
  Summary: FastAPI framework, high performance, easy to learn, fast to code, ready for production
5
5
  Project-URL: Homepage, https://github.com/tiangolo/fastapi
6
6
  Project-URL: Documentation, https://fastapi.tiangolo.com/
@@ -35,10 +35,10 @@ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
35
35
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
36
36
  Classifier: Typing :: Typed
37
37
  Requires-Python: >=3.7
38
- Requires-Dist: pydantic!=1.8,!=1.8.1,<2.0.0,>=1.7.4
38
+ Requires-Dist: pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4
39
39
  Requires-Dist: starlette<0.28.0,>=0.27.0
40
40
  Provides-Extra: all
41
- Requires-Dist: email-validator>=1.1.1; extra == 'all'
41
+ Requires-Dist: email-validator>=2.0.0; extra == 'all'
42
42
  Requires-Dist: httpx>=0.23.0; extra == 'all'
43
43
  Requires-Dist: itsdangerous>=1.1.0; extra == 'all'
44
44
  Requires-Dist: jinja2>=2.11.2; extra == 'all'
@@ -47,40 +47,6 @@ Requires-Dist: python-multipart>=0.0.5; extra == 'all'
47
47
  Requires-Dist: pyyaml>=5.3.1; extra == 'all'
48
48
  Requires-Dist: ujson!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,>=4.0.1; extra == 'all'
49
49
  Requires-Dist: uvicorn[standard]>=0.12.0; extra == 'all'
50
- Provides-Extra: dev
51
- Requires-Dist: pre-commit<3.0.0,>=2.17.0; extra == 'dev'
52
- Requires-Dist: ruff==0.0.138; extra == 'dev'
53
- Requires-Dist: uvicorn[standard]<0.21.0,>=0.12.0; extra == 'dev'
54
- Provides-Extra: doc
55
- Requires-Dist: mdx-include<2.0.0,>=1.4.1; extra == 'doc'
56
- Requires-Dist: mkdocs-markdownextradata-plugin<0.3.0,>=0.1.7; extra == 'doc'
57
- Requires-Dist: mkdocs-material<9.0.0,>=8.1.4; extra == 'doc'
58
- Requires-Dist: mkdocs<2.0.0,>=1.1.2; extra == 'doc'
59
- Requires-Dist: pyyaml<7.0.0,>=5.3.1; extra == 'doc'
60
- Requires-Dist: typer-cli<0.0.14,>=0.0.13; extra == 'doc'
61
- Requires-Dist: typer[all]<0.8.0,>=0.6.1; extra == 'doc'
62
- Provides-Extra: test
63
- Requires-Dist: anyio[trio]<4.0.0,>=3.2.1; extra == 'test'
64
- Requires-Dist: black==23.1.0; extra == 'test'
65
- Requires-Dist: coverage[toml]<8.0,>=6.5.0; extra == 'test'
66
- Requires-Dist: databases[sqlite]<0.7.0,>=0.3.2; extra == 'test'
67
- Requires-Dist: email-validator<2.0.0,>=1.1.1; extra == 'test'
68
- Requires-Dist: flask<3.0.0,>=1.1.2; extra == 'test'
69
- Requires-Dist: httpx<0.24.0,>=0.23.0; extra == 'test'
70
- Requires-Dist: isort<6.0.0,>=5.0.6; extra == 'test'
71
- Requires-Dist: mypy==0.982; extra == 'test'
72
- Requires-Dist: orjson<4.0.0,>=3.2.1; extra == 'test'
73
- Requires-Dist: passlib[bcrypt]<2.0.0,>=1.7.2; extra == 'test'
74
- Requires-Dist: peewee<4.0.0,>=3.13.3; extra == 'test'
75
- Requires-Dist: pytest<8.0.0,>=7.1.3; extra == 'test'
76
- Requires-Dist: python-jose[cryptography]<4.0.0,>=3.3.0; extra == 'test'
77
- Requires-Dist: python-multipart<0.0.7,>=0.0.5; extra == 'test'
78
- Requires-Dist: pyyaml<7.0.0,>=5.3.1; extra == 'test'
79
- Requires-Dist: ruff==0.0.138; extra == 'test'
80
- Requires-Dist: sqlalchemy<1.4.43,>=1.3.18; extra == 'test'
81
- Requires-Dist: types-orjson==3.6.2; extra == 'test'
82
- Requires-Dist: types-ujson==5.7.0.1; extra == 'test'
83
- Requires-Dist: ujson!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0,>=4.0.1; extra == 'test'
84
50
  Description-Content-Type: text/markdown
85
51
 
86
52
  <p align="center">
@@ -0,0 +1,48 @@
1
+ fastapi/__init__.py,sha256=Tm2hOQVUqkeQv_OyRPPUyRV0Bhsm0JG1ueUZ9TEMW3s,1087
2
+ fastapi/_compat.py,sha256=yrfYJ1RpV0p4SWnAEaQBiFORlaNlSDNFM2Z0J4ZXf8I,21720
3
+ fastapi/applications.py,sha256=QHZl3DQ-u8epXGpycMPZThp5tKNw-RWf3KOJ8XI5AZw,39670
4
+ fastapi/background.py,sha256=HtN5_pJJrOdalSbuGSMKJAPNWUU5h7rY_BXXubu7-IQ,76
5
+ fastapi/concurrency.py,sha256=h7ZhZG8cEiVx6an1txcB2RKpjW6_xmHwFo9E3vUiMQA,1468
6
+ fastapi/datastructures.py,sha256=iWyfPvU6gZuFPHUC1RzRQP6VnLqYWnD75no5uLIxB48,2793
7
+ fastapi/encoders.py,sha256=YdNUJ2s_kbvfaJS-QwE2dUDoXH75QM_k9fghp1DJcaw,8049
8
+ fastapi/exception_handlers.py,sha256=MBrIOA-ugjJDivIi4rSsUJBdTsjuzN76q4yh0q1COKw,1332
9
+ fastapi/exceptions.py,sha256=B-KRexbd3Vtf_cP_YYY9ZocPGoGn1F2UvJ41Cdi0_3k,1400
10
+ fastapi/logger.py,sha256=I9NNi3ov8AcqbsbC9wl1X-hdItKgYt2XTrx1f99Zpl4,54
11
+ fastapi/param_functions.py,sha256=7jn9ImOfZYax9vf7rfCxnI3K7S_cd_tbwF8voBG7WqE,7935
12
+ fastapi/params.py,sha256=ZoDrmquzxwZqoH2zv0KLPiTwSA7qEpnPJD67TYf59e0,12649
13
+ fastapi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ fastapi/requests.py,sha256=zayepKFcienBllv3snmWI20Gk0oHNVLU4DDhqXBb4LU,142
15
+ fastapi/responses.py,sha256=on95e4CfSRyNz7MEjqFuzsP-eW8kHWTxEl_Z-Vzb7lA,1242
16
+ fastapi/routing.py,sha256=2r-WPLC_gebnxauKhWDkMpVxNtp9NvJXJPjAo4vY0yk,56711
17
+ fastapi/staticfiles.py,sha256=iirGIt3sdY2QZXd36ijs3Cj-T0FuGFda3cd90kM9Ikw,69
18
+ fastapi/templating.py,sha256=4zsuTWgcjcEainMJFAlW6-gnslm6AgOS1SiiDWfmQxk,76
19
+ fastapi/testclient.py,sha256=nBvaAmX66YldReJNZXPOk1sfuo2Q6hs8bOvIaCep6LQ,66
20
+ fastapi/types.py,sha256=WZJ1jvm1MCwIrxxRYxKwtXS9HqcGk0RnCbLzrMZh-lI,428
21
+ fastapi/utils.py,sha256=NuJGGAaFZXGmT1_D7IzZOuXOir4pNotHJtNXDS_7l6A,8032
22
+ fastapi/websockets.py,sha256=419uncYObEKZG0YcrXscfQQYLSWoE10jqxVMetGdR98,222
23
+ fastapi/dependencies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ fastapi/dependencies/models.py,sha256=-n-YCxzgVBkurQi49qOTooT71v_oeAhHJ-qQFonxh5o,2494
25
+ fastapi/dependencies/utils.py,sha256=ffWJykKesqKxA_YVmrNhKogCF33AfZ2by0Tzfr_JlvY,29721
26
+ fastapi/middleware/__init__.py,sha256=oQDxiFVcc1fYJUOIFvphnK7pTT5kktmfL32QXpBFvvo,58
27
+ fastapi/middleware/asyncexitstack.py,sha256=LvMyVI1QdmWNWYPZqx295VFavssUfVpUsonPOsMWz1E,1035
28
+ fastapi/middleware/cors.py,sha256=ynwjWQZoc_vbhzZ3_ZXceoaSrslHFHPdoM52rXr0WUU,79
29
+ fastapi/middleware/gzip.py,sha256=xM5PcsH8QlAimZw4VDvcmTnqQamslThsfe3CVN2voa0,79
30
+ fastapi/middleware/httpsredirect.py,sha256=rL8eXMnmLijwVkH7_400zHri1AekfeBd6D6qs8ix950,115
31
+ fastapi/middleware/trustedhost.py,sha256=eE5XGRxGa7c5zPnMJDGp3BxaL25k5iVQlhnv-Pk0Pss,109
32
+ fastapi/middleware/wsgi.py,sha256=Z3Ue-7wni4lUZMvH3G9ek__acgYdJstbnpZX_HQAboY,79
33
+ fastapi/openapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ fastapi/openapi/constants.py,sha256=adGzmis1L1HJRTE3kJ5fmHS_Noq6tIY6pWv_SFzoFDU,153
35
+ fastapi/openapi/docs.py,sha256=JBRaq7EEmeC-xoRSRFj6qZWQxfOZW_jvTw0r-PiKcZ4,6532
36
+ fastapi/openapi/models.py,sha256=5ddjP5Zt9uw7osLKCEJRCCTEwpP-4YPAnyM3a-HvCD8,13995
37
+ fastapi/openapi/utils.py,sha256=14SKsXYmWUpO-HTXaVg5YX_n1Zh8Egs60-msJUwP1JU,19346
38
+ fastapi/security/__init__.py,sha256=bO8pNmxqVRXUjfl2mOKiVZLn0FpBQ61VUYVjmppnbJw,881
39
+ fastapi/security/api_key.py,sha256=92kxZjj9OuIvQCUpLszP9qlILRgx6hCh1x-bZdhmQDU,2939
40
+ fastapi/security/base.py,sha256=dl4pvbC-RxjfbWgPtCWd8MVU-7CB2SZ22rJDXVCXO6c,141
41
+ fastapi/security/http.py,sha256=VbTm1k6t6EjJAnCnYVquSOmSK7fATdKRgq0-TgC7FnQ,5964
42
+ fastapi/security/oauth2.py,sha256=fXQdWuTtUKSZ9Lyrj9fDuQoXAmXTd9AVFDrrwStJKX0,8579
43
+ fastapi/security/open_id_connect_url.py,sha256=GKK84g6OZbOFCEZJyd27pGjpaClGxeZrYOemUzyhfbU,1141
44
+ fastapi/security/utils.py,sha256=bd8T0YM7UQD5ATKucr1bNtAvz_Y3__dVNAv5UebiPvc,293
45
+ fastapi-0.100.0b1.dist-info/METADATA,sha256=ylm5qTc3E-Qlaurbx_NcPHO-T9ONJpPLrZJpEKKcCS8,23110
46
+ fastapi-0.100.0b1.dist-info/WHEEL,sha256=KGYbc1zXlYddvwxnNty23BeaKzh7YuoSIvIMO4jEhvw,87
47
+ fastapi-0.100.0b1.dist-info/licenses/LICENSE,sha256=Tsif_IFIW5f-xYSy1KlhAy7v_oNEU4lP2cEnSQbMdE4,1086
48
+ fastapi-0.100.0b1.dist-info/RECORD,,
@@ -1,47 +0,0 @@
1
- fastapi/__init__.py,sha256=0O4bgHv2p2qi_ZlZwmOo05BJo-PRSTn62B3R172cRZk,1080
2
- fastapi/applications.py,sha256=aESbVHTs3fLLEuBca5Z7Rm8iZxjoZTTm8_QyHrVzTU4,39525
3
- fastapi/background.py,sha256=HtN5_pJJrOdalSbuGSMKJAPNWUU5h7rY_BXXubu7-IQ,76
4
- fastapi/concurrency.py,sha256=h7ZhZG8cEiVx6an1txcB2RKpjW6_xmHwFo9E3vUiMQA,1468
5
- fastapi/datastructures.py,sha256=oW6xuU0C-sBwbcyXI-MlBO0tSS4BSPB2lYUa1yCw8-A,1905
6
- fastapi/encoders.py,sha256=UaRHIlxyt4vSzV93dCIz9sLykxH4Xbmp7cALTK1-hnk,5962
7
- fastapi/exception_handlers.py,sha256=VhAaYycnDun9WeIV1vMXcs5EuK03XpzMi_HpqAsO_yk,988
8
- fastapi/exceptions.py,sha256=rYONIZZhCPYCrA8XTNMQ07GVsGBSN7LipSLsoFB3JMk,1205
9
- fastapi/logger.py,sha256=I9NNi3ov8AcqbsbC9wl1X-hdItKgYt2XTrx1f99Zpl4,54
10
- fastapi/param_functions.py,sha256=3QrctOwg7QE8b9XOqM29HTDtt7cEq96WhJPIFN703z4,7515
11
- fastapi/params.py,sha256=93bQyDIhTXZHv1vS7TF3GFCJZGP02JHZpA1qu3wJuYE,10699
12
- fastapi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- fastapi/requests.py,sha256=zayepKFcienBllv3snmWI20Gk0oHNVLU4DDhqXBb4LU,142
14
- fastapi/responses.py,sha256=on95e4CfSRyNz7MEjqFuzsP-eW8kHWTxEl_Z-Vzb7lA,1242
15
- fastapi/routing.py,sha256=TZeDV-lty61TbcAUfWjqo0IOhVtr83jvMPZUv8Gmu70,55563
16
- fastapi/staticfiles.py,sha256=iirGIt3sdY2QZXd36ijs3Cj-T0FuGFda3cd90kM9Ikw,69
17
- fastapi/templating.py,sha256=4zsuTWgcjcEainMJFAlW6-gnslm6AgOS1SiiDWfmQxk,76
18
- fastapi/testclient.py,sha256=nBvaAmX66YldReJNZXPOk1sfuo2Q6hs8bOvIaCep6LQ,66
19
- fastapi/types.py,sha256=r6MngTHzkZOP9lzXgduje9yeZe5EInWAzCLuRJlhIuE,118
20
- fastapi/utils.py,sha256=ROfkxh6erG_hGkmTNGE4gD36D_dZ33R5jL8GOjzHGPM,7652
21
- fastapi/websockets.py,sha256=419uncYObEKZG0YcrXscfQQYLSWoE10jqxVMetGdR98,222
22
- fastapi/dependencies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- fastapi/dependencies/models.py,sha256=zNbioxICuOeb-9ADDVQ45hUHOC0PBtPVEfVU3f1l_nc,2494
24
- fastapi/dependencies/utils.py,sha256=hDn1Uz6g_CiSrQikwA8WrYs_vH-Og5kG2a1qFFc6ZpA,30908
25
- fastapi/middleware/__init__.py,sha256=oQDxiFVcc1fYJUOIFvphnK7pTT5kktmfL32QXpBFvvo,58
26
- fastapi/middleware/asyncexitstack.py,sha256=72XjQmQ_tB_tTs9xOc0akXF_7TwZUPdyfc8gsN5LV8E,1197
27
- fastapi/middleware/cors.py,sha256=ynwjWQZoc_vbhzZ3_ZXceoaSrslHFHPdoM52rXr0WUU,79
28
- fastapi/middleware/gzip.py,sha256=xM5PcsH8QlAimZw4VDvcmTnqQamslThsfe3CVN2voa0,79
29
- fastapi/middleware/httpsredirect.py,sha256=rL8eXMnmLijwVkH7_400zHri1AekfeBd6D6qs8ix950,115
30
- fastapi/middleware/trustedhost.py,sha256=eE5XGRxGa7c5zPnMJDGp3BxaL25k5iVQlhnv-Pk0Pss,109
31
- fastapi/middleware/wsgi.py,sha256=Z3Ue-7wni4lUZMvH3G9ek__acgYdJstbnpZX_HQAboY,79
32
- fastapi/openapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- fastapi/openapi/constants.py,sha256=mWxYBjED6PU-tQ9X227Qkq2SsW2cv-C1jYFKt63xxEs,107
34
- fastapi/openapi/docs.py,sha256=JBRaq7EEmeC-xoRSRFj6qZWQxfOZW_jvTw0r-PiKcZ4,6532
35
- fastapi/openapi/models.py,sha256=AWR2LH9wlYFMZtnHv_9ndGuib-I_sdc2w-8MAIBNQpM,11021
36
- fastapi/openapi/utils.py,sha256=DoI_rwP8wepUTsSCeaCGfXLuGm7Q7dlBqMbOkxYyk9Y,18808
37
- fastapi/security/__init__.py,sha256=bO8pNmxqVRXUjfl2mOKiVZLn0FpBQ61VUYVjmppnbJw,881
38
- fastapi/security/api_key.py,sha256=8sqL5JK5HmDyvuLZ317L8aotpBp2y3wayazITzYkZEw,2786
39
- fastapi/security/base.py,sha256=dl4pvbC-RxjfbWgPtCWd8MVU-7CB2SZ22rJDXVCXO6c,141
40
- fastapi/security/http.py,sha256=VbTm1k6t6EjJAnCnYVquSOmSK7fATdKRgq0-TgC7FnQ,5964
41
- fastapi/security/oauth2.py,sha256=Hcz0bnLo2K-JFRAH2w3UDayUlEktpitChsX18B3Ngw0,8198
42
- fastapi/security/open_id_connect_url.py,sha256=GKK84g6OZbOFCEZJyd27pGjpaClGxeZrYOemUzyhfbU,1141
43
- fastapi/security/utils.py,sha256=bd8T0YM7UQD5ATKucr1bNtAvz_Y3__dVNAv5UebiPvc,293
44
- fastapi-0.96.1.dist-info/METADATA,sha256=9u8Xzbsmfdwlsy4A6O1hdlnQrKxGQaBp2gDgT7cLsc0,24958
45
- fastapi-0.96.1.dist-info/WHEEL,sha256=KGYbc1zXlYddvwxnNty23BeaKzh7YuoSIvIMO4jEhvw,87
46
- fastapi-0.96.1.dist-info/licenses/LICENSE,sha256=Tsif_IFIW5f-xYSy1KlhAy7v_oNEU4lP2cEnSQbMdE4,1086
47
- fastapi-0.96.1.dist-info/RECORD,,