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