diff --git a/horizon/tables/actions.py b/horizon/tables/actions.py
index b3c27338e3..65a765ac0c 100644
--- a/horizon/tables/actions.py
+++ b/horizon/tables/actions.py
@@ -812,7 +812,7 @@ class BatchAction(Action):
datum_display = table.get_object_display(datum) or datum_id
if not table._filter_action(self, request, datum):
action_not_allowed.append(datum_display)
- LOG.warning('Permission denied to %s: "%s"' %
+ LOG.warning(u'Permission denied to %s: "%s"' %
(self._get_action_name(past=True).lower(),
datum_display))
continue
@@ -822,7 +822,7 @@ class BatchAction(Action):
self.update(request, datum)
action_success.append(datum_display)
self.success_ids.append(datum_id)
- LOG.info('%s: "%s"' %
+ LOG.info(u'%s: "%s"' %
(self._get_action_name(past=True), datum_display))
except Exception as ex:
# Handle the exception but silence it since we'll display
diff --git a/horizon/test/tests/tables.py b/horizon/test/tests/tables.py
index 0953f568ff..9dd6783f1f 100644
--- a/horizon/test/tests/tables.py
+++ b/horizon/test/tests/tables.py
@@ -1,3 +1,5 @@
+# encoding=utf-8
+#
# Copyright 2012 Nebula, Inc.
# Copyright 2014 IBM Corp.
#
@@ -38,14 +40,16 @@ class FakeObject(object):
self.excluded = excluded
self.extra = "extra"
- def __repr__(self):
- return "<%s: %s>" % (self.__class__.__name__, self.name)
+ def __str__(self):
+ return u"%s: %s" % (self.__class__.__name__, self.name)
TEST_DATA = (
FakeObject('1', 'object_1', 'value_1', 'up', 'optional_1', 'excluded_1'),
FakeObject('2', 'object_2', 'evil', 'down', 'optional_2'),
FakeObject('3', 'object_3', 'value_3', 'up'),
+ FakeObject('4', u'öbject_4', u'välue_1', u'üp', u'öptional_1',
+ u'exclüded_1'),
)
TEST_DATA_2 = (
@@ -476,7 +480,8 @@ class DataTableTests(test.TestCase):
rows = self.table.get_rows()
self.assertQuerysetEqual(rows, ['',
'',
- ''])
+ '',
+ ''])
# Verify each row contains the right cells
self.assertQuerysetEqual(rows[0].get_cells(),
['',
@@ -607,8 +612,8 @@ class DataTableTests(test.TestCase):
self.assertContains(resp, 'id="my_table__row__2"', 1)
self.assertContains(resp, 'id="my_table__row__3"', 1)
update_string = "action=row_update&table=my_table&obj_id="
- self.assertContains(resp, update_string, 3)
- self.assertContains(resp, "data-update-interval", 3)
+ self.assertContains(resp, update_string, 4)
+ self.assertContains(resp, "data-update-interval", 4)
# Verify no table heading
self.assertNotContains(resp, "'])
+ ['FakeObject: object_2'],
+ transform=six.text_type)
# with empty filter string, it should return all data
req = self.factory.post('/my_url/', {action_string: ''})
@@ -804,9 +810,11 @@ class DataTableTests(test.TestCase):
handled = self.table.maybe_handle()
self.assertIsNone(handled)
self.assertQuerysetEqual(self.table.filtered_data,
- ['',
- '',
- ''])
+ ['FakeObject: object_1',
+ 'FakeObject: object_2',
+ 'FakeObject: object_3',
+ u'FakeObject: öbject_4'],
+ transform=six.text_type)
# with unknown value it should return empty list
req = self.factory.post('/my_url/', {action_string: 'horizon'})
@@ -981,7 +989,8 @@ class DataTableTests(test.TestCase):
handled = self.table.maybe_handle()
self.assertIsNone(handled)
self.assertQuerysetEqual(self.table.filtered_data,
- [''])
+ ['FakeObject: object_2'],
+ transform=six.text_type)
# Ensure fitering respects the request method, e.g. no filter here
req = self.factory.get('/my_url/', {action_string: '2'})
@@ -989,9 +998,11 @@ class DataTableTests(test.TestCase):
handled = self.table.maybe_handle()
self.assertIsNone(handled)
self.assertQuerysetEqual(self.table.filtered_data,
- ['',
- '',
- ''])
+ ['FakeObject: object_1',
+ 'FakeObject: object_2',
+ 'FakeObject: object_3',
+ u'FakeObject: öbject_4'],
+ transform=six.text_type)
# Updating and preemptive actions
params = {"table": "my_table", "action": "row_update", "obj_id": "1"}
@@ -1040,7 +1051,8 @@ class DataTableTests(test.TestCase):
handled = self.table.maybe_handle()
self.assertIsNone(handled)
self.assertQuerysetEqual(self.table.filtered_data,
- [''])
+ ['FakeObject: object_2'],
+ transform=six.text_type)
# Ensure API filtering does not filter on server, e.g. no filter here
req = self.factory.post('/my_url/')
@@ -1050,9 +1062,11 @@ class DataTableTests(test.TestCase):
handled = self.table.maybe_handle()
self.assertIsNone(handled)
self.assertQuerysetEqual(self.table.filtered_data,
- ['',
- '',
- ''])
+ ['FakeObject: object_1',
+ 'FakeObject: object_2',
+ 'FakeObject: object_3',
+ u'FakeObject: öbject_4'],
+ transform=six.text_type)
def test_inline_edit_update_action_get_non_ajax(self):
# Non ajax inline edit request should return None.
@@ -1453,9 +1467,11 @@ class DataTableViewTests(test.TestCase):
context = view.get_context_data()
self.assertEqual(context['table'].__class__, MyServerFilterTable)
self.assertQuerysetEqual(data,
- ['',
- '',
- ''])
+ ['FakeObject: object_1',
+ 'FakeObject: object_2',
+ 'FakeObject: object_3',
+ u'FakeObject: öbject_4'],
+ transform=six.text_type)
self.assertEqual(req.session.get(self.fil_value_param), 'up')
self.assertEqual(req.session.get(self.fil_field_param), 'status')
diff --git a/horizon/test/tests/tabs.py b/horizon/test/tests/tabs.py
index 37c913f5dd..2a3162015e 100644
--- a/horizon/test/tests/tabs.py
+++ b/horizon/test/tests/tabs.py
@@ -1,3 +1,5 @@
+# encoding=utf-8
+#
# Copyright 2012 Nebula, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
@@ -16,6 +18,8 @@ import copy
from django import http
+import six
+
from horizon import exceptions
from horizon import tabs as horizon_tabs
from horizon.test import helpers as test
@@ -250,9 +254,12 @@ class TabTests(test.TestCase):
# Okay, load the data.
tab.load_table_data()
self.assertTrue(tab._table_data_loaded)
- self.assertQuerysetEqual(table.data, ['',
- '',
- ''])
+ self.assertQuerysetEqual(table.data,
+ ['FakeObject: object_1',
+ 'FakeObject: object_2',
+ 'FakeObject: object_3',
+ u'FakeObject: öbject_4'],
+ transform=six.text_type)
context = tab.get_context_data(self.request)
# Make sure our table is loaded into the context correctly
self.assertEqual(table, context['my_table_table'])
@@ -266,7 +273,7 @@ class TabTests(test.TestCase):
req = self.factory.get("/")
res = view(req)
self.assertContains(res, "