Implement python api

This commit is contained in:
keisuke-umezawa
2023-01-24 10:58:18 +09:00
parent f9e3f8e455
commit ea26215a19
4 changed files with 56 additions and 1 deletions
+14
View File
@@ -411,6 +411,20 @@ def create_app(storage: BaseStorage, debug: bool = False) -> Bottle:
response.status = 204 # No content
return {}
@app.put("/api/studies/<study_id:int>/<trial_id:int>")
@json_api_view
def save_trial_value(study_id: int, trial_id: int) -> BottleViewReturn:
value = float(request.json.get("value", None))
try:
study_name = storage.get_study_name_from_id(study_id)
study = optuna.load_study(storage=storage, study_name=study_name)
except KeyError:
response.status = 404 # Not found
return {"reason": f"study_id={study_id} is not found"}
study.tell(trial_id, value)
response.status = 204 # No content
return {}
@app.put("/api/studies/<study_id:int>/<trial_id:int>/note")
@json_api_view
def save_trial_note(study_id: int, trial_id: int) -> BottleViewReturn:
+21
View File
@@ -8,6 +8,7 @@ import {
deleteStudyAPI,
saveStudyNoteAPI,
saveTrialNoteAPI,
saveTrialValueAPI,
renameStudyAPI,
} from "./apiClient"
import {
@@ -265,6 +266,25 @@ export const actionCreator = () => {
})
}
const saveTrialValue = (
studyId: number,
trialId: number,
value: number
) => {
saveTrialValueAPI(studyId, trialId, value)
.then(() => {
enqueueSnackbar(`Success to update trial value (id=${studyId})`, {
variant: "success",
})
})
.catch((err) => {
enqueueSnackbar(`Failed to update trial value (id=${studyId})`, {
variant: "error",
})
console.log(err)
})
}
return {
updateStudyDetail,
updateStudySummaries,
@@ -276,6 +296,7 @@ export const actionCreator = () => {
saveGraphVisibility,
saveStudyNote,
saveTrialNote,
saveTrialValue,
}
}
+12
View File
@@ -217,6 +217,18 @@ export const saveTrialNoteAPI = (
})
}
export const saveTrialValueAPI = (
studyId: number,
trialId: number,
value: number,
): Promise<void> => {
return axiosInstance
.put<void>(`/api/studies/${studyId}/${trialId}`, {value: value})
.then((res) => {
return
})
}
interface ParamImportancesResponse {
param_importances: ParamImportance[][]
}
@@ -5,6 +5,8 @@ import LinkIcon from "@mui/icons-material/Link"
import { DataGridColumn, DataGrid } from "./DataGrid"
import { Link } from "react-router-dom"
import { actionCreator } from "../action"
export const TrialTable: FC<{
studyDetail: StudyDetail | null
isBeta: boolean
@@ -12,6 +14,7 @@ export const TrialTable: FC<{
}> = ({ studyDetail, isBeta, initialRowsPerPage }) => {
const trials: Trial[] = studyDetail !== null ? studyDetail.trials : []
const objectiveNames: string[] = studyDetail?.objective_names || []
const action = actionCreator()
const columns: DataGridColumn<Trial>[] = [
{ field: "number", label: "Number", sortable: true, padding: "none" },
@@ -264,13 +267,18 @@ export const TrialTable: FC<{
const collapseBody = (index: number) => {
const [value, setValue] = useState(0.0)
const [value, setValue] = useState("")
const handleSubmit = (e) => {
e.preventDefault()
const v = (+value) as number;
const studyId = (studyDetail as StudyDetail).id
const trialId = trials[index].number
action.saveTrialValue(studyId, trialId, v)
console.log({
index,
value,
})
}
const handleChangeValue = (e) => {
setValue(e.target.value)