from flask import abort, request from time import time class Node: def __init__(self, id: int, name: str): self.id = id self.name = name self.temperature_readings = [] self.humidity_readings = [] def add_temperature_reading(self, temperature: float): self.temperature_readings.append((temperature, time())) def add_humidity_reading(self, humidity: float): self.humidity_readings.append((humidity, time())) def get_temperature_readings(self) -> list[tuple[float, float]]: return self.temperature_readings def get_humidity_readings(self)-> list[tuple[float, float]]: return self.humidity_readings def get_name(self) -> str: return self.name def set_name(self, name: str): self.name = name def node_register(request: request, state: dict) -> str: state["max_id"] += 1 id = state["max_id"] request_json = request.get_json() name = request_json.get("name") if name is None: name = request.remote_addr state["nodes"][f"{id}"] = Node(id, name) return f"{id}" def node_reading(id: int, request: request, state: dict) -> str: node = state["nodes"].get(f"{id}") if node is None: abort(403) request_json = request.get_json() temperature = request_json.get("temperature") humidity = request_json.get("humidity") if temperature is None and humidity is None: abort(400) if temperature is not None: node.add_temperature_reading(temperature) if humidity is not None: node.add_humidity_reading(humidity) return "OK"