async def update_program(request: Request) -> Response: ow: "OpenWater" = request.app.ow data = await request.json() try: await ow.programs.store.update(data) return respond(status_code=200) except ProgramValidationException as e: return respond({"errors": e.errors}, status_code=400)
async def put(self, request: Request) -> Response: ow: "OpenWater" = request.app.ow data: dict = await request.json() try: status_code = HTTP_200_OK if not await ow.schedules.store.update(data): status_code = HTTP_400_BAD_REQUEST return respond(status_code=status_code) except ScheduleValidationException as e: return respond({"errors": e.errors}, HTTP_400_BAD_REQUEST) except Exception as e: return respond({"error": e.args[0]}, HTTP_400_BAD_REQUEST)
async def put(self, request): """Update an existing zone""" ow: "OpenWater" = request.app.ow data = await request.json() try: zone = await ow.zones.store.update(data) except ZoneValidationException as e: _LOGGER.error("Zone update failed validation") return respond({ "errors": e.errors, "msg": "Invalid zone data" }, 400) return respond(zone)
async def get(self, request: Request) -> Response: """ description: Get all loaded plugins responses: 200: description: a list of all loaded plugins """ return respond(await plugin.get_plugins(request.app.ow))
async def get_zones(request): """ description: Get a list of all zones responses: 200: description: A list of zones. """ ow: "OpenWater" = request.app.ow return respond(ow.zones.store.all)
async def post(self, request: Request) -> Response: """ description: Create a new schedule responses: 200: description: Successfully created schedule 400: description: Invalid data sent """ ow: "OpenWater" = request.app.ow try: data = await request.json() zone = await ow.schedules.store.create(data) return respond(zone) except JSONDecodeError as e: return respond({"error": e.msg}, HTTP_400_BAD_REQUEST) except ScheduleValidationException as e: return respond({"errors": e.errors}, HTTP_400_BAD_REQUEST)
async def zone_cmd(request: Request): """ description: Execute a zone command parameters: - in: path name: zone_id:int description: Numeric id of target zone required: true schema: type: integer - in: path name: cmd:str description: the command to execute required: true schema: type: string responses: 200: description: successfully executed command 500: description: unable to execute given command """ ow: "OpenWater" = request.app.ow zone_id = request.path_params["zone_id"] cmd = request.path_params["cmd"] try: if cmd == "on": await ow.zones.controller.open_zone(zone_id) elif cmd == "off": await ow.zones.controller.close_zone(zone_id) else: raise ZoneException("Unknown zone command: {}".format(cmd)) return respond(status_code=200) except ZoneException as e: _LOGGER.error(e) return respond(status_code=500)
async def get(self, request: Request): """ description: Get a zone by id parameters: - in: path name: zone_id:int description: Numeric id of requested zone required: true schema: type: integer responses: 200: description: A zone """ ow: "OpenWater" = request.app.ow zone = ow.zones.store.get(request.path_params["zone_id"]) return respond(zone)
async def create_schedule(request: Request) -> Response: """ description: Create a new schedule responses: 200: description: Successfully created schedule 400: description: Invalid data sent """ ow: "OpenWater" = request.app.ow data = await request.json() try: zone = await ow.programs.store.create(data) except Exception as e: _LOGGER.error("Create zone failed validation") return ToDictJSONResponse( { "errors": e.errors, "msg": "Invalid zone data" }, status_code=400, ) return respond(zone)
async def core(request) -> ToDictJSONResponse: return respond(request.app.ow)
async def get_steps(request: Request) -> Response: ow: "OpenWater" = request.app.ow return respond(ow.programs.store.steps)
async def delete(self, request): ow: "OpenWater" = request.app.ow res = await ow.zones.store.delete(request.path_params["zone_id"]) sc = 204 if res else 400 return respond(status_code=sc)
async def get_schedule_types(request: Request) -> Response: return respond([st.value for st in ScheduleType])
async def get(self, request: Request) -> Response: ow: "OpenWater" = request.app.ow return respond(ow.schedules.store.all)
async def get(self, request: Request) -> Response: ow: "OpenWater" = request.app.ow schedule = ow.schedules.store.get(request.path_params["id"]) if not schedule: return respond(status_code=HTTP_404_NOT_FOUND) return respond(schedule)
async def get_program(request: Request) -> Response: ow: "OpenWater" = request.app.ow id_ = int(request.path_params["id"]) return respond(ow.programs.store.get(id_))