bella-openapi 1.0.2__py3-none-any.whl → 1.0.2.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bella_openapi/__init__.py +22 -22
- bella_openapi/auth_billing.py +91 -91
- bella_openapi/authorize.py +61 -61
- bella_openapi/bella_trace/__init__.py +13 -13
- bella_openapi/bella_trace/_context.py +61 -61
- bella_openapi/bella_trace/fastapi_interceptor.py +28 -28
- bella_openapi/bella_trace/record_log.py +58 -58
- bella_openapi/bella_trace/trace_requests.py +58 -58
- bella_openapi/config.py +15 -15
- bella_openapi/console/__init__.py +2 -2
- bella_openapi/console/models.py +44 -44
- bella_openapi/exception.py +7 -7
- bella_openapi/log.py +222 -222
- bella_openapi/middleware/__init__.py +3 -3
- bella_openapi/middleware/context_middleware.py +108 -108
- bella_openapi/openapi_contexvar.py +6 -6
- bella_openapi/schema.py +63 -63
- {bella_openapi-1.0.2.dist-info → bella_openapi-1.0.2.1.dist-info}/METADATA +260 -260
- bella_openapi-1.0.2.1.dist-info/RECORD +22 -0
- {bella_openapi-1.0.2.dist-info → bella_openapi-1.0.2.1.dist-info}/licenses/LICENSE +20 -20
- bella_openapi-1.0.2.dist-info/RECORD +0 -22
- {bella_openapi-1.0.2.dist-info → bella_openapi-1.0.2.1.dist-info}/WHEEL +0 -0
- {bella_openapi-1.0.2.dist-info → bella_openapi-1.0.2.1.dist-info}/top_level.txt +0 -0
@@ -1,58 +1,58 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
# ======================
|
3
|
-
# Date : 2024/12/30
|
4
|
-
# Author : Liu Yuchen
|
5
|
-
# Content :
|
6
|
-
#
|
7
|
-
# ======================
|
8
|
-
import functools
|
9
|
-
import json
|
10
|
-
import logging
|
11
|
-
import time
|
12
|
-
import traceback
|
13
|
-
|
14
|
-
from ._context import TraceContext
|
15
|
-
|
16
|
-
__all__ = ["trace", "BellaTraceHandler"]
|
17
|
-
|
18
|
-
|
19
|
-
def trace(logger=logging):
|
20
|
-
def decorator(func):
|
21
|
-
@functools.wraps(func)
|
22
|
-
def wrapper(*args, **kwargs):
|
23
|
-
data = {
|
24
|
-
"trace_info": {
|
25
|
-
"bellaTraceId": TraceContext.trace_id,
|
26
|
-
"serviceId": TraceContext.service_id,
|
27
|
-
"start": time.time()
|
28
|
-
},
|
29
|
-
"function": func.__name__,
|
30
|
-
"args": args,
|
31
|
-
"kwargs": kwargs
|
32
|
-
}
|
33
|
-
try:
|
34
|
-
result = func(*args, **kwargs)
|
35
|
-
data["result"] = result
|
36
|
-
data["trace_info"]["end"] = time.time()
|
37
|
-
logger.info(json.dumps(data, ensure_ascii=False))
|
38
|
-
return result
|
39
|
-
except Exception as e:
|
40
|
-
try:
|
41
|
-
data["error_msg"] = traceback.format_exception(e)
|
42
|
-
logger.error(json.dumps(data, ensure_ascii=False))
|
43
|
-
except Exception as i_e:
|
44
|
-
logger.error(traceback.format_exception(i_e))
|
45
|
-
raise e
|
46
|
-
return wrapper
|
47
|
-
return decorator
|
48
|
-
|
49
|
-
|
50
|
-
class BellaTraceHandler(logging.Handler):
|
51
|
-
|
52
|
-
def __init__(self, fmt: str = "{name}={value}"):
|
53
|
-
super().__init__()
|
54
|
-
self.format = fmt
|
55
|
-
|
56
|
-
def emit(self, record):
|
57
|
-
if trace_id := TraceContext.trace_id:
|
58
|
-
record.msg = f"{self.format.format(name='trace_id', value=trace_id)} {record.msg}"
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# ======================
|
3
|
+
# Date : 2024/12/30
|
4
|
+
# Author : Liu Yuchen
|
5
|
+
# Content :
|
6
|
+
#
|
7
|
+
# ======================
|
8
|
+
import functools
|
9
|
+
import json
|
10
|
+
import logging
|
11
|
+
import time
|
12
|
+
import traceback
|
13
|
+
|
14
|
+
from ._context import TraceContext
|
15
|
+
|
16
|
+
__all__ = ["trace", "BellaTraceHandler"]
|
17
|
+
|
18
|
+
|
19
|
+
def trace(logger=logging):
|
20
|
+
def decorator(func):
|
21
|
+
@functools.wraps(func)
|
22
|
+
def wrapper(*args, **kwargs):
|
23
|
+
data = {
|
24
|
+
"trace_info": {
|
25
|
+
"bellaTraceId": TraceContext.trace_id,
|
26
|
+
"serviceId": TraceContext.service_id,
|
27
|
+
"start": time.time()
|
28
|
+
},
|
29
|
+
"function": func.__name__,
|
30
|
+
"args": args,
|
31
|
+
"kwargs": kwargs
|
32
|
+
}
|
33
|
+
try:
|
34
|
+
result = func(*args, **kwargs)
|
35
|
+
data["result"] = result
|
36
|
+
data["trace_info"]["end"] = time.time()
|
37
|
+
logger.info(json.dumps(data, ensure_ascii=False))
|
38
|
+
return result
|
39
|
+
except Exception as e:
|
40
|
+
try:
|
41
|
+
data["error_msg"] = traceback.format_exception(e)
|
42
|
+
logger.error(json.dumps(data, ensure_ascii=False))
|
43
|
+
except Exception as i_e:
|
44
|
+
logger.error(traceback.format_exception(i_e))
|
45
|
+
raise e
|
46
|
+
return wrapper
|
47
|
+
return decorator
|
48
|
+
|
49
|
+
|
50
|
+
class BellaTraceHandler(logging.Handler):
|
51
|
+
|
52
|
+
def __init__(self, fmt: str = "{name}={value}"):
|
53
|
+
super().__init__()
|
54
|
+
self.format = fmt
|
55
|
+
|
56
|
+
def emit(self, record):
|
57
|
+
if trace_id := TraceContext.trace_id:
|
58
|
+
record.msg = f"{self.format.format(name='trace_id', value=trace_id)} {record.msg}"
|
@@ -1,58 +1,58 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
# ======================
|
3
|
-
# Date : 2024/12/30
|
4
|
-
# Author : Liu Yuchen
|
5
|
-
# Content :
|
6
|
-
#
|
7
|
-
# ======================
|
8
|
-
from requests import sessions
|
9
|
-
from requests.adapters import HTTPAdapter
|
10
|
-
|
11
|
-
from ._context import TraceContext
|
12
|
-
|
13
|
-
|
14
|
-
__all__ = ["BellaTraceAdapter"]
|
15
|
-
|
16
|
-
|
17
|
-
class BellaTraceAdapter(HTTPAdapter):
|
18
|
-
|
19
|
-
def send(self, request, **kwargs):
|
20
|
-
request.headers.update(TraceContext.headers)
|
21
|
-
return super().send(request, **kwargs)
|
22
|
-
|
23
|
-
|
24
|
-
def request(method, url, **kwargs):
|
25
|
-
with sessions.Session() as session:
|
26
|
-
session.mount("http://", BellaTraceAdapter())
|
27
|
-
session.mount("https://", BellaTraceAdapter())
|
28
|
-
return session.request(method=method, url=url, **kwargs)
|
29
|
-
|
30
|
-
|
31
|
-
def get(url, params=None, **kwargs):
|
32
|
-
return request("get", url, params=params, **kwargs)
|
33
|
-
|
34
|
-
|
35
|
-
def options(url, **kwargs):
|
36
|
-
return request("options", url, **kwargs)
|
37
|
-
|
38
|
-
|
39
|
-
def head(url, **kwargs):
|
40
|
-
kwargs.setdefault("allow_redirects", False)
|
41
|
-
return request("head", url, **kwargs)
|
42
|
-
|
43
|
-
|
44
|
-
def post(url, data=None, json=None, **kwargs):
|
45
|
-
return request("post", url, data=data, json=json, **kwargs)
|
46
|
-
|
47
|
-
|
48
|
-
def put(url, data=None, **kwargs):
|
49
|
-
return request("put", url, data=data, **kwargs)
|
50
|
-
|
51
|
-
|
52
|
-
def patch(url, data=None, **kwargs):
|
53
|
-
return request("patch", url, data=data, **kwargs)
|
54
|
-
|
55
|
-
|
56
|
-
def delete(url, **kwargs):
|
57
|
-
return request("delete", url, **kwargs)
|
58
|
-
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# ======================
|
3
|
+
# Date : 2024/12/30
|
4
|
+
# Author : Liu Yuchen
|
5
|
+
# Content :
|
6
|
+
#
|
7
|
+
# ======================
|
8
|
+
from requests import sessions
|
9
|
+
from requests.adapters import HTTPAdapter
|
10
|
+
|
11
|
+
from ._context import TraceContext
|
12
|
+
|
13
|
+
|
14
|
+
__all__ = ["BellaTraceAdapter"]
|
15
|
+
|
16
|
+
|
17
|
+
class BellaTraceAdapter(HTTPAdapter):
|
18
|
+
|
19
|
+
def send(self, request, **kwargs):
|
20
|
+
request.headers.update(TraceContext.headers)
|
21
|
+
return super().send(request, **kwargs)
|
22
|
+
|
23
|
+
|
24
|
+
def request(method, url, **kwargs):
|
25
|
+
with sessions.Session() as session:
|
26
|
+
session.mount("http://", BellaTraceAdapter())
|
27
|
+
session.mount("https://", BellaTraceAdapter())
|
28
|
+
return session.request(method=method, url=url, **kwargs)
|
29
|
+
|
30
|
+
|
31
|
+
def get(url, params=None, **kwargs):
|
32
|
+
return request("get", url, params=params, **kwargs)
|
33
|
+
|
34
|
+
|
35
|
+
def options(url, **kwargs):
|
36
|
+
return request("options", url, **kwargs)
|
37
|
+
|
38
|
+
|
39
|
+
def head(url, **kwargs):
|
40
|
+
kwargs.setdefault("allow_redirects", False)
|
41
|
+
return request("head", url, **kwargs)
|
42
|
+
|
43
|
+
|
44
|
+
def post(url, data=None, json=None, **kwargs):
|
45
|
+
return request("post", url, data=data, json=json, **kwargs)
|
46
|
+
|
47
|
+
|
48
|
+
def put(url, data=None, **kwargs):
|
49
|
+
return request("put", url, data=data, **kwargs)
|
50
|
+
|
51
|
+
|
52
|
+
def patch(url, data=None, **kwargs):
|
53
|
+
return request("patch", url, data=data, **kwargs)
|
54
|
+
|
55
|
+
|
56
|
+
def delete(url, **kwargs):
|
57
|
+
return request("delete", url, **kwargs)
|
58
|
+
|
bella_openapi/config.py
CHANGED
@@ -1,15 +1,15 @@
|
|
1
|
-
from typing import Optional
|
2
|
-
import pydantic
|
3
|
-
|
4
|
-
if pydantic.version.VERSION.startswith('1.'):
|
5
|
-
from pydantic import BaseSettings
|
6
|
-
else:
|
7
|
-
from pydantic.v1 import BaseSettings
|
8
|
-
|
9
|
-
|
10
|
-
class OpenAPIConfig(BaseSettings):
|
11
|
-
OPENAPI_HOST: Optional[str]
|
12
|
-
OPENAPI_CONSOLE_KEY: Optional[str]
|
13
|
-
|
14
|
-
|
15
|
-
openapi_config = OpenAPIConfig()
|
1
|
+
from typing import Optional
|
2
|
+
import pydantic
|
3
|
+
|
4
|
+
if pydantic.version.VERSION.startswith('1.'):
|
5
|
+
from pydantic import BaseSettings
|
6
|
+
else:
|
7
|
+
from pydantic.v1 import BaseSettings
|
8
|
+
|
9
|
+
|
10
|
+
class OpenAPIConfig(BaseSettings):
|
11
|
+
OPENAPI_HOST: Optional[str]
|
12
|
+
OPENAPI_CONSOLE_KEY: Optional[str]
|
13
|
+
|
14
|
+
|
15
|
+
openapi_config = OpenAPIConfig()
|
@@ -1,3 +1,3 @@
|
|
1
|
-
from .models import get_model_list
|
2
|
-
|
1
|
+
from .models import get_model_list
|
2
|
+
|
3
3
|
__all__ = ["get_model_list"]
|
bella_openapi/console/models.py
CHANGED
@@ -1,45 +1,45 @@
|
|
1
|
-
from typing import Optional, Dict, Any, Mapping
|
2
|
-
|
3
|
-
import httpx
|
4
|
-
|
5
|
-
from bella_openapi.config import openapi_config
|
6
|
-
|
7
|
-
|
8
|
-
def get_model_list(
|
9
|
-
token: str = openapi_config.OPENAPI_CONSOLE_KEY,
|
10
|
-
extra_headers: Optional[Mapping[str, str]] = None,
|
11
|
-
extra_query: Optional[Mapping[str, object]] = None,
|
12
|
-
) -> Dict[str, Any]:
|
13
|
-
"""
|
14
|
-
获取模型列表
|
15
|
-
|
16
|
-
Args:
|
17
|
-
token (str): 访问令牌
|
18
|
-
extra_headers: 额外的请求头
|
19
|
-
extra_query: 额外的查询参数,可以包含status、features等
|
20
|
-
|
21
|
-
Returns:
|
22
|
-
Dict[str, Any]: API响应的JSON数据
|
23
|
-
|
24
|
-
Examples:
|
25
|
-
>>> get_model_list(token='****',extra_query={"status": "active", "features": "vision"})
|
26
|
-
"""
|
27
|
-
url = openapi_config.OPENAPI_HOST + '/console/model/list'
|
28
|
-
headers = {
|
29
|
-
'Authorization': token,
|
30
|
-
'Content-Type': 'application/json',
|
31
|
-
}
|
32
|
-
# 添加额外的请求头
|
33
|
-
if extra_headers:
|
34
|
-
headers.update(extra_headers)
|
35
|
-
# 构建查询参数
|
36
|
-
params = {}
|
37
|
-
# 添加额外的查询参数
|
38
|
-
if extra_query:
|
39
|
-
params.update(extra_query)
|
40
|
-
# 发送请求
|
41
|
-
response = httpx.get(url, headers=headers, params=params)
|
42
|
-
# 检查响应状态
|
43
|
-
response.raise_for_status()
|
44
|
-
# 返回JSON数据
|
1
|
+
from typing import Optional, Dict, Any, Mapping
|
2
|
+
|
3
|
+
import httpx
|
4
|
+
|
5
|
+
from bella_openapi.config import openapi_config
|
6
|
+
|
7
|
+
|
8
|
+
def get_model_list(
|
9
|
+
token: str = openapi_config.OPENAPI_CONSOLE_KEY,
|
10
|
+
extra_headers: Optional[Mapping[str, str]] = None,
|
11
|
+
extra_query: Optional[Mapping[str, object]] = None,
|
12
|
+
) -> Dict[str, Any]:
|
13
|
+
"""
|
14
|
+
获取模型列表
|
15
|
+
|
16
|
+
Args:
|
17
|
+
token (str): 访问令牌
|
18
|
+
extra_headers: 额外的请求头
|
19
|
+
extra_query: 额外的查询参数,可以包含status、features等
|
20
|
+
|
21
|
+
Returns:
|
22
|
+
Dict[str, Any]: API响应的JSON数据
|
23
|
+
|
24
|
+
Examples:
|
25
|
+
>>> get_model_list(token='****',extra_query={"status": "active", "features": "vision"})
|
26
|
+
"""
|
27
|
+
url = openapi_config.OPENAPI_HOST + '/console/model/list'
|
28
|
+
headers = {
|
29
|
+
'Authorization': token,
|
30
|
+
'Content-Type': 'application/json',
|
31
|
+
}
|
32
|
+
# 添加额外的请求头
|
33
|
+
if extra_headers:
|
34
|
+
headers.update(extra_headers)
|
35
|
+
# 构建查询参数
|
36
|
+
params = {}
|
37
|
+
# 添加额外的查询参数
|
38
|
+
if extra_query:
|
39
|
+
params.update(extra_query)
|
40
|
+
# 发送请求
|
41
|
+
response = httpx.get(url, headers=headers, params=params)
|
42
|
+
# 检查响应状态
|
43
|
+
response.raise_for_status()
|
44
|
+
# 返回JSON数据
|
45
45
|
return response.json()
|
bella_openapi/exception.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
class AuthorizationException(Exception):
|
2
|
-
def __init__(self, message, http_status_code=None):
|
3
|
-
self.message = message
|
4
|
-
self.http_stauts_code = http_status_code
|
5
|
-
|
6
|
-
def __repr__(self):
|
7
|
-
return f"AuthorizationError(message={self.message}, http_status_code={self.http_stauts_code})"
|
1
|
+
class AuthorizationException(Exception):
|
2
|
+
def __init__(self, message, http_status_code=None):
|
3
|
+
self.message = message
|
4
|
+
self.http_stauts_code = http_status_code
|
5
|
+
|
6
|
+
def __repr__(self):
|
7
|
+
return f"AuthorizationError(message={self.message}, http_status_code={self.http_stauts_code})"
|