diff --git a/odoo-rpc.py b/odoo-rpc.py index 1dc7bf5..a4d9cfa 100755 --- a/odoo-rpc.py +++ b/odoo-rpc.py @@ -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 ) diff --git a/renderers.py b/renderers.py new file mode 100644 index 0000000..ca290a2 --- /dev/null +++ b/renderers.py @@ -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 )