async def process_message(s, path, body, message_id, message_key, progress_cb): if path == "/no_error": return {"success": True} elif path == "/internal_error": raise error1 elif path == "/builder_error": builder = ihp.ResultBuilder(["d073d5000001"]) builder.error(error2) s.reply({"progress": {"error": "progress"}}, message_id=message_id) return builder elif path == "/builder_serial_error": builder = ihp.ResultBuilder(["d073d5000001"]) try: raise error5 except Exception as e: builder.error(e) return builder elif path == "/builder_internal_error": builder = ihp.ResultBuilder(["d073d5000001"]) try: raise error3 except Exception as error: builder.error(error) return builder elif path == "/error": raise error4
async def execute(self): plans = self.sender.make_plans("hev_status", "hev_config") serials = await self.serials result = ihp.ResultBuilder() got = await self.sender.gatherer.gather_all( plans, serials, error_catcher=result.error, message_timeout=self.timeout) for serial, (complete, info) in got.items(): if not complete: continue if info["hev_status"] is Skip: continue if "hev_status" in info and "hev_config" in info: # Create a copy so we don't corrupt the gatherer cache final = result.result["results"][serial] = {} final["status"] = MergedOptions.using( info["hev_status"]).as_dict() final["status"]["last"]["result"] = final["status"]["last"][ "result"].name final["config"] = info["hev_config"] return result
async def execute(self): plans = self.sender.make_plans("capability", "firmware_effects") self.sender.gatherer.clear_cache() serials = await self.serials result = ihp.ResultBuilder() result.add_serials(serials) def convert(d): for k, v in d.items(): if isinstance(v, enum.Enum): d[k] = v.name return d async for serial, complete, info in self.sender.gatherer.gather_per_serial( plans, serials, error_catcher=result.error, message_timeout=self.timeout): if not complete: continue cap = info["capability"]["cap"] final = { "product": { "pid": cap.product.pid, "vid": cap.product.vendor.vid, "cap": convert(cap.as_dict()), "name": cap.product.name, }, "effect": { "type": "SKIP" }, } effects = info["firmware_effects"] if effects is not Skip: final["effect"]["type"] = effects["type"].name final["effect"]["options"] = convert(effects["options"]) result.result["results"][serial] = final return result
async def process_message(s, path, body, message_id, message_key, progress_cb): return ihp.ResultBuilder(serials=["d073d5000001"])
from photons_app.errors import PhotonsAppError from photons_messages import DeviceMessages import types class ATraceback: def __eq__(self, other): return isinstance(other, types.TracebackType) describe "ResultBuilder": it "initializes itself": builder = ihp.ResultBuilder(["one", "two"]) assert builder.serials == ["one", "two"] assert builder.result == {"results": {}} it "can add serials": builder = ihp.ResultBuilder(["one", "two"]) assert builder.serials == ["one", "two"] builder.add_serials(["three", "two", "four"]) assert builder.serials == ["one", "two", "three", "four"] describe "as_dict": it "returns results but with ok for devices": builder = ihp.ResultBuilder(["one", "two"]) dct = builder.as_dict() assert builder.result == {"results": {}}