1
0
Fork 0
mirror of synced 2024-06-26 10:11:19 +12:00
Rare/rare/components/tabs/shop/shop_models.py

149 lines
5.7 KiB
Python
Raw Normal View History

2021-08-23 08:22:17 +12:00
import datetime
import random
from dataclasses import dataclass
from rare.utils.utils import get_lang
2021-08-26 06:25:10 +12:00
class ImageUrlModel:
def __init__(self, front_tall: str = "", offer_image_tall: str = "",
2021-09-13 07:19:51 +12:00
thumbnail: str = "", front_wide: str = "", offer_image_wide: str = "",
product_logo: str = ""):
self.front_tall = front_tall
self.offer_image_tall = offer_image_tall
self.thumbnail = thumbnail
self.front_wide = front_wide
2021-08-26 06:25:10 +12:00
self.offer_image_wide = offer_image_wide
2021-09-13 07:19:51 +12:00
self.product_logo = product_logo
@classmethod
def from_json(cls, json_data: list):
tmp = cls()
for item in json_data:
if item["type"] == "Thumbnail":
tmp.thumbnail = item["url"]
elif item["type"] == "DieselStoreFrontTall":
tmp.front_tall = item["url"]
elif item["type"] == "DieselStoreFrontWide":
tmp.front_wide = item["url"]
elif item["type"] == "OfferImageTall":
tmp.offer_image_tall = item["url"]
2021-08-26 06:25:10 +12:00
elif item["type"] == "OfferImageWide":
tmp.offer_image_wide = item["url"]
2021-09-13 07:19:51 +12:00
elif item["type"] == "ProductLogo":
tmp.product_logo = item["url"]
return tmp
class ShopGame:
# TODO: Copyrights etc
2021-08-26 06:25:10 +12:00
def __init__(self, title: str = "", image_urls: ImageUrlModel = None, social_links: dict = None,
2021-06-10 09:12:49 +12:00
langs: list = None, reqs: dict = None, publisher: str = "", developer: str = "",
2021-08-23 08:22:17 +12:00
original_price: str = "", discount_price: str = "", tags: list = None, namespace: str = "",
offer_id: str = ""):
self.title = title
self.image_urls = image_urls
self.links = []
if social_links:
for item in social_links:
if item.startswith("link"):
self.links.append(tuple((item.replace("link", ""), social_links[item])))
else:
self.links = []
self.languages = langs
2021-06-11 05:58:35 +12:00
self.reqs = reqs
self.publisher = publisher
self.developer = developer
self.price = original_price
self.discount_price = discount_price
2021-06-17 05:03:18 +12:00
self.tags = tags
2021-08-23 08:22:17 +12:00
self.namespace = namespace
self.offer_id = offer_id
@classmethod
def from_json(cls, api_data: dict, search_data: dict):
if isinstance(api_data, list):
for product in api_data:
if product["_title"] == "home":
api_data = product
break
2021-06-09 23:25:57 +12:00
if "pages" in api_data.keys():
2021-09-06 07:25:57 +12:00
for page in api_data["pages"]:
if page["_slug"] == "home":
api_data = page
break
2021-08-23 08:22:17 +12:00
tmp = cls()
2021-06-13 10:05:14 +12:00
tmp.title = search_data.get("title", "Fail")
2021-08-26 06:25:10 +12:00
tmp.image_urls = ImageUrlModel.from_json(search_data["keyImages"])
2021-06-09 23:25:57 +12:00
links = api_data["data"]["socialLinks"]
tmp.links = []
for item in links:
if item.startswith("link"):
tmp.links.append(tuple((item.replace("link", ""), links[item])))
tmp.available_voice_langs = api_data["data"]["requirements"].get("languages", "Failed")
2021-06-10 09:12:49 +12:00
tmp.reqs = {}
for i, system in enumerate(api_data["data"]["requirements"].get("systems", [])):
2021-06-15 08:30:57 +12:00
try:
tmp.reqs[system["systemType"]] = {}
except KeyError:
continue
for req in system["details"]:
2021-06-11 05:58:35 +12:00
try:
tmp.reqs[system["systemType"]][req["title"]] = (req["minimum"], req["recommended"])
except KeyError:
pass
2021-06-13 10:05:14 +12:00
tmp.publisher = api_data["data"]["meta"].get("publisher", "")
tmp.developer = api_data["data"]["meta"].get("developer", "")
if not tmp.developer:
for i in search_data["customAttributes"]:
if i["key"] == "developerName":
tmp.developer = i["value"]
tmp.price = search_data['price']['totalPrice']['fmtPrice']['originalPrice']
tmp.discount_price = search_data['price']['totalPrice']['fmtPrice']['discountPrice']
2021-06-17 05:03:18 +12:00
tmp.tags = [i.replace("_", " ").capitalize() for i in api_data["data"]["meta"].get("tags", [])]
2021-08-23 08:22:17 +12:00
tmp.namespace = search_data["namespace"]
tmp.offer_id = search_data["id"]
return tmp
2021-08-23 08:22:17 +12:00
@dataclass
class BrowseModel:
category: str = "games/edition/base|bundles/games|editors|software/edition/base"
count: int = 30
locale: str = get_lang()
keywords: str = ""
sortDir: str = "DESC"
start: int = 0
tag: str = ""
withMapping: bool = True
withPrice: bool = True
date: str = f"[,{datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%dT%X')}.{str(random.randint(0, 999)).zfill(3)}Z]"
price: str = ""
2021-08-26 08:08:24 +12:00
onSale: bool = False
2021-08-23 08:22:17 +12:00
@property
def __dict__(self):
payload = {"category": self.category,
"count": self.count,
"country": self.locale.upper(),
"keywords": self.keywords,
"locale": self.locale,
"sortDir": self.sortDir,
"allowCountries": self.locale.upper(),
"start": self.start,
"tag": self.tag,
"withMapping": self.withMapping,
"withPrice": self.withPrice,
"releaseDate": self.date,
"effectiveDate": self.date,
}
if self.price == "free":
payload["freeGame"] = True
elif self.price.startswith("<price>"):
payload["priceRange"] = self.price.replace("<price>", "")
2021-08-26 08:08:24 +12:00
if self.onSale:
2021-08-23 08:22:17 +12:00
payload["onSale"] = True
return payload