Files
MoFin/venv/lib/python3.12/site-packages/tushare/util/verify_token.py
T
知微 fa45d8aa5f fix: 小果地址统一node122(兼容LAN+EasyTier)
- health_checklist.json: 192.168.1.122→node122
- ocr_client.py: docstring IP→node122
- docs/market-data-requirements.md: IP→node122
- 所有API调用通过ProxyHandler({})绕过系统代理
  Privoxy对node122:18003返回500,直连正常
2026-06-30 02:56:35 +08:00

78 lines
2.4 KiB
Python

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
token 验证
Created on 2023/12/06
@author: Monday
@group : waditu
@contact:
"""
from typing import Optional
from tushare.util.upass import get_token, set_token
import requests
from requests.adapters import HTTPAdapter, Retry
from tushare.stock import cons as ct
# 自定义异常类,用于权限不足时抛出异常
class PermissionError(Exception):
pass
# 装饰器函数,用于进行权限验证
def require_permission(event_name, event_detail):
def decorator(func):
def wrapper(*args, **kwargs):
# event_name = kwargs["event_name"]
# event_detail = kwargs["event_detail"]
# 检查用户权限
token = get_token()
if token:
try:
r = verify_token(token, event_name, event_detail).json()
except Exception as err:
raise PermissionError(f"验证token出错,{err}")
if r.get("message") == "success":
# 如果有足够权限,调用原始函数
return func(*args, **kwargs)
else:
print(f"验证token出错,{r.text}")
raise PermissionError(f"{r['msg']}")
else:
raise PermissionError(ct.TOKEN_ERR_MSG)
wrapper.__doc__ = func.__doc__
return wrapper
return decorator
def verify_token(token: Optional[str] = None, event_name: Optional[str] = "string",
event_detail: Optional[str] = "string"):
session = requests.Session()
retries = Retry(total=3, backoff_factor=1)
session.mount('http://', HTTPAdapter(max_retries=retries))
session.mount('https://', HTTPAdapter(max_retries=retries))
headers = {
"accept": "application/json",
"Content-Type": "application/json"
}
# url = "http://api.tushare.pro/dataapi/sdk-event"
url = ct.verify_token_url
data = {"user_token": token,
"event_name": event_name,
"event_detail": event_detail}
response = session.post(url, headers=headers, json=data)
return response
# 使用装饰器进行权限验证
@require_permission(event_name="xxx", event_detail="xxx")
def admin_only_function():
print("ssss")
if __name__ == '__main__':
set_token("asdasdasa")
admin_only_function() # 正常情况,输出执行信息