Re: [PATCH v2] perf scripts python: Add Python 3 support to exported-sql-viewer.py

From: Tony Jones
Date: Fri Jan 18 2019 - 19:45:26 EST


On 1/17/19 1:45 AM, Seeteena Thoufeek wrote:

> +if sys.version_info[0] < 3:
> + import cPickle
> +else:
> + import _pickle as cPickle

Do you really need this?

pickle is already in Python2.

Also, did you test these changes on Python3?

I think you'll find you also need the following hunk otherwise you're running into Unicode diffs on Py3.

@@ -2590,8 +2590,8 @@ def Main():

is_sqlite3 = False
try:
- f = open(dbname)
- if f.read(15) == "SQLite format 3":
+ f = open(dbname, "rb")
+ if f.read(15) == b'SQLite format 3':
is_sqlite3 = True
f.close()
except:

Plus you need to handle the conversion of "print >> sys.stderr"

Attached is my version (against tip):

--- a/tools/perf/scripts/python/exported-sql-viewer.py
+++ b/tools/perf/scripts/python/exported-sql-viewer.py
@@ -91,7 +91,7 @@ import sys
import weakref
import threading
import string
-import cPickle
+import pickle
import re
import os
from PySide.QtCore import *
@@ -1559,7 +1559,7 @@ class SQLTableDialogDataItem():
return str(lower_id)

def ConvertRelativeTime(self, val):
- print "val ", val
+ print("val ", val)
mult = 1
suffix = val[-2:]
if suffix == "ms":
@@ -1581,29 +1581,29 @@ class SQLTableDialogDataItem():
return str(val)

def ConvertTimeRange(self, vrange):
- print "vrange ", vrange
+ print("vrange ", vrange)
if vrange[0] == "":
vrange[0] = str(self.first_time)
if vrange[1] == "":
vrange[1] = str(self.last_time)
vrange[0] = self.ConvertRelativeTime(vrange[0])
vrange[1] = self.ConvertRelativeTime(vrange[1])
- print "vrange2 ", vrange
+ print("vrange2 ", vrange)
if not self.IsNumber(vrange[0]) or not self.IsNumber(vrange[1]):
return False
- print "ok1"
+ print("ok1")
beg_range = max(int(vrange[0]), self.first_time)
end_range = min(int(vrange[1]), self.last_time)
if beg_range > self.last_time or end_range < self.first_time:
return False
- print "ok2"
+ print("ok2")
vrange[0] = self.BinarySearchTime(0, self.last_id, beg_range, True)
vrange[1] = self.BinarySearchTime(1, self.last_id + 1, end_range, False)
- print "vrange3 ", vrange
+ print("vrange3 ", vrange)
return True

def AddTimeRange(self, value, ranges):
- print "value ", value
+ print("value ", value)
n = value.count("-")
if n == 1:
pass
@@ -2577,7 +2577,7 @@ class DBRef():

def Main():
if (len(sys.argv) < 2):
- print >> sys.stderr, "Usage is: exported-sql-viewer.py {<database name> | --help-only}"
+ sys.stderr.write("Usage is: exported-sql-viewer.py {<database name> | --help-only}\n");
raise Exception("Too few arguments")

dbname = sys.argv[1]
@@ -2590,8 +2590,8 @@ def Main():

is_sqlite3 = False
try:
- f = open(dbname)
- if f.read(15) == "SQLite format 3":
+ f = open(dbname, "rb")
+ if f.read(15) == b'SQLite format 3':
is_sqlite3 = True
f.close()
except: