from attrs import define import aiohttp @define class SoundCloudEngine: client_id: str async def call(self, request_point: str, params: dict = None): return await self.get( url=f"https://api-v2.soundcloud.com/{request_point}", params=params ) async def get(self, url: str, params: dict = None): async with aiohttp.ClientSession() as session: async with session.get( url, params=(params or {}) | { "client_id": self.client_id, }, ) as r: return await r.json() async def read_data( self, url: str, params: dict = None, append_client_id: bool = True ): async with aiohttp.ClientSession() as session: async with session.get( url, params=(params or {}) | ( { "client_id": self.client_id, } if append_client_id else {} ), ) as r: return await r.content.read()