11from functools import cached_property
2+ from typing import TYPE_CHECKING
23
34from requests import Response , Session
45
5- from audius .config import Config
6+ if TYPE_CHECKING :
7+ from audius .config import Config
8+ from audius .playlists import Playlists
9+ from audius .sdk import Audius
10+ from audius .tips import Tips
11+ from audius .tracks import Tracks
12+ from audius .users import Users
613
714
815class API :
9- def __init__ (self , client : "Client" , config : Config ):
10- self .client = client
11- self .config = config
16+ def __init__ (self , sdk : "Audius" ):
17+ self .sdk = sdk
18+
19+ @property
20+ def client (self ) -> "Client" :
21+ return self .sdk .client
22+
23+ @property
24+ def config (self ) -> "Config" :
25+ return self .sdk .config
26+
27+ @property
28+ def playlists (self ) -> "Playlists" :
29+ return self .sdk .playlists
30+
31+ @property
32+ def tips (self ) -> "Tips" :
33+ return self .sdk .tips
34+
35+ @property
36+ def tracks (self ) -> "Tracks" :
37+ return self .sdk .tracks
38+
39+ @property
40+ def users (self ) -> "Users" :
41+ return self .sdk .users
1242
1343 def _handle_id (self , _id : str ) -> str :
1444 return self .config .aliases [_id ] if _id in self .config .aliases else _id
@@ -30,8 +60,16 @@ def get(self, url: str, **kwargs) -> dict:
3060
3161 return self .request ("GET" , url , ** kwargs ).json ()
3262
63+ def get_redirect_url (self , uri : str ):
64+ result = self .request ("HEAD" , uri , allow_redirects = True )
65+ return result .url
66+
3367 def request (self , method : str , url : str , ** kwargs ) -> Response :
34- url = f"{ self .host_address } /v1/{ url } "
68+ prefix = f"{ self .host_address } /v1/"
69+ uri = url .replace (prefix , "" )
70+ if "https://" not in uri :
71+ url = f"{ prefix } { uri } "
72+
3573 response = self .session .request (method , url , ** kwargs )
3674 response .raise_for_status ()
3775 return response
0 commit comments