# 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"
}