consequently use reporting view base class instead of specialized class; + other improvements

This commit is contained in:
Helmut Merz 2015-03-20 11:38:47 +01:00
parent 74eb054bc9
commit 82645fb574
5 changed files with 29 additions and 12 deletions

View file

@ -99,4 +99,10 @@
factory="loops.expert.browser.report.EmbeddedResultsConceptView"
permission="zope.View" />
<browser:page
name="concept_results.csv"
for="loops.organize.interfaces.IConceptSchema"
class="loops.expert.browser.export.ResultsConceptCSVExport"
permission="zope.View" />
</configure>

View file

@ -69,8 +69,7 @@ class ResultsConceptCSVExport(ResultsConceptView):
value = f.getValue(row)
if ILoopsObject.providedBy(value):
value = value.title
if isinstance(value, unicode):
value = value.encode(self.encoding)
value = encode(value, self.encoding)
data[f.name] = value
writer.writerow(data)
text = output.getvalue()
@ -86,3 +85,20 @@ class ResultsConceptCSVExport(ResultsConceptView):
response.setHeader('Pragma', '')
response.setHeader('Content-Type', 'text/csv')
response.setHeader('Content-Length', len(text))
def encode(text, encoding):
if not isinstance(text, unicode):
return text
try:
return text.encode(encoding)
except UnicodeEncodeError:
result = []
for c in text:
try:
result.append(c.encode(encoding))
except UnicodeEncodeError:
result.append('?')
return ''.join(result)
return '???'

View file

@ -193,6 +193,8 @@ class ResultsConceptView(ConceptView):
@Lazy
def downloadLink(self, format='csv'):
opt = self.options('download_' + format)
if not opt:
opt = self.typeOptions('download_' + format)
if opt:
return opt[0]

View file

@ -34,10 +34,9 @@ from loops.util import _
class Qualifications(ResultsConceptView):
reportName = 'qualification_overview'
# obsolete because we can directly use ResultsConceptView
#reportName = 'qualification_overview'
class QualificationsCSVExport(ResultsConceptCSVExport):
reportName = 'qualification_overview'
pass # report assigned to query via hasReport relation

View file

@ -23,12 +23,6 @@
factory="loops.knowledge.qualification.browser.Qualifications"
permission="zope.View" />
<browser:page
name="qualifications.csv"
for="loops.organize.interfaces.IConceptSchema"
class="loops.knowledge.qualification.browser.QualificationsCSVExport"
permission="zope.View" />
<!-- reports -->
<zope:adapter