Files

80 lines
2.7 KiB
Python

import os
import sys
from pathlib import Path
from playwright.sync_api import TimeoutError as PlaywrightTimeoutError
from playwright.sync_api import sync_playwright
XLSX_DIR = Path(os.getenv('CKAL_XLSX_DIR', '/data/ckal-xlsx'))
CKAL_USERNAME = os.getenv('CKAL_USERNAME')
CKAL_PASSWORD = os.getenv('CKAL_PASSWORD')
def upload_file(xlsx_file: Path) -> None:
print(f'Verarbeite: {xlsx_file.name}', flush=True)
with sync_playwright() as p:
browser = p.chromium.launch(
headless=True,
chromium_sandbox=False,
args=['--disable-dev-shm-usage'],
)
page = browser.new_page(viewport={'width': 1400, 'height': 800})
page.on('dialog', lambda dialog: dialog.accept())
try:
page.goto(
'https://v2.ckalender.de/index.php?content=Login',
wait_until='domcontentloaded',
timeout=30000,
)
page.locator('[name="username"]').fill(CKAL_USERNAME)
page.locator('[name="password"]').fill(CKAL_PASSWORD)
page.locator('[name="password"]').press('Enter')
try:
page.wait_for_url(
lambda url: 'content=Login' not in str(url),
timeout=15000,
)
except PlaywrightTimeoutError as exc:
raise RuntimeError('CKalender-Login fehlgeschlagen.') from exc
page.goto(
'https://v2.ckalender.de/index.php?content=Admin.EventImport',
wait_until='domcontentloaded',
timeout=30000,
)
page.locator('[value="Excel"]').click()
upload = page.locator('input[type="file"]')
upload.wait_for(state='attached', timeout=15000)
upload.set_input_files(str(xlsx_file))
page.locator('[value="Append"]').click()
page.locator('[class="ui primary button"]').click()
page.wait_for_timeout(1500)
finally:
browser.close()
def main() -> int:
if not CKAL_USERNAME or not CKAL_PASSWORD:
print('FEHLER: CKAL_USERNAME/CKAL_PASSWORD fehlt.', file=sys.stderr)
return 1
XLSX_DIR.mkdir(parents=True, exist_ok=True)
files = sorted(XLSX_DIR.glob('*.xlsx'))
if not files:
print('Keine XLSX-Dateien vorhanden.', flush=True)
return 0
for xlsx_file in files:
try:
upload_file(xlsx_file)
xlsx_file.unlink()
print(f'Upload erfolgreich: {xlsx_file.name}', flush=True)
except Exception as exc:
print(f'FEHLER bei {xlsx_file.name}: {exc}', file=sys.stderr, flush=True)
return 1
return 0
if __name__ == '__main__':
sys.exit(main())