Skip to content

Commit 33a31e0

Browse files
authored
Merge pull request #1 from sdmway/main
basic refactor
2 parents 5f577b4 + 896b10e commit 33a31e0

File tree

3 files changed

+64
-54
lines changed

3 files changed

+64
-54
lines changed

ChillBot/__init__.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1-
from .music import Music, MusicResponse, ArtistList, TrackItem, ArtistItem, TrackList
1+
from .music import ArtistItem, ArtistList, Music, MusicResponse, TrackItem, TrackList
22

3-
__version__ = "1.1.3"
3+
__all__ = [
4+
"ArtistItem",
5+
"ArtistList",
6+
"Music",
7+
"MusicResponse",
8+
"TrackItem",
9+
"TrackList",
10+
]
11+
12+
__version__ = "1.1.3"

ChillBot/music.py

+45-41
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
from .requests import Request
1+
from dataclasses import dataclass
2+
from http import HTTPStatus
3+
24
from .exceptions import UserNotFound
5+
from .requests import Request
36

4-
from dataclasses import dataclass
57

68
@dataclass(frozen=True)
79
class TrackItem:
@@ -18,6 +20,7 @@ class TrackItem:
1820
Type: int
1921
"""
2022

23+
2124
@dataclass(frozen=True)
2225
class TrackList:
2326
"""Track data list"""
@@ -28,21 +31,18 @@ class TrackList:
2831
Type: list[TrackItem]
2932
"""
3033

31-
def __init__(self):
32-
super().__init__()
33-
3434
def filter(self, name: str) -> TrackItem | None:
3535
"""Filters the tracks
3636
37-
Returns: TrackItem | None
37+
Returns: TrackItem | None
3838
"""
3939

40-
data = [x for x in self.tracks if x.get('name').lower() == name.lower()]
40+
data: TrackItem | None = next(
41+
(x for x in self.tracks if x.name.lower() == name.lower()), None
42+
)
4143

42-
if len(data) == 0:
43-
return None
44+
return data
4445

45-
return TrackItem(data[0].get('name'), data[0].get('plays'))
4646

4747
@dataclass(frozen=True)
4848
class ArtistItem:
@@ -53,12 +53,13 @@ class ArtistItem:
5353
5454
Type: str
5555
"""
56-
tracks: list[TrackItem]
56+
tracks: TrackList
5757
"""Amount of tracks
5858
59-
Type: list[TrackItem]
59+
Type: TrackList
6060
"""
6161

62+
6263
@dataclass(frozen=True)
6364
class ArtistList:
6465
"""Artist data list"""
@@ -69,21 +70,17 @@ class ArtistList:
6970
Type: list[ArtistItem]
7071
"""
7172

72-
def __init__(self):
73-
super().__init__()
74-
7573
def filter(self, name: str) -> ArtistItem | None:
7674
"""Filters the artist
7775
78-
Returns: ArtistItem | None
76+
Returns: ArtistItem | None
7977
"""
8078

81-
data = [x for x in self.artists if x.get('name').lower() == name.lower()]
82-
83-
if len(data) == 0:
84-
return None
85-
86-
return ArtistItem(data[0].get('name'), TrackList([TrackItem(x, y) for x, y in data[0].get('tracks').items()]))
79+
data: ArtistItem | None = next(
80+
(artist for artist in self.artists if artist.name.lower() == name.lower()),
81+
None,
82+
)
83+
return data
8784

8885

8986
@dataclass(frozen=True)
@@ -104,12 +101,12 @@ class MusicResponse:
104101

105102
class Music:
106103
"""Music class for requesting Music data"""
107-
104+
108105
@staticmethod
109-
async def get_top_ten(id: str | int):
106+
async def get_top_ten(id: str | int) -> MusicResponse:
110107
"""Gets the top 10 music data request
111108
112-
Returns: MusicResponse
109+
Returns: MusicResponse
113110
"""
114111
response = await Request(
115112
headers={"Content-Type": "application/json"},
@@ -118,20 +115,27 @@ async def get_top_ten(id: str | int):
118115
"/music"
119116
)
120117

121-
if response.status == 404:
118+
if response.status == HTTPStatus.NOT_FOUND:
122119
raise UserNotFound()
123-
124-
else:
125-
json_response = await response.json()
126-
127-
return MusicResponse(
128-
json_response.get('_id'),
129-
ArtistList(
130-
[ArtistItem(
131-
x.get('name'),
132-
TrackList(
133-
[TrackItem(x, y) for x, y in x.get('tracks').items()]
134-
)
135-
) for x in json_response.get('artists')]
136-
)
137-
)
120+
121+
json_response = await response.json()
122+
123+
return MusicResponse(
124+
id=json_response["_id"],
125+
artists=ArtistList(
126+
[
127+
ArtistItem(
128+
name=artist_data["name"],
129+
tracks=TrackList(
130+
[
131+
TrackItem(name=track_name, plays=track_plays)
132+
for track_name, track_plays in artist_data[
133+
"tracks"
134+
].items()
135+
]
136+
),
137+
)
138+
for artist_data in json_response.get("artists", [])
139+
]
140+
),
141+
)

ChillBot/requests.py

+8-11
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
import aiohttp
2+
23
from .base_urls import base_api
34

5+
46
class Request:
5-
def __init__(self, headers: dict[str, str], params: dict[str, str]):
7+
def __init__(self, headers: dict[str, str], params: dict[str, str]) -> None:
68
self._headers: dict[str, str] = headers
7-
self._params = params
8-
9-
self._client: aiohttp.ClientSession = aiohttp.ClientSession(
10-
headers=self._headers
11-
)
12-
13-
async def GET(self, endpoint: str):
14-
response: aiohttp.ClientSession = await self._client.get(base_api + endpoint, params=self._params)
9+
self._params: dict[str, str] = params
1510

16-
await self._client.close()
17-
return response
11+
async def GET(self, endpoint: str) -> aiohttp.ClientResponse:
12+
async with aiohttp.ClientSession(headers=self._headers) as session:
13+
async with session.get(base_api + endpoint, params=self._params) as response:
14+
return response

0 commit comments

Comments
 (0)