#!/usr/bin/env python3.9 import argparse import concurrent.futures import dataclasses import functools import logging import os import random import re import sys import time import typing import uuid from pathlib import Path from typing import Optional import httpx IMGBB_TOKEN = os.getenv('IMGBB_TOKEN', '391f0559cc209b11f37eda0084bb3281') client = httpx.Client(base_url='https://api.imgbb.com/1/', params={'key': IMGBB_TOKEN}) def upload_image(image_path: Path) -> str: filename = f'i{image_path.suffix}' with image_path.open('rb') as f: res = client.post('/upload', files={'image': (filename, f)}) res.raise_for_status() data = res.json()['data'] return data['url'] def parse_args(argv: Optional[typing.Sequence[str]] = None) -> argparse.Namespace: arger = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter) arger.add_argument('image_paths', nargs='+', action='store', type=Path, help='Path to image to upload') if not argv or len(argv) == 0: arger.print_help() sys.exit(1) return arger.parse_args(argv) def main(): args = parse_args(sys.argv[1:]) image_paths = args.image_paths with concurrent.futures.ThreadPoolExecutor(max_workers=3) as pool: results = list(pool.map(upload_image, image_paths)) for url in results: print(url) if __name__ == '__main__': main()