IRODS: Advanced Configurations
Jump to navigation
Jump to search
# core.py
import os
import session_vars
import sys
import io
import json
import csv
from StringIO import StringIO
def convert_CSV_to_JSON(csv_text):
csv_rows = []
reader = csv.DictReader(StringIO(csv_text))
field = reader.fieldnames
for row in reader:
csv_rows.extend([{field[i]:row[field[i]] for i in range(len(field))}])
return json.dumps(csv_rows, sort_keys=False, indent=4, separators=(',', ': '))
def acPostProcForPut(rule_args, callback, rei):
sv = session_vars.get_map(rei)
phypath = sv['data_object']['file_path']
objpath = sv['data_object']['object_path']
if not objpath.endswith('.csv'):
return
callback.writeLine('serverLog', str(sv))
oflags = "objPath={filename}++++rescName=demoResc++++replNum=0++++openFlags=O_RDONLY".format(filename=objpath)
callback.writeLine('serverLog', 'oflags = ' + oflags)
ret_val = callback.msiDataObjOpen(oflags, 0)
file_desc = ret_val['arguments'][1]
ret_val = callback.msiDataObjCreate(objpath.replace(".csv", ".json"), "destRescName=demoResc++++forceFlag=", 0)
file_desc_b = ret_val['arguments'][2]
callback.writeLine('serverLog', "Debug start")
length = "1220939"
ret_val = callback.msiDataObjRead(file_desc, length, irods_types.BytesBuf())
read_buf = ret_val['arguments'][2]
callback.writeLine('serverLog', str(ret_val))
read_data = ''.join(read_buf.buf)
callback.writeLine('serverLog', 'length of input buffer read ' + str(len(read_buf.buf)))
callback.writeLine('serverLog', 'length of actually read string ' + str(len(''.join(read_buf.buf))))
#callback.writeLine('serverLog', str(len(input_str)))
data = convert_CSV_to_JSON(read_data)
ret_val = callback.msiDataObjWrite(file_desc_b, bytes(data), 0)
callback.writeLine('serverLog', str(ret_val))
callback.msiDataObjClose(file_desc, 0)
callback.msiDataObjClose(file_desc_b, 0)