feat: add files uploading; add banner updating
This commit is contained in:
@@ -39,7 +39,7 @@ fetch(c.token, 'метод', 'эндпоинт', {'данные': 'данные'
|
|||||||
Из методов поддерживается `get`, `post`, `put` итд, которые есть в `requests`
|
Из методов поддерживается `get`, `post`, `put` итд, которые есть в `requests`
|
||||||
К названию эндпоинта добавляется домен итд и `api`, то есть в этом примере отпарвится `https://xn--d1ah4a.com/api/эндпоинт`.
|
К названию эндпоинта добавляется домен итд и `api`, то есть в этом примере отпарвится `https://xn--d1ah4a.com/api/эндпоинт`.
|
||||||
|
|
||||||
> [!INFO]
|
> [!NOTE]
|
||||||
> `xn--d1ah4a.com` - punycode от "итд.com"
|
> `xn--d1ah4a.com` - punycode от "итд.com"
|
||||||
|
|
||||||
## прочее
|
## прочее
|
||||||
|
|||||||
@@ -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.posts import create_post, get_posts, get_post, edit_post, delete_post, pin_post, repost, view_post
|
||||||
from itd.reports import report
|
from itd.reports import report
|
||||||
from itd.search import search
|
from itd.search import search
|
||||||
|
from itd.files import upload_file
|
||||||
from itd.request import refresh_auth
|
from itd.request import refresh_auth
|
||||||
|
|
||||||
|
|
||||||
@@ -50,8 +51,8 @@ class Client:
|
|||||||
return self.get_user('me')
|
return self.get_user('me')
|
||||||
|
|
||||||
@refresh_on_error
|
@refresh_on_error
|
||||||
def update_profile(self, username: str | None = None, display_name: str | None = None, bio: str | None = None) -> dict:
|
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)
|
return update_profile(self.token, bio, display_name, username, banner_id)
|
||||||
|
|
||||||
@refresh_on_error
|
@refresh_on_error
|
||||||
def follow(self, username: str) -> dict:
|
def follow(self, username: str) -> dict:
|
||||||
@@ -191,3 +192,8 @@ class Client:
|
|||||||
@refresh_on_error
|
@refresh_on_error
|
||||||
def search_hashtag(self, query: str, limit: int = 5):
|
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
5
itd/files.py
Normal 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)})
|
||||||
@@ -3,7 +3,7 @@ from requests import Session
|
|||||||
s = 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}'
|
base = f'https://xn--d1ah4a.com/api/{url}'
|
||||||
headers = {
|
headers = {
|
||||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
"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()
|
method = method.lower()
|
||||||
if method == "get":
|
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:
|
else:
|
||||||
res = s.request(method.upper(), base, timeout=20, json=params, headers=headers, files=files)
|
res = s.request(method.upper(), base, timeout=20, json=params, headers=headers, files=files)
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from itd.request import fetch
|
|||||||
def get_user(token: str, username: str):
|
def get_user(token: str, username: str):
|
||||||
return fetch(token, 'get', f'users/{username}')
|
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 = {}
|
data = {}
|
||||||
if bio:
|
if bio:
|
||||||
data['bio'] = 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
|
data['displayName'] = display_name
|
||||||
if username:
|
if username:
|
||||||
data['username'] = username
|
data['username'] = username
|
||||||
|
if banner_id:
|
||||||
|
data['bannerId'] = banner_id
|
||||||
return fetch(token, 'put', 'users/me', data)
|
return fetch(token, 'put', 'users/me', data)
|
||||||
|
|
||||||
def follow(token: str, username: str):
|
def follow(token: str, username: str):
|
||||||
|
|||||||
Reference in New Issue
Block a user