Source code for tibiapy.enums

"""Enumerations used by models throughout the library."""
import enum

__all__ = (
    'AccountStatus',
    'AuctionOrder',
    'AuctionOrderBy',
    'AuctionStatus',
    'AuctionSearchType',
    'Category',
    'BattlEyeType',
    'BattlEyeHighscoresFilter',
    'BattlEyeTypeFilter',
    'BazaarType',
    'BidType',
    'HouseOrder',
    'HouseStatus',
    'HouseType',
    'NewsCategory',
    'NewsType',
    'PvpType',
    'PvpTypeFilter',
    'Sex',
    'SkillFilter',
    'SpellGroup',
    'SpellSorting',
    'SpellType',
    'ThreadStatus',
    'TournamentWorldType',
    'TournamentPhase',
    'TransferType',
    'Vocation',
    'VocationAuctionFilter',
    'VocationFilter',
    'VocationSpellFilter',
    'WorldLocation',
)


class BaseEnum(enum.Enum):
    def __str__(self):
        return self.value

    def __repr__(self):
        return "%s.%s" % (self.__class__.__name__, self.name)


class NumericEnum(BaseEnum):
    def __str__(self):
        return self.name.lower()


[docs]class AccountStatus(BaseEnum): """Possible account statuses.""" FREE_ACCOUNT = "Free Account" PREMIUM_ACCOUNT = "Premium Account"
[docs]class AuctionOrder(NumericEnum): """The possible ordering directions for auctions. The field or value used for the ordering is defined by :class:`AuctionOrderBy`. """ HIGHEST_LATEST = 0 """Order by the highest or latest value.""" LOWEST_EARLIEST = 1 """Order by the lowest or earliest value."""
[docs]class AuctionOrderBy(NumericEnum): """The possible values to order the auctions by.""" BID = 100 """The currently displayed bid for the auction.""" END_DATE = 101 """The end date of the auction.""" LEVEL = 102 """The experience level of the auctioned character.""" START_DATE = 103 """The start date of the auction.""" AXE_FIGHTING = 10 CLUB_FIGHTING = 9 DISTANCE_FIGHTING = 7 FISHING = 13 FIST_FIGHTING = 11 MAGIC_LEVEL = 1 SHIELDING = 6 SWORD_FIGHTING = 8
[docs]class AuctionSearchType(NumericEnum): """The possible search types.""" ITEM_DEFAULT = 0 """Searches everything that includes the words on the search string.""" ITEM_WILDCARD = 1 """Searches everything that includes the search string""" CHARACTER_NAME = 2 """Searches a character's name."""
[docs]class AuctionStatus(BaseEnum): """The possible values an auction might have.""" IN_PROGRESS = 'in progress' """The auction is currently active. Notes ----- This status doesn't exist in Tibia.com explicitly. It is given to all ongoing auctions.""" CURRENTLY_PROCESSED = 'currently processed' """The auction ended with a winner, but payment hasn't been received yet.""" PENDING_TRANSFER = 'will be transferred at the next server save' """The auction was finished and was paid, but the character hasn't been transferred to the new owner yet.""" CANCELLED = 'cancelled' """The auction was cancelled as no payment was received in time.""" FINISHED = 'finished' """The auction either finished with no bids or the character was transferred to the new owner already."""
[docs]class BattlEyeType(NumericEnum): """The possible BattlEye statuses a world can have. .. versionadded:: 4.0.0 """ UNPROTECTED = 0 """Worlds without any BattlEye protection.""" PROTECTED = 1 """Worlds protected after the world was created, represented by a yellow symbol.""" INITIALLY_PROTECTED = 2 """Worlds protected from the beginning, represented by a green symbol.""" YELLOW = PROTECTED """Alias for protected worlds.""" GREEN = INITIALLY_PROTECTED """Alias for initially protected worlds."""
[docs]class BattlEyeHighscoresFilter(NumericEnum): """The possible BattlEye filters that can be used for highscores.""" ANY_WORLD = -1 """Show all worlds.""" INITIALLY_PROTECTED = 2 """Worlds protected from the beginning, represented by a green symbol.""" PROTECTED = 1 """Worlds protected after the world was created, represented by a yellow symbol.""" UNPROTECTED = 0 """Worlds without any BattlEye protection.""" YELLOW = PROTECTED """Alias for protected worlds. .. versionadded:: 4.0.0 """ GREEN = INITIALLY_PROTECTED """Alias for initially protected worlds. .. versionadded:: 4.0.0 """
[docs]class BattlEyeTypeFilter(NumericEnum): """The possible BattlEye filters that can be used for auctions.""" INITIALLY_PROTECTED = 1 """Worlds protected from the beginning, represented by a green symbol.""" PROTECTED = 2 """Worlds protected after the world was created, represented by a yellow symbol.""" NOT_PROTECTED = 3 """Worlds without any BattlEye protection.""" YELLOW = PROTECTED """Alias for protected worlds. .. versionadded:: 4.0.0 """ GREEN = INITIALLY_PROTECTED """Alias for initially protected worlds. .. versionadded:: 4.0.0 """
[docs]class BazaarType(BaseEnum): """The possible bazaar types.""" CURRENT = "Current Auctions" HISTORY = "Auction History"
[docs]class BidType(BaseEnum): """The possible bid types for an auction.""" MINIMUM = "Minimum Bid" """The minimum bid set by the auction author, meaning the auction hasn't received any bids or it finished without bids.""" CURRENT = "Current Bid" """The current maximum bid, meaning the auction has received at least one bid.""" WINNING = "Winning Bid" """The bid that won the auction."""
[docs]class Category(NumericEnum): """The different highscores categories.""" ACHIEVEMENTS = 1 AXE_FIGHTING = 2 CHARM_POINTS = 3 CLUB_FIGHTING = 4 DISTANCE_FIGHTING = 5 DROME_SCORE = 14 EXPERIENCE = 6 FISHING = 7 FIST_FIGHTING = 8 GOSHNARS_TAINT = 9 LOYALTY_POINTS = 10 MAGIC_LEVEL = 11 SHIELDING = 12 SWORD_FIGHTING = 13
[docs]class HouseOrder(BaseEnum): """The possible ordering methods for house lists in Tibia.com""" NAME = "name" SIZE = "size" RENT = "rent" BID = "bid" AUCTION_END = "end"
[docs]class HouseStatus(BaseEnum): """Renting statuses of a house.""" RENTED = "rented" AUCTIONED = "auctioned"
[docs]class HouseType(BaseEnum): """The types of house available.""" HOUSE = "house" GUILDHALL = "guildhall" @property def plural(self): """:class:`str`: The plural for the house type.""" return f"{self.value}s"
[docs]class NewsCategory(BaseEnum): """The different news categories.""" CIPSOFT = "cipsoft" COMMUNITY = "community" DEVELOPMENT = "development" SUPPORT = "support" TECHNICAL_ISSUES = "technical" @property def filter_name(self): return f"filter_{self.value}"
[docs]class NewsType(BaseEnum): """The different types of new entries.""" NEWS_TICKER = "News Ticker" FEATURED_ARTICLE = "Featured Article" NEWS = "News" @property def filter_name(self): return f"filter_{self.value.split(' ')[-1].lower()}"
[docs]class PvpType(BaseEnum): """The possible PvP types a World can have.""" OPEN_PVP = "Open PvP" OPTIONAL_PVP = "Optional PvP" RETRO_OPEN_PVP = "Retro Open PvP" RETRO_HARDCORE_PVP = "Retro Hardcore PvP" HARDCORE_PVP = "Hardcore PvP"
[docs]class PvpTypeFilter(NumericEnum): """The possible PVP filters that can be used for auctions.""" OPEN_PVP = 0 OPTIONAL_PVP = 1 HARDCORE_PVP = 2 RETRO_OPEN_PVP = 3 RETRO_HARDCORE_PVP = 4
[docs]class Sex(BaseEnum): """Possible character sexes.""" MALE = "male" FEMALE = "female"
[docs]class SkillFilter(NumericEnum): """The different skill filters for auctions.""" AXE_FIGHTING = 10 CLUB_FIGHTING = 9 DISTANCE_FIGHTING = 7 FISHING = 13 FIST_FIGHTING = 11 MAGIC_LEVEL = 1 SHIELDING = 6 SWORD_FIGHTING = 8
[docs]class SpellGroup(BaseEnum): """The possible cooldown groups. Note that secondary groups are not enumerated. """ ATTACK = "Attack" HEALING = "Healing" SUPPORT = "Support"
[docs]class SpellType(BaseEnum): """The possible spell types.""" INSTANT = "Instant" RUNE = "Rune"
[docs]class SpellSorting(BaseEnum): """The different sorting options for the spells section.""" NAME = "name" GROUP = "group" TYPE = "type" EXP_LEVEL = "level" MANA = "mana" PRICE = "price" PREMIUM = "premium"
[docs]class ThreadStatus(enum.Flag): """The possible status a thread can have. Threads can have a combination of multiple status. The numeric values are arbitrary. """ NONE = 0 HOT = 1 #: Thread has more than 16 replies. NEW = 2 #: Thread has new posts since last visit. CLOSED = 4 #: Thread is closed. STICKY = 8 #: Thread is stickied. def __str__(self): return ", ".join(v.name.title() for v in list(self)) def __iter__(self): for entry in list(self.__class__): if entry in self and entry is not self.NONE: yield entry
[docs] def get_icon_name(self): """Generate an icon name, following the same ordering used in Tibia.com. Returns ------- :class:`str` The name of the icon used in Tibia.com """ if self.value == 0: return None joined_str = "".join(v.name.lower() for v in list(self)) return f"logo_{joined_str}.gif"
[docs] @classmethod def from_icon(cls, icon): """Get the flag combination, based from the icon's name present in the thread status. Parameters ---------- icon: :class:`str` The icon's filename. Returns ------- :class:`ThreadStatus` The combination of thread status founds. """ flags = 0 for entry in list(cls): if entry.name.lower() in icon: flags += entry.value # noinspection PyArgumentList return cls(flags)
[docs]class TournamentWorldType(BaseEnum): """The possible types of tournament worlds.""" REGULAR = "Regular" RESTRICTED = "Restricted Store"
[docs]class TournamentPhase(BaseEnum): """The possible tournament phases.""" SIGN_UP = "sign up" RUNNING = "running" ENDED = "ended"
[docs]class TransferType(BaseEnum): """The possible special transfer restrictions a world may have.""" REGULAR = "regular" #: No special transfer restrictions BLOCKED = "blocked" #: Can't transfer to this world, but can transfer out of this world. LOCKED = "locked" #: Can transfer to this world, but can't transfer out of this world.
[docs]class Vocation(BaseEnum): """The possible vocation types.""" NONE = "None" DRUID = "Druid" KNIGHT = "Knight" PALADIN = "Paladin" SORCERER = "Sorcerer" ELDER_DRUID = "Elder Druid" ELITE_KNIGHT = "Elite Knight" ROYAL_PALADIN = "Royal Paladin" MASTER_SORCERER = "Master Sorcerer"
[docs]class VocationAuctionFilter(NumericEnum): """The possible vocation filters for auctions.""" NONE = 1 DRUID = 2 KNIGHT = 3 PALADIN = 4 SORCERER = 5
[docs]class VocationFilter(NumericEnum): """The vocation filters available for Highscores. The numeric values are what the highscores form accepts. """ ALL = 0 NONE = 1 KNIGHTS = 2 PALADINS = 3 SORCERERS = 4 DRUIDS = 5
[docs] @classmethod def from_name(cls, name, all_fallback=True): """Get a vocation filter from a vocation's name. Parameters ---------- name: :class:`str` The name of the vocation. all_fallback: :class:`bool` Whether to return :py:attr:`ALL` if no match is found. Otherwise, :obj:`None` will be returned. Returns ------- VocationFilter, optional: The matching vocation filter. """ name = name.upper() for vocation in cls: # type: VocationFilter if vocation.name in name or vocation.name[:-1] in name and vocation != cls.ALL: return vocation if all_fallback or name.upper() == "ALL": return cls.ALL return None
[docs]class VocationSpellFilter(BaseEnum): """The possible vocation types to filter out spells.""" DRUID = "Druid" KNIGHT = "Knight" PALADIN = "Paladin" SORCERER = "Sorcerer"
[docs]class WorldLocation(BaseEnum): """The possible physical locations for servers.""" EUROPE = "Europe" NORTH_AMERICA = "North America" SOUTH_AMERICA = "South America"