import aiohttp import json import dotenv import os import importlib.metadata dotenv.load_dotenv() api_key = os.getenv("BRICKOWL") abrickowl_version = importlib.metadata.version("abrickowlapi") class ABrickowlAPI: def __init__(self, value): self.user_agent = f"abrickowlapi/{abrickowl_version}" self.headers = {"content-type": "application/x-www-form-urlencoded"} self.base_url = "https://api.brickowl.com/v1/" self.session = aiohttp.ClientSession() return self def set_valid(self, set_id: int): """ Verify if a LEGO set ID is valid. """ if len(set_id) == 5: return True else: return False @classmethod async def catalog_list(self): """ Fetch the list of LEGO sets from the Brickowl API. """ async with self.session.get( f"{self.base_url}catalog/list/view?key={api_key}", headers=self.headers, user_agent=self.user_agent, ) as response: if response.status == 200: return await response.json() else: raise Exception(f"Error fetching list, {response.status}") @classmethod async def catalog_lookup(self, set_id: int): """ Fetch details from the brickowl API for a specific LEGO set. set_id: The LEGO set ID to look up. returns JSON response containing set details. """ async with self.session.get( f"{self.base_url}catalog/lookup/{set_id}view?key={api_key}", headers=self.headers, user_agent=self.user_agent, ) as response: if response.status == 200: return await response.json() else: raise Exception(f"Error fetching set {set_id}, {response.status}") @classmethod async def catalog_availability(self, set_id: int): """ Fetch availability information for a specific LEGO set. """ async with self.session.get( f"{self.base_url}catalog/availability/{set_id}view?key={api_key}", headers=self.headers, user_agent=self.user_agent, ) as response: if response.status == 200: return await response.json() else: raise Exception( f"Error fetching fetching availability for {set_id}, {response.status}" ) @classmethod async def catalog_id_lookup(self, set_id: int): async with self.session.get( f"{self.base_url}catalog/id_lookup/{set_id}view?key={api_key}", headers=self.headers, user_agent=self.user_agent, ) as response: if response.status == 200: return await response.json() else: raise Exception(f"ID lookup failed for set {set_id}, {response.status}") @classmethod async def catalog_bulk(self): async with self.session.get( f"{self.base_url}catalog/bulk/view?key={api_key}", headers=self.headers, user_agent=self.user_agent, ) as response: if response.status == 200: return await response.json() else: raise Exception(f"Error fetching bulk, {response.status}") @classmethod async def catalog_search(self, query: str): async with self.session.get( f"{self.base_url}catalog/search/{query}view?key={api_key}", headers=self.headers, user_agent=self.user_agent, ) as response: if response.status == 200: return await response.json() else: raise Exception(f"Search term {set_id} failed, {response.status}") # Usage: # obj = await ABrickowlAPI.catalog_lookup(value)