diff --git a/hippolyzer/lib/base/inventory.py b/hippolyzer/lib/base/inventory.py index cbe9f08..a86b706 100644 --- a/hippolyzer/lib/base/inventory.py +++ b/hippolyzer/lib/base/inventory.py @@ -285,6 +285,8 @@ class InventorySaleInfo(InventoryBase): class InventoryNodeBase(InventoryBase): ID_ATTR: ClassVar[str] + name: str + parent_id: Optional[UUID] = schema_field(SchemaUUID) model: Optional[InventoryModel] = dataclasses.field( default=None, init=False, hash=False, compare=False, repr=False @@ -317,6 +319,12 @@ class InventoryNodeBase(InventoryBase): def __hash__(self): return hash(self.node_id) + def __iter__(self) -> Iterator[InventoryNodeBase]: + return iter(()) + + def __contains__(self, item) -> bool: + return item in tuple(self) + @dataclasses.dataclass class InventoryContainerBase(InventoryNodeBase): @@ -330,6 +338,34 @@ class InventoryContainerBase(InventoryNodeBase): if x.parent_id == self.node_id ) + def __getitem__(self, item: Union[int, str]) -> InventoryNodeBase: + if isinstance(item, int): + return self.children[item] + + for child in self.children: + if child.name == item: + return child + raise KeyError(f"{item!r} not found in children") + + def __iter__(self) -> Iterator[InventoryNodeBase]: + return iter(self.children) + + def get_or_create_subcategory(self, name: str) -> InventoryCategory: + for child in self: + if child.name == name and isinstance(child, InventoryCategory): + return child + child = InventoryCategory( + name=name, + cat_id=UUID.random(), + parent_id=self.node_id, + type="category", + pref_type="-1", + owner_id=getattr(self, 'owner_id', UUID.ZERO), + version=1, + ) + self.model.add(child) + return child + # So autogenerated __hash__ doesn't kill our inherited one __hash__ = InventoryNodeBase.__hash__ @@ -347,7 +383,7 @@ class InventoryObject(InventoryContainerBase): @dataclasses.dataclass class InventoryCategory(InventoryContainerBase): ID_ATTR: ClassVar[str] = "cat_id" - SCHEMA_NAME: ClassVar[str] = "inv_object" + SCHEMA_NAME: ClassVar[str] = "inv_category" cat_id: UUID = schema_field(SchemaUUID) pref_type: str = schema_field(SchemaStr, llsd_name="preferred_type") diff --git a/hippolyzer/lib/proxy/addon_utils.py b/hippolyzer/lib/proxy/addon_utils.py index 9850916..215c435 100644 --- a/hippolyzer/lib/proxy/addon_utils.py +++ b/hippolyzer/lib/proxy/addon_utils.py @@ -134,7 +134,7 @@ def ais_folder_to_inventory_data(ais_folder: dict): FolderID=ais_folder["cat_id"], ParentID=ais_folder["parent_id"], CallbackID=0, - Type=ais_folder["type"], + Type=ais_folder["preferred_type"], Name=ais_folder["name"], )