90 lines
3.0 KiB
Python
Executable File
90 lines
3.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""Borra los datos de demostración sembrados por `--demo`.
|
|
|
|
/root/odoo-venv/bin/python demo_limpiar.py --conf /root/<slug>-odoo.conf --db <db> [--dry-run]
|
|
|
|
Usa la lista de ids guardada en ir.config_parameter `skeen.demo.ids` y, como
|
|
respaldo, los marcadores ('DEMO-' en servicios, referred_by='DEMO' en
|
|
pacientes, '[DEMO]' en citas/empleados). Pensado para no dejar basura en una
|
|
instancia de cliente antes de entregarla.
|
|
"""
|
|
import argparse
|
|
import json
|
|
import sys
|
|
import traceback
|
|
|
|
|
|
def load_env(conf_path, db_name):
|
|
sys.path.insert(0, '/root/skeen-odoo')
|
|
import odoo
|
|
from odoo.tools import config as odoo_config
|
|
odoo_config.parse_config(['-c', conf_path, '-d', db_name,
|
|
'--no-http', '--log-level', 'error'])
|
|
odoo.service.server.load_server_wide_modules()
|
|
return odoo, odoo.registry(db_name)
|
|
|
|
|
|
# Orden de borrado: primero lo que depende de lo demás.
|
|
ORDER = ['skeen.cita', 'skeen.paquete.compra', 'skeen.paquete',
|
|
'skeen.monedero', 'skeen.servicio', 'res.partner', 'hr.employee']
|
|
|
|
|
|
def main():
|
|
ap = argparse.ArgumentParser()
|
|
ap.add_argument('--conf', required=True)
|
|
ap.add_argument('--db', required=True)
|
|
ap.add_argument('--dry-run', action='store_true')
|
|
args = ap.parse_args()
|
|
|
|
odoo, registry = load_env(args.conf, args.db)
|
|
with registry.cursor() as cr:
|
|
env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
|
|
ICP = env['ir.config_parameter'].sudo()
|
|
raw = ICP.get_param('skeen.demo.ids') or '{}'
|
|
try:
|
|
ids = json.loads(raw)
|
|
except Exception:
|
|
ids = {}
|
|
|
|
# respaldo por marcadores cuando no hay ids guardados
|
|
markers = {}
|
|
if not any(ids.values()):
|
|
markers = {
|
|
'skeen.servicio': [('code', 'like', 'DEMO-%')],
|
|
'res.partner': [('referred_by', '=', 'DEMO')],
|
|
'hr.employee': [('notes', 'like', '[DEMO]')],
|
|
'skeen.cita': [('notes', 'like', '[DEMO]')],
|
|
}
|
|
|
|
for model in ORDER:
|
|
if model not in env:
|
|
continue
|
|
Model = env[model].sudo()
|
|
recs = Model.browse([])
|
|
for rid in ids.get(model.split('.')[-1], []):
|
|
recs |= Model.browse(rid).exists()
|
|
if model in markers:
|
|
recs |= Model.search(markers[model])
|
|
if not recs:
|
|
continue
|
|
print('%-22s %d registros' % (model, len(recs)))
|
|
if not args.dry_run:
|
|
try:
|
|
recs.unlink()
|
|
except Exception as e:
|
|
print(' no se pudo borrar del todo: %s' % e)
|
|
|
|
if not args.dry_run:
|
|
ICP.set_param('skeen.demo.ids', '{}')
|
|
cr.commit()
|
|
print('LIMPIEZA %s' % ('SIMULADA (dry-run)' if args.dry_run else 'OK'))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
main()
|
|
except Exception:
|
|
traceback.print_exc()
|
|
sys.exit(1)
|