#python #jupyter-notebook #fastapi #asgi
Вопрос:
Я только начинаю работать с fastapi
python для разработки простых конечных точек ASGI. Я замечаю, что коды функций обработчика можно запускать (и, следовательно, тестировать) только тогда, когда я запускаю модуль uvicorn
. Например, возьмем этот код.
@app.post("/upload_dataset", tags=["DataFrame Loading Utilities"])
async def upload_dataset_to_server(file: UploadFile = File(...),
encoding='utf-8',
delimiter=',',
sheets='Sheet1'):
'''
Upload dataset. Add some more details about the parameters
'''
raw = await file.read()
try:
"""
TODO: XLSX still has some minor issues with saving
"""
if 'xlsx' in file.filename.split('.')[-1]:
df = pd.read_excel(io=raw, sheet_name=sheets)
filename = (file.filename).replace('xlsx', 'csv')
filepath = ml.folder_path
f'\datastore\dataset\{filename}'
else:
content = str(raw, encoding=encoding)
data = StringIO(content)
df = pd.read_csv(filepath_or_buffer=data,
encoding=encoding, delimiter=delimiter)
filepath = ml.folder_path
f'\datastore\dataset\{file.filename}'
df.to_csv(path_or_buf=filepath, index_label=False)
resp = ml.store_dataframe(df)
return resp
except UnicodeDecodeError as error:
raise HTTPException(
status_code=404,
detail=str(error)
)
Есть ли способ запустить строки внутри функции одну за другой, как в записной книжке jupyter, чтобы ознакомиться с тем, что представляет каждый объект и какие интерфейсы они предлагают? Мне кажется, что нет никакого способа вызвать функцию или фактически проверить переменные без запуска модуля uvicorn и печати журналов во время работы сервера.
Комментарии:
1. Вы можете запустить uvicorn с отладчиком — установить точку останова в первой строке кода и запустить код в режиме отладки — и вы должны иметь возможность пройти через каждую строку, проверить переменные и углубиться в методы, которые вы хотите. Как вы это сделаете, зависит от того, какую среду разработки вы используете; для jupyterlab проверьте: blog.jupyter.org/a-visual-debugger-for-jupyter-914e61716559 — для pycharm выберите в меню «Отладка» вместо «Выполнить».
2. Вы можете вставить
import pdb; pdb.set_trace()
в свой код, и pdb будет инициирован в этой строке. Для этого вам не нужна никакая среда разработки, только терминал. Документы Pdb docs.python.org/3/library/pdb.html Короче говоря, введите n<ввод> для следующей строки, p <ввод><ваше имя var><ваше имя var><ввод> для печати var, pp <ввод><ваше имя var><ваше имя var><ввод> для печати вашего var.