Browse Source

use dict

pull/9837/head
JONEMI19 2 years ago
parent
commit
84f9c634e1
  1. 7
      fastapi/_compat.py
  2. 4
      fastapi/types.py
  3. 17
      tests/main.py
  4. 3
      tests/test_invalid_mapping_param.py

7
fastapi/_compat.py

@ -17,7 +17,7 @@ from typing import (
) )
from fastapi.exceptions import RequestErrorModel from fastapi.exceptions import RequestErrorModel
from fastapi.types import FFQuery, IncEx, ModelNameMap, UnionType from fastapi.types import IncEx, ModelNameMap, UnionType
from pydantic import BaseModel, create_model from pydantic import BaseModel, create_model
from pydantic.version import VERSION as PYDANTIC_VERSION from pydantic.version import VERSION as PYDANTIC_VERSION
from starlette.datastructures import UploadFile from starlette.datastructures import UploadFile
@ -43,7 +43,8 @@ sequence_annotation_to_type = {
sequence_types = tuple(sequence_annotation_to_type.keys()) sequence_types = tuple(sequence_annotation_to_type.keys())
mapping_annotation_to_type = { mapping_annotation_to_type = {
FFQuery: list, Dict: list,
dict: list,
} }
mapping_types = tuple(mapping_annotation_to_type.keys()) mapping_types = tuple(mapping_annotation_to_type.keys())
@ -366,7 +367,7 @@ else:
mapping_shapes = { mapping_shapes = {
SHAPE_MAPPING, SHAPE_MAPPING,
} }
mapping_shapes_to_type = {SHAPE_MAPPING: FFQuery} mapping_shapes_to_type = {SHAPE_MAPPING: Dict}
@dataclass @dataclass
class GenerateJsonSchema: # type: ignore[no-redef] class GenerateJsonSchema: # type: ignore[no-redef]

4
fastapi/types.py

@ -8,7 +8,3 @@ DecoratedCallable = TypeVar("DecoratedCallable", bound=Callable[..., Any])
UnionType = getattr(types, "UnionType", Union) UnionType = getattr(types, "UnionType", Union)
ModelNameMap = Dict[Union[Type[BaseModel], Type[Enum]], str] ModelNameMap = Dict[Union[Type[BaseModel], Type[Enum]], str]
IncEx = Union[Set[int], Set[str], Dict[int, Any], Dict[str, Any]] IncEx = Union[Set[int], Set[str], Dict[int, Any], Dict[str, Any]]
class FFQuery(Dict[str, Union[str, IncEx]]):
pass

17
tests/main.py

@ -1,8 +1,7 @@
import http import http
from typing import FrozenSet, List, Optional, Union from typing import FrozenSet, List, Optional, Union, Dict
from fastapi import FastAPI, Path, Query from fastapi import FastAPI, Path, Query
from fastapi.types import FFQuery
app = FastAPI() app = FastAPI()
@ -186,19 +185,19 @@ def get_query_param_required_type(query: int = Query()):
@app.get("/query/mapping-params") @app.get("/query/mapping-params")
def get_mapping_query_params(queries: FFQuery[str, str] = Query({})): def get_mapping_query_params(queries: Dict[str, str] = Query({})):
return f"foo bar {queries['foo']} {queries['bar']}" return f"foo bar {queries['foo']} {queries['bar']}"
@app.get("/query/mapping-sequence-params") @app.get("/query/mapping-sequence-params")
def get_sequence_mapping_query_params(queries: FFQuery[str, List[int]] = Query({})): def get_sequence_mapping_query_params(queries: Dict[str, List[int]] = Query({})):
return f"foo bar {dict(queries)}" return f"foo bar {dict(queries)}"
@app.get("/query/mixed-params") @app.get("/query/mixed-params")
def get_mixed_mapping_query_params( def get_mixed_mapping_query_params(
sequence_mapping_queries: FFQuery[str, List[Union[str, int]]] = Query({}), sequence_mapping_queries: Dict[str, List[Union[str, int]]] = Query({}),
mapping_query: FFQuery[str, str] = Query(), mapping_query: Dict[str, str] = Query(),
query: str = Query(), query: str = Query(),
): ):
return ( return (
@ -209,9 +208,9 @@ def get_mixed_mapping_query_params(
@app.get("/query/mixed-type-params") @app.get("/query/mixed-type-params")
def get_mixed_mapping_mixed_type_query_params( def get_mixed_mapping_mixed_type_query_params(
sequence_mapping_queries: FFQuery[str, List[int]] = Query({}), sequence_mapping_queries: Dict[str, List[int]] = Query({}),
mapping_query_str: FFQuery[str, str] = Query({}), mapping_query_str: Dict[str, str] = Query({}),
mapping_query_int: FFQuery[str, int] = Query({}), mapping_query_int: Dict[str, int] = Query({}),
query: int = Query(), query: int = Query(),
): ):
return f"foo bar {query} {mapping_query_str} {mapping_query_int} {dict(sequence_mapping_queries)}" return f"foo bar {query} {mapping_query_str} {mapping_query_int} {dict(sequence_mapping_queries)}"

3
tests/test_invalid_mapping_param.py

@ -2,7 +2,6 @@ from typing import List
import pytest import pytest
from fastapi import FastAPI, Query from fastapi import FastAPI, Query
from fastapi.types import FFQuery
def test_invalid_sequence(): def test_invalid_sequence():
@ -10,5 +9,5 @@ def test_invalid_sequence():
app = FastAPI() app = FastAPI()
@app.get("/items/") @app.get("/items/")
def read_items(q: FFQuery[str, List[List[str]]] = Query(default=None)): def read_items(q: Dict[str, List[List[str]]] = Query(default=None)):
pass # pragma: no cover pass # pragma: no cover

Loading…
Cancel
Save