Files
Odoo-Build/scripts/odooctl
T
2021-04-11 13:40:32 +02:00

60 lines
1.6 KiB
Python
Executable File

#!/usr/bin/env python3
import xmlrpc.client
import argparse, sys, os, ast
from urllib.parse import urlparse
example_text = """
example:
odooctl --model 'res.partner' --domain "('id', '=', 66)" --field 'name' --value Test
"""
parser=argparse.ArgumentParser(
prog='odooctl',
description='Update Odoo records using the XML-RPC API.',
epilog=example_text,
)
# Define arguments
parser.add_argument('--model', help='Model')
parser.add_argument('--domain', help='Domain')
parser.add_argument('--field', help='Field')
parser.add_argument('--value', help='Value')
# Parse arguments
args=parser.parse_args()
# Get environemtn variables
url = os.environ.get('ODOO_URL') or 'http://localhost:8069'
db = os.environ.get('ODOO_DATABASE') or 'odoo'
username = os.getenv('ODOO_USERNAME') or 'admin'
password = os.environ.get('ODOO_PASSWORD') or 'admin'
# Connect
common = xmlrpc.client.ServerProxy('{}/xmlrpc/2/common'.format(url))
uid = common.authenticate(db, username, password, {})
models = xmlrpc.client.ServerProxy('{}/xmlrpc/2/object'.format(url))
# Check permissions
models.execute_kw(db, uid, password,
args.model, 'check_access_rights',
['read'], {'raise_exception': False})
# Parse domain and value
domain = ast.literal_eval(args.domain) if args.domain else False
value = ast.literal_eval(args.value)
# Search records
ids = models.execute_kw(db, uid, password,
args.model, 'search',
[[domain]] if domain else [[]])
print(ids)
# Write records
models.execute_kw(db, uid, password,
args.model, 'write',
[ids, { args.field: value }])
print("Success")