Как проверить каждую переменную, как в записной книжке jupyter, когда я разрабатываю сервер FastAPI?

#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.