2023-11-04 18:13:42 +00:00
|
|
|
from .config import config
|
2023-11-05 06:13:52 +00:00
|
|
|
from PIL import Image
|
2022-05-12 07:14:23 +00:00
|
|
|
from typing import Optional
|
|
|
|
from utils.logging import logger
|
2023-11-05 06:13:52 +00:00
|
|
|
import io
|
2022-05-14 09:43:02 +00:00
|
|
|
import models.imgur
|
2022-05-12 07:14:23 +00:00
|
|
|
import requests
|
|
|
|
|
2024-08-30 14:59:02 +00:00
|
|
|
def uploadToImgur(url: str) -> Optional[str]:
|
2022-05-12 07:14:23 +00:00
|
|
|
try:
|
2023-11-05 06:13:52 +00:00
|
|
|
originalImageBytesIO = io.BytesIO(requests.get(url).content)
|
2024-09-23 12:48:51 +00:00
|
|
|
originalImage = Image.open(originalImageBytesIO).convert("RGB")
|
2023-11-05 06:13:52 +00:00
|
|
|
newImage = Image.new("RGB", originalImage.size)
|
2024-08-30 14:59:02 +00:00
|
|
|
newImage.putdata(originalImage.getdata()) # pyright: ignore[reportArgumentType]
|
|
|
|
maxSize = config["display"]["posters"]["maxSize"]
|
2024-02-10 07:12:58 +00:00
|
|
|
if maxSize:
|
|
|
|
newImage.thumbnail((maxSize, maxSize))
|
2023-11-05 06:13:52 +00:00
|
|
|
newImageBytesIO = io.BytesIO()
|
|
|
|
newImage.save(newImageBytesIO, subsampling = 0, quality = 90, format = "JPEG")
|
2024-10-17 18:30:52 +00:00
|
|
|
response = requests.post(
|
2022-05-12 07:14:23 +00:00
|
|
|
"https://api.imgur.com/3/image",
|
|
|
|
headers = { "Authorization": f"Client-ID {config['display']['posters']['imgurClientID']}" },
|
2023-11-05 06:13:52 +00:00
|
|
|
files = { "image": newImageBytesIO.getvalue() }
|
2024-10-17 18:30:52 +00:00
|
|
|
)
|
|
|
|
logger.debug("HTTP %d, %s, %s", response.status_code, response.headers, response.text.strip())
|
|
|
|
data: models.imgur.UploadResponse = response.json()
|
2022-05-12 07:14:23 +00:00
|
|
|
if not data["success"]:
|
|
|
|
raise Exception(data["data"]["error"])
|
|
|
|
return data["data"]["link"]
|
|
|
|
except:
|
2023-11-04 18:13:42 +00:00
|
|
|
logger.exception("An unexpected error occured while uploading an image to Imgur")
|