uyriety
This commit is contained in:
41
function.py
Normal file
41
function.py
Normal 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")
|
||||
Reference in New Issue
Block a user