Metadata-Version: 2.4
Name: isapilib
Version: 3.7.0
Summary: Libreria de isapilib, utilidades para API's de Intelisis
Author-email: Ivan-Rosales <61328655+Ivan-Rosales@users.noreply.github.com>
Requires-Python: <4.0,>=3.12
Description-Content-Type: text/markdown
Requires-Dist: django<6.0.0,>=5.0.0
Requires-Dist: djangorestframework<4.0.0,>=3.0.0
Requires-Dist: django-encrypted-model-fields<0.7.0,>=0.6.0
Requires-Dist: djangorestframework-simplejwt<6.0.0,>=5.0.0
Requires-Dist: mssql-django<2,>=1.5

# isapilib

Framework de herramientas para las APIs de Django y Django REST Framework sobre el ERP Intelisis: ruteo a la base de datos de cada agencia, modelos del ERP, ejecución de SQL y stored procedures, creación de movimientos de venta, bitácora, utilidades de prueba y comandos de administración.

📖 **Documentación completa:** [BookStack → isapilib](http://192.168.41.42:6875/books/isapilib) · Versión actual: **3.7.0** ([cambios entre versiones](http://192.168.41.42:6875/books/isapilib/page/cambios-entre-versiones))

---

### Instalación

```bash
pip install isapilib
```

Python ≥ 3.12 · Django 5.x · DRF 3.x · SQL Server. `mssql-django` se instala como dependencia. En los proyectos, fija la versión exacta (`isapilib==X.Y.Z`).

### Configuración mínima

```python
INSTALLED_APPS = [..., 'rest_framework', 'isapilib']
MIDDLEWARE = ['isapilib.middlewares.LoggerMiddleware']
DATABASE_ROUTERS = ['isapilib.core.router.DealerRouter']
AUTH_USER_MODEL = 'isapilib.UserAPI'

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
        'isapilib.auth.permissions.IsapilibPermission',   # obligatorio para el router
    ),
}

INTERFAZ_NAME = 'MI_API'
DEALER_FIELD = 'dealerID'
FIELD_ENCRYPTION_KEY = os.getenv('FIELD_ENCRYPTION_KEY')
```

```bash
python manage.py migrate
```

### Ejemplo

```python
from isapilib.models import Agente
from rest_framework.generics import ListAPIView


class AdvisorListView(ListAPIView):
    serializer_class = AdvisorSerializer

    def get_queryset(self):
        # Consulta la base de la agencia del header dealerID
        return Agente.objects.filter(tipo='Asesor', estatus='ALTA')
```

---

### Desarrollo

- Ramas permanentes: **`main`** (última versión publicada) y **`dev`** (integra el desarrollo; al publicar queda como copia de `main`).
- Cada versión se trabaja en una rama `fix/X.Y.Z` desde `dev`, con un commit por corrección, y se integra por MR. Las ramas temporales se borran al integrar.
- Cada versión sale primero como beta (`X.Y.Zb1`) y se prueba en una API con versión fija antes de la final.
- La versión se define en `pyproject.toml`. La versión de referencia es la última publicada en PyPI (`pip index versions isapilib --pre`).

### Publicar

```powershell
Remove-Item -Recurse -Force .\dist\
python setup.py sdist
twine upload dist/*
```

Twine toma el token del llavero de Windows (`keyring set https://upload.pypi.org/legacy/ __token__`) o de `~/.pypirc`. **Nunca lo pongas en el repo.**

### Documentación

La fuente del libro de BookStack, las herramientas (referencia de modelos, uso en producción) y las verificaciones de cada versión están en el repo de estándares: [`estandar-sql/isapilib`](https://gitlabv2.intelisis-solutions.com:8008/TICS/Interfaces/estandar-sql/-/tree/main/isapilib).
