mirror of
https://github.com/fastapi/fastapi.git
synced 2026-02-25 03:07:06 -05:00
* Check if Form exists and multipart is in virtual environment * Remove unused import * Move BodyFieldInfo check to separate helper function * Fix type UploadFile to File for BodyFieldInfo check * Working solution. Kind of nasty though. * Use better method of determing if correct package imported * Use better method of determing if correct package imported * Add raising exceptions, update error messages * Check if Form exists and multipart is in virtual environment * Move BodyFieldInfo check to separate helper function * Fix type UploadFile to File for BodyFieldInfo check * Use better method of determing if correct package imported * Add raising exceptions, update error messages * Removed unused import, added comments Co-authored-by: Christopher Nguyen <chrisngyn99@gmail.com> * Updated what kind of exception will be thrown * Add type annotations Adds annotations to is_form_data * Fix import order * Add basic tests * Fixed Travis tests * Replace logging with fastapi logger * Change AttributeError to ImportError to fix exception handling * Fixing tests * Catch ModuleNotFoundError first Fix code coverage * Update fastapi/dependencies/utils.py Remove error spaces when printing Co-authored-by: Marcelo Trylesinski <marcelotryle@gmail.com> * Update fastapi/dependencies/utils.py Co-authored-by: Marcelo Trylesinski <marcelotryle@gmail.com> * Removed spaces in error printing * ♻️ Refactor form data detection * ✅ Update/increase tests for incorrect multipart install * 🔥 Remove deprecated Travis (moved to GitHub Actions) Co-authored-by: yk396 <yk396@cornell.edu> Co-authored-by: Christopher Nguyen <chrisngyn99@gmail.com> Co-authored-by: Kai Chen <kaichen120@gmail.com> Co-authored-by: Chris N <hello@chris-nguyen.me> Co-authored-by: Marcelo Trylesinski <marcelotryle@gmail.com>
107 lines
3.7 KiB
Python
107 lines
3.7 KiB
Python
import pytest
|
|
from fastapi import FastAPI, File, Form, UploadFile
|
|
from fastapi.dependencies.utils import (
|
|
multipart_incorrect_install_error,
|
|
multipart_not_installed_error,
|
|
)
|
|
|
|
|
|
def test_incorrect_multipart_installed_form(monkeypatch):
|
|
monkeypatch.delattr("multipart.multipart.parse_options_header", raising=False)
|
|
with pytest.raises(RuntimeError, match=multipart_incorrect_install_error):
|
|
app = FastAPI()
|
|
|
|
@app.post("/")
|
|
async def root(username: str = Form(...)):
|
|
return username # pragma: nocover
|
|
|
|
|
|
def test_incorrect_multipart_installed_file_upload(monkeypatch):
|
|
monkeypatch.delattr("multipart.multipart.parse_options_header", raising=False)
|
|
with pytest.raises(RuntimeError, match=multipart_incorrect_install_error):
|
|
app = FastAPI()
|
|
|
|
@app.post("/")
|
|
async def root(f: UploadFile = File(...)):
|
|
return f # pragma: nocover
|
|
|
|
|
|
def test_incorrect_multipart_installed_file_bytes(monkeypatch):
|
|
monkeypatch.delattr("multipart.multipart.parse_options_header", raising=False)
|
|
with pytest.raises(RuntimeError, match=multipart_incorrect_install_error):
|
|
app = FastAPI()
|
|
|
|
@app.post("/")
|
|
async def root(f: bytes = File(...)):
|
|
return f # pragma: nocover
|
|
|
|
|
|
def test_incorrect_multipart_installed_multi_form(monkeypatch):
|
|
monkeypatch.delattr("multipart.multipart.parse_options_header", raising=False)
|
|
with pytest.raises(RuntimeError, match=multipart_incorrect_install_error):
|
|
app = FastAPI()
|
|
|
|
@app.post("/")
|
|
async def root(username: str = Form(...), pasword: str = Form(...)):
|
|
return username # pragma: nocover
|
|
|
|
|
|
def test_incorrect_multipart_installed_form_file(monkeypatch):
|
|
monkeypatch.delattr("multipart.multipart.parse_options_header", raising=False)
|
|
with pytest.raises(RuntimeError, match=multipart_incorrect_install_error):
|
|
app = FastAPI()
|
|
|
|
@app.post("/")
|
|
async def root(username: str = Form(...), f: UploadFile = File(...)):
|
|
return username # pragma: nocover
|
|
|
|
|
|
def test_no_multipart_installed(monkeypatch):
|
|
monkeypatch.delattr("multipart.__version__", raising=False)
|
|
with pytest.raises(RuntimeError, match=multipart_not_installed_error):
|
|
app = FastAPI()
|
|
|
|
@app.post("/")
|
|
async def root(username: str = Form(...)):
|
|
return username # pragma: nocover
|
|
|
|
|
|
def test_no_multipart_installed_file(monkeypatch):
|
|
monkeypatch.delattr("multipart.__version__", raising=False)
|
|
with pytest.raises(RuntimeError, match=multipart_not_installed_error):
|
|
app = FastAPI()
|
|
|
|
@app.post("/")
|
|
async def root(f: UploadFile = File(...)):
|
|
return f # pragma: nocover
|
|
|
|
|
|
def test_no_multipart_installed_file_bytes(monkeypatch):
|
|
monkeypatch.delattr("multipart.__version__", raising=False)
|
|
with pytest.raises(RuntimeError, match=multipart_not_installed_error):
|
|
app = FastAPI()
|
|
|
|
@app.post("/")
|
|
async def root(f: bytes = File(...)):
|
|
return f # pragma: nocover
|
|
|
|
|
|
def test_no_multipart_installed_multi_form(monkeypatch):
|
|
monkeypatch.delattr("multipart.__version__", raising=False)
|
|
with pytest.raises(RuntimeError, match=multipart_not_installed_error):
|
|
app = FastAPI()
|
|
|
|
@app.post("/")
|
|
async def root(username: str = Form(...), password: str = Form(...)):
|
|
return username # pragma: nocover
|
|
|
|
|
|
def test_no_multipart_installed_form_file(monkeypatch):
|
|
monkeypatch.delattr("multipart.__version__", raising=False)
|
|
with pytest.raises(RuntimeError, match=multipart_not_installed_error):
|
|
app = FastAPI()
|
|
|
|
@app.post("/")
|
|
async def root(username: str = Form(...), f: UploadFile = File(...)):
|
|
return username # pragma: nocover
|