I have this model:
JavaScript
x
9
1
class Text(BaseModel):
2
id: str
3
text: str = None
4
5
6
class TextsRequest(BaseModel):
7
data: list[Text]
8
n_processes: Union[int, None]
9
So I want to be able to take requests like:
JavaScript
1
2
1
{"data": ["id": "1", "text": "The text 1"], "n_processes": 8}
2
and
JavaScript
1
2
1
{"data": ["id": "1", "text": "The text 1"]}.
2
Right now in the second case I get
JavaScript
1
2
1
{'data': [{'id': '1', 'text': 'The text 1'}], 'n_processes': None}
2
using this code:
JavaScript
1
6
1
app = FastAPI()
2
3
@app.post("/make_post/", response_model_exclude_none=True)
4
async def create_graph(request: TextsRequest):
5
input_data = jsonable_encoder(request)
6
So how can I exclude n_processes
here?
Advertisement
Answer
You can use exclude_none
param of Pydantic’s model.dict(…):
JavaScript
1
13
13
1
class Text(BaseModel):
2
id: str
3
text: str = None
4
5
6
class TextsRequest(BaseModel):
7
data: list[Text]
8
n_processes: Optional[int]
9
10
11
request = TextsRequest(**{"data": [{"id": "1", "text": "The text 1"}]})
12
print(request.dict(exclude_none=True))
13
Output:
JavaScript
1
2
1
{'data': [{'id': '1', 'text': 'The text 1'}]}
2
Also, it’s more idiomatic to write Optional[int]
instead of Union[int, None]
.