def update_schedule(request):
"""
Update a schedule in schedules table
:Example: curl -d '{"type": 4, "name": "sleep30 updated", "process_name": "sleep30", "repeat": "15"}' -X PUT http://localhost:8082/foglamp/schedule/84fe4ea1-df9c-4c87-bb78-cab2e7d5d2cc
"""
try:
data = await request.json()
schedule_id = request.match_info.get('schedule_id', None)
if not schedule_id:
raise web.HTTPBadRequest(reason='Schedule ID is required.')
try:
assert uuid.UUID(schedule_id)
except ValueError as ex:
raise web.HTTPNotFound(reason="Invalid Schedule ID {}".format(schedule_id))
sch = await server.Server.scheduler.get_schedule(uuid.UUID(schedule_id))
if not sch:
raise ValueError('No such Schedule: {}.'.format(schedule_id))
curr_value = dict()
curr_value['schedule_id'] = sch.schedule_id
curr_value['schedule_process_name'] = sch.process_name
curr_value['schedule_name'] = sch.name
curr_value['schedule_type'] = sch.schedule_type
curr_value['schedule_repeat'] = sch.repeat.total_seconds() if sch.repeat else 0
curr_value['schedule_time'] = (sch.time.hour * 60 * 60 + sch.time.minute * 60 + sch.time.second) if sch.time else 0
curr_value['schedule_day'] = sch.day
curr_value['schedule_exclusive'] = sch.exclusive
go_no_go = await _check_schedule_post_parameters(data, curr_value)
if len(go_no_go) != 0:
raise ValueError("Errors in request: {}".format(','.join(go_no_go)))
updated_schedule_id = await _execute_add_update_schedule(data, curr_value)
sch = await server.Server.scheduler.get_schedule(updated_schedule_id)
schedule = {
'id': str(sch.schedule_id),
'name': sch.name,
'process_name': sch.process_name,
'type': Schedule.Type(int(sch.schedule_type)).name,
'repeat': sch.repeat.total_seconds() if sch.repeat else 0,
'time': (sch.time.hour * 60 * 60 + sch.time.minute * 60 + sch.time.second) if sch.time else 0,
'day': sch.day,
'exclusive': sch.exclusive
}
return web.json_response({'schedule': schedule})
except (ValueError, ScheduleNotFoundError) as ex:
raise web.HTTPNotFound(reason=str(ex))
评论列表
文章目录