Split utils.py

This commit is contained in:
DiG 2022-01-17 19:04:33 +01:00
parent e7b9ae9ada
commit f25543c391
2 changed files with 167 additions and 153 deletions

View File

@ -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 )

66
utils.py Normal file
View File

@ -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