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 collections import Iterable # < py38
|
||||
|
||||
from utils import *
|
||||
from renderers import render, tsv
|
||||
|
||||
|
||||
def eprint(*args, **kwargs):
|
||||
print(*args, file=sys.stderr, **kwargs)
|
||||
|
||||
|
||||
# CONFIG
|
||||
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 = []
|
||||
with open(".modelignore", "r") as file:
|
||||
for line in file:
|
||||
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):
|
||||
# """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:]) )
|
||||
#quit()
|
||||
# Check available databases
|
||||
# eprint( 'Databases: ', odoo.db.list() )
|
||||
#jlog( odoo.db.list() )
|
||||
|
||||
odoo = None
|
||||
|
||||
|
@ -111,16 +62,6 @@ def autolog():
|
|||
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
|
||||
#user_data = odoo.execute('res.users', 'read', [user.id])
|
||||
|
@ -138,15 +79,6 @@ def autolog():
|
|||
# Update data through a record
|
||||
#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 ):
|
||||
eprint( 'get_schema' )
|
||||
Model = odoo.env['ir.model']
|
||||
|
@ -468,18 +400,6 @@ def export_json( model, domains ):
|
|||
else:
|
||||
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 ):
|
||||
force = OPTS['force'] if 'force' in OPTS else False
|
||||
models = flatten_stack( lookup( model, domains ) )
|
||||
|
@ -491,76 +411,104 @@ def save( model, domains ):
|
|||
|
||||
|
||||
# AUTO EXEC
|
||||
MODEL = PARAMS[0]
|
||||
if len(PARAMS) > 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() )
|
||||
if __name__ == "__main__":
|
||||
|
||||
import sys
|
||||
|
||||
elif MODEL == 'schema':
|
||||
get_schema( METHOD )
|
||||
# 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 )
|
||||
|
||||
|
||||
eprint( len(sys.argv), 'argument(s):', PARAMS, OPTS )
|
||||
eprint( MODEL_IGNORE )
|
||||
|
||||
|
||||
|
||||
# if __name__ == "__main__":
|
||||
# import sys
|
||||
# fib(int(sys.argv[1]))
|
||||
MODEL = PARAMS[0]
|
||||
if len(PARAMS) > 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