Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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))
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
async def core(request) -> ToDictJSONResponse:
    return respond(request.app.ow)
Ejemplo n.º 11
0
async def get_steps(request: Request) -> Response:
    ow: "OpenWater" = request.app.ow
    return respond(ow.programs.store.steps)
Ejemplo n.º 12
0
 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)
Ejemplo n.º 13
0
async def get_schedule_types(request: Request) -> Response:
    return respond([st.value for st in ScheduleType])
Ejemplo n.º 14
0
 async def get(self, request: Request) -> Response:
     ow: "OpenWater" = request.app.ow
     return respond(ow.schedules.store.all)
Ejemplo n.º 15
0
 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)
Ejemplo n.º 16
0
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_))