Developer Documentation
Learn how to build, schedule, and scale your Python automations on CyberOak
Platform Overview
CyberOak is a cloud-native RPA platform that runs standard Python scripts. Unlike traditional RPA that relies on visual recorders, CyberOak gives you full code-level control.
.py file, map your inputs (Secrets/Files), and let us handle the infrastructure, logging, and alerts.
The Automation Workflow
1. Develop
Write your script locally. Test using standard libraries.
2. Configure
Upload to CyberOak. Map variables in the UI and upload any necessary input files (Excel, Configs).
3. Execute
Trigger via CRON schedule or on-demand. Output files are automatically captured and saved.
4. Notifications
Get notified when execution is complete.
Python Runtime Environment
Your scripts execute in a controlled orchestrated environment.
- Python Version 3.11.7
Handling Inputs & Secrets
Avoid hardcoding sensitive data. CyberOak provides two ways to inject data into your script at runtime.
1. Environment Variables (Secrets)
Defined in the "secrets" tab of your robot. Securely encrypted.
# Access a secret defined in the UI
db_password = parameters.get('ORACLE_DB_PASS')
2. Runtime Variables
Defined in "Parameters" section. Useful for dynamic parameters.
# 'inputs' is a global dictionary available in the runtime
target_email = inputs.get('notification_email')
Built-in Helper Functions
The platform exposes specific utility functions globally to simplify common tasks like saving reports or generating PDFs.
Saves a generated file to the execution results. It automatically links the file to the automation run.
# 1. Saving simple text/JSON
import json
data = {"status": "success", "processed": 50}
save_file("log.json", json.dumps(data))
# 2. Saving an in-memory Excel file (using BytesIO)
from io import BytesIO
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws['A1'] = "Report Data"
buffer = BytesIO()
wb.save(buffer)
save_file("Weekly_Report.xlsx", buffer)
Generates a PDF binary from an uploaded HTML template using Weasyprint.
# template_file: Name of the HTML file uploaded in 'File Inputs'
# context_dict: Data to inject into the template
context = {"user_name": "Alice", "date": "2025-01-01"}
pdf_bytes = generate_pdf("invoice_template.html", context)
save_file("Invoice_Alice.pdf", pdf_bytes)
Run CPU-intensive tasks across multiple worker processes.
def heavy_calc(x):
return x * x
# Automatically distributes work
results = list(executor.map(heavy_calc, range(1000)))
Database Connectivity
www.cyber-oak.com in your database's "Allowed Hosts" settings.
We support the following adapters out of the box:
- PostgreSQL:
psycopg2(v2.9.11) - Oracle:
oracledb(v3.4.1) - MySQL:
mysqlclient(v2.2.7)
Pre-installed Libraries
No pip install required. The following libraries are available in the environment:
AI & Intelligent Automation
| Library | Version | Use Case |
|---|---|---|
| anthropic | 0.116.0 | Anthropic Claude API client |
| openai | 2.44.0 | OpenAI API client (GPT-4o, Embeddings) |
Web & Scraping
| Library | Version | Use Case |
|---|---|---|
| beautifulsoup4 | 4.14.3 | HTML/XML Parsing |
| playwright | 1.61.0 | Headless browser automation & E2E testing |
| requests | 2.34.2 | HTTP REST API clients |
| httpx | 0.28.1 | HTTP client library for Python 3 featuring synchronous and asynchronous APIs |
| scrapy | 2.13.4 | Web crawling framework |
| selenium | 4.38.0 | Browser automation & scraping |
| zeep | 4.3.2 | SOAP / WSDL clients |
Data Processing & Office
| Library | Version | Use Case |
|---|---|---|
| sqlalchemy | 2.0.51 | SQL toolkit and Object-Relational Mapper (ORM). |
| GeoPandas | 1.1.4 | Geographic and geometric data analysis |
| gspread | 6.2.1 | Google Sheets API interaction |
| numpy | 2.2.6 | Numeric arrays |
| openpyxl | 3.1.5 | Excel (XLSX) manipulation |
| pandas | 2.3.3 | Data analysis |
| pdfplumber | 0.11.8 | PDF text extraction |
| polars | 1.35.2 | High-performance DataFrames |
| pytesseract | 0.3.13 | Tesseract OCR image text extraction |
| weasyprint | 69.0 | HTML to PDF generation |
| matplotlib | 3.10.8 | Data Visualization |
| plotly | 6.8.0 | Data Visualization |
| scikit-learn | 1.8.0 | Data analysis |
| seaborn | 0.13.2 | Data Visualization |
Utilities & Cloud
| Library | Version | Use Case |
|---|---|---|
| boto3 | 1.38.17 | AWS SDK |
| google-cloud-storage | 3.12.0 | Google Cloud Object Storage SDK |
| opencv-python | 4.12.0 | Image processing |
| paramiko | 4.0.0 | SSH & SFTP |
| Pillow (PIL) | 12.0.0 | Image manipulation |
| smtplib | Built-in | Sending emails |
| twilio | 9.10.9 | SMS, WhatsApp & communication API |
| markdown | 3.10.2 | Markdown Tool |
| pyftpdlib | 2.2.0 | FTP server library |
| google-core / oauth | Various | Core dependencies (google-auth 2.55.2, oauthlib 3.3.1, etc.) |
Workflow Management & Orchestration
| Library | Version | Use Case |
|---|---|---|
| apache-airflow | 3.3.0 | Apache Airflow |
| prefect | 3.7.7 | Open-source workflow orchestration framework |
Coding Guidelines
- Validation: Raise
ValidationErrorfor recoverable issues rather than crashing withexit(1). - Logging: Use the standard
loggingmodule. All stdout/stderr is captured in the Orchestrator logs. - Paths: Do not rely on absolute paths like
C:/Users/.... Use relative paths or the temporary directory.