Metadata-Version: 2.1
Name: one-table
Version: 1.0.23
Summary: Python dynamoDB one table
Author: Gerswin Pineda
Author-email: g3rswin@gmail.com
Keywords: python,dynamodb
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Software Development :: Libraries
Classifier: License :: OSI Approved :: MIT License
Description-Content-Type: text/markdown
Requires-Dist: cerberus

# one_table

`one_table` es una librería Python que simplifica las operaciones con DynamoDB, proporcionando una capa de abstracción intuitiva y potente sobre el SDK de boto3 para DynamoDB. Esta librería está diseñada para facilitar el modelado de datos, las consultas y las operaciones CRUD en DynamoDB, permitiendo a los desarrolladores centrarse en la lógica de negocio en lugar de en los detalles de implementación de DynamoDB.

## Características principales

- Modelado de datos sencillo con esquemas definidos en Python
- Operaciones CRUD simplificadas
- Soporte para índices secundarios globales (GSI)
- Consultas flexibles con soporte para filtros y condiciones
- Operaciones condicionales para garantizar la integridad de los datos
- Soporte para JSON API
- Caché integrado para mejorar el rendimiento

## Instalación

Puedes instalar `one_table` usando pip:

```
pip install one_table
```

## Uso básico

### Configuración inicial

Primero, necesitas configurar tu tabla de DynamoDB:

```python
import boto3
from one_table import Table

# Configurar el cliente de DynamoDB
dynamodb = boto3.resource('dynamodb')

# Definir el esquema de la tabla
schema = {
    'version': '0.0.1',
    'indexes': {
        'primary': {'hash': 'pk', 'sort': 'sk'},
        'GSI1': {'hash': '_type', 'sort': 'createdAt'}
    },
    'models': {
        'User': {
            'pk': {'type': 'string', 'value': 'USER#{id}'},
            'sk': {'type': 'string', 'value': 'PROFILE'},
            'id': {'type': 'string', 'required': True},
            'name': {'type': 'string', 'required': True},
            'email': {'type': 'string', 'required': True}
        }
    }
}

# Crear la instancia de Table
table = Table({
    'name': 'MyTable',
    'schema': schema,
    'client': dynamodb
})
```

### Crear un nuevo item

```python
new_user = table.create('User', {
    'id': '12345',
    'name': 'John Doe',
    'email': 'john@example.com'
})
print(new_user)
```

### Actualizar un item existente

```python
updated_user = table.update('User', {
    'id': '12345',
    'name': 'John Updated Doe',
    'email': 'john.updated@example.com'
})
print(updated_user)
```

### Actualizar un item solo si los valores son diferentes

```python
updated_user = table.update_if_different('User', {
    'id': '12345',
    'name': 'John Doe',
    'email': 'john.new@example.com'
})
print(updated_user)
```

### Buscar items

```python
# Buscar por clave primaria
user = table.find('User', {
    'pk': 'USER#12345',
    'sk': 'PROFILE'
})

# Buscar usando un índice secundario global
users = table.find_by_gsi('GSI1', 'User', {
    '_type': 'User',
    'createdAt': {'begins_with': '2023'}
})

# Buscar con filtros adicionales
filtered_users = table.find('User', {
    'pk': 'USER#',
    'sk': {'begins_with': 'PROFILE'},
    'filter': [
        {'name': {'begins_with': 'John'}},
        {'email': {'ends_with': '@example.com'}}
    ]
})
```

### Eliminar un item

```python
table.delete({
    'pk': 'USER#12345',
    'sk': 'PROFILE'
})
```

## Características avanzadas

### Caché

`one_table` incluye un sistema de caché integrado para mejorar el rendimiento de las consultas frecuentes:

```python
table = Table({
    'name': 'MyTable',
    'schema': schema,
    'client': dynamodb,
    'cache': True,
    'cacheTTLSeg': 300,  # Tiempo de vida del caché en segundos
    'cachePath': './cache'  # Directorio para almacenar el caché
})
```

### Modo de depuración

Puedes activar el modo de depuración para obtener más información sobre las operaciones realizadas:

```python
table = Table({
    'name': 'MyTable',
    'schema': schema,
    'client': dynamodb,
    'debug': True
})
```

### Soporte para JSON API

`one_table` puede formatear las respuestas según las especificaciones de JSON API:

```python
table = Table({
    'name': 'MyTable',
    'schema': schema,
    'client': dynamodb,
    'jsonApi': True
})
```

## Conclusión

`one_table` simplifica significativamente el trabajo con DynamoDB en Python, proporcionando una API intuitiva y potente. Ya sea que estés construyendo una aplicación pequeña o un sistema a gran escala, `one_table` te ayudará a interactuar con DynamoDB de manera eficiente y efectiva.

Para más información, consulta la documentación completa en [link a tu documentación].

¡Esperamos que disfrutes usando `one_table` en tus proyectos!
