Source code for pytenno.interface.auctions

"""Module holding the Auctions interface class."""

from typing import Literal, Optional, Union

from .._backends.auctions import AuctionsBackend
from ..models.auctions import (AuctionEntryExpanded, KubrowAuction,
                               LichAuction, RivenAuction)
from ..models.enums import Element, Platform, Polarity, RivenStat


[docs]class Auctions(AuctionsBackend): """A class for creating and searching for auctions with certain criteria."""
[docs] async def create_auction( self, item: Union[RivenAuction, LichAuction, KubrowAuction], note: str, starting_price: int, buyout_price: int, minimal_reputation: Optional[int] = 0, minimal_increment: Optional[int] = 1, private: Optional[bool] = False, ) -> list[AuctionEntryExpanded]: """Creates a new auction. Parameters ---------- item : RivenAuction, LichAuction, KubrowAuction The item to auction. note : str The note to put on the auction. starting_price : int The starting price of the auction. (In platinum) buyout_price : int The buyout price of the auction. (In platinum) minimal_reputation : int, optional The minimmum reputation a user must have to bid on the auction. minimal_increment : int, optional The minimum amount between bids. (In platinum) private : bool, optional Whether the auction is private or not. If it is private, you can set it to public in the auction settings in the web interface. Returns ------- list[AuctionEntryExpanded] Raises ------ ValueError If the starting price is higher than the buyout price. ValueError If the minimal increment is less than 1. Example ------- >>> async with PyTenno() as tenno: >>> auction = await tenno.Auctions.create_auction( >>> item=RivenAuction(...), >>> note="...", >>> starting_price=100, >>> buyout_price=200, >>> minimal_reputation=0, >>> minimal_increment=50 >>> ) >>> print(auction.owner.ingame_name, auction.platinum) """ if starting_price > buyout_price: raise ValueError("Starting price cannot be higher than buyout price.") if minimal_increment < 1: raise ValueError("Minimal increment cannot be less than 1.") return await self._create_auction( item, note, starting_price, buyout_price, minimal_reputation, minimal_increment, private, )
[docs] async def find_riven_auctions( self, *, weapon_url_name: str, platform: Platform = None, mastery_rank_min: int = None, mastery_rank_max: int = None, re_rolls_min: int = None, re_rolls_max: int = None, positive_stats: list[RivenStat] = None, negative_stats: list[RivenStat] = None, polarity: Polarity = Polarity.any, mod_rank: Literal["any", "maxed"] = None, sort_by: Optional[ Literal[ "price_desc", "price_asc", "positive_attr_desc", "positive_attr_asc" ] ] = None, operation: Optional[Literal["anyOf", "allOf"]] = None, buyout_policy: Optional[Literal["with", "direct"]] = None, ) -> list[AuctionEntryExpanded]: """Finds all riven auctions that match the given criteria. Parameters ---------- weapon_url_name : str The URL name of the weapon to search for. platform : Platform, optional The platform to search for riven auctions on. Default: ``None``, meaning the default set when the client was created. mastery_rank_min : int, optional The minimum mastery rank of the riven. Default: None. mastery_rank_max : int, optional The maximum mastery rank of the riven. Default: None. re_rolls_min : int, optional The minimum number of re-rolls of the riven. Default: None. re_rolls_max : int, optional The maximum number of re-rolls of the riven. Default: None. positive_stats : list[RivenStat], optional Restricts the riven to have the given positive stats. Maximum amount is 3. Default: None. negative_stats : list[RivenStat], optional Restricts the riven to have the given negative stats. Maximum amount is 3. Default: None. polarity : Polarity, optional The polarity of the riven. Default: ``Polarity.any``. Returns ------- list[AuctionEntryExpanded] Raises ------ ValueError If the amount of ``positive_stats`` is greater than 3. ValueError If the amount of ``negative_stats`` is greater than 3. ValueError If the ``mastery_rank_min`` is greater than the ``mastery_rank_max``. ValueError If the ``re_rolls_min`` is greater than the ``re_rolls_max``. ValueError If the ``mastery_rank_min`` is less than 0. ValueError If the ``re_rolls_min`` is less than 0. Example ------- >>> auctions = await tenno.auctions.find_riven_auctions( >>> weapon_url_name="shedu", >>> mastery_rank_max=9, >>> re_rolls_max=10 >>> ) >>> for auction in auctions: >>> print(auction.id) >>> print(auction.item.element.name) """ if positive_stats is not None and len(positive_stats) > 3: raise ValueError("The amount of positive stats cannot be greater than 3.") if negative_stats is not None and len(negative_stats) > 3: raise ValueError("The amount of negative stats cannot be greater than 3.") if mastery_rank_min is not None and mastery_rank_min > mastery_rank_max: raise ValueError( "The mastery rank min cannot be greater than the mastery rank max." ) if re_rolls_min is not None and re_rolls_min > re_rolls_max: raise ValueError( "The re-rolls min cannot be greater than the re-rolls max." ) if mastery_rank_min is not None and mastery_rank_min < 0: raise ValueError("The mastery rank min cannot be less than 0.") if re_rolls_min is not None and re_rolls_min < 0: raise ValueError("The re-rolls min cannot be less than 0.") return await self._find_riven_auctions( platform=platform, weapon_url_name=weapon_url_name, mastery_rank_min=mastery_rank_min, mastery_rank_max=mastery_rank_max, re_rolls_min=re_rolls_min, re_rolls_max=re_rolls_max, positive_stats=positive_stats, negative_stats=negative_stats, polarity=polarity, mod_rank=mod_rank, sort_by=sort_by, operation=operation, buyout_policy=buyout_policy, )
[docs] async def find_lich_auctions( self, *, weapon_url_name: str, platform: Platform = None, element: Optional[Element] = None, ephemera: Optional[bool] = None, damage_min: Optional[int] = None, damage_max: Optional[int] = None, quirk_url_name: Optional[str] = None, sort_by: Optional[ Literal[ "price_desc", "price_asc", "positive_attr_desc", "positive_attr_asc" ] ] = "price_desc", buyout_policy: Optional[Literal["with", "direct"]] = None, ) -> list[AuctionEntryExpanded]: """Finds all lich auctions that match the given criteria. Parameters ---------- weapon_url_name : str The URL name of the weapon to search for. platform : Platform The platform to search for lich auctions on. Default: ``None``, meaning the default set when the client was created. element : Element The element of the lich. Default: None. ephemera : bool Whether the lich is ephemeral. Default: None. damage_min : int The minimum damage of the lich. Default: None. damage_max : int The maximum damage of the lich. Default: None. quirk_url_name : str The URL name of the quirk of the lich. Default: None. sort_by : Literal The sort order of the results. Default: `"price_desc"`. buyout_policy : Literal The buyout policy of the results. Default: None. Returns ------- list[AuctionEntryExpanded] Raises ------ ValueError If the damage min is greater than the damage max. ValueError If the damage min is less than 0. ValueError If the damage max is less than 0. Example ------- >>> async with PyTenno() as tenno: >>> auctions = await tenno.auctions.find_lich_auctions( >>> weapon_url_name="kuva_bramma", >>> damage_min=20, >>> element=Element.toxin, >>> ) >>> for auction in auctions: >>> print(auction.id, auction.owner.ingame_name) """ if damage_min is not None and damage_min > damage_max: raise ValueError("The damage min cannot be greater than the damage max.") if damage_min is not None and damage_min < 0: raise ValueError("The damage min cannot be less than 0.") if damage_max is not None and damage_max < 0: raise ValueError("The damage max cannot be less than 0.") return await self._find_lich_auctions( platform=str(platform), weapon_url_name=weapon_url_name, element=element, ephemera=ephemera, damage_min=damage_min, damage_max=damage_max, quirk_url_name=quirk_url_name, sort_by=sort_by, buyout_policy=buyout_policy, )