58 lines
1.5 KiB
Python
Executable File
58 lines
1.5 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 [[]])
|
|
|
|
# Write records
|
|
models.execute_kw(db, uid, password,
|
|
args.model, 'write',
|
|
[ids, { args.field: value }])
|
|
|
|
print("Success")
|