From 25576cd076d66dfed4bbd98ce1bbb3bc86a6230e Mon Sep 17 00:00:00 2001 From: Sol Jerome Date: Tue, 26 Apr 2011 12:13:04 -0500 Subject: Reports: Add full PY3K compatibility Note that Django still doesn't yet support version 3 so this won't necessarily work until there is a compatible version of django available for use. Signed-off-by: Sol Jerome --- src/lib/Server/Reports/backends.py | 10 +++++---- src/lib/Server/Reports/importscript.py | 13 ++++++++---- src/lib/Server/Reports/py3kcompat.py | 24 ++++++++++++++++++++++ .../Reports/reports/templatetags/bcfg2_tags.py | 14 +++++++------ .../reports/templatetags/syntax_coloring.py | 13 +++++++++--- src/lib/Server/Reports/reports/views.py | 3 ++- src/lib/Server/Reports/settings.py | 2 +- src/lib/Server/Reports/updatefix.py | 3 ++- 8 files changed, 62 insertions(+), 20 deletions(-) create mode 100644 src/lib/Server/Reports/py3kcompat.py diff --git a/src/lib/Server/Reports/backends.py b/src/lib/Server/Reports/backends.py index 9e37a2e6f..85241932f 100644 --- a/src/lib/Server/Reports/backends.py +++ b/src/lib/Server/Reports/backends.py @@ -20,13 +20,15 @@ class NISBackend(object): return user - except NISAUTHError, e: - print(str(e)) + except NISAUTHError: + e = sys.exc_info()[1] + print(e) return None def get_user(self, user_id): try: return User.objects.get(pk=user_id) - except User.DoesNotExist, e: - print(str(e)) + except User.DoesNotExist: + e = sys.exc_info()[1] + print(e) return None diff --git a/src/lib/Server/Reports/importscript.py b/src/lib/Server/Reports/importscript.py index 86e176394..0766ffa94 100755 --- a/src/lib/Server/Reports/importscript.py +++ b/src/lib/Server/Reports/importscript.py @@ -10,7 +10,8 @@ import os import sys try: import Bcfg2.Server.Reports.settings -except Exception, e: +except Exception: + e = sys.exc_info()[1] sys.stderr.write("Failed to load configuration settings. %s\n" % e) sys.exit(1) @@ -29,11 +30,13 @@ from datetime import datetime from time import strptime from django.db import connection from Bcfg2.Server.Reports.updatefix import update_database -import ConfigParser import logging import Bcfg2.Logger import platform +# Compatibility imports +from py3kcompat import ConfigParser + def build_reason_kwargs(r_ent): binary_file = False @@ -140,7 +143,8 @@ def load_stats(cdata, sdata, vlevel, logger, quick=False, location=''): rr.save() if vlevel > 0: logger.info("Created reason: %s" % rr.id) - except Exception, ex: + except Exception: + ex = sys.exc_info()[1] logger.error("Failed to create reason for %s: %s" % (x.get('name'), ex)) rr = Reason(current_exists=x.get('current_exists', default="True").capitalize() == "True") @@ -213,7 +217,8 @@ if __name__ == '__main__': "stats=", "config=", "syslog"]) - except GetoptError, mesg: + except GetoptError: + mesg = sys.exc_info()[1] # print help information and exit: print("%s\nUsage:\nimportscript.py [-h] [-v] [-u] [-d] [-S] [-C bcfg2 config file] [-c clients-file] [-s statistics-file]" % (mesg)) raise SystemExit(2) diff --git a/src/lib/Server/Reports/py3kcompat.py b/src/lib/Server/Reports/py3kcompat.py new file mode 100644 index 000000000..b334c4466 --- /dev/null +++ b/src/lib/Server/Reports/py3kcompat.py @@ -0,0 +1,24 @@ +try: + from email.Utils import formatdate +except ImportError: + from email.utils import formatdate + +# urllib imports +try: + from urllib import urlopen +except ImportError: + from urllib.request import urlopen +try: + from urlparse import urljoin +except ImportError: + from urllib.parse import urljoin + +try: + from cStringIO import StringIO +except ImportError: + from io import StringIO + +try: + import ConfigParser +except ImportError: + import configparser as ConfigParser diff --git a/src/lib/Server/Reports/reports/templatetags/bcfg2_tags.py b/src/lib/Server/Reports/reports/templatetags/bcfg2_tags.py index 2d210cc07..629984f26 100644 --- a/src/lib/Server/Reports/reports/templatetags/bcfg2_tags.py +++ b/src/lib/Server/Reports/reports/templatetags/bcfg2_tags.py @@ -21,9 +21,9 @@ def page_navigator(context): path = context['request'].META['PATH_INFO'] total_pages = int(context['total_pages']) records_per_page = int(context['records_per_page']) - except KeyError, e: + except KeyError: return fragment - except ValueError, e: + except ValueError: return fragment if total_pages < 2: @@ -84,7 +84,8 @@ def page_navigator(context): except Resolver404: path = "404" - except NoReverseMatch, nr: + except NoReverseMatch: + nr = sys.exc_info()[1] path = "NoReverseMatch: %s" % nr except ValueError: path = "ValueError" @@ -193,12 +194,13 @@ class AddUrlFilter(template.Node): del kwargs['server'] try: link = reverse(view, args=args, kwargs=kwargs) - except NoReverseMatch, rm: + except NoReverseMatch: link = reverse(self.fallback_view, args=None, kwargs={ filter_name: filter_value }) - except NoReverseMatch, rm: + except NoReverseMatch: + rm = sys.exc_info()[1] raise rm - except (Resolver404, ValueError), e: + except (Resolver404, ValueError): pass return link diff --git a/src/lib/Server/Reports/reports/templatetags/syntax_coloring.py b/src/lib/Server/Reports/reports/templatetags/syntax_coloring.py index 43dafb262..291528e2e 100644 --- a/src/lib/Server/Reports/reports/templatetags/syntax_coloring.py +++ b/src/lib/Server/Reports/reports/templatetags/syntax_coloring.py @@ -1,3 +1,4 @@ +import sys from django import template from django.utils.encoding import smart_unicode, smart_str from django.utils.html import conditional_escape @@ -14,6 +15,12 @@ try: except: colorize = False +def u_str(string): + if sys.hexversion >= 0x03000000: + return string + else: + return unicode(string) + @register.filter def syntaxhilight(value, arg="diff", autoescape=None): """ @@ -26,9 +33,9 @@ def syntaxhilight(value, arg="diff", autoescape=None): if colorize: try: - output = u'' + + u_str('') lexer = get_lexer_by_name(arg) output += highlight(value, lexer, HtmlFormatter()) @@ -36,6 +43,6 @@ def syntaxhilight(value, arg="diff", autoescape=None): except: return value else: - return mark_safe(u'
Tip: Install pygments for highlighting
%s
' % value) + return mark_safe(u_str('
Tip: Install pygments for highlighting
%s
') % value) syntaxhilight.needs_autoescape = True diff --git a/src/lib/Server/Reports/reports/views.py b/src/lib/Server/Reports/reports/views.py index 463dec674..ccd71a60e 100644 --- a/src/lib/Server/Reports/reports/views.py +++ b/src/lib/Server/Reports/reports/views.py @@ -368,7 +368,8 @@ def render_history_view(request, template='clients/history.html', **kwargs): iquery, page, max_results) - except PaginationError, page_error: + except PaginationError: + page_error = sys.exc_info()[1] if isinstance(page_error[0], HttpResponse): return page_error[0] return HttpResponseServerError(page_error) diff --git a/src/lib/Server/Reports/settings.py b/src/lib/Server/Reports/settings.py index 121d55a27..0b9d25776 100644 --- a/src/lib/Server/Reports/settings.py +++ b/src/lib/Server/Reports/settings.py @@ -1,7 +1,7 @@ import django # Django settings for bcfg2 reports project. -from ConfigParser import ConfigParser, NoSectionError, NoOptionError +from py3kcompat import ConfigParser c = ConfigParser() c.read(['/etc/bcfg2.conf', '/etc/bcfg2-web.conf']) diff --git a/src/lib/Server/Reports/updatefix.py b/src/lib/Server/Reports/updatefix.py index 5c61f599f..4d3c964f5 100644 --- a/src/lib/Server/Reports/updatefix.py +++ b/src/lib/Server/Reports/updatefix.py @@ -74,7 +74,8 @@ def _populate_interaction_entry_counts(): updates.append(row) try: cursor.executemany("update reports_interaction set " + count_field[type] + "=%s where id = %s", updates) - except Exception, e: + except Exception: + e = sys.exc_info()[1] print(e) cursor.close() -- cgit v1.2.3-1-g7c22