take file names/paths from appropriate settings
This commit is contained in:
parent
a13784e93e
commit
de43ab03ca
2 changed files with 35 additions and 20 deletions
|
@ -31,11 +31,16 @@ from zope.traversing.api import getName
|
||||||
|
|
||||||
from cybertools.meta.interfaces import IOptions
|
from cybertools.meta.interfaces import IOptions
|
||||||
from cybertools.util.date import formatTimeStamp
|
from cybertools.util.date import formatTimeStamp
|
||||||
from loops.common import normalizeName
|
from loops.common import adapted, normalizeName
|
||||||
from loops.expert.browser.report import ResultsConceptView
|
from loops.expert.browser.report import ResultsConceptView
|
||||||
from loops.interfaces import ILoopsObject
|
from loops.interfaces import ILoopsObject
|
||||||
from loops.util import _, getVarDirectory
|
from loops.util import _, getVarDirectory
|
||||||
|
|
||||||
|
try:
|
||||||
|
from main.config import office_data
|
||||||
|
except ImportError:
|
||||||
|
office_data = None
|
||||||
|
|
||||||
|
|
||||||
class ResultsConceptCSVExport(ResultsConceptView):
|
class ResultsConceptCSVExport(ResultsConceptView):
|
||||||
|
|
||||||
|
@ -62,36 +67,45 @@ class ResultsConceptCSVExport(ResultsConceptView):
|
||||||
title = field.title
|
title = field.title
|
||||||
if not isinstance(title, Message):
|
if not isinstance(title, Message):
|
||||||
title = _(title)
|
title = _(title)
|
||||||
#return translate(_(field.title), target_language=lang)
|
|
||||||
return encode(translate(title, target_language=lang),
|
return encode(translate(title, target_language=lang),
|
||||||
self.encoding)
|
self.encoding)
|
||||||
|
|
||||||
def getFilepaths(self, name):
|
def getFilenames(self):
|
||||||
|
"""@return (data_fn, result_fn)"""
|
||||||
repName = getName(self.report.context)
|
repName = getName(self.report.context)
|
||||||
ts = formatTimeStamp(None, format='%y%m%d%H%M%S')
|
ts = formatTimeStamp(None, format='%y%m%d%H%M%S')
|
||||||
name = '-'.join((ts, repName))
|
name = '-'.join((ts, repName))
|
||||||
return (name + '.csv',
|
return (name + '.csv',
|
||||||
name + '.xlsx',
|
name + '.xlsx')
|
||||||
repName + '.ods')
|
|
||||||
|
|
||||||
def renderCsv(self, name, src, tgt, tpl):
|
def getOfficeTemplatePath(self):
|
||||||
callable = os.path.join('~', 'bin', name)
|
for res in self.report.context.getResources():
|
||||||
command = ' '.join((callable, src, tgt, tpl))
|
return adapted(res).getDataPath()
|
||||||
#print '***', command
|
|
||||||
os.popen(command).read()
|
def renderCsv(self, scriptfn, datapath, tplpath, respath):
|
||||||
|
callable = os.path.join(office_data['script_path'], scriptfn)
|
||||||
|
command = ' '.join((callable, datapath, tplpath, respath))
|
||||||
|
print '***', command
|
||||||
|
#os.popen(command).read()
|
||||||
|
|
||||||
def __call__(self):
|
def __call__(self):
|
||||||
fields = self.displayedColumns
|
fields = self.displayedColumns
|
||||||
fieldNames = [f.name for f in fields]
|
fieldNames = [f.name for f in fields]
|
||||||
csvRenderer = IOptions(self.report)('csv_renderer')
|
reportOptions = IOptions(self.report)
|
||||||
|
csvRenderer = reportOptions('csv_renderer')
|
||||||
if not csvRenderer:
|
if not csvRenderer:
|
||||||
csvRenderer = self.globalOptions('csv_renderer')
|
csvRenderer = self.globalOptions('csv_renderer')
|
||||||
|
if csvRenderer:
|
||||||
|
tplpath = self.getOfficeTemplatePath()
|
||||||
|
print '***', csvRenderer, office_data, tplpath
|
||||||
|
if None in (tplpath, office_data):
|
||||||
|
csvRenderer = None
|
||||||
if csvRenderer:
|
if csvRenderer:
|
||||||
csvRenderer = csvRenderer[0]
|
csvRenderer = csvRenderer[0]
|
||||||
outfn, inpfn, tplfn = self.getFilepaths(csvRenderer)
|
datafn, resfn = self.getFilenames()
|
||||||
outpath = os.path.join(getVarDirectory(), 'export', 'excel', outfn)
|
datapath = os.path.join(office_data['data_path'], datafn)
|
||||||
inpath = os.path.join(getVarDirectory(), 'export', 'excel', inpfn)
|
respath = os.path.join(office_data['result_path'], resfn)
|
||||||
output = open(outpath, 'w')
|
output = open(datapath, 'w')
|
||||||
else:
|
else:
|
||||||
output = StringIO()
|
output = StringIO()
|
||||||
writer = csv.DictWriter(output, fieldNames, delimiter=self.delimiter)
|
writer = csv.DictWriter(output, fieldNames, delimiter=self.delimiter)
|
||||||
|
@ -110,13 +124,13 @@ class ResultsConceptCSVExport(ResultsConceptView):
|
||||||
writer.writerow(data)
|
writer.writerow(data)
|
||||||
if csvRenderer:
|
if csvRenderer:
|
||||||
output.close()
|
output.close()
|
||||||
self.renderCsv(csvRenderer, outfn, inpfn, tplfn)
|
self.renderCsv(csvRenderer, datapath, tplpath, respath)
|
||||||
input = open(inpath, 'rb')
|
input = open(respath, 'rb')
|
||||||
text = input.read()
|
text = input.read()
|
||||||
input.close()
|
input.close()
|
||||||
self.setDownloadHeader(text)
|
self.setDownloadHeader(text,
|
||||||
#'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||||
#'xlsx')
|
'xlsx')
|
||||||
else:
|
else:
|
||||||
text = output.getvalue()
|
text = output.getvalue()
|
||||||
self.setDownloadHeader(text)
|
self.setDownloadHeader(text)
|
||||||
|
|
|
@ -49,6 +49,7 @@ class ReportView(ConceptView):
|
||||||
|
|
||||||
resultsRenderer = None # to be defined by subclass
|
resultsRenderer = None # to be defined by subclass
|
||||||
reportDownload = None
|
reportDownload = None
|
||||||
|
reportName = None
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def report_macros(self):
|
def report_macros(self):
|
||||||
|
|
Loading…
Add table
Reference in a new issue