74 lines
2.1 KiB
Python
74 lines
2.1 KiB
Python
import requests
|
|
from inject import autoparams
|
|
|
|
from ytrssil.config import Configuration
|
|
from ytrssil.datatypes import Video
|
|
|
|
|
|
class HttpClient:
|
|
@autoparams('config')
|
|
def __init__(self, config: Configuration) -> None:
|
|
self.base_url: str = config.api_url
|
|
self.auth = requests.auth.HTTPBasicAuth(
|
|
config.username,
|
|
config.password,
|
|
)
|
|
|
|
def fetch(self) -> None:
|
|
resp = requests.post(url=f'{self.base_url}/fetch')
|
|
resp.raise_for_status()
|
|
|
|
def register(self) -> None:
|
|
resp = requests.post(url=f'{self.base_url}/register', json={
|
|
'username': self.auth.username,
|
|
'password': self.auth.password,
|
|
})
|
|
resp.raise_for_status()
|
|
|
|
def subscribe_to_channel(self, channel_id: str) -> None:
|
|
resp = requests.post(
|
|
url=f'{self.base_url}/api/channels/{channel_id}/subscribe',
|
|
auth=self.auth,
|
|
)
|
|
resp.raise_for_status()
|
|
|
|
def get_new_videos(self) -> list[Video]:
|
|
resp = requests.get(
|
|
url=f'{self.base_url}/api/videos/new',
|
|
auth=self.auth,
|
|
)
|
|
resp.raise_for_status()
|
|
data = resp.json()
|
|
ret: list[Video] = []
|
|
for video_data in data['videos']:
|
|
ret.append(Video(**video_data))
|
|
|
|
return ret
|
|
|
|
def get_watched_videos(self) -> list[Video]:
|
|
resp = requests.get(
|
|
url=f'{self.base_url}/api/videos/watched',
|
|
auth=self.auth,
|
|
)
|
|
resp.raise_for_status()
|
|
data = resp.json()
|
|
ret: list[Video] = []
|
|
for video_data in data['videos']:
|
|
ret.append(Video(**video_data))
|
|
|
|
return ret
|
|
|
|
def mark_video_as_watched(self, video_id: str) -> None:
|
|
resp = requests.post(
|
|
url=f'{self.base_url}/api/videos/{video_id}/watch',
|
|
auth=self.auth,
|
|
)
|
|
resp.raise_for_status()
|
|
|
|
def mark_video_as_unwatched(self, video_id: str) -> None:
|
|
resp = requests.post(
|
|
url=f'{self.base_url}/api/videos/{video_id}/unwatch',
|
|
auth=self.auth,
|
|
)
|
|
resp.raise_for_status()
|