feat: add files uploading; add banner updating

This commit is contained in:
firedotguy
2026-01-29 23:39:35 +03:00
parent 10751f9ddb
commit f1d9a0b2f0
5 changed files with 20 additions and 7 deletions

View File

@@ -8,6 +8,7 @@ from itd.notifications import get_notifications, mark_as_read, mark_all_as_read,
from itd.posts import create_post, get_posts, get_post, edit_post, delete_post, pin_post, repost, view_post
from itd.reports import report
from itd.search import search
from itd.files import upload_file
from itd.request import refresh_auth
@@ -50,8 +51,8 @@ class Client:
return self.get_user('me')
@refresh_on_error
def update_profile(self, username: str | None = None, display_name: str | None = None, bio: str | None = None) -> dict:
return update_profile(self.token, bio, display_name, username)
def update_profile(self, username: str | None = None, display_name: str | None = None, bio: str | None = None, banner_id: str | None = None) -> dict:
return update_profile(self.token, bio, display_name, username, banner_id)
@refresh_on_error
def follow(self, username: str) -> dict:
@@ -190,4 +191,9 @@ class Client:
@refresh_on_error
def search_hashtag(self, query: str, limit: int = 5):
return search(self.token, query, 0, limit)
return search(self.token, query, 0, limit)
@refresh_on_error
def upload_file(self, name: str, data: bytes):
return upload_file(self.token, name, data)

5
itd/files.py Normal file
View File

@@ -0,0 +1,5 @@
from itd.request import fetch
def upload_file(token: str, name: str, data: bytes):
return fetch(token, 'post', 'files/upload', files={'file': (name, data)})

View File

@@ -3,7 +3,7 @@ from requests import Session
s = Session()
def fetch(token: str, method: str, url: str, params: dict = {}, files: list = []):
def fetch(token: str, method: str, url: str, params: dict = {}, files: dict[str, tuple[str, bytes]] = {}):
base = f'https://xn--d1ah4a.com/api/{url}'
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
@@ -23,7 +23,7 @@ def fetch(token: str, method: str, url: str, params: dict = {}, files: list = []
}
method = method.lower()
if method == "get":
res = s.get(base, timeout=20, params=params, headers=headers)
res = s.get(base, timeout=120 if files else 20, params=params, headers=headers)
else:
res = s.request(method.upper(), base, timeout=20, json=params, headers=headers, files=files)

View File

@@ -4,7 +4,7 @@ from itd.request import fetch
def get_user(token: str, username: str):
return fetch(token, 'get', f'users/{username}')
def update_profile(token: str, bio: str | None = None, display_name: str | None = None, username: str | None = None):
def update_profile(token: str, bio: str | None = None, display_name: str | None = None, username: str | None = None, banner_id: str | None = None):
data = {}
if bio:
data['bio'] = bio
@@ -12,6 +12,8 @@ def update_profile(token: str, bio: str | None = None, display_name: str | None
data['displayName'] = display_name
if username:
data['username'] = username
if banner_id:
data['bannerId'] = banner_id
return fetch(token, 'put', 'users/me', data)
def follow(token: str, username: str):