Add typed action route metadata

This commit is contained in:
2026-06-27 10:27:25 +02:00
parent 2b221463ee
commit 6abd17b165
5 changed files with 126 additions and 24 deletions
+61 -15
View File
@@ -1,5 +1,6 @@
from __future__ import annotations
from dataclasses import dataclass
from typing import Any
try:
@@ -20,16 +21,36 @@ EMPTY_ACTION_POSITION_ROUTE = {
}
@dataclass(frozen=True)
class ActionPositionRoute:
position_family: str
position_keys: list[str]
position_key: str
action_family: str
def as_dict(self) -> dict[str, Any]:
return {
"position_family": self.position_family,
"position_keys": list(self.position_keys),
"position_key": self.position_key,
"action_family": self.action_family,
}
def empty_action_position_route_result() -> ActionPositionRoute:
return ActionPositionRoute(
position_family="",
position_keys=[],
position_key="",
action_family="",
)
def empty_action_position_route() -> dict[str, Any]:
return {
"position_family": "",
"position_keys": [],
"position_key": "",
"action_family": "",
}
return empty_action_position_route_result().as_dict()
def resolve_action_position_route(
def resolve_action_position_route_result(
*,
is_pose_category: bool,
subcategory: dict[str, Any],
@@ -40,9 +61,9 @@ def resolve_action_position_route(
source_composition: Any,
pose: Any,
item_axis_values: dict[str, Any] | None = None,
) -> dict[str, Any]:
) -> ActionPositionRoute:
if not is_pose_category:
return empty_action_position_route()
return empty_action_position_route_result()
metadata = item_template_metadata or {}
position_family = template_policy.template_position_family(
@@ -72,9 +93,34 @@ def resolve_action_position_route(
item_axis_values,
)
return {
"position_family": position_family,
"position_keys": position_keys,
"position_key": position_keys[0] if position_keys else "",
"action_family": action_family,
}
return ActionPositionRoute(
position_family=position_family,
position_keys=position_keys,
position_key=position_keys[0] if position_keys else "",
action_family=action_family,
)
def resolve_action_position_route(
*,
is_pose_category: bool,
subcategory: dict[str, Any],
hardcore_position_config: dict[str, Any] | None,
item_template_metadata: dict[str, Any] | None,
item_text: Any,
source_role_graph: Any,
source_composition: Any,
pose: Any,
item_axis_values: dict[str, Any] | None = None,
) -> dict[str, Any]:
return resolve_action_position_route_result(
is_pose_category=is_pose_category,
subcategory=subcategory,
hardcore_position_config=hardcore_position_config,
item_template_metadata=item_template_metadata,
item_text=item_text,
source_role_graph=source_role_graph,
source_composition=source_composition,
pose=pose,
item_axis_values=item_axis_values,
).as_dict()