Split utils.py
This commit is contained in:
parent
e7b9ae9ada
commit
f25543c391
254
odoo-rpc.py
254
odoo-rpc.py
|
@ -12,80 +12,31 @@ import odoorpc # pip install odoorpc
|
||||||
#from typing import Iterable # > py38
|
#from typing import Iterable # > py38
|
||||||
from collections import Iterable # < py38
|
from collections import Iterable # < py38
|
||||||
|
|
||||||
|
from utils import *
|
||||||
from renderers import render, tsv
|
from renderers import render, tsv
|
||||||
|
|
||||||
|
|
||||||
def eprint(*args, **kwargs):
|
|
||||||
print(*args, file=sys.stderr, **kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
# CONFIG
|
# CONFIG
|
||||||
FOLDER = '/home/dig/odoo-export/datas'
|
FOLDER = '/home/dig/odoo-export/datas'
|
||||||
# PARAMS = sys.argv[1:]
|
|
||||||
PARAMS = []
|
|
||||||
OPTS = {}
|
|
||||||
for param in sys.argv[1:]:
|
|
||||||
# if param[0] == '-':
|
|
||||||
# kv = param[1:].split( '=' )
|
|
||||||
# if len(kv) == 1:
|
|
||||||
# OPTS[kv[0]] = False
|
|
||||||
# else:
|
|
||||||
# OPTS[kv[0]] = kv[1]
|
|
||||||
# elif
|
|
||||||
if param[0] == '+':
|
|
||||||
kv = param[1:].split( '=' )
|
|
||||||
if len(kv) == 1:
|
|
||||||
OPTS[kv[0]] = True
|
|
||||||
else:
|
|
||||||
OPTS[kv[0]] = kv[1]
|
|
||||||
else:
|
|
||||||
PARAMS.append( param )
|
|
||||||
|
|
||||||
MODEL_IGNORE = []
|
MODEL_IGNORE = []
|
||||||
with open(".modelignore", "r") as file:
|
with open(".modelignore", "r") as file:
|
||||||
for line in file:
|
for line in file:
|
||||||
MODEL_IGNORE.append(line.strip())
|
MODEL_IGNORE.append(line.strip())
|
||||||
|
|
||||||
eprint( len(sys.argv), 'argument(s):', PARAMS, OPTS )
|
|
||||||
eprint( MODEL_IGNORE )
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ODOO
|
||||||
|
|
||||||
|
# Prepare the connection to the server
|
||||||
|
# odoo = odoorpc.ODOO('localhost', port=8069)
|
||||||
|
|
||||||
# def flatten(items):
|
# Check available databases
|
||||||
# """Yield items from any nested iterable; see Reference."""
|
# eprint( 'Databases: ', odoo.db.list() )
|
||||||
# for x in items:
|
#jlog( odoo.db.list() )
|
||||||
# if isinstance(x, Iterable) and not isinstance(x, (str, bytes)):
|
|
||||||
# for sub_x in flatten(x):
|
|
||||||
# yield sub_x
|
|
||||||
# else:
|
|
||||||
# yield x
|
|
||||||
|
|
||||||
|
|
||||||
def jlog( obj ):
|
|
||||||
print( json.dumps(obj, indent=4) ) #"\t") )
|
|
||||||
|
|
||||||
def ensure_dir(d):
|
|
||||||
if not os.path.exists(d):
|
|
||||||
os.makedirs(d)
|
|
||||||
|
|
||||||
def args2domains( list ):
|
|
||||||
domains = []
|
|
||||||
while len(list) > 0:
|
|
||||||
str = list[0]
|
|
||||||
if str == '&' or str == '|' or str == '!':
|
|
||||||
domains.append( str )
|
|
||||||
list = list[1:]
|
|
||||||
else:
|
|
||||||
domains.append( (list[0], list[1], list[2]) )
|
|
||||||
list = list[3:]
|
|
||||||
return domains
|
|
||||||
|
|
||||||
# eprint( args2domains(sys.argv[3:]) )
|
|
||||||
#quit()
|
|
||||||
|
|
||||||
odoo = None
|
odoo = None
|
||||||
|
|
||||||
|
@ -111,16 +62,6 @@ def autolog():
|
||||||
return odoo
|
return odoo
|
||||||
|
|
||||||
|
|
||||||
# Prepare the connection to the server
|
|
||||||
# odoo = odoorpc.ODOO('localhost', port=8069)
|
|
||||||
|
|
||||||
# Check available databases
|
|
||||||
# eprint( 'Databases: ', odoo.db.list() )
|
|
||||||
#jlog( odoo.db.list() )
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Simple 'raw' query
|
# Simple 'raw' query
|
||||||
#user_data = odoo.execute('res.users', 'read', [user.id])
|
#user_data = odoo.execute('res.users', 'read', [user.id])
|
||||||
|
@ -138,15 +79,6 @@ def autolog():
|
||||||
# Update data through a record
|
# Update data through a record
|
||||||
#user.name = "Brian Jones"
|
#user.name = "Brian Jones"
|
||||||
|
|
||||||
def file_path( muid, format ):
|
|
||||||
return "%s/%s.%s" % ( FOLDER, muid, format )
|
|
||||||
|
|
||||||
def json_path( model, id ):
|
|
||||||
return "%s/%s.json" % ( FOLDER, Muid(model, id) )
|
|
||||||
|
|
||||||
def Muid( model, id ):
|
|
||||||
return "%s/%s" % ( model, id )
|
|
||||||
|
|
||||||
def get_schema( name ):
|
def get_schema( name ):
|
||||||
eprint( 'get_schema' )
|
eprint( 'get_schema' )
|
||||||
Model = odoo.env['ir.model']
|
Model = odoo.env['ir.model']
|
||||||
|
@ -468,18 +400,6 @@ def export_json( model, domains ):
|
||||||
else:
|
else:
|
||||||
print('Already exists %s' % (_filename) )
|
print('Already exists %s' % (_filename) )
|
||||||
|
|
||||||
def uniq( arr ):
|
|
||||||
return list(set(arr))
|
|
||||||
|
|
||||||
def groupby_model( arr ):
|
|
||||||
res = {}
|
|
||||||
for muid in arr:
|
|
||||||
model, id = muid.split('/')
|
|
||||||
if not model in res:
|
|
||||||
res[model] = []
|
|
||||||
res[model].append( int(id) )
|
|
||||||
return res
|
|
||||||
|
|
||||||
def save( model, domains ):
|
def save( model, domains ):
|
||||||
force = OPTS['force'] if 'force' in OPTS else False
|
force = OPTS['force'] if 'force' in OPTS else False
|
||||||
models = flatten_stack( lookup( model, domains ) )
|
models = flatten_stack( lookup( model, domains ) )
|
||||||
|
@ -491,76 +411,104 @@ def save( model, domains ):
|
||||||
|
|
||||||
|
|
||||||
# AUTO EXEC
|
# AUTO EXEC
|
||||||
MODEL = PARAMS[0]
|
|
||||||
if len(PARAMS) > 1:
|
|
||||||
METHOD = PARAMS[1]
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
if PARAMS[0] == 'login':
|
|
||||||
login( *PARAMS[1:] )
|
|
||||||
quit()
|
|
||||||
else:
|
|
||||||
odoo = autolog()
|
|
||||||
|
|
||||||
|
|
||||||
if MODEL in odoo.env:
|
|
||||||
Model = odoo.env[MODEL]
|
|
||||||
|
|
||||||
|
|
||||||
if METHOD == 'search':
|
|
||||||
# render_tsv( odoo.env[MODEL].browse( odoo.env[MODEL].search( args2domains(PARAMS[2:]) ) ) )
|
|
||||||
ids = search( MODEL, args2domains(PARAMS[2:]) )
|
|
||||||
render( OPTS, MODEL, Model.browse(ids) )
|
|
||||||
#ids = Model.search( args2domains(PARAMS[2:]) )
|
|
||||||
#print( 'id', 'name', sep='\t' )
|
|
||||||
#for inst in Model.browse( ids ):
|
|
||||||
# render_tsv( MODEL, inst )
|
|
||||||
|
|
||||||
if METHOD == 'browse':
|
|
||||||
ids = PARAMS[2:]
|
|
||||||
ids = [ int(s) for s in ids ]
|
|
||||||
#print( ids )
|
|
||||||
for inst in Model.browse( ids ):
|
|
||||||
jlog( inst.read()[0] )
|
|
||||||
|
|
||||||
if METHOD == 'fields_get':
|
|
||||||
jlog( Model.fields_get() )
|
|
||||||
|
|
||||||
if METHOD == 'fields':
|
|
||||||
res = fields( MODEL, args2domains(PARAMS[2:]) )
|
|
||||||
render( OPTS, 'ir.model.fields', res )
|
|
||||||
# Model = odoo.env['ir.model.fields']
|
|
||||||
# ids = Model.search([( 'model_id.model', '=', MODEL )])
|
|
||||||
# render( OPTS, 'ir.model.fields', Model.browse(ids) )
|
|
||||||
#for inst in Field.browse( ids ):
|
|
||||||
# render_tsv( 'ir.model.fields', inst )
|
|
||||||
|
|
||||||
if METHOD == 'lookup':
|
|
||||||
jlog( lookup( MODEL, args2domains(PARAMS[2:]) ) )
|
|
||||||
|
|
||||||
if METHOD == 'lookup-model':
|
|
||||||
jlog( lookup_model( Muid(MODEL,PARAMS[2]) ) )
|
|
||||||
|
|
||||||
# if METHOD == 'lookup-recs':
|
|
||||||
# jlog( lookup_recs( MODEL, args2domains(PARAMS[2:]) ) )
|
|
||||||
|
|
||||||
if METHOD == 'export-json':
|
|
||||||
export_json( MODEL, args2domains(PARAMS[2:]) )
|
|
||||||
|
|
||||||
if METHOD == 'save':
|
|
||||||
jlog( save( MODEL, args2domains(PARAMS[2:]) ) )
|
|
||||||
|
|
||||||
elif MODEL == 'db':
|
|
||||||
if METHOD == 'list':
|
|
||||||
jlog( odoo.db.list() )
|
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
elif MODEL == 'schema':
|
# PARAMS = sys.argv[1:]
|
||||||
get_schema( METHOD )
|
PARAMS = []
|
||||||
|
OPTS = {}
|
||||||
|
for param in sys.argv[1:]:
|
||||||
|
# if param[0] == '-':
|
||||||
|
# kv = param[1:].split( '=' )
|
||||||
|
# if len(kv) == 1:
|
||||||
|
# OPTS[kv[0]] = False
|
||||||
|
# else:
|
||||||
|
# OPTS[kv[0]] = kv[1]
|
||||||
|
# elif
|
||||||
|
if param[0] == '+':
|
||||||
|
kv = param[1:].split( '=' )
|
||||||
|
if len(kv) == 1:
|
||||||
|
OPTS[kv[0]] = True
|
||||||
|
else:
|
||||||
|
OPTS[kv[0]] = kv[1]
|
||||||
|
else:
|
||||||
|
PARAMS.append( param )
|
||||||
|
|
||||||
|
|
||||||
|
eprint( len(sys.argv), 'argument(s):', PARAMS, OPTS )
|
||||||
|
eprint( MODEL_IGNORE )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# if __name__ == "__main__":
|
MODEL = PARAMS[0]
|
||||||
# import sys
|
if len(PARAMS) > 1:
|
||||||
# fib(int(sys.argv[1]))
|
METHOD = PARAMS[1]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if PARAMS[0] == 'login':
|
||||||
|
login( *PARAMS[1:] )
|
||||||
|
quit()
|
||||||
|
else:
|
||||||
|
odoo = autolog()
|
||||||
|
|
||||||
|
|
||||||
|
if MODEL in odoo.env:
|
||||||
|
Model = odoo.env[MODEL]
|
||||||
|
|
||||||
|
|
||||||
|
if METHOD == 'search':
|
||||||
|
# render_tsv( odoo.env[MODEL].browse( odoo.env[MODEL].search( args2domains(PARAMS[2:]) ) ) )
|
||||||
|
ids = search( MODEL, args2domains(PARAMS[2:]) )
|
||||||
|
render( OPTS, MODEL, Model.browse(ids) )
|
||||||
|
#ids = Model.search( args2domains(PARAMS[2:]) )
|
||||||
|
#print( 'id', 'name', sep='\t' )
|
||||||
|
#for inst in Model.browse( ids ):
|
||||||
|
# render_tsv( MODEL, inst )
|
||||||
|
|
||||||
|
if METHOD == 'browse':
|
||||||
|
ids = PARAMS[2:]
|
||||||
|
ids = [ int(s) for s in ids ]
|
||||||
|
#print( ids )
|
||||||
|
for inst in Model.browse( ids ):
|
||||||
|
jlog( inst.read()[0] )
|
||||||
|
|
||||||
|
if METHOD == 'fields_get':
|
||||||
|
jlog( Model.fields_get() )
|
||||||
|
|
||||||
|
if METHOD == 'fields':
|
||||||
|
res = fields( MODEL, args2domains(PARAMS[2:]) )
|
||||||
|
render( OPTS, 'ir.model.fields', res )
|
||||||
|
# Model = odoo.env['ir.model.fields']
|
||||||
|
# ids = Model.search([( 'model_id.model', '=', MODEL )])
|
||||||
|
# render( OPTS, 'ir.model.fields', Model.browse(ids) )
|
||||||
|
#for inst in Field.browse( ids ):
|
||||||
|
# render_tsv( 'ir.model.fields', inst )
|
||||||
|
|
||||||
|
if METHOD == 'lookup':
|
||||||
|
jlog( lookup( MODEL, args2domains(PARAMS[2:]) ) )
|
||||||
|
|
||||||
|
if METHOD == 'lookup-model':
|
||||||
|
jlog( lookup_model( Muid(MODEL,PARAMS[2]) ) )
|
||||||
|
|
||||||
|
# if METHOD == 'lookup-recs':
|
||||||
|
# jlog( lookup_recs( MODEL, args2domains(PARAMS[2:]) ) )
|
||||||
|
|
||||||
|
if METHOD == 'export-json':
|
||||||
|
export_json( MODEL, args2domains(PARAMS[2:]) )
|
||||||
|
|
||||||
|
if METHOD == 'save':
|
||||||
|
jlog( save( MODEL, args2domains(PARAMS[2:]) ) )
|
||||||
|
|
||||||
|
elif MODEL == 'db':
|
||||||
|
if METHOD == 'list':
|
||||||
|
jlog( odoo.db.list() )
|
||||||
|
|
||||||
|
|
||||||
|
elif MODEL == 'schema':
|
||||||
|
get_schema( METHOD )
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
from __future__ import print_function
|
||||||
|
import os
|
||||||
|
# import sys
|
||||||
|
import json
|
||||||
|
# import odoorpc # pip install odoorpc
|
||||||
|
# #from typing import Iterable # > py38
|
||||||
|
# from collections import Iterable # < py38
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def eprint(*args, **kwargs):
|
||||||
|
print(*args, file=sys.stderr, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
# def flatten(items):
|
||||||
|
# """Yield items from any nested iterable; see Reference."""
|
||||||
|
# for x in items:
|
||||||
|
# if isinstance(x, Iterable) and not isinstance(x, (str, bytes)):
|
||||||
|
# for sub_x in flatten(x):
|
||||||
|
# yield sub_x
|
||||||
|
# else:
|
||||||
|
# yield x
|
||||||
|
|
||||||
|
|
||||||
|
def jlog( obj ):
|
||||||
|
print( json.dumps(obj, indent=4) ) #"\t") )
|
||||||
|
|
||||||
|
def ensure_dir(d):
|
||||||
|
if not os.path.exists(d):
|
||||||
|
os.makedirs(d)
|
||||||
|
|
||||||
|
def args2domains( list ):
|
||||||
|
domains = []
|
||||||
|
while len(list) > 0:
|
||||||
|
str = list[0]
|
||||||
|
if str == '&' or str == '|' or str == '!':
|
||||||
|
domains.append( str )
|
||||||
|
list = list[1:]
|
||||||
|
else:
|
||||||
|
domains.append( (list[0], list[1], list[2]) )
|
||||||
|
list = list[3:]
|
||||||
|
return domains
|
||||||
|
|
||||||
|
# eprint( args2domains(sys.argv[3:]) )
|
||||||
|
|
||||||
|
|
||||||
|
def file_path( muid, format ):
|
||||||
|
return "%s/%s.%s" % ( FOLDER, muid, format )
|
||||||
|
|
||||||
|
def json_path( model, id ):
|
||||||
|
return "%s/%s.json" % ( FOLDER, Muid(model, id) )
|
||||||
|
|
||||||
|
def Muid( model, id ):
|
||||||
|
return "%s/%s" % ( model, id )
|
||||||
|
|
||||||
|
def uniq( arr ):
|
||||||
|
return list(set(arr))
|
||||||
|
|
||||||
|
def groupby_model( arr ):
|
||||||
|
res = {}
|
||||||
|
for muid in arr:
|
||||||
|
model, id = muid.split('/')
|
||||||
|
if not model in res:
|
||||||
|
res[model] = []
|
||||||
|
res[model].append( int(id) )
|
||||||
|
return res
|
Loading…
Reference in New Issue