summaryrefslogtreecommitdiff
path: root/ATRI/request.py
blob: 6b21800df126f46ea0d062baaee74ced054e5dc4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import os
import string
import aiofiles
from random import sample
from pathlib import Path
from typing import Optional
from aiohttp.client import ClientSession

from .exceptions import InvalidWriteText


TEMP_PATH = Path('.') / 'ATRI' / 'data' / 'temp'
os.makedirs(TEMP_PATH, exist_ok=True)


class Request:
    @staticmethod
    async def get_text(url: str, headers: Optional[dict] = None) -> str:
        '''
        异步方式请求接口
        :return: text
        '''
        async with ClientSession() as session:
            async with session.get(url, headers=headers) as r:
                result = await r.text()
        return result

    @staticmethod
    async def get_bytes(url: str, headers: Optional[dict] = None) -> bytes:
        '''
        异步方式请求接口
        :return: bytes
        '''
        async with ClientSession() as session:
            async with session.get(url, headers=headers) as r:
                result = await r.read()
        return result

    @classmethod
    async def get_image(cls, url: str) -> Path:
        '''
        异步方式下载图片
        :return: img file
        '''
        file_path = TEMP_PATH / 'img'
        file_name = ''.join(sample(string.ascii_letters + string.digits, 16))
        img_path = file_path / f'{file_name}.png'
        image = await cls.get_bytes(url)
        try:
            async with aiofiles.open(image, 'wb') as f:
                await f.write(image)
        except InvalidWriteText:
            raise InvalidWriteText('Writing file failed!')
        return img_path

    @staticmethod
    async def post_bytes(url: str, params: Optional[dict] = None) -> bytes:
        '''
        异步方式 Post 接口
        :return: bytes
        '''
        async with ClientSession() as session:
            async with session.post(url, params=params) as r:
                result = await r.read()
        return result