WIP: API change
This commit is contained in:
@@ -1,6 +1,45 @@
|
||||
"""This is only a temporary solution. Complete Photos API client is yet to be developed."""
|
||||
|
||||
from photosapi_client import AuthenticatedClient
|
||||
import asyncio
|
||||
from photosapi_client import AuthenticatedClient, Client
|
||||
from photosapi_client.api.default.user_me_users_me_get import sync as user_me
|
||||
from photosapi_client.api.default.user_create_users_post import asyncio as user_create
|
||||
from photosapi_client.api.default.login_for_access_token_token_post import (
|
||||
sync as login,
|
||||
)
|
||||
from photosapi_client.api.default.video_find_albums_album_videos_get import (
|
||||
asyncio as video_find,
|
||||
)
|
||||
from photosapi_client.api.default.album_find_albums_get import asyncio as album_find
|
||||
from photosapi_client.api.default.album_create_albums_post import (
|
||||
asyncio as album_create,
|
||||
)
|
||||
from photosapi_client.api.default.album_delete_album_id_delete import (
|
||||
asyncio as album_delete,
|
||||
)
|
||||
from photosapi_client.api.default.photo_find_albums_album_photos_get import (
|
||||
asyncio as photo_find,
|
||||
)
|
||||
from photosapi_client.api.default.photo_patch_photos_id_patch import (
|
||||
asyncio as photo_patch,
|
||||
)
|
||||
from photosapi_client.api.default.photo_delete_photos_id_delete import (
|
||||
asyncio as photo_delete,
|
||||
)
|
||||
from photosapi_client.api.default.photo_upload_albums_album_photos_post import (
|
||||
asyncio_detailed as photo_upload,
|
||||
)
|
||||
from photosapi_client.api.default.photo_get_photos_id_get import asyncio as photo_get
|
||||
|
||||
from photosapi_client.models.body_photo_upload_albums_album_photos_post import (
|
||||
BodyPhotoUploadAlbumsAlbumPhotosPost,
|
||||
)
|
||||
from photosapi_client.types import File
|
||||
from photosapi_client.models.token import Token
|
||||
from photosapi_client.models.http_validation_error import HTTPValidationError
|
||||
from photosapi_client.models.body_login_for_access_token_token_post import (
|
||||
BodyLoginForAccessTokenTokenPost,
|
||||
)
|
||||
|
||||
# import asyncio
|
||||
from base64 import b64decode, b64encode
|
||||
@@ -72,8 +111,33 @@ async def authorize() -> str:
|
||||
return (await response.json())["access_token"]
|
||||
|
||||
|
||||
unauthorized_client = Client(
|
||||
base_url=configGet("address", "posting", "api"),
|
||||
timeout=5.0,
|
||||
verify_ssl=True,
|
||||
raise_on_unexpected_status=True,
|
||||
)
|
||||
|
||||
login_token = login(
|
||||
client=unauthorized_client,
|
||||
form_data=BodyLoginForAccessTokenTokenPost(
|
||||
grant_type="password",
|
||||
scope="me albums.list albums.read albums.write photos.list photos.read photos.write videos.list videos.read videos.write",
|
||||
username=configGet("username", "posting", "api"),
|
||||
password=configGet("password", "posting", "api"),
|
||||
),
|
||||
)
|
||||
|
||||
if not isinstance(login_token, Token):
|
||||
logWrite(f"Could not initialize connection due to invalid token: {login_token}")
|
||||
exit()
|
||||
|
||||
client = AuthenticatedClient(
|
||||
base_url=configGet("address", "posting", "api"), token=await authorize()
|
||||
base_url=configGet("address", "posting", "api"),
|
||||
timeout=5.0,
|
||||
verify_ssl=True,
|
||||
raise_on_unexpected_status=True,
|
||||
token=login_token.access_token,
|
||||
)
|
||||
|
||||
# async def random_pic(token: Union[str, None] = None) -> Tuple[str, str]:
|
||||
@@ -267,5 +331,5 @@ client = AuthenticatedClient(
|
||||
# return None
|
||||
|
||||
|
||||
# if __name__ == "__main__":
|
||||
# print(asyncio.run(authorize()))
|
||||
if __name__ == "__main__":
|
||||
print(asyncio.run(authorize()))
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import asyncio
|
||||
from sys import exit
|
||||
from traceback import print_exc
|
||||
from modules.api_client import create_album, create_user, http_session
|
||||
from modules.api_client import album_create, user_create, http_session
|
||||
from argparse import ArgumentParser
|
||||
|
||||
from modules.utils import configSet
|
||||
@@ -26,7 +26,7 @@ async def cli_create_user() -> None:
|
||||
email = input(f"Choose email for user '{username}': ").strip()
|
||||
password = input(f"Choose password for user '{username}': ").strip()
|
||||
try:
|
||||
result_1 = await create_user(username, email, password)
|
||||
result_1 = await user_create(username, email, password)
|
||||
# asyncio.run(create_user(username, email, password))
|
||||
configSet("username", username, "posting", "api")
|
||||
configSet("password", password, "posting", "api")
|
||||
@@ -52,7 +52,7 @@ async def cli_create_album() -> None:
|
||||
name = input("Choose a name for your album: ").strip()
|
||||
title = input(f"Choose a title for album '{name}': ").strip()
|
||||
try:
|
||||
result_2 = await create_album(name, title)
|
||||
result_2 = await album_create(name, title)
|
||||
# asyncio.run(create_album(name, title))
|
||||
configSet("album", name, "posting", "api")
|
||||
except Exception as exp:
|
||||
|
@@ -9,7 +9,14 @@ import aiofiles
|
||||
|
||||
from classes.poster_client import PosterClient
|
||||
|
||||
from modules.api_client import authorize, move_pic, random_pic, http_session
|
||||
from modules.api_client import (
|
||||
client,
|
||||
authorize,
|
||||
photo_find,
|
||||
photo_get,
|
||||
photo_patch,
|
||||
http_session,
|
||||
)
|
||||
from modules.database import col_sent, col_submitted
|
||||
from modules.logger import logWrite
|
||||
from modules.utils import configGet, locale
|
||||
@@ -27,8 +34,15 @@ async def send_content(app: PosterClient) -> None:
|
||||
return
|
||||
|
||||
try:
|
||||
pic = await random_pic()
|
||||
except KeyError:
|
||||
search_result = await photo_find(
|
||||
client=client,
|
||||
album=configGet("album", "posting", "api"),
|
||||
caption="queue",
|
||||
page_size=configGet("page_size", "posting"),
|
||||
)
|
||||
print(search_result, flush=True)
|
||||
pic = choice(search_result.results)
|
||||
except (IndexError, KeyError):
|
||||
logWrite(locale("post_empty", "console", locale=configGet("locale")))
|
||||
if configGet("error", "reports"):
|
||||
await app.send_message(
|
||||
@@ -45,7 +59,7 @@ async def send_content(app: PosterClient) -> None:
|
||||
return
|
||||
|
||||
response = await http_session.get(
|
||||
f'{configGet("address", "posting", "api")}/photos/{pic[0]}',
|
||||
f'{configGet("address", "posting", "api")}/photos/{pic.id}',
|
||||
headers={"Authorization": f"Bearer {token}"},
|
||||
)
|
||||
|
||||
@@ -67,7 +81,7 @@ async def send_content(app: PosterClient) -> None:
|
||||
|
||||
makedirs(path.join(configGet("tmp", "locations"), tmp_dir), exist_ok=True)
|
||||
|
||||
tmp_path = path.join(tmp_dir, pic[1])
|
||||
tmp_path = path.join(tmp_dir, pic.filename)
|
||||
|
||||
async with aiofiles.open(
|
||||
path.join(configGet("tmp", "locations"), tmp_path), "wb"
|
||||
@@ -75,7 +89,7 @@ async def send_content(app: PosterClient) -> None:
|
||||
await out_file.write(await response.read())
|
||||
|
||||
logWrite(
|
||||
f'Candidate {pic[1]} ({pic[0]}) is {path.getsize(path.join(configGet("tmp", "locations"), tmp_path))} bytes big',
|
||||
f'Candidate {pic.filename} ({pic.id}) is {path.getsize(path.join(configGet("tmp", "locations"), tmp_path))} bytes big',
|
||||
debug=True,
|
||||
)
|
||||
|
||||
@@ -107,7 +121,7 @@ async def send_content(app: PosterClient) -> None:
|
||||
|
||||
del response
|
||||
|
||||
submitted = col_submitted.find_one({"temp.file": pic[1]})
|
||||
submitted = col_submitted.find_one({"temp.file": pic.filename})
|
||||
|
||||
if submitted is not None and submitted["caption"] is not None:
|
||||
caption = submitted["caption"].strip()
|
||||
@@ -144,7 +158,7 @@ async def send_content(app: PosterClient) -> None:
|
||||
disable_notification=configGet("silent", "posting"),
|
||||
)
|
||||
except Exception as exp:
|
||||
logWrite(f"Could not send image {pic[1]} ({pic[0]}) due to {exp}")
|
||||
logWrite(f"Could not send image {pic.filename} ({pic.id}) due to {exp}")
|
||||
if configGet("error", "reports"):
|
||||
await app.send_message(
|
||||
app.owner,
|
||||
@@ -158,8 +172,8 @@ async def send_content(app: PosterClient) -> None:
|
||||
col_sent.insert_one(
|
||||
{
|
||||
"date": datetime.now(),
|
||||
"image": pic[0],
|
||||
"filename": pic[1],
|
||||
"image": pic.id,
|
||||
"filename": pic.filename,
|
||||
"channel": configGet("channel", "posting"),
|
||||
"caption": None
|
||||
if (submitted is None or submitted["caption"] is None)
|
||||
@@ -167,13 +181,13 @@ async def send_content(app: PosterClient) -> None:
|
||||
}
|
||||
)
|
||||
|
||||
await move_pic(pic[0])
|
||||
await photo_patch(client=client, id=pic.id, caption="sent")
|
||||
|
||||
rmtree(path.join(configGet("tmp", "locations"), tmp_dir), ignore_errors=True)
|
||||
|
||||
logWrite(
|
||||
locale("post_sent", "console", locale=configGet("locale")).format(
|
||||
pic[0],
|
||||
pic.id,
|
||||
str(configGet("channel", "posting")),
|
||||
caption.replace("\n", "%n"),
|
||||
str(configGet("silent", "posting")),
|
||||
|
Reference in New Issue
Block a user