diff --git a/function.py b/function.py new file mode 100644 index 0000000..e705774 --- /dev/null +++ b/function.py @@ -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") \ No newline at end of file