#!/usr/bin/env python

import cPickle, re
from pipeR import *
#from toolfunc import * # GetStr
from py2R import getStr
from finishJob import convertImg, outputZip
from db_vars import STATE_SOLVED
from tools import savePid

def runR_pipe(RCMD = 'R', R_code_dir = os.path.join(os.path.split(os.path.realpath(__file__))[0], 'R_code'), DEBUG=False):
	#req_type, req_id, user_params, R_code_dir = cPickle.loads( sys.stdin.read() )
	if DEBUG:
		from tools import inquireDB
		req_id = inquireDB('SELECT MAX(req_id) FROM requests', fetch=True)[0][0]
		req_type, user_params = inquireDB('SELECT category, req_info FROM requests WHERE req_id=%d' % req_id, fetch=True)[0]
		user_params = cPickle.loads(user_params)
	else: req_type, req_id, user_params = cPickle.loads( sys.stdin.read() )

	savePid(req_id, append=False)

	CMDS = ["user.params <- " + getStr(user_params)]
	
	if req_type in (TYPE_NORM_ANALYSIS, TYPE_LINEAR_DUAL):
		CMDS.append("source('LinearDual.R')")
	elif req_type == TYPE_LINEAR_AFFY:
		CMDS.append("source('LinearAffy.R')")
	elif req_type == TYPE_NORMPCA:
		CMDS.append("source('InitParams.R')")
		CMDS.append("source('normPCA.R')")
		CMDS.append("fullNormalize(intensity_file, output_dir, chart_dir, plotPCA=plotPCA, plotAF=plotAF, plotAFD=plotAFD, plotHK=plotHK, sig_level=sig_level, ave_num=ave_num)") 

	#rlt, sql_update = runR_in_Pipe(CMDS=CMDS, req_id=req_id, RCMD=RCMD, R_code_dir=R_code_dir, line_tail=';\n')
	rlt, sql_update = pipeR(CMDS=CMDS, req_id=req_id, RCMD=RCMD, R_code_dir=R_code_dir, line_tail=';\n', init_lam=False)

	if True or 'SET req_state=%d' % STATE_SOLVED in sql_update:
		# convert images
		result_dir = user_params.get('result.data.dir', None) or user_params.get('output_dir', None)
		if result_dir is not None:
			graph_dir = user_params.get('chart.dir', None) or user_params.get('chart_dir', None)
			if graph_dir is None or not os.path.exists(graph_dir): graph_dir = os.path.join(result_dir, relative_chart_dir) # for old requests
			if user_params.get('plot.pdf', False) or user_params.get('plot_pdf', False): obj = ['.png', '.eps']
			else: obj = '.png'
			convertImg(graph_dir, src='.pdf', obj=obj)
			# output zip
			req_name = user_params.get('req_name', None)
			outputZip(result_dir, req_id=req_name, req_type=req_type)

	# update solve_time in analyze_dmp
	#sql_update = re.sub(r', solve_time=".+?"', ', solve_time="%s"' % time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime()), sql_update, 1 )
			
	sys.stdout.write( cPickle.dumps( (rlt, sql_update) ) )
	sys.stdout.close()


if __name__ == '__main__': runR_pipe()

