More InventoryModel fixes
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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"],
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user