Source code for pobapi.models
# Built-ins
from dataclasses import dataclass
from typing import Dict, List, Optional, Tuple
# Third-party
from dataslots import with_slots
__all__ = ["Gem", "Skill", "Tree", "Item", "Set"]
[docs]@with_slots
@dataclass
class Gem:
"""Class that holds a skill gem's data.
:param name: Skill gem name.
:param enabled: Whether the skill gem is in active use.
:param level: Skill gem level.
:param quality: Skill gem quality."""
name: str
enabled: bool
level: int
quality: int
[docs]@with_slots
@dataclass
class Skill:
"""Class that holds a (linked) socket group.
:param enabled: Whether the socket group is in active use.
:param label: Socket group label assigned in Path Of Building.
:param active: Main skill in socket group, if given.
:param gems: List of :class:`Gem <Gem>` objects in socket group."""
enabled: bool
label: str
active: Optional[int]
gems: List[Gem]
[docs]@with_slots
@dataclass
class Tree:
"""Class that holds a passive skill tree.
:param url: pathofexile.com link to passive skill tree.
:param nodes: List of passive skill tree nodes by ID.
:param sockets: Dictionary of passive skill tree jewel socket location : jewel set ID."""
url: str
nodes: List[int]
sockets: Dict[int, int]
SocketGroup = Tuple[str]
GroupOfSocketGroups = Tuple[SocketGroup]
[docs]@with_slots
@dataclass
class Item:
"""Class that holds an item.
:param rarity: Item rarity.
:param name: Item name.
:param base: Item base type.
:param uid: Unique item ID for items in-game.
.. note:: Items created in Path of Building do not have an UID.
:param shaper: Whether the item is a Shaper base type.
:param elder: Whether the item is an Elder base type.
:param quality: Item quality, if the item can have quality.
:param sockets: Item socket groups, if the item can have sockets.
.. note:: The format used for example a 5 socket chest armour with 2 socket groups of 3 linked blue sockets and
2 linked red sockets would be ((B, B, B), (R, R)).
:param level_req: Required character level to equip the item.
:param item_level: Item level.
:param implicit: Number of item implicits, if the item can have implicits.
:param text: Item text.
.. note:: For items existing in-game, their item text is just copied. For items created with Path Of Building,
their affix values are calculated to match in-game items in appearance."""
rarity: str
name: str
base: str
uid: str
shaper: bool
elder: bool
quality: Optional[int]
sockets: Optional[GroupOfSocketGroups]
level_req: int
item_level: int
implicit: Optional[int]
text: str
def __str__(self):
text = ""
text += f"Rarity: {self.rarity}\n"
text += f"Name: {self.name}\n"
text += f"Base: {self.base}\n"
if self.shaper:
text += f"Shaper Item\n"
if self.elder:
text += f"Elder Item\n"
if self.quality:
text += f"Quality: {self.quality}\n"
if self.sockets:
text += f"Sockets: {self.sockets}\n"
text += f"LevelReq: {self.level_req}\n"
text += f"ItemLvl: {self.item_level}\n"
if self.implicit:
text += f"Implicits: {self.implicit}\n"
text += f"{self.text}"
return text
[docs]@with_slots
@dataclass
class Set:
"""Set(*args)
Class that holds an item set.
:param weapon1: Primary weapon.
:param weapon1_as1: Primary weapon abyssal socket 1.
:param weapon1_as2: Primary weapon abyssal socket 1.
:param weapon1_swap: Second primary weapon.
:param weapon1_swap_as1: Second primary weapon abyssal socket 1.
:param weapon1_swap_as2: Second primary weapon abyssal socket 2.
:param weapon2: Secondary weapon.
:param weapon2_as1: Secondary weapon abyssal socket 1.
:param weapon2_as2: Secondary weapon abyssal socket 1.
:param weapon2_swap: Second secondary weapon.
:param weapon2_swap_as1: Second secondary weapon abyssal socket 1.
:param weapon2_swap_as2: Second secondary weapon abyssal socket 2.
:param helmet: Helmet.
:param helmet_as1: Helmet abyssal socket 1.
:param helmet_as2: Helmet abyssal socket 2.
:param body_armour: Body armour.
:param body_armour_as1: Body armour abyssal socket 1.
:param body_armour_as2: Body armour abyssal socket 2.
:param gloves: Gloves.
:param gloves_as1: Gloves abyssal socket 1.
:param gloves_as2: Gloves abyssal socket 2.
:param boots: Boots.
:param boots_as1: Boots abyssal socket 1.
:param boots_as2: Boots abyssal socket 2.
:param amulet: Amulet.
:param ring1: Left ring.
:param ring2: Right ring.
:param belt: Belt.
:param belt_as1: Belt abyssal socket 1.
:param belt_as2: Belt abyssal socket 2.
:param flask1: Flask bound to '1' by default.
:param flask2: Flask bound to '2' by default.
:param flask3: Flask bound to '3' by default.
:param flask4: Flask bound to '4' by default.
:param flask5: Flask bound to '5' by default."""
weapon1: Optional[int]
weapon1_as1: Optional[int]
weapon1_as2: Optional[int]
weapon1_swap: Optional[int]
weapon1_swap_as1: Optional[int]
weapon1_swap_as2: Optional[int]
weapon2: Optional[int]
weapon2_as1: Optional[int]
weapon2_as2: Optional[int]
weapon2_swap: Optional[int]
weapon2_swap_as1: Optional[int]
weapon2_swap_as2: Optional[int]
helmet: Optional[int]
helmet_as1: Optional[int]
helmet_as2: Optional[int]
body_armour: Optional[int]
body_armour_as1: Optional[int]
body_armour_as2: Optional[int]
gloves: Optional[int]
gloves_as1: Optional[int]
gloves_as2: Optional[int]
boots: Optional[int]
boots_as1: Optional[int]
boots_as2: Optional[int]
amulet: Optional[int]
ring1: Optional[int]
ring2: Optional[int]
belt: Optional[int]
belt_as1: Optional[int]
belt_as2: Optional[int]
flask1: Optional[int]
flask2: Optional[int]
flask3: Optional[int]
flask4: Optional[int]
flask5: Optional[int]