Allow deleting of backtest files

This commit is contained in:
Matthias
2023-07-25 20:34:45 +02:00
parent 5a7e822342
commit 997b80fd7b
2 changed files with 50 additions and 1 deletions
+22 -1
View File
@@ -2,6 +2,7 @@ import asyncio
import logging import logging
from copy import deepcopy from copy import deepcopy
from datetime import datetime from datetime import datetime
from pathlib import Path
from typing import Any, Dict, List from typing import Any, Dict, List
from fastapi import APIRouter, BackgroundTasks, Depends from fastapi import APIRouter, BackgroundTasks, Depends
@@ -245,7 +246,7 @@ def api_backtest_history(config=Depends(get_config)):
tags=['webserver', 'backtest']) tags=['webserver', 'backtest'])
def api_backtest_history_result(filename: str, strategy: str, config=Depends(get_config)): def api_backtest_history_result(filename: str, strategy: str, config=Depends(get_config)):
# Get backtest result history, read from metadata files # Get backtest result history, read from metadata files
bt_results_base = config['user_data_dir'] / 'backtest_results' bt_results_base: Path = config['user_data_dir'] / 'backtest_results'
fn = bt_results_base / filename fn = bt_results_base / filename
results: Dict[str, Any] = { results: Dict[str, Any] = {
'metadata': {}, 'metadata': {},
@@ -263,3 +264,23 @@ def api_backtest_history_result(filename: str, strategy: str, config=Depends(get
"status_msg": "Historic result", "status_msg": "Historic result",
"backtest_result": results, "backtest_result": results,
} }
@router.delete('/backtest/history/{file}', response_model=List[BacktestHistoryEntry],
tags=['webserver', 'backtest'])
def api_delete_backtest_history_entry(file: str, config=Depends(get_config)):
# Get backtest result history, read from metadata files
bt_results_base: Path = config['user_data_dir'] / 'backtest_results'
file_abs = bt_results_base / file
# Ensure file is in backtest_results directory
if not is_file_in_dir(file_abs, bt_results_base):
raise HTTPException(status_code=404, detail="File not found.")
# *.meta.json
file_abs_meta = file_abs.with_suffix('.meta.json')
logger.info(f"Deleting backtest result file: {file}")
# logger.info(f"Deleting backtest result file: {file_abs_meta}")
file_abs.unlink()
file_abs_meta.unlink()
return get_backtest_resultlist(config['user_data_dir'] / 'backtest_results')
+28
View File
@@ -2014,6 +2014,34 @@ def test_api_backtest_history(botclient, mocker, testdatadir):
assert result2['backtest_result']['strategy'][strategy] assert result2['backtest_result']['strategy'][strategy]
def test_api_delete_backtest_history_entry(botclient, mocker, tmp_path: Path):
ftbot, client = botclient
# Create a temporary directory and file
bt_results_base = tmp_path / "backtest_results"
bt_results_base.mkdir()
file_path = bt_results_base / "test.json"
file_path.touch()
meta_path = file_path.with_suffix('.meta.json')
meta_path.touch()
rc = client_delete(client, f"{BASE_URI}/backtest/history/randomFile.json")
assert_response(rc, 503)
assert rc.json()['detail'] == 'Bot is not in the correct state.'
ftbot.config['user_data_dir'] = tmp_path
ftbot.config['runmode'] = RunMode.WEBSERVER
rc = client_delete(client, f"{BASE_URI}/backtest/history/randomFile.json")
assert rc.status_code == 404
assert rc.json()['detail'] == 'File not found.'
rc = client_delete(client, f"{BASE_URI}/backtest/history/{file_path.name}")
assert rc.status_code == 200
assert not file_path.exists()
assert not meta_path.exists()
def test_health(botclient): def test_health(botclient):
ftbot, client = botclient ftbot, client = botclient