exportoo/renderers.py

86 lines
2.5 KiB
Python
Raw Normal View History

2022-01-16 18:41:00 +01:00
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' ],
# }
2022-01-16 19:52:53 +01:00
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 )
2022-01-16 20:22:39 +01:00
fields = [ f.encode('utf-8') if type(f) == unicode else f for f in fields ]
# print( [ type(s) for s in fields ] )
# print( fields )
2022-01-16 20:22:39 +01:00
fields = [ str(f) if type(f) != str else f for f in fields ]
# print( [ type(s) for s in fields ] )
2022-01-16 20:18:53 +01:00
# fields = [ str(s) if type(s) != 'str' else s.encode('utf-8') for s in fields ]
# print( fields )
2022-01-16 20:09:43 +01:00
# 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
2022-01-16 19:09:33 +01:00
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 )