yaml-to-backend


Nameyaml-to-backend JSON
Version 0.1.6 PyPI version JSON
download
home_pageNone
SummaryGenerador de Backends a partir de YAML
upload_time2025-07-30 21:31:54
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT
keywords yaml backend generator fastapi sqlalchemy crud
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # YAML-to-Backend

Una librería Python para generar backends completos a partir de definiciones YAML.

## Descripción

YAML-to-Backend es una herramienta que permite generar automáticamente backends completos con FastAPI, SQLAlchemy y SQLModel a partir de archivos YAML que definen entidades, campos, relaciones y permisos.

## Características

- **Generación automática de modelos**: Crea modelos SQLModel y Pydantic automáticamente
- **CRUD automático**: Genera endpoints CRUD completos para cada entidad
- **Autenticación integrada**: Sistema de autenticación JWT incluido
- **Validación automática**: Validación de datos basada en las definiciones YAML
- **Documentación automática**: Swagger/OpenAPI generado automáticamente
- **Soporte para relaciones**: Claves foráneas y relaciones entre entidades
- **Sistema de permisos**: Control de acceso basado en roles

## Instalación

```bash
pip install yaml-to-backend
```

## Uso

### 1. Definir entidades en YAML

Crea archivos YAML que definan tus entidades:

```yaml
# entidades/usuario.yaml
entidad: Usuario
tabla: usuarios
descripcion: Gestión de usuarios del sistema
campos:
  id:
    tipo: integer
    pk: true
  nombre:
    tipo: string
    max: 100
    required: true
  email:
    tipo: string
    max: 255
    required: true
    ejemplo: "usuario@ejemplo.com"
  password:
    tipo: string
    max: 255
    required: true
  activo:
    tipo: boolean
    required: true
    ejemplo: true
  rol_id:
    tipo: integer
    fk: roles.id
    required: true
permisos:
  admin: [r, w, d]
  usuario:
    yo:
      campo_usuario: id
```

### 2. Usar la librería

```python
from yaml_to_backend import update_config, get_run_backend

# Configurar la base de datos
update_config(
    DB_HOST='localhost',
    DB_USER='usuario',
    DB_PASSWORD='password',
    DB_NAME='mi_base_datos',
    DB_PORT=3306,
    PORT=8000
)

# Ejecutar el backend
run_backend = get_run_backend()
run_backend()
```

### 3. Usar desde línea de comandos

```bash
# Configurar y ejecutar
yaml-to-backend --config entidades/ --port 8000

# Solo validar YAML
yaml-to-backend --validate entidades/
```

## Estructura del Proyecto

```
yaml-to-backend/
├── yaml_to_backend/          # Código fuente de la librería
│   ├── __init__.py
│   ├── app.py               # Aplicación principal
│   ├── config.py            # Configuración
│   ├── cli.py               # Interfaz de línea de comandos
│   ├── api/                 # Generadores de API
│   ├── core/                # Lógica principal
│   ├── db/                  # Modelos de base de datos
│   └── security/            # Autenticación y seguridad
├── tests/                   # Pruebas unitarias
├── setup.py                 # Configuración de instalación
├── pyproject.toml           # Configuración moderna del proyecto
├── MANIFEST.in              # Archivos a incluir en el paquete
└── README.md                # Este archivo
```

## Tipos de Datos Soportados

- `integer`: Números enteros
- `string`: Cadenas de texto
- `boolean`: Valores booleanos
- `datetime`: Fechas y horas
- `date`: Solo fechas
- `time`: Solo horas
- `float`: Números decimales
- `text`: Texto largo
- `json`: Datos JSON

## Configuración

### Variables de Entorno

- `DB_HOST`: Host de la base de datos
- `DB_USER`: Usuario de la base de datos
- `DB_PASSWORD`: Contraseña de la base de datos
- `DB_NAME`: Nombre de la base de datos
- `DB_PORT`: Puerto de la base de datos
- `PORT`: Puerto del servidor web
- `SECRET_KEY`: Clave secreta para JWT
- `ALGORITHM`: Algoritmo de encriptación JWT

### Configuración Programática

```python
from yaml_to_backend import update_config

update_config(
    DB_HOST='localhost',
    DB_USER='usuario',
    DB_PASSWORD='password',
    DB_NAME='mi_db',
    DB_PORT=3306,
    PORT=8000,
    SECRET_KEY='mi_clave_secreta',
    ALGORITHM='HS256'
)
```

## Desarrollo

### Instalación para desarrollo

```bash
git clone https://github.com/cxmjg/yaml-to-backend.git
cd yaml-to-backend
python -m venv .venv
source .venv/bin/activate  # En Windows: .venv\Scripts\activate
pip install -e .
```

### Ejecutar pruebas

```bash
pytest
```

### Construir el paquete

```bash
python -m build
```

## Publicación Automática

Este proyecto utiliza GitHub Actions con Trusted Publishers para publicar automáticamente en PyPI cuando se hace push a la rama `main`.

### Configuración de Trusted Publishers

1. Ve a tu proyecto en PyPI
2. En "Settings" > "Trusted publishers"
3. Agrega un nuevo publisher con:
   - **Owner**: `cxmjg`
   - **Repository name**: `yaml-to-backend`
   - **Workflow name**: `publish`
   - **Environment name**: (dejar vacío)

## Licencia

MIT License - ver [LICENSE](LICENSE) para más detalles.

## Contribuir

1. Fork el proyecto
2. Crea una rama para tu feature (`git checkout -b feature/AmazingFeature`)
3. Commit tus cambios (`git commit -m 'Add some AmazingFeature'`)
4. Push a la rama (`git push origin feature/AmazingFeature`)
5. Abre un Pull Request

## Changelog

### v0.1.0
- Primera versión estable
- Generación automática de modelos y CRUD
- Sistema de autenticación JWT
- Soporte para relaciones entre entidades
- CLI para configuración y validación
- Publicación automática con GitHub Actions 

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "yaml-to-backend",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": "IPAS Team <info@ipas.com>",
    "keywords": "yaml, backend, generator, fastapi, sqlalchemy, crud",
    "author": null,
    "author_email": "IPAS Team <info@ipas.com>",
    "download_url": "https://files.pythonhosted.org/packages/6e/00/f830a4ac6348695533e8028ae9ad711d7c447fa80d768d513ade0360442a/yaml_to_backend-0.1.6.tar.gz",
    "platform": null,
    "description": "# YAML-to-Backend\n\nUna librer\u00eda Python para generar backends completos a partir de definiciones YAML.\n\n## Descripci\u00f3n\n\nYAML-to-Backend es una herramienta que permite generar autom\u00e1ticamente backends completos con FastAPI, SQLAlchemy y SQLModel a partir de archivos YAML que definen entidades, campos, relaciones y permisos.\n\n## Caracter\u00edsticas\n\n- **Generaci\u00f3n autom\u00e1tica de modelos**: Crea modelos SQLModel y Pydantic autom\u00e1ticamente\n- **CRUD autom\u00e1tico**: Genera endpoints CRUD completos para cada entidad\n- **Autenticaci\u00f3n integrada**: Sistema de autenticaci\u00f3n JWT incluido\n- **Validaci\u00f3n autom\u00e1tica**: Validaci\u00f3n de datos basada en las definiciones YAML\n- **Documentaci\u00f3n autom\u00e1tica**: Swagger/OpenAPI generado autom\u00e1ticamente\n- **Soporte para relaciones**: Claves for\u00e1neas y relaciones entre entidades\n- **Sistema de permisos**: Control de acceso basado en roles\n\n## Instalaci\u00f3n\n\n```bash\npip install yaml-to-backend\n```\n\n## Uso\n\n### 1. Definir entidades en YAML\n\nCrea archivos YAML que definan tus entidades:\n\n```yaml\n# entidades/usuario.yaml\nentidad: Usuario\ntabla: usuarios\ndescripcion: Gesti\u00f3n de usuarios del sistema\ncampos:\n  id:\n    tipo: integer\n    pk: true\n  nombre:\n    tipo: string\n    max: 100\n    required: true\n  email:\n    tipo: string\n    max: 255\n    required: true\n    ejemplo: \"usuario@ejemplo.com\"\n  password:\n    tipo: string\n    max: 255\n    required: true\n  activo:\n    tipo: boolean\n    required: true\n    ejemplo: true\n  rol_id:\n    tipo: integer\n    fk: roles.id\n    required: true\npermisos:\n  admin: [r, w, d]\n  usuario:\n    yo:\n      campo_usuario: id\n```\n\n### 2. Usar la librer\u00eda\n\n```python\nfrom yaml_to_backend import update_config, get_run_backend\n\n# Configurar la base de datos\nupdate_config(\n    DB_HOST='localhost',\n    DB_USER='usuario',\n    DB_PASSWORD='password',\n    DB_NAME='mi_base_datos',\n    DB_PORT=3306,\n    PORT=8000\n)\n\n# Ejecutar el backend\nrun_backend = get_run_backend()\nrun_backend()\n```\n\n### 3. Usar desde l\u00ednea de comandos\n\n```bash\n# Configurar y ejecutar\nyaml-to-backend --config entidades/ --port 8000\n\n# Solo validar YAML\nyaml-to-backend --validate entidades/\n```\n\n## Estructura del Proyecto\n\n```\nyaml-to-backend/\n\u251c\u2500\u2500 yaml_to_backend/          # C\u00f3digo fuente de la librer\u00eda\n\u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u251c\u2500\u2500 app.py               # Aplicaci\u00f3n principal\n\u2502   \u251c\u2500\u2500 config.py            # Configuraci\u00f3n\n\u2502   \u251c\u2500\u2500 cli.py               # Interfaz de l\u00ednea de comandos\n\u2502   \u251c\u2500\u2500 api/                 # Generadores de API\n\u2502   \u251c\u2500\u2500 core/                # L\u00f3gica principal\n\u2502   \u251c\u2500\u2500 db/                  # Modelos de base de datos\n\u2502   \u2514\u2500\u2500 security/            # Autenticaci\u00f3n y seguridad\n\u251c\u2500\u2500 tests/                   # Pruebas unitarias\n\u251c\u2500\u2500 setup.py                 # Configuraci\u00f3n de instalaci\u00f3n\n\u251c\u2500\u2500 pyproject.toml           # Configuraci\u00f3n moderna del proyecto\n\u251c\u2500\u2500 MANIFEST.in              # Archivos a incluir en el paquete\n\u2514\u2500\u2500 README.md                # Este archivo\n```\n\n## Tipos de Datos Soportados\n\n- `integer`: N\u00fameros enteros\n- `string`: Cadenas de texto\n- `boolean`: Valores booleanos\n- `datetime`: Fechas y horas\n- `date`: Solo fechas\n- `time`: Solo horas\n- `float`: N\u00fameros decimales\n- `text`: Texto largo\n- `json`: Datos JSON\n\n## Configuraci\u00f3n\n\n### Variables de Entorno\n\n- `DB_HOST`: Host de la base de datos\n- `DB_USER`: Usuario de la base de datos\n- `DB_PASSWORD`: Contrase\u00f1a de la base de datos\n- `DB_NAME`: Nombre de la base de datos\n- `DB_PORT`: Puerto de la base de datos\n- `PORT`: Puerto del servidor web\n- `SECRET_KEY`: Clave secreta para JWT\n- `ALGORITHM`: Algoritmo de encriptaci\u00f3n JWT\n\n### Configuraci\u00f3n Program\u00e1tica\n\n```python\nfrom yaml_to_backend import update_config\n\nupdate_config(\n    DB_HOST='localhost',\n    DB_USER='usuario',\n    DB_PASSWORD='password',\n    DB_NAME='mi_db',\n    DB_PORT=3306,\n    PORT=8000,\n    SECRET_KEY='mi_clave_secreta',\n    ALGORITHM='HS256'\n)\n```\n\n## Desarrollo\n\n### Instalaci\u00f3n para desarrollo\n\n```bash\ngit clone https://github.com/cxmjg/yaml-to-backend.git\ncd yaml-to-backend\npython -m venv .venv\nsource .venv/bin/activate  # En Windows: .venv\\Scripts\\activate\npip install -e .\n```\n\n### Ejecutar pruebas\n\n```bash\npytest\n```\n\n### Construir el paquete\n\n```bash\npython -m build\n```\n\n## Publicaci\u00f3n Autom\u00e1tica\n\nEste proyecto utiliza GitHub Actions con Trusted Publishers para publicar autom\u00e1ticamente en PyPI cuando se hace push a la rama `main`.\n\n### Configuraci\u00f3n de Trusted Publishers\n\n1. Ve a tu proyecto en PyPI\n2. En \"Settings\" > \"Trusted publishers\"\n3. Agrega un nuevo publisher con:\n   - **Owner**: `cxmjg`\n   - **Repository name**: `yaml-to-backend`\n   - **Workflow name**: `publish`\n   - **Environment name**: (dejar vac\u00edo)\n\n## Licencia\n\nMIT License - ver [LICENSE](LICENSE) para m\u00e1s detalles.\n\n## Contribuir\n\n1. Fork el proyecto\n2. Crea una rama para tu feature (`git checkout -b feature/AmazingFeature`)\n3. Commit tus cambios (`git commit -m 'Add some AmazingFeature'`)\n4. Push a la rama (`git push origin feature/AmazingFeature`)\n5. Abre un Pull Request\n\n## Changelog\n\n### v0.1.0\n- Primera versi\u00f3n estable\n- Generaci\u00f3n autom\u00e1tica de modelos y CRUD\n- Sistema de autenticaci\u00f3n JWT\n- Soporte para relaciones entre entidades\n- CLI para configuraci\u00f3n y validaci\u00f3n\n- Publicaci\u00f3n autom\u00e1tica con GitHub Actions \n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Generador de Backends a partir de YAML",
    "version": "0.1.6",
    "project_urls": {
        "Bug Tracker": "https://github.com/cxmjg/yaml-to-backend/issues",
        "Documentation": "https://github.com/cxmjg/yaml-to-backend#readme",
        "Homepage": "https://github.com/cxmjg/yaml-to-backend",
        "Repository": "https://github.com/cxmjg/yaml-to-backend"
    },
    "split_keywords": [
        "yaml",
        " backend",
        " generator",
        " fastapi",
        " sqlalchemy",
        " crud"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7c4e5e9d8b84c59b042d228aaecee84e51df6ba9099404cf65616f9549f7b99a",
                "md5": "1ca060d7c69ccbc922864bb88a2c4dc5",
                "sha256": "0c49725d6cfa54cc4b5e733d73996ecc8b2e03eb24d88dba36508e8264a3a58f"
            },
            "downloads": -1,
            "filename": "yaml_to_backend-0.1.6-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "1ca060d7c69ccbc922864bb88a2c4dc5",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 25546,
            "upload_time": "2025-07-30T21:31:53",
            "upload_time_iso_8601": "2025-07-30T21:31:53.490180Z",
            "url": "https://files.pythonhosted.org/packages/7c/4e/5e9d8b84c59b042d228aaecee84e51df6ba9099404cf65616f9549f7b99a/yaml_to_backend-0.1.6-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6e00f830a4ac6348695533e8028ae9ad711d7c447fa80d768d513ade0360442a",
                "md5": "e17e5a3e06dfe8637869b40693875fe9",
                "sha256": "5940b35c5b0a15ed6bbb23dd65d02b3a1434b6b0ce0068d4524d75715bcbbe45"
            },
            "downloads": -1,
            "filename": "yaml_to_backend-0.1.6.tar.gz",
            "has_sig": false,
            "md5_digest": "e17e5a3e06dfe8637869b40693875fe9",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 23413,
            "upload_time": "2025-07-30T21:31:54",
            "upload_time_iso_8601": "2025-07-30T21:31:54.726258Z",
            "url": "https://files.pythonhosted.org/packages/6e/00/f830a4ac6348695533e8028ae9ad711d7c447fa80d768d513ade0360442a/yaml_to_backend-0.1.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-30 21:31:54",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "cxmjg",
    "github_project": "yaml-to-backend",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "yaml-to-backend"
}
        
Elapsed time: 1.39454s