From 2f9943fe7a63889a0eeba4693e76cd01eaac2f78 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Mon, 4 Oct 2021 17:41:51 +0200 Subject: [PATCH] Use NamedTuple for repetier API methods (#56941) --- homeassistant/components/repetier/__init__.py | 90 ++++++++++--------- 1 file changed, 50 insertions(+), 40 deletions(-) diff --git a/homeassistant/components/repetier/__init__.py b/homeassistant/components/repetier/__init__.py index 6a47f7bbdf5..a71038ffcb8 100644 --- a/homeassistant/components/repetier/__init__.py +++ b/homeassistant/components/repetier/__init__.py @@ -37,28 +37,38 @@ UPDATE_SIGNAL = "repetier_update_signal" TEMP_DATA = {"tempset": "temp_set", "tempread": "state", "output": "output"} -API_PRINTER_METHODS = { - "bed_temperature": { - "offline": {"heatedbeds": None, "state": "off"}, - "state": {"heatedbeds": "temp_data"}, - "temp_data": TEMP_DATA, - "attribute": "heatedbeds", - }, - "extruder_temperature": { - "offline": {"extruder": None, "state": "off"}, - "state": {"extruder": "temp_data"}, - "temp_data": TEMP_DATA, - "attribute": "extruder", - }, - "chamber_temperature": { - "offline": {"heatedchambers": None, "state": "off"}, - "state": {"heatedchambers": "temp_data"}, - "temp_data": TEMP_DATA, - "attribute": "heatedchambers", - }, - "current_state": { - "offline": {"state": None}, - "state": { +@dataclass +class APIMethods: + """API methods for properties.""" + + offline: dict[str, str | None] + state: dict[str, str] + temp_data: dict[str, str] | None = None + attribute: str | None = None + + +API_PRINTER_METHODS: dict[str, APIMethods] = { + "bed_temperature": APIMethods( + offline={"heatedbeds": None, "state": "off"}, + state={"heatedbeds": "temp_data"}, + temp_data=TEMP_DATA, + attribute="heatedbeds", + ), + "extruder_temperature": APIMethods( + offline={"extruder": None, "state": "off"}, + state={"extruder": "temp_data"}, + temp_data=TEMP_DATA, + attribute="extruder", + ), + "chamber_temperature": APIMethods( + offline={"heatedchambers": None, "state": "off"}, + state={"heatedchambers": "temp_data"}, + temp_data=TEMP_DATA, + attribute="heatedchambers", + ), + "current_state": APIMethods( + offline={"state": None}, + state={ "state": "state", "activeextruder": "active_extruder", "hasxhome": "x_homed", @@ -67,10 +77,10 @@ API_PRINTER_METHODS = { "firmware": "firmware", "firmwareurl": "firmware_url", }, - }, - "current_job": { - "offline": {"job": None, "state": "off"}, - "state": { + ), + "current_job": APIMethods( + offline={"job": None, "state": "off"}, + state={ "done": "state", "job": "job_name", "jobid": "job_id", @@ -84,25 +94,25 @@ API_PRINTER_METHODS = { "y": "y", "z": "z", }, - }, - "job_end": { - "offline": {"job": None, "state": "off", "start": None, "printtime": None}, - "state": { + ), + "job_end": APIMethods( + offline={"job": None, "state": "off", "start": None, "printtime": None}, + state={ "job": "job_name", "start": "start", "printtime": "print_time", "printedtimecomp": "from_start", }, - }, - "job_start": { - "offline": { + ), + "job_start": APIMethods( + offline={ "job": None, "state": "off", "start": None, "printedtimecomp": None, }, - "state": {"job": "job_name", "start": "start", "printedtimecomp": "from_start"}, - }, + state={"job": "job_name", "start": "start", "printedtimecomp": "from_start"}, + ), } @@ -251,17 +261,17 @@ class PrinterAPI: """Get data from the state cache.""" printer = self.printers[printer_id] methods = API_PRINTER_METHODS[sensor_type] - for prop, offline in methods["offline"].items(): + for prop, offline in methods.offline.items(): state = getattr(printer, prop) if state == offline: # if state matches offline, sensor is offline return None data = {} - for prop, attr in methods["state"].items(): + for prop, attr in methods.state.items(): prop_data = getattr(printer, prop) if attr == "temp_data": - temp_methods = methods["temp_data"] + temp_methods = methods.temp_data or {} for temp_prop, temp_attr in temp_methods.items(): data[temp_attr] = getattr(prop_data[temp_id], temp_prop) else: @@ -290,8 +300,8 @@ class PrinterAPI: continue methods = API_PRINTER_METHODS[sensor_type] - if "temp_data" in methods["state"].values(): - prop_data = getattr(printer, methods["attribute"]) + if "temp_data" in methods.state.values(): + prop_data = getattr(printer, methods.attribute or "") if prop_data is None: continue for idx, _ in enumerate(prop_data):