Metadata-Version: 2.4
Name: waveql
Version: 0.1.7
Summary: Universal Python connector for APIs - Query any data source with SQL
Project-URL: Homepage, https://github.com/mitayan0/WaveQL
Project-URL: Documentation, https://github.com/mitayan0/WaveQL/blob/main/docs/index.md
Project-URL: Repository, https://github.com/mitayan0/WaveQL
Author-email: Mitayan Chakma <mitayanchangma@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: api,connector,database,duckdb,postgres,salesforce,servicenow,sql
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Database
Requires-Python: >=3.9
Requires-Dist: anyio>=4.0
Requires-Dist: authlib>=1.3
Requires-Dist: duckdb>=1.0
Requires-Dist: httpx>=0.27
Requires-Dist: pandas>=2.0
Requires-Dist: pyarrow>=15.0
Requires-Dist: pydantic>=2.0
Requires-Dist: requests>=2.31
Requires-Dist: sqlalchemy>=2.0
Requires-Dist: sqlglot>=23.0
Provides-Extra: dev
Requires-Dist: black; extra == 'dev'
Requires-Dist: pytest-asyncio; extra == 'dev'
Requires-Dist: pytest-cov; extra == 'dev'
Requires-Dist: pytest>=7.0; extra == 'dev'
Requires-Dist: responses; extra == 'dev'
Requires-Dist: respx; extra == 'dev'
Requires-Dist: ruff; extra == 'dev'
Provides-Extra: postgres
Requires-Dist: psycopg2-binary>=2.9; extra == 'postgres'
Description-Content-Type: text/markdown

# WaveQL

<p align="center">
  <img src="assets/WaveQL.png" width="400" alt="WaveQL Logo" />
</p>

<p align="center">
  <strong>The Universal SQL Connector for Modern APIs</strong><br>
  <em>Query ServiceNow, Salesforce, Jira, and more using standard SQL.</em>
</p>

---

WaveQL unifies **SaaS APIs** (ServiceNow, Salesforce, Hubspot), **Databases**, and **Files** under a standard SQL interface. It translates your SQL into optimized API calls (pushing down predicates like `WHERE` and `ORDER BY`) and handles pagination/auth automatically.

## 🚀 Quick Start

```bash
pip install waveql
```

```python
import waveql

# Connect to any source
conn = waveql.connect("servicenow://instance.service-now.com", username="admin", password="password")

# Run standard SQL (We handle the API translation)
cursor = conn.cursor()
cursor.execute("""
    SELECT number, short_description 
    FROM incident 
    WHERE priority = 1 
    ORDER BY number DESC 
    LIMIT 5
""")

print(cursor.to_df())  # Returns Pandas DataFrame
```

## 📚 Documentation

| Topic | Description |
| :--- | :--- |
| **[Adapters](docs/adapters.md)** | Supported sources (ServiceNow, Salesforce, etc.) |
| **[Architecture](docs/architecture.md)** | System diagram & components |
| **[Configuration](docs/configuration.md)** | Auth, Caching, and Paths |
| **[Transactions](docs/transactions.md)** | Saga Pattern & Atomic Writes |
| **[CDC](docs/cdc.md)** | Real-time Change Data Capture |
| **[Semantic Layer](docs/semantic-layer.md)** | Virtual Views & dbt integration |

> **Contributors**: Read [AGENTS.md](AGENTS.md).

## ✨ Key Features
*   **Universal SQL**: Join `servicenow.incident` with `salesforce.account`.
*   **Smart Pushdown**: `WHERE` converts to JQL/SOQL automatically.
*   **Zero-Copy**: Built on DuckDB + PyArrow.
*   **Async Native**: `async/await` throughout.
*   **Production Ready**: Retries, rate-limiting, and pooling.

## License
MIT.
