Added module renderers json tsv csv xml

This commit is contained in:
DiG 2022-01-16 17:31:20 +01:00
parent 1b4395c3d6
commit 519b453aee
2 changed files with 68 additions and 16 deletions

View File

@ -10,6 +10,7 @@ import sys
import json
import odoorpc # pip install odoorpc
from renderers import render, tsv
def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
@ -19,7 +20,7 @@ def eprint(*args, **kwargs):
FOLDER = '/home/dig/odoo-export/datas'
# PARAMS = sys.argv[1:]
PARAMS = []
OPTS = {}
OPTS = { 'format': 'tsv' }
for param in sys.argv[1:]:
if param[0] == '-':
kv = param[1:].split( '=' )
@ -156,23 +157,29 @@ def rel_fields( model ):
return Model.browse( ids )
def tsv( *fields ):
print( *fields, sep='\t' )
# def tsv( *fields ):
# print( *fields, sep='\t' )
def render_tsv( model, list ):
# def render_tsv( model, list ):
if model in cols:
_cols = cols[model]
else:
_cols = cols['']
# if model in cols:
# _cols = cols[model]
# else:
# _cols = cols['']
tsv( *_cols )
# tsv( *_cols )
for obj in list:
tsv( *[ obj[col] for col in _cols] )
#def render_json( model, obj ):
# for obj in list:
# tsv( *[ obj[col] for col in _cols] )
# #def render_json( model, obj ):
# def render( opts ): # +format=json,xml,csv +json +tsv
# if opts.json or ( opts.format and 'json' in opts.format ):
# render_json( list )
# if opts.tsv or ( opts.format and 'tsv' in opts.format ):
# render_tsv( model, list )
# # if opts.csv or ( opts.format and 'csv' in opts.format ):
# # if opts.xml or ( opts.format and 'xml' in opts.format ):
# COMMANDS
@ -231,7 +238,7 @@ def search( model, domains ):
def fields( model, domains ):
Model = odoo.env['ir.model.fields']
ids = Model.search([( 'model_id.model', '=', model )])
render_tsv( model, Model.browse(ids) )
render( model, Model.browse(ids) )
stack = []
current_exports = []
@ -436,7 +443,7 @@ if MODEL in odoo.env:
if METHOD == 'search':
# render_tsv( odoo.env[MODEL].browse( odoo.env[MODEL].search( args2domains(PARAMS[2:]) ) ) )
ids = search( MODEL, args2domains(PARAMS[2:]) )
render_tsv( MODEL, Model.browse(ids) )
render( MODEL, Model.browse(ids) )
#ids = Model.search( args2domains(PARAMS[2:]) )
#print( 'id', 'name', sep='\t' )
#for inst in Model.browse( ids ):
@ -467,7 +474,7 @@ if MODEL in odoo.env:
if METHOD == 'fields':
Model = odoo.env['ir.model.fields']
ids = Model.search([( 'model_id.model', '=', MODEL )])
render_tsv( MODEL, Model.browse(ids) )
render( MODEL, Model.browse(ids) )
#for inst in Field.browse( ids ):
# render_tsv( 'ir.model.fields', inst )

45
renderers.py Normal file
View File

@ -0,0 +1,45 @@
def tsv( *fields ):
print( *fields, sep='\t' )
def csv( *fields ):
print( *[ '"' + f.replace('"','\\"') + '"' for f in fields ], sep=',' )
def render_tsv( model, list ):
if model in cols:
_cols = cols[model]
else:
_cols = cols['']
tsv( *_cols )
for obj in list:
tsv( *[ obj[col] for col in _cols] )
def render_csv( model, list ):
if model in cols:
_cols = cols[model]
else:
_cols = cols['']
csv( *_cols )
for obj in list:
csv( *[ obj[col] for col in _cols] )
def render_json( model, list ):
jlog( list )
#def render_json( model, obj ):
def render( model, list ): # +format=json,xml,csv +json +tsv
print( 'OPTS dans module : ', OPTS )
if opts.json or ( opts.format and 'json' in opts.format ):
render_json( model, list )
if opts.tsv or ( opts.format and 'tsv' in opts.format ):
render_tsv( model, list )
if opts.csv or ( opts.format and 'csv' in opts.format ):
render_csv( model, list )
# if opts.xml or ( opts.format and 'xml' in opts.format ):
# render_xml( model, list )