diff --git a/.dev/Procfile b/.dev/Procfile new file mode 100644 index 0000000..7a48121 --- /dev/null +++ b/.dev/Procfile @@ -0,0 +1,2 @@ +trytond: trytond -d ${DB_NAME} --dev -v -c $SCRIPT_DIR/trytond.cfg +monitor: python3 $SCRIPT_DIR/dev.py \ No newline at end of file diff --git a/.dev/dev.py b/.dev/dev.py new file mode 100644 index 0000000..18414e1 --- /dev/null +++ b/.dev/dev.py @@ -0,0 +1,29 @@ +# script para refrescar cambios de xml del modulo de tryton +import os +import logging + +import inotify.adapters + +SRC = os.environ['SRC'] +MODULE_NAME = os.environ['MODULE_NAME'] +DB_NAME = os.environ['DB_NAME'] + +def _main(): + i = inotify.adapters.Inotify() + + i.add_watch(SRC) + logging.info("MONITOREANDO ARCHIVOS EN %s", SRC) + + for event in i.event_gen(yield_nones=False): + (_, type_names, path, filename) = event + (_, ext) = os.path.splitext(filename) + + if ext in ['.py', '.xml']: + if os.system("trytond-admin -d {} -u {}".format(DB_NAME, MODULE_NAME)) != 0: + raise Exception("fallo trytond-admin") + + logging.info("ACTUALIZADO TRYTOND POR CAMBIO DE ARCHIVO %s", filename) + + +if __name__ == '__main__': + _main() diff --git a/.dev/run.sh b/.dev/run.sh new file mode 100755 index 0000000..640ae10 --- /dev/null +++ b/.dev/run.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# script para iniciar entorno vivo + + +SCRIPT_DIR=$(dirname `realpath $0`) + +die() { + echo $1 + exit 1 +} + +[ ! -d "$SRC" ] && die "no se ubica ruta en SRC" +[ -z "$DB_NAME" ] && die "se requiere variable DB_NAME" + +set -e + +# dependencias minimas +pip3 install psycopg2 proteus inotify honcho + +# instalar dependencias de tryton desde paquete +python3 setup.py install + +# usamos enlace al paquete +python3 setup.py develop + +# instalar modulo +trytond_modules_path=`pip3 show trytond | grep Location | sed -nr 's/Location: +//gp'`/trytond/modules +module_name=`cat "$SRC/setup.py" | fgrep -A 1 [trytond.modules] | sed 1d | cut -d '=' -f 1 | tr -d ' \n'` +[ ! -d "$trytond_modules_path" ] && die "fallo al ubicar ruta de modulos de trytond" +ln -sf "$SRC" "$trytond_modules_path/$module_name" + +# inicializar base de datos +# https://docs.tryton.org/projects/server/en/latest/tutorial/module/setup_database.html +yes admin | trytond-admin -d ${DB_NAME} --all + + +# ejecutar servidor +export SCRIPT_DIR +export MODULE_NAME=$module_name +export DB_NAME +export SRC + +honcho -d ${SCRIPT_DIR} start diff --git a/.dev/trytond.cfg b/.dev/trytond.cfg new file mode 100644 index 0000000..0a11794 --- /dev/null +++ b/.dev/trytond.cfg @@ -0,0 +1,2 @@ +[web] +listen = 0.0.0.0:8000 \ No newline at end of file diff --git a/CONTRIBUIR.md b/CONTRIBUIR.md index 80951b5..1644c54 100644 --- a/CONTRIBUIR.md +++ b/CONTRIBUIR.md @@ -13,12 +13,19 @@ * git >= 2.30 * rake >= 13 -### procedimiento +### procedimiento en pruebas 1. iniciar entorno `rake init` 2. iterar con `rake tdd` 3. detener el entorno `rake down` +### entorno vivo de desarrollo + +1. iniciar entorno `rake live:up` +2. conectar cliente tryton a `localhost:8000` usuario: `admin` y clave: `admin` + 1. si desea ver la salida de trytond usar `rake live:tail` +3. detener entorno `rake live:down` + ### consideraciones * evito trabajo innecesario diff --git a/Rakefile b/Rakefile index 43655a0..8ed598d 100644 --- a/Rakefile +++ b/Rakefile @@ -26,6 +26,25 @@ task :down do compose('down') end -def compose(*arg) - sh "docker-compose -f #{DOCKER_COMPOSE} #{arg.join(' ')}" +desc 'entorno vivo' +namespace :live do + + desc 'iniciar entorno' + task :up do + compose('up', '--build', '-d', compose: 'docker-compose.yml') + end + + desc 'monitorear salida' + task :tail do + compose('logs', '-f', 'app.dev', compose: 'docker-compose.yml') + end + + desc 'detener entorno' + task :down do + compose('down', compose: 'docker-compose.yml') + end +end + +def compose(*arg, compose: DOCKER_COMPOSE) + sh "docker-compose -f #{compose} #{arg.join(' ')}" end diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..a4c7a23 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,23 @@ +version: '3.9' +services: + db.dev: + image: postgres:12 + environment: + - POSTGRES_USER=tryton + - POSTGRES_PASSWORD=tryton + - POSTGRES_DB=tryton + + app.dev: + image: python:3.9 + depends_on: + - db.dev + command: bash .dev/run.sh + environment: + - DB_NAME=tryton + - SRC=/app + - TRYTOND_DATABASE_URI=postgresql://tryton:tryton@db.dev:5432/ + volumes: + - .:/app + ports: + - "8000:8000" + working_dir: /app