IRODS: Advanced Configurations

From Define Wiki
Revision as of 07:39, 13 July 2020 by Vipul (talk | contribs) (Created page with " <nowiki> # 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...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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)