feat(sso): add XDP device info query with table display
- Add filter_xdp_device_info function to query device by PSN or passcode - Display device info in formatted table, excluding RSA keys and internal fields - Format timestamps using dataintel utility - Add interactive menu option for device info query 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
491db50f95
commit
c86d02552f
@ -20,6 +20,7 @@ from django.utils.timezone import get_current_timezone, localtime, now
|
|||||||
import datetime
|
import datetime
|
||||||
import utils.const
|
import utils.const
|
||||||
import django.conf
|
import django.conf
|
||||||
|
import utils.dataintel
|
||||||
|
|
||||||
|
|
||||||
# --- 功能函数定义 ---
|
# --- 功能函数定义 ---
|
||||||
@ -175,6 +176,58 @@ def update_product(new_product_id, batch_id, start, stop):
|
|||||||
return sns.last().serialize()
|
return sns.last().serialize()
|
||||||
|
|
||||||
|
|
||||||
|
def filter_xdp_device_info(keyword):
|
||||||
|
engine = get_engine('device_info')
|
||||||
|
try:
|
||||||
|
if len(keyword) == 4:
|
||||||
|
result = engine.filter(passcode=keyword)[0]
|
||||||
|
else:
|
||||||
|
result = engine.filter(psn=keyword)[0]
|
||||||
|
except IndexError:
|
||||||
|
result = None
|
||||||
|
print("未找到设备信息")
|
||||||
|
return
|
||||||
|
|
||||||
|
# 定义 RSA 相关的字段
|
||||||
|
rsa_keys = ['rsa_public_key', 'rsa_private_key']
|
||||||
|
# 定义不需要在表格中展示的字段
|
||||||
|
exclude_fields = ['_read_perm', '_write_perm', 'created_by', 'mcu_uid']
|
||||||
|
|
||||||
|
# 分离 RSA 字段和其他字段
|
||||||
|
rsa_data = {}
|
||||||
|
table_data = {}
|
||||||
|
for key, value in result.items():
|
||||||
|
if key in rsa_keys:
|
||||||
|
rsa_data[key] = value
|
||||||
|
elif key in ['created_at', 'updated_at']:
|
||||||
|
table_data[key] = utils.dataintel.strf_time(utils.timestamp_to_local_datetime(value))
|
||||||
|
elif key not in exclude_fields:
|
||||||
|
table_data[key] = value
|
||||||
|
|
||||||
|
# 计算表格宽度
|
||||||
|
max_key_len = max(len(str(k)) for k in table_data.keys())
|
||||||
|
max_val_len = min(80, max(len(str(v)[:80]) for v in table_data.values()))
|
||||||
|
|
||||||
|
# 打印表格
|
||||||
|
print("\n" + "=" * (max_key_len + max_val_len + 7))
|
||||||
|
print(f"| {'field'.ljust(max_key_len)} | {'value'.ljust(max_val_len)} |")
|
||||||
|
print("|" + "-" * (max_key_len + 2) + "|" + "-" * (max_val_len + 2) + "|")
|
||||||
|
|
||||||
|
for key, value in table_data.items():
|
||||||
|
val_str = str(value)
|
||||||
|
if len(val_str) > 80:
|
||||||
|
val_str = val_str[:77] + "..."
|
||||||
|
print(f"| {str(key).ljust(max_key_len)} | {val_str.ljust(max_val_len)} |")
|
||||||
|
|
||||||
|
print("=" * (max_key_len + max_val_len + 7))
|
||||||
|
|
||||||
|
# 打印 RSA keys
|
||||||
|
for key, value in rsa_data.items():
|
||||||
|
print(f"\n--- {key} ---")
|
||||||
|
print(value)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# --- 交互式菜单功能 ---
|
# --- 交互式菜单功能 ---
|
||||||
def create_xdp_ultra_redeem_code():
|
def create_xdp_ultra_redeem_code():
|
||||||
"""创建 xdp ultra redeem code"""
|
"""创建 xdp ultra redeem code"""
|
||||||
@ -238,6 +291,16 @@ def batch_update_product():
|
|||||||
print(f"执行出错: {e}")
|
print(f"执行出错: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
def query_xdp_device_info():
|
||||||
|
"""查询 XDP 设备信息"""
|
||||||
|
print("\n=== 查询 XDP 设备信息 ===")
|
||||||
|
keyword = input("请输入 PSN 或 Passcode (4位): ").strip()
|
||||||
|
if not keyword:
|
||||||
|
print("错误: 请输入有效的关键字")
|
||||||
|
return
|
||||||
|
filter_xdp_device_info(keyword)
|
||||||
|
|
||||||
|
|
||||||
def show_menu():
|
def show_menu():
|
||||||
"""显示功能菜单"""
|
"""显示功能菜单"""
|
||||||
print("\n" + "="*50)
|
print("\n" + "="*50)
|
||||||
@ -247,6 +310,7 @@ def show_menu():
|
|||||||
print("1. 创建 XDP Ultra Redeem Code")
|
print("1. 创建 XDP Ultra Redeem Code")
|
||||||
print("2. 批次绑定商品")
|
print("2. 批次绑定商品")
|
||||||
print("3. 批次更新商品")
|
print("3. 批次更新商品")
|
||||||
|
print("4. 查询 XDP 设备信息")
|
||||||
print("0. 退出")
|
print("0. 退出")
|
||||||
print("="*50)
|
print("="*50)
|
||||||
|
|
||||||
@ -265,6 +329,8 @@ def main():
|
|||||||
batch_bind_product()
|
batch_bind_product()
|
||||||
elif choice == '3':
|
elif choice == '3':
|
||||||
batch_update_product()
|
batch_update_product()
|
||||||
|
elif choice == '4':
|
||||||
|
query_xdp_device_info()
|
||||||
elif choice == '0':
|
elif choice == '0':
|
||||||
print("\n退出脚本...")
|
print("\n退出脚本...")
|
||||||
break
|
break
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user