from __future__ import print_function import json as JSON from config import * # TABLE VIEW COLUMNS # cols = { # '': [ 'id', 'name', 'create_uid' ], # default # 'ir.model': [ 'id', 'model' ], # 'ir.model.fields': [ 'id', 'name', 'ttype', 'create_uid', 'relation', 'display_name', 'complete_name' ], # 'ir.module.module': [ 'id', 'name', 'display_name', 'application', 'write_uid', 'write_date', 'dependencies_id' ], # } import os # import locale os.environ["PYTHONIOENCODING"] = "utf-8" def tsv( *fields ): fields = [ f.encode('utf-8') if type(f) == unicode else f for f in fields ] # fields = [ str(f) if type(f) != str else f for f in fields ] # fields = [ '"' + s.replace('"','\\"').replace(',','\\,') + '"' for s in fields ] print( *fields, sep='\t' ) def csv( *fields ): # print( [ type(s) for s in fields ] ) # print( fields ) fields = [ f.encode('utf-8') if type(f) == unicode else f for f in fields ] # print( [ type(s) for s in fields ] ) # print( fields ) fields = [ str(f) if type(f) != str else f for f in fields ] # print( [ type(s) for s in fields ] ) # fields = [ str(s) if type(s) != 'str' else s.encode('utf-8') for s in fields ] # print( fields ) # fields = [ str(s).encode('utf-8') for s in fields ] fields = [ '"' + s.replace('"','\\"').replace(',','\\,') + '"' for s in fields ] print( *fields, sep=',' ) def json( obj ): print( JSON.dumps(obj, indent=4) ) #"\t") ) def get_at_path( obj, prop ): path = prop.split('.') cur = obj for key in path: cur = cur[key] return cur def render_tsv( model, list ): if model in COLS: _cols = COLS[model] else: _cols = COLS[''] tsv( *_cols ) for obj in list: tsv( *[ get_at_path(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 ): json( list.read() ) #def render_json( model, obj ): def render( opts, model, list ): # +format=json,xml,csv +json +tsv if ( 'json' in opts and opts['json'] ) or ( 'format' in opts and 'json' in opts['format'] ): render_json( model, list ) elif ( 'tsv' in opts and opts['tsv'] ) or ( 'format' in opts and 'tsv' in opts['format'] ): render_tsv( model, list ) elif ( 'csv' in opts and opts['csv'] ) or ( 'format' in opts and 'csv' in opts['format'] ): render_csv( model, list ) # elif ( 'xml' in opts and opts['xml'] ) or ( 'format' in opts and 'xml' in opts['format'] ): # render_xml( model, list ) else: render_tsv( model, list )