This commit is contained in:
2025-11-10 19:07:27 +03:00
parent c50c97bc82
commit 9778efef99

41
function.py Normal file
View File

@@ -0,0 +1,41 @@
import os
from io import BytesIO
import pandas as pd
from dotenv import load_dotenv
from synology_drive_api.drive import SynologyDrive
from synology_drive_api.base import SynologyException
load_dotenv()
SYNO_HOST = os.getenv("SYNO_BASE_URL", "").strip() # без схемы! например: "nas.example.com"
SYNO_USERNAME = os.getenv("SYNO_USERNAME", "")
SYNO_PASSWORD = os.getenv("SYNO_PASSWORD", "")
SYNO_PORT = int(os.getenv("SYNO_PORT", "5001"))
def load_osheet(file_path: str, sheet: str | int = 0) -> pd.DataFrame:
"""
Скачивает Synology Office .osheet через Drive API (делает экспорт в xlsx под капотом)
и возвращает pandas.DataFrame для указанного листа.
file_path: путь вида '/GFX/…/MATCH.osheet' (шара должна быть Team Folder в Drive).
"""
drv = SynologyDrive(SYNO_USERNAME, SYNO_PASSWORD, SYNO_HOST, SYNO_PORT, https=True, dsm_version="7")
try:
# вернёт BytesIO c xlsx
bio = drv.download_synology_office_file(file_path)
df = pd.read_excel(bio, sheet_name=sheet)
return df
except SynologyException as e:
# Часто: {"code":1000,"message":"get file information failed"} — Drive не видит путь (нет Team Folder/прав)
raise RuntimeError(
"Не удалось экспортировать .osheet через Synology Drive. "
"Проверь, что шара включена в Drive Admin Console → Team Folder, "
"и у пользователя есть права. Исходная ошибка: " + str(e)
)
finally:
try:
drv.logout()
except Exception:
pass
load_osheet(file_path="/GFX/Hockey/KHL/Soft/MATCH.osheet", sheet="TEAMS")