mirror of
https://github.com/qwerfd2/Groove_Coaster_2_Server.git
synced 2025-12-22 03:30:18 +00:00
mid-push
This commit is contained in:
@@ -2,6 +2,8 @@ from starlette.responses import Response, FileResponse
|
||||
from starlette.requests import Request
|
||||
from starlette.routing import Route
|
||||
from sqlalchemy import select
|
||||
import openpyxl
|
||||
from io import BytesIO
|
||||
import os
|
||||
|
||||
from api.database import player_database, devices, binds, batch_tokens, log_download, get_downloaded_bytes
|
||||
@@ -18,7 +20,7 @@ async def serve_file(request: Request):
|
||||
if not filename.endswith(".zip") and not filename.endswith(".pak"):
|
||||
return Response("Unauthorized", status_code=403)
|
||||
|
||||
existing_batch_token = select(batch_tokens).where(batch_tokens.c.bind_token == auth_token)
|
||||
existing_batch_token = select(batch_tokens).where(batch_tokens.c.batch_token == auth_token)
|
||||
batch_result = await player_database.fetch_one(existing_batch_token)
|
||||
if batch_result:
|
||||
pass
|
||||
@@ -71,7 +73,38 @@ async def serve_public_file(request: Request):
|
||||
return FileResponse(safe_filename)
|
||||
else:
|
||||
return Response("File not found", status_code=404)
|
||||
|
||||
async def convert_user_export_data(data):
|
||||
wb = openpyxl.Workbook()
|
||||
|
||||
# Remove default sheet
|
||||
default_sheet = wb.active
|
||||
wb.remove(default_sheet)
|
||||
|
||||
# Create sheet for each top-level key
|
||||
for sheet_name, rows in data.items():
|
||||
ws = wb.create_sheet(title=sheet_name)
|
||||
|
||||
# rows expected to be list[dict]
|
||||
if isinstance(rows, list):
|
||||
await write_dict_list_to_sheet(ws, rows)
|
||||
|
||||
stream = BytesIO()
|
||||
wb.save(stream)
|
||||
stream.seek(0)
|
||||
return stream
|
||||
|
||||
async def write_dict_list_to_sheet(ws, rows):
|
||||
if not rows:
|
||||
return
|
||||
|
||||
# headers
|
||||
headers = list(rows[0].keys())
|
||||
ws.append(headers)
|
||||
|
||||
# rows
|
||||
for row in rows:
|
||||
ws.append([row.get(h, "") for h in headers])
|
||||
|
||||
routes = [
|
||||
Route("/files/gc2/{auth_token}/{folder}/{filename}", serve_file, methods=["GET"]),
|
||||
|
||||
Reference in New Issue
Block a user