Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions blagues_api/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,32 +35,46 @@ def __init__(self, token: str):
self.headers = {"Authorization": f"Bearer {self.token}"}

async def _get(self, url: str, params: dict = None) -> dict:
"""Make a GET request to the API."""
async with aiohttp.ClientSession(raise_for_status=True) as session:
async with session.get(
self.base_url + url, headers=self.headers, params=params
) as resp:
return await resp.json()

async def random(self, *, disallow: List[str] = None) -> Blague:
"""
Get a random joke.
Usage: random(disallow=['dev', 'dark',...])
"""
endpoint = "/random"
params = {"disallow": disallow} if disallow else {}
data = await self._get(endpoint, params)

return Blague.model_validate(data)

async def random_categorized(self, category: str) -> Blague:
"""
Get a random joke from a specific category.
Usage: random_categorized(category=BlagueType.DEV)
"""
endpoint = f"/type/{category}/random"
data = await self._get(endpoint)

return Blague.model_validate(data)

async def from_id(self, id: int) -> Blague:
"""
Get a joke from its ID.
Usage: from_id(1)
"""
endpoint = f"/id/{id}"
data = await self._get(endpoint)

return Blague.model_validate(data)

async def count(self) -> CountJoke:
"""Get the number of jokes available."""
endpoint = "/count"
data = await self._get(endpoint)

Expand Down
8 changes: 5 additions & 3 deletions tests/test_blagues_api.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
import pytest
from dotenv import dotenv_values
from dotenv import load_dotenv
import os

from blagues_api import Blague, BlaguesAPI, BlagueType, CountJoke

pytestmark = pytest.mark.asyncio

load_dotenv()


@pytest.fixture
def token():
env = dotenv_values(".env")
return env["TOKEN"]
return os.getenv("TOKEN")


@pytest.fixture
Expand Down