Source code for asyncpixel.models.auctions
"""Auction related objects."""
import datetime
from math import floor
from typing import Dict, List, Optional, Union
from pydantic import BaseModel, ConfigDict, Field
from pydantic.types import UUID4
from .utils import to_camel
[docs]class Bids(BaseModel):
"""Bid models.
Args:
auction_id (UUID4): Id of auction.
bidder (UUID4): Id of bidder.
profile_id (UUID4): Profile_id of seller.
amount (str): Amount bidded.
timestamp (datetime.datetime): Timestamp of bid placed.
"""
auction_id: UUID4
bidder: UUID4
profile_id: Optional[UUID4] = None
amount: int
timestamp: datetime.datetime
[docs]class AuctionItem(BaseModel):
"""Auction model.
Args:
uuid (UUID4): Id of auction.
auctioneer (UUID4): Id of seller.
profile_id (UUID4): Profile_id of seller.
coop (str): Amount bidded.
start (datetime.datetime): Start time of auction.
end (datetime.datetime): End time of auction.
item_name (str): Name of auction item.
item_lore (str): Lore of item.
extra (str): extra.
category (str): Item category
tier (str): Tier of item.
starting_bid (int): Starting Auction bid.
item_bytes (str): Bytes of item.
claimed (bool): Whether the auction has been won.
claimed_bidders (Optional[List[UUID4]]): Amount bidded.
highest_bid_amount (int): Highest amount bidded.
bids (List[Bids]): List of bids on auction.
id (str): Id of auction.
bin (bool): Whether the auction is BIN (Buy instantly)
"""
uuid: UUID4
auctioneer: UUID4
profile_id: UUID4
coop: List[UUID4]
start: datetime.datetime
end: datetime.datetime
item_name: str
item_lore: str
extra: str
category: str
tier: str
starting_bid: int
item_bytes: Union[str, Dict[str, Union[int, str]]]
claimed: bool
claimed_bidders: Optional[List[UUID4]] = None
highest_bid_amount: int
bids: List[Bids]
id: Optional[str] = Field(alias="_id", default=None)
bin: bool = False
[docs] def active(self) -> bool:
"""Return if auction is active - you can bid on it."""
return not self.claimed and datetime.datetime.now(tz=self.end.astimezone().tzinfo) < self.end
[docs] def lowest_possible_bid(self) -> int:
"""Returns next lowest possible bid."""
current_price = max(self.starting_bid, self.highest_bid_amount)
if 1 <= current_price <= 3:
return floor(current_price) + 1
return floor(current_price * 1.15)
[docs]class Auction(BaseModel):
"""Main auction object.
Args:
page (int): Page of auction data.
total_pages (int): Total pages of auctions.
total_auctions (int): Total number of auctions.
last_updated (datetime.datetime): Time last updated.
auctions (List[AuctionItem]): List of auctions.
"""
page: int
total_pages: int
total_auctions: int
last_updated: datetime.datetime
auctions: List[AuctionItem]
model_config = ConfigDict(alias_generator=to_camel)