1
+ from enum import Enum
2
+ from typing import List
3
+
1
4
import aiohttp
2
5
import pydantic
3
- from typing import List
4
- from enum import Enum
6
+
5
7
6
8
class BlagueType (str , Enum ):
7
9
GLOBAL = "global"
@@ -14,51 +16,52 @@ class BlagueType(str, Enum):
14
16
def __str__ (self ):
15
17
return str (self .value )
16
18
19
+
17
20
class Blague (pydantic .BaseModel ):
18
21
id : int
19
22
type : BlagueType
20
23
joke : str
21
24
answer : str
22
25
26
+
23
27
class CountJoke (pydantic .BaseModel ):
24
28
count : int
25
29
30
+
26
31
class BlaguesAPI :
27
32
def __init__ (self , token : str ):
28
33
self .token = token
29
34
self .base_url = "https://www.blagues-api.fr/api"
30
- self .headers = {'Authorization' : 'Bearer ' + self .token }
31
-
35
+ self .headers = {"Authorization" : f"Bearer { self .token } " }
32
36
33
37
async def _get (self , url : str , params : dict = None ) -> dict :
34
38
async with aiohttp .ClientSession (raise_for_status = True ) as session :
35
- async with session .get (self .base_url + url , headers = self .headers , params = params ) as resp :
39
+ async with session .get (
40
+ self .base_url + url , headers = self .headers , params = params
41
+ ) as resp :
36
42
return await resp .json ()
37
43
38
44
async def random (self , * , disallow : List [str ] = None ) -> Blague :
39
45
endpoint = "/random"
40
46
params = {"disallow" : disallow } if disallow else {}
41
47
data = await self ._get (endpoint , params )
42
-
43
- return Blague .model_validate (data )
44
48
49
+ return Blague .model_validate (data )
45
50
46
51
async def random_categorized (self , category : str ) -> Blague :
47
52
endpoint = f"/type/{ category } /random"
48
53
data = await self ._get (endpoint )
49
-
50
- return Blague .model_validate (data )
51
54
55
+ return Blague .model_validate (data )
52
56
53
57
async def from_id (self , id : int ) -> Blague :
54
58
endpoint = f"/id/{ id } "
55
59
data = await self ._get (endpoint )
56
-
60
+
57
61
return Blague .model_validate (data )
58
62
59
63
async def count (self ) -> CountJoke :
60
64
endpoint = "/count"
61
65
data = await self ._get (endpoint )
62
-
63
- return CountJoke .model_validate (data )
64
66
67
+ return CountJoke .model_validate (data )
0 commit comments