diff options
| author | luke@maurits.id.au <luke@maurits.id.au@0f58610c-415a-11de-9c03-5d6cfad8e937> | 2012-04-30 04:55:10 +0000 |
|---|---|---|
| committer | luke@maurits.id.au <luke@maurits.id.au@0f58610c-415a-11de-9c03-5d6cfad8e937> | 2012-04-30 04:55:10 +0000 |
| commit | 6cc02fcd4ac08b2069f722f96e5d06dd7b15228e (patch) | |
| tree | 3e1f567bd375dc22cfc1b0ad47fbfa8dc755fedd | |
| parent | e1dd0f395230803d363d821b421d9110762ee1e1 (diff) | |
| download | python-prettytable-ptable-6cc02fcd4ac08b2069f722f96e5d06dd7b15228e.tar.gz | |
Several changes in the interests of Python 3 compatibility. I believe that right now, everything works as expected in Python 2.7 *and* Python 3. There are probably much nicer/better/more conventional ways of achieving this dual compatibility, and I will look into those and work on it, but for now at least stuff works.
| -rw-r--r-- | src/prettytable.py | 39 | ||||
| -rw-r--r-- | src/prettytable_test.py | 10 |
2 files changed, 31 insertions, 18 deletions
diff --git a/src/prettytable.py b/src/prettytable.py index b1c3f9c..98d6a71 100644 --- a/src/prettytable.py +++ b/src/prettytable.py @@ -31,10 +31,19 @@ __version__ = "TRUNK" -import cgi +import sys + +py3k = sys.version_info >= (3,0,0) +if py3k: + unicode = str + basestring = str + +if py3k: + from html import escape +else: + from cgi import escape import copy import random -import sys import textwrap # hrule styles @@ -148,7 +157,7 @@ class PrettyTable(object): elif name == "colcount": return len(self._field_names) else: - raise AttributeError, name + raise AttributeError(name) def __getslice__(self, i, j): """Return a new PrettyTable whose data rows are a slice of this one's @@ -163,7 +172,10 @@ class PrettyTable(object): return newtable def __str__(self): - return self.get_string().encode("ascii","replace") + if py3k: + return self.get_string() + else: + return self.get_string().encode("ascii","replace") def __unicode__(self): return self.get_string() @@ -755,7 +767,6 @@ class PrettyTable(object): for row in rows: rowbits.append(self._stringify_row(row, options)) - self._hrule = self._stringify_hrule(options) # Add header or top of border if options["header"]: @@ -770,7 +781,7 @@ class PrettyTable(object): if options["border"] and not options["hrules"]: bits.append(self._hrule) - string = "\n".join(bits) + string = "\n".join(bits) self._nonunicode = string return _unicode(string) @@ -877,6 +888,8 @@ class PrettyTable(object): y += 1 + self._hrule = self._stringify_hrule(options) + if options["border"] and options["hrules"]== ALL: bits[row_height-1].append("\n") bits[row_height-1].append(self._hrule) @@ -941,7 +954,7 @@ class PrettyTable(object): for field in self._field_names: if options["fields"] and field not in options["fields"]: continue - bits.append(" <th>%s</th>" % cgi.escape(_unicode(field)).replace("\n", "<br />")) + bits.append(" <th>%s</th>" % escape(_unicode(field)).replace("\n", "<br />")) bits.append(" </tr>") # Data @@ -951,7 +964,7 @@ class PrettyTable(object): for field, datum in zip(self._field_names, row): if options["fields"] and field not in options["fields"]: continue - bits.append(" <td>%s</td>" % cgi.escape(_unicode(datum)).replace("\n", "<br />")) + bits.append(" <td>%s</td>" % escape(_unicode(datum)).replace("\n", "<br />")) bits.append(" </tr>") bits.append("</table>") @@ -981,7 +994,7 @@ class PrettyTable(object): for field in self._field_names: if options["fields"] and field not in options["fields"]: continue - bits.append(" <th style=\"padding-left: %dem; padding-right: %dem; text-align: center\">%s</th>" % (lpad, rpad, cgi.escape(_unicode(field)).replace("\n", "<br />"))) + bits.append(" <th style=\"padding-left: %dem; padding-right: %dem; text-align: center\">%s</th>" % (lpad, rpad, escape(_unicode(field)).replace("\n", "<br />"))) bits.append(" </tr>") # Data rows = self._get_rows(options) @@ -991,11 +1004,11 @@ class PrettyTable(object): if options["fields"] and field not in options["fields"]: continue if self._align[field] == "l": - bits.append(" <td style=\"padding-left: %dem; padding-right: %dem; text-align: left\">%s</td>" % (lpad, rpad, cgi.escape(_unicode(datum)).replace("\n", "<br />"))) + bits.append(" <td style=\"padding-left: %dem; padding-right: %dem; text-align: left\">%s</td>" % (lpad, rpad, escape(_unicode(datum)).replace("\n", "<br />"))) elif self._align[field] == "r": - bits.append(" <td style=\"padding-left: %dem; padding-right: %dem; text-align: right\">%s</td>" % (lpad, rpad, cgi.escape(_unicode(datum)).replace("\n", "<br />"))) + bits.append(" <td style=\"padding-left: %dem; padding-right: %dem; text-align: right\">%s</td>" % (lpad, rpad, escape(_unicode(datum)).replace("\n", "<br />"))) else: - bits.append(" <td style=\"padding-left: %dem; padding-right: %dem; text-align: center\">%s</td>" % (lpad, rpad, cgi.escape(_unicode(datum)).replace("\n", "<br />"))) + bits.append(" <td style=\"padding-left: %dem; padding-right: %dem; text-align: center\">%s</td>" % (lpad, rpad, escape(_unicode(datum)).replace("\n", "<br />"))) bits.append(" </tr>") bits.append("</table>") string = "\n".join(bits) @@ -1017,7 +1030,7 @@ def main(): x.add_row(["Sydney", 2058, 4336374, 1214.8]) x.add_row(["Melbourne", 1566, 3806092, 646.9]) x.add_row(["Perth", 5386, 1554769, 869.4]) - print x + print(x) if __name__ == "__main__": main() diff --git a/src/prettytable_test.py b/src/prettytable_test.py index a6d8968..d81e113 100644 --- a/src/prettytable_test.py +++ b/src/prettytable_test.py @@ -79,23 +79,23 @@ class OptionOverrideTests(CityDataTest): def testBorder(self): default = self.x.get_string() override = self.x.get_string(border=False) - self.assert_(default != override) + self.assertTrue(default != override) def testHeader(self): default = self.x.get_string() override = self.x.get_string(header=False) - self.assert_(default != override) + self.assertTrue(default != override) def testHrulesAll(self): default = self.x.get_string() override = self.x.get_string(hrules=ALL) - self.assert_(default != override) + self.assertTrue(default != override) def testHrulesNone(self): default = self.x.get_string() override = self.x.get_string(hrules=NONE) - self.assert_(default != override) + self.assertTrue(default != override) class BasicTests(CityDataTest): @@ -107,7 +107,7 @@ class BasicTests(CityDataTest): string = self.x.get_string() lines = string.split("\n") - self.assert_("" not in lines) + self.assertTrue("" not in lines) def testAllLengthsEqual(self): |
