Metadata-Version: 2.4
Name: wirexaapi
Version: 1.1.0
Summary: Wirexa API SDK - voice API client (SignalWire/Twilio compatible) and Wirexa DB document database client
Author-email: Wirexa Team <dev@wirexa.io>
License: MIT
Project-URL: Homepage, https://github.com/wirexa/wirexa-api
Project-URL: Repository, https://github.com/wirexa/wirexa-api
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Description-Content-Type: text/markdown
Requires-Dist: requests>=2.25.0
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"

# Wirexa API SDK

A production-ready Python SDK for Wirexa API - a self-hosted telephony platform compatible with SignalWire and Twilio REST API.

## Installation

```bash
pip install wirexaapi
```

## Quick Start

```python
from wirexaapi import Client

# Connect to your Wirexa API instance
client = Client(
    project_id="your-project-id",
    api_token="your-api-token", 
    signalwire_space_url="your-space.example.com:5000"
)

# Make a call
call = client.calls.create(
    to="+573001234567",
    from_="+18005550100",
    url="https://your-backend.com/xml",
    method="POST",
    timeout=28,
    record=True,
    status_callback="https://your-backend.com/status",
    status_callback_event=["initiated", "ringing", "completed"],
)

print(f"Call SID: {call.sid}")
print(f"Call Status: {call.status}")
```

## Migration from SignalWire

If you're migrating from SignalWire SDK:

```python
# Before
from signalwire.rest import Client as SignalWireClient

# After
from wirexaapi import Client as SignalWireClient
```

The rest of your code stays the same!

## Features

- Full SignalWire/Twilio API compatibility
- Call creation, retrieval, and listing
- Machine Detection (AMD)
- Recording
- Status callbacks
- Async AMD support

## License

MIT


## Wirexa DB (base de datos de documentos)

```python
from wirexaapi import MongoClient

client = MongoClient(
    "wirexaapi+srv://usuario:password@cluster0-abc1234.wirexaapi.com/?appName=cluster0",
    serverSelectionTimeoutMS=5000,
    connectTimeoutMS=5000,
    socketTimeoutMS=20000,
)
db = client["miapp"]
users = db["users"]            # las colecciones se crean solas

users.insert_one({"name": "Ana", "age": 30})
users.find_one({"name": "Ana"})
for u in users.find({"age": {"$gt": 25}}).sort("name").limit(10):
    print(u)
users.update_one({"name": "Ana"}, {"$set": {"age": 31}})
users.create_index("email", unique=True)
```

Soporta filtros (`$eq $ne $gt $gte $lt $lte $in $nin $exists $regex $and $or $nor $not $size $all $elemMatch`),
updates (`$set $unset $inc $mul $min $max $push $addToSet $pull $pop $rename $currentDate $setOnInsert`), upserts,
`find_one_and_*`, índices (incluidos únicos), `distinct`, `count_documents` y `aggregate`
(`$match $sort $skip $limit $project $addFields $unset $unwind $group $count $lookup`).

Si tu backend corre en la misma VPS que el cluster, usa la URI local que da el panel
(`wirexaapi://...@127.0.0.1:27501/?cluster=<id>&tls=false`): ~1 ms por consulta.
Instala `wirexaapi[srv]` para resolver el registro SRV del cluster.
