request.py 3.21 KB
Newer Older
Wei Shoulin's avatar
Wei Shoulin committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import requests
import os
from typing import IO, Optional

from . import Result

def auth_header() -> dict:
    token = os.getenv("CSST_DFS_TOKEN", None)
    if not token:
        raise ValueError("env CSST_DFS_TOKEN is not set.")
    return {
        "Authorization": f"Bearer {token}"
    }

def get_request_url(endpoint: str) -> str:
    base_url = os.getenv("CSST_DFS_GATEWAY", None)
    if not base_url:
        raise ValueError("env CSST_DFS_GATEWAY is not set.")
Wei Shoulin's avatar
bug    
Wei Shoulin committed
19
    if not base_url.startswith("http://"):
Wei Shoulin's avatar
Wei Shoulin committed
20
        base_url = "http://" + base_url
Wei Shoulin's avatar
Wei Shoulin committed
21
22
23
24
25
26
    return f"{base_url}{endpoint}"

def request_error_handler_decorator(func):
    def wrapper(*args, **kwargs):
        try:
            result = func(*args, **kwargs)
Wei Shoulin's avatar
Wei Shoulin committed
27
            if 'content-type' in result.headers and result.headers['content-type'] == "application/octet-stream":
Wei Shoulin's avatar
Wei Shoulin committed
28
29
30
31
32
33
34
35
36
                return result
            return Result.from_response(result)
        except requests.exceptions.ConnectionError as e:
            return Result.error(code=502, message= f"Bad Gateway: {e}")
        except Exception as e:
            return Result.error(message = str(e))
    return wrapper

@request_error_handler_decorator
37
def get(endpoint: str, timeout = os.getenv("CSST_DFS_REQUEST_TIMEOUT", None)) -> requests.Response:
Wei Shoulin's avatar
Wei Shoulin committed
38
39
40
41
42
43
44
    return requests.get(
        url = get_request_url(endpoint),
        headers = auth_header(),
        timeout = timeout
    )  

@request_error_handler_decorator
45
def post(endpoint: str, data: dict, timeout = os.getenv("CSST_DFS_REQUEST_TIMEOUT", None)) -> requests.Response:
Wei Shoulin's avatar
Wei Shoulin committed
46
47
48
49
50
51
52
53
    return requests.post(
        url = get_request_url(endpoint),
        headers = auth_header(),
        json = data,
        timeout = timeout
    )

@request_error_handler_decorator
54
def put(endpoint: str, data: Optional[dict] = None, timeout = os.getenv("CSST_DFS_REQUEST_TIMEOUT", None)) -> requests.Response:
Wei Shoulin's avatar
Wei Shoulin committed
55
56
57
58
59
60
61
62
    return requests.put(
        url = get_request_url(endpoint),
        headers = auth_header(),
        json = data,
        timeout = timeout
    )

@request_error_handler_decorator
63
def delete(endpoint: str, timeout = os.getenv("CSST_DFS_REQUEST_TIMEOUT", None)) -> requests.Response:
Wei Shoulin's avatar
Wei Shoulin committed
64
65
66
67
68
69
    return requests.delete(
        url = get_request_url(endpoint),
        headers = auth_header(),
        timeout = timeout
    )

70
def post_file(endpoint: str, file_path: str, data: dict):
Wei Shoulin's avatar
Wei Shoulin committed
71
72
73
74
    with open(file_path, "rb") as bytesio:
        return post_bytesio(endpoint, bytesio, data)

@request_error_handler_decorator
75
def post_bytesio(endpoint: str, file_bytes: IO, data: dict, timeout = os.getenv("CSST_DFS_REQUEST_TIMEOUT", None)) -> requests.Response:
Wei Shoulin's avatar
Wei Shoulin committed
76
77
78
79
80
81
82
83
84
    return requests.post(
        url = get_request_url(endpoint),
        headers = auth_header(),
        files = {
            "file": file_bytes
        },
        data = data, timeout = timeout
    )

85
def download_file(endpoint: str, timeout = os.getenv("CSST_DFS_REQUEST_TIMEOUT", None)) -> requests.Response:
Wei Shoulin's avatar
Wei Shoulin committed
86
87
88
89
90
91
92
93
94
95
96
97
98
99
    """
    下载指定endpoint对应的文件。
    
    Args:
        endpoint (str): 文件对应的endpoint。
    
    Returns:
        requests.Response: 发送HTTP GET请求后返回的响应对象。
    
    """
    return requests.get(
        url = get_request_url(endpoint),
        headers = auth_header(), timeout = timeout
    )