in sync/wptmeta/__init__.py [0:0]
def _update_data(self,
data: dict[str, Any],
) -> dict[str, Any]:
links_by_state = OrderedDict()
for item in data.get("links", []):
label = item.get("label")
url = item.get("url")
product = item.get("product")
for result in item["results"]:
test_id = "/{}/{}".format(self.dir_name, result.get("test"))
subtest = result.get("subtest")
status = result.get("status")
links_by_state[LinkState(label, url, product, test_id, subtest, status)] = (
LinkState(label, url, product, test_id, subtest, status))
# Remove deletions first so that delete and readd works
for item in self.links._deleted:
if item._initial_state in links_by_state:
del links_by_state[item._initial_state]
for item in self.links:
if item._initial_state in links_by_state:
links_by_state[item._initial_state] = item.state
else:
links_by_state[item.state] = item.state
by_link: OrderedDict[tuple[str | None, str | None, str],
list[dict[str, Any]]] = OrderedDict()
for link in links_by_state.values():
result = {}
test_id = link.test_id
if test_id is not None:
_, test = parse_test(test_id)
result["test"] = test
for prop in ["subtest", "status"]:
value = getattr(link, prop)
if value is not None:
result[prop] = value
key = (link.label, link.url, link.product)
if key not in by_link:
by_link[key] = []
by_link[key].append(result)
links = []
for (label, url, product), results in by_link.items():
link_data = {"results": results}
for link_key, value in [("label", label), ("url", url), ("product", product)]:
if value is not None:
link_data[link_key] = value
links.append(link_data)
data["links"] = links
return data