#!/usr/bin/env python3

# This script could be used for actix-web multipart example test
# just start server and run client.py

import asyncio
import aiofiles
import aiohttp

png_name = '../test.png'
gif_name = '../earth.gif'
jpeg_name = '../cat.jpg'
webp_name = '../scene.webp'
url = 'http://localhost:8080/image'

async def file_sender(file_name=None):
    async with aiofiles.open(file_name, 'rb') as f:
        chunk = await f.read(64*1024)
        while chunk:
            yield chunk
            chunk = await f.read(64*1024)


async def req():
    async with aiohttp.ClientSession() as session:
        data = aiohttp.FormData(quote_fields=False)
        data.add_field("images[]", file_sender(file_name=png_name), filename="image1.png", content_type="image/png")
        data.add_field("images[]", file_sender(file_name=png_name), filename="image2.png", content_type="image/png")
        data.add_field("images[]", file_sender(file_name=gif_name), filename="image1.gif", content_type="image/gif")
        data.add_field("images[]", file_sender(file_name=gif_name), filename="image2.gif", content_type="image/gif")
        data.add_field("images[]", file_sender(file_name=jpeg_name), filename="image1.jpeg", content_type="image/jpeg")
        data.add_field("images[]", file_sender(file_name=jpeg_name), filename="image2.jpeg", content_type="image/jpeg")
        data.add_field("images[]", file_sender(file_name=webp_name), filename="image1.webp", content_type="image/webp")
        data.add_field("images[]", file_sender(file_name=webp_name), filename="image2.webp", content_type="image/webp")

        async with session.post(url, data=data) as resp:
            text = await resp.text()
            print(text)
            assert 201 == resp.status


loop = asyncio.get_event_loop()
loop.run_until_complete(req())