take file names/paths from appropriate settings

This commit is contained in:
Helmut Merz 2017-12-31 15:56:05 +01:00
parent a13784e93e
commit de43ab03ca
2 changed files with 35 additions and 20 deletions

View file

@ -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)

View file

@ -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):