diff options
Diffstat (limited to 'web/webqtl/showTrait/exportPage.py')
-rwxr-xr-x | web/webqtl/showTrait/exportPage.py | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/web/webqtl/showTrait/exportPage.py b/web/webqtl/showTrait/exportPage.py new file mode 100755 index 00000000..ff3f12a1 --- /dev/null +++ b/web/webqtl/showTrait/exportPage.py @@ -0,0 +1,141 @@ +import string +import os +import re +import cPickle +import pyXLWriter as xl + +from base import webqtlConfig +from utility import webqtlUtil +from base.templatePage import templatePage + +class ExportPage(templatePage): + + def __init__(self, fd): + + templatePage.__init__(self, fd) + + filename = webqtlUtil.genRandStr("Export_") + workbook = xl.Writer('%s.xls' % (webqtlConfig.TMPDIR+filename)) + style_formats = [] #Array with Excel style formats - Zach 9/2/2011 + heading = workbook.add_format(align = 'center', bold = 1, border = 1, size=13, fg_color = 0x1E, color="white") #Style for the header cells + right = workbook.add_format(align = 'right') #Style to align cell contents to the right + style_formats.append(heading) + style_formats.append(right) + worksheet = workbook.add_worksheet() + + primaryStrainNames = fd.formdata.getvalue('strainNames', '').split(',') + primaryVals = fd.formdata.getvalue('strainVals', '').split(',') + primaryVars = fd.formdata.getvalue('strainVars', '').split(',') + otherStrainNames = fd.formdata.getvalue('otherStrainNames', '').split(',') + otherVals = fd.formdata.getvalue('otherStrainVals', '').split(',') + otherVars = fd.formdata.getvalue('otherStrainVars', '').split(',') + attributeData = fd.formdata.getvalue('extra_attributes', '') + otherAttributeData = fd.formdata.getvalue('other_extra_attributes', '') + + #ZS: This section is to parse the attribute formdata string + attributeTypes = attributeData.split('/') + otherAttributeTypes = otherAttributeData.split('/') + + attributeNames = [] + attributeVals = [] + for i in range(len(attributeTypes)): + if i < len(attributeTypes) - 1: + attributeNames.append(attributeTypes[i].split(':')[0]) + attributeVals.append(attributeTypes[i].split(':')[1].split(',')) + else: + break + + otherAttributeNames = [] + otherAttributeVals = [] + for i in range(len(otherAttributeTypes)): + if i < len(otherAttributeTypes) - 1: + otherAttributeNames.append(otherAttributeTypes[i].split(':')[0]) + otherAttributeVals.append(otherAttributeTypes[i].split(':')[1].split(',')) + else: + break + + varsExist = 0 #ZS: Even if there are no variances "primaryVars" would still be populated with empty values, so we need to check if there really are any + for i in range(len(primaryVars)): + if primaryVars[i] != '': + varsExist = 1 + break + + otherStrainsExist = 0 #ZS: Same as above; checking to see if there's a set of "other" (non-primary) strains + for i in range(len(otherStrainNames)): + if otherStrainNames[i] != '': + otherStrainsExist = 1 + break + + if varsExist == 1: + column_headers = ["Sample", "Value", " SE "] #ZS: Names of the header for each column in the excel worksheet + else: + column_headers = ["Sample", "Value"] + + + for attr_name in attributeNames: + column_headers.append(attr_name) + + start_line = 0 #Gets last line of "primary" strain values to define a start-point for "other" strain values + for ncol, item in enumerate(column_headers): + worksheet.write([start_line, ncol], item, style_formats[0]) + worksheet.set_column([ncol, ncol], 2*len(item)) + + start_line += 1 + last_line = start_line + + for i in range(len(primaryStrainNames)): + ncol = 0 + if varsExist == 1: + for ncol, item in enumerate([primaryStrainNames[i], primaryVals[i], primaryVars[i]]): + worksheet.write([start_line + i, ncol], item, style_formats[1]) + ncol += 1 + else: + for ncol, item in enumerate([primaryStrainNames[i], primaryVals[i]]): + worksheet.write([start_line + i, ncol], item, style_formats[1]) + ncol += 1 + + for attribute_type in attributeVals: + worksheet.write([start_line + i, ncol], attribute_type[i], style_formats[1]) + ncol += 1 + + last_line += 1 + + if otherStrainsExist == 1: + start_line = last_line + 2 + + for ncol, item in enumerate(column_headers): + worksheet.write([start_line, ncol], item, style_formats[0]) + worksheet.set_column([ncol, ncol], 2*len(item)) + start_line += 1 + + for i in range(len(otherStrainNames)): + ncol = 0 + if varsExist == 1: + for ncol, item in enumerate([otherStrainNames[i], otherVals[i], otherVars[i]]): + worksheet.write([start_line + i, ncol], item, style_formats[1]) + ncol += 1 + else: + for ncol, item in enumerate([otherStrainNames[i], otherVals[i]]): + worksheet.write([start_line + i, ncol], item, style_formats[1]) + + for attribute_type in otherAttributeVals: + worksheet.write([start_line + i, ncol], attribute_type[i], style_formats[1]) + ncol += 1 + + workbook.close() + + full_filename = os.path.join(webqtlConfig.TMPDIR, '%s.xls' % filename) + fp = open(full_filename, 'rb') + text = fp.read() + fp.close() + + self.content_type = 'application/xls' + self.content_disposition = 'attachment; filename=%s' % ('%s.xls' % filename) + self.attachment = text + + + + + + + |