为各类别添加数据导入导出功能

This commit is contained in:
2026-07-11 00:34:47 +08:00
parent f83bf11669
commit 01abe7f86f
10 changed files with 457 additions and 95 deletions
+62 -1
View File
@@ -2,8 +2,9 @@
GPU CRUD API
"""
import uuid
import json
from datetime import datetime
from flask import Blueprint, request, jsonify
from flask import Blueprint, request, jsonify, Response
from config import GPUS_FILE
from utils import load_data, save_data, parse_date_to_timestamp
@@ -95,3 +96,63 @@ def api_toggle_gpu_visible(gpu_id):
gpu['visible'] = not gpu.get('visible', True)
save_data(GPUS_FILE, gpus)
return jsonify({'success': True, 'visible': gpu['visible']})
# ─── 导出导入 ───────────────────────────────────────────────────────
@gpus_bp.route('/api/gpus/export', methods=['GET'])
def api_export_gpus():
"""导出所有GPU数据"""
try:
gpus = load_data(GPUS_FILE)
export_data = {
'type': 'gpus',
'items': gpus,
'count': len(gpus),
'export_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'version': '1.0'
}
json_str = json.dumps(export_data, ensure_ascii=False, indent=2)
response = Response(
json_str,
mimetype='application/json',
headers={'Content-Disposition': f'attachment; filename=gpus-export-{datetime.now().strftime("%Y%m%d%H%M%S")}.json'}
)
return response
except Exception as e:
return jsonify({'error': str(e)}), 500
@gpus_bp.route('/api/gpus/import', methods=['GET', 'POST'])
def api_import_gpus():
"""导入GPU数据"""
try:
if request.method == 'GET':
return jsonify({'endpoint': '/api/gpus/import', 'method': 'POST', 'params': {'mode': 'merge 或 replace'}})
import_data = request.get_json()
if not import_data or 'items' not in import_data:
return jsonify({'error': '缺少 items 字段'}), 400
mode = request.args.get('mode', 'merge')
gpus = load_data(GPUS_FILE)
imported_items = import_data['items']
result = {'success': True, 'imported': 0, 'updated': 0, 'skipped': []}
for item in imported_items:
existing = next((g for g in gpus if g['id'] == item['id']), None)
if existing:
if mode == 'replace':
existing.update(item)
result['updated'] += 1
else:
result['skipped'].append(item['id'])
else:
gpus.append(item)
result['imported'] += 1
save_data(GPUS_FILE, gpus)
return jsonify(result)
except Exception as e:
return jsonify({'error': str(e)}), 500