Commit 10ad0fce authored by Arnaud Fontaine's avatar Arnaud Fontaine

py3: ListBox.

parent f5842fd1
......@@ -55,6 +55,7 @@ from Products.PythonScripts.Utility import allow_class
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
from warnings import warn
import cgi
import six
DEFAULT_LISTBOX_DISPLAY_STYLE = 'table'
DEFAULT_LISTBOX_PAGE_NAVIGATION_TEMPLATE = 'ListBox_viewSliderPageNavigationRenderer'
......@@ -669,7 +670,10 @@ class ListBoxRenderer:
def getTitle(self):
"""Return the title. Make sure that it is in unicode.
"""
return unicode(self.field.get_value('title'), self.getEncoding())
if six.PY2:
return unicode(self.field.get_value('title'), self.getEncoding())
else:
return self.field.get_value('title')
def getMaxLineNumber(self):
"""Return the maximum number of lines shown in a page.
......@@ -858,7 +862,10 @@ class ListBoxRenderer:
"""Return the columns. Make sure that the titles are in unicode.
"""
columns = self.field.get_value('columns')
return [(str(c[0]), unicode(c[1], self.getEncoding())) for c in columns]
if six.PY3:
return columns
else:
return [(str(c[0]), str(c[1], self.getEncoding())) for c in columns]
@lazyMethod
def getAllColumnList(self):
......@@ -867,9 +874,14 @@ class ListBoxRenderer:
"""
all_column_list = list(self.getColumnList())
all_column_id_set = {c[0] for c in all_column_list}
all_column_list.extend((str(c[0]), unicode(c[1], self.getEncoding()))
for c in self.field.get_value('all_columns')
if c[0] not in all_column_id_set)
if six.PY3:
all_column_list.extend(c
for c in self.field.get_value('all_columns')
if c[0] not in all_column_id_set)
else:
all_column_list.extend((str(c[0]), str(c[1], self.getEncoding()))
for c in self.field.get_value('all_columns')
if c[0] not in all_column_id_set)
return all_column_list
@lazyMethod
......@@ -884,7 +896,10 @@ class ListBoxRenderer:
"""
stat_columns = self.field.get_value('stat_columns')
if stat_columns:
stat_column_list = [(str(c[0]), unicode(c[1], self.getEncoding())) for c in stat_columns]
if six.PY3:
stat_column_list = stat_columns
else:
stat_column_list = [(str(c[0]), str(c[1], self.getEncoding())) for c in stat_columns]
else:
stat_column_list = [(c[0], c[0]) for c in self.getAllColumnList()]
return stat_column_list
......@@ -914,21 +929,30 @@ class ListBoxRenderer:
"""Return the domain root list. Make sure that the titles are in unicode.
"""
domain_root_list = self.field.get_value('domain_root_list')
return [(str(c[0]), unicode(c[1], self.getEncoding())) for c in domain_root_list]
if six.PY3:
return domain_root_list
else:
return [(str(c[0]), str(c[1], self.getEncoding())) for c in domain_root_list]
@lazyMethod
def getReportRootList(self):
"""Return the report root list. Make sure that the titles are in unicode.
"""
report_root_list = self.field.get_value('report_root_list')
return [(str(c[0]), unicode(c[1], self.getEncoding())) for c in report_root_list]
if six.PY3:
return report_root_list
else:
return [(str(c[0]), str(c[1], self.getEncoding())) for c in report_root_list]
@lazyMethod
def getDisplayStyleList(self):
"""Return the list of avaible display style. Make sure that the
titles are in unicode"""
display_style_list = self.field.get_value('display_style_list')
return [(str(c[0]), unicode(c[1], self.getEncoding())) for c in \
if six.PY3:
return display_style_list
else:
return [(str(c[0]), str(c[1], self.getEncoding())) for c in \
display_style_list]
@lazyMethod
......@@ -1603,8 +1627,8 @@ class ListBoxRenderer:
param = param_dict.get(alias, param_dict.get(sql, u''))
if isinstance(param, dict):
param = param.get('query', u'')
if isinstance(param, str):
param = unicode(param, self.getEncoding())
if isinstance(param, six.binary_type):
param = param.decode(self.getEncoding())
# Obtain a search field, if any.
form = self.getForm()
......@@ -1686,8 +1710,12 @@ class ListBoxRenderer:
if editable_field is not None:
processed_value = editable_field.render_view(value=original_value)
if not isinstance(processed_value, unicode):
processed_value = unicode(str(processed_value), self.getEncoding(), 'replace')
if not isinstance(processed_value, six.text_type):
if six.PY3:
processed_value = str(processed_value).encode(
self.getEncoding(), 'replace').decode()
else:
processed_value = unicode(str(processed_value), self.getEncoding(), 'replace')
value_list.append((original_value, processed_value))
......@@ -2280,8 +2308,12 @@ class ListBoxRendererLine:
# Process the value.
if processed_value is None:
processed_value = u''
elif not isinstance(processed_value, unicode):
processed_value = unicode(str(processed_value), renderer.getEncoding(), 'replace')
elif not isinstance(processed_value, six.text_type):
if six.PY3:
processed_value = str(processed_value).encode(
renderer.getEncoding(), 'replace').decode()
else:
processed_value = unicode(str(processed_value), renderer.getEncoding(), 'replace')
value_list.append((original_value, processed_value))
......@@ -2395,8 +2427,8 @@ class ListBoxHTMLRendererLine(ListBoxRendererLine):
except AttributeError:
pass
if isinstance(url, str):
url = unicode(url, encoding)
if isinstance(url, six.binary_type):
url = str(url, encoding)
if editable_field is not None:
uid = self.getUid()
......@@ -2459,8 +2491,8 @@ class ListBoxHTMLRendererLine(ListBoxRendererLine):
editable=(not self.isSummary()) \
and listbox_defines_column_as_editable and editable,
)
if isinstance(cell_html, str):
cell_html = unicode(cell_html, encoding)
if isinstance(cell_html, six.binary_type):
cell_html = str(cell_html, encoding)
else:
cell_html = u''
......@@ -2661,7 +2693,7 @@ class ListBoxListRenderer(ListBoxRenderer):
listboxline.checkLine(uid in checked_uid_set)
for (original_value, processed_value), (sql, title) in zip(line.getValueList(), self.getSelectedColumnList()):
if isinstance(original_value, unicode):
if isinstance(original_value, six.text_type):
value = original_value.encode(self.getEncoding())
else:
value = original_value
......@@ -2679,7 +2711,7 @@ class ListBoxListRenderer(ListBoxRenderer):
stat_listboxline.markStatLine()
for (original_value, processed_value), (sql, title) in zip(self.getStatValueList(), self.getSelectedColumnList()):
if isinstance(original_value, unicode):
if isinstance(original_value, six.text_type):
value = original_value.encode(self.getEncoding())
else:
value = original_value
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment