611 lines
23 KiB
Diff
611 lines
23 KiB
Diff
|
From f57176b3fa30fe224e8792fc58b4c18d5d5fe86a Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= <michal@cihar.com>
|
||
|
Date: Tue, 30 Mar 2021 13:27:44 +0200
|
||
|
Subject: [PATCH] Update Python scripts to Python 3
|
||
|
|
||
|
---
|
||
|
admin/generate-gsmnet | 14 +--
|
||
|
contrib/s60/default.py | 168 +++++++++++++++++-----------------
|
||
|
contrib/usbsnoop/decode.py | 4 +-
|
||
|
contrib/usbsnoop/decodexml.py | 6 +-
|
||
|
4 files changed, 96 insertions(+), 96 deletions(-)
|
||
|
|
||
|
diff --git a/admin/generate-gsmnet b/admin/generate-gsmnet
|
||
|
index 2f47d87cd..ad892e895 100755
|
||
|
--- a/admin/generate-gsmnet
|
||
|
+++ b/admin/generate-gsmnet
|
||
|
@@ -17,7 +17,7 @@
|
||
|
# Copyright (c) 2015 - 2018 Michal Cihar <michal@cihar.com>
|
||
|
#
|
||
|
"""Generates gsmnet databse from wikipedia"""
|
||
|
-import urllib
|
||
|
+import urllib.request, urllib.parse, urllib.error
|
||
|
import re
|
||
|
from unidecode import unidecode
|
||
|
|
||
|
@@ -42,10 +42,10 @@ def parse_line(line):
|
||
|
|
||
|
def print_out(result):
|
||
|
for code, name in sorted(result):
|
||
|
- print '\t{{"{0}", "{1}"}},'.format(
|
||
|
+ print('\t{{"{0}", "{1}"}},'.format(
|
||
|
code,
|
||
|
unidecode(name.decode('utf-8')).replace('&', '&')
|
||
|
- )
|
||
|
+ ))
|
||
|
|
||
|
|
||
|
def print_countries(data):
|
||
|
@@ -102,12 +102,12 @@ def print_networks(data):
|
||
|
|
||
|
|
||
|
def main():
|
||
|
- handle = urllib.urlopen(URL)
|
||
|
+ handle = urllib.request.urlopen(URL)
|
||
|
data = handle.read()
|
||
|
print_countries(data)
|
||
|
- print
|
||
|
- print '-' * 80
|
||
|
- print
|
||
|
+ print()
|
||
|
+ print('-' * 80)
|
||
|
+ print()
|
||
|
print_networks(data)
|
||
|
|
||
|
|
||
|
diff --git a/contrib/s60/default.py b/contrib/s60/default.py
|
||
|
index c020e027b..ccb335cdf 100644
|
||
|
--- a/contrib/s60/default.py
|
||
|
+++ b/contrib/s60/default.py
|
||
|
@@ -35,7 +35,7 @@ else:
|
||
|
import socket
|
||
|
import socket as pysocket
|
||
|
|
||
|
-import cPickle
|
||
|
+import pickle
|
||
|
|
||
|
|
||
|
VERSION = '0.6.0'
|
||
|
@@ -98,13 +98,13 @@ class Mobile(object):
|
||
|
def loadConfig(self):
|
||
|
try:
|
||
|
f = file(self.getConfigFilename(), 'rb')
|
||
|
- conf = cPickle.load(f)
|
||
|
+ conf = pickle.load(f)
|
||
|
f.close()
|
||
|
if 'port' in conf:
|
||
|
self.port = conf['port']
|
||
|
if 'useCanvas' in conf:
|
||
|
self.useCanvas = conf['useCanvas']
|
||
|
- except IOError, r:
|
||
|
+ except IOError as r:
|
||
|
pass
|
||
|
|
||
|
def saveConfig(self):
|
||
|
@@ -114,13 +114,13 @@ class Mobile(object):
|
||
|
'port': self.port,
|
||
|
'useCanvas': self.useCanvas,
|
||
|
}
|
||
|
- cPickle.dump(conf, f)
|
||
|
+ pickle.dump(conf, f)
|
||
|
f.close()
|
||
|
- except IOError, r:
|
||
|
+ except IOError as r:
|
||
|
pass
|
||
|
|
||
|
def initUi(self):
|
||
|
- app.title = u"Gammu S60 Remote"
|
||
|
+ app.title = "Gammu S60 Remote"
|
||
|
|
||
|
if self.useCanvas:
|
||
|
self.canvas = Canvas(redraw_callback=self.statusUpdate)
|
||
|
@@ -130,10 +130,10 @@ class Mobile(object):
|
||
|
app.exit_key_handler = self.exitHandler
|
||
|
app.screen = 'normal'
|
||
|
app.menu = [
|
||
|
- (u'About', self.aboutHandler),
|
||
|
- (u'Change port', self.portHandler),
|
||
|
- (u'Toggle Bluetooth', self.toggleHandler),
|
||
|
- (u'Exit', self.exitHandler),
|
||
|
+ ('About', self.aboutHandler),
|
||
|
+ ('Change port', self.portHandler),
|
||
|
+ ('Toggle Bluetooth', self.toggleHandler),
|
||
|
+ ('Exit', self.exitHandler),
|
||
|
]
|
||
|
|
||
|
def statusUpdate(self, rect=None):
|
||
|
@@ -142,14 +142,14 @@ class Mobile(object):
|
||
|
|
||
|
self.canvas.clear((255,255,255))
|
||
|
if self.service:
|
||
|
- self.canvas.text((1,14),u"Service started at port %s" % self.port,0xff0000)
|
||
|
+ self.canvas.text((1,14),"Service started at port %s" % self.port,0xff0000)
|
||
|
else:
|
||
|
- self.canvas.text((1,14),u"Service stopped",0xff0000)
|
||
|
+ self.canvas.text((1,14),"Service stopped",0xff0000)
|
||
|
|
||
|
if self.connected:
|
||
|
- self.canvas.text((1,34), u"Connected to: " + self.client[1], 0x0000ff)
|
||
|
+ self.canvas.text((1,34), "Connected to: " + self.client[1], 0x0000ff)
|
||
|
else:
|
||
|
- self.canvas.text((1,34), u"No active connection", 0x0000ff)
|
||
|
+ self.canvas.text((1,34), "No active connection", 0x0000ff)
|
||
|
|
||
|
def startService(self):
|
||
|
self.service = True
|
||
|
@@ -160,8 +160,8 @@ class Mobile(object):
|
||
|
self.sock.listen(1)
|
||
|
|
||
|
socket.set_security(self.sock, socket.AUTH | socket.AUTHOR)
|
||
|
- socket.bt_advertise_service(u"pys60_remote", self.sock, True, socket.RFCOMM)
|
||
|
- note(u'Listenning on port %d' % self.port)
|
||
|
+ socket.bt_advertise_service("pys60_remote", self.sock, True, socket.RFCOMM)
|
||
|
+ note('Listenning on port %d' % self.port)
|
||
|
|
||
|
self.listen()
|
||
|
|
||
|
@@ -170,7 +170,7 @@ class Mobile(object):
|
||
|
self.service = False
|
||
|
self.statusUpdate()
|
||
|
|
||
|
- socket.bt_advertise_service(u"pys60_remote", self.sock, False, socket.RFCOMM)
|
||
|
+ socket.bt_advertise_service("pys60_remote", self.sock, False, socket.RFCOMM)
|
||
|
self.sock.close()
|
||
|
self.sock = None
|
||
|
|
||
|
@@ -209,7 +209,7 @@ class Mobile(object):
|
||
|
self.connected = True
|
||
|
self.statusUpdate()
|
||
|
address = str(self.client[1])
|
||
|
- note(u'Connected client %s' % address)
|
||
|
+ note('Connected client %s' % address)
|
||
|
|
||
|
self.fos = self.client[0].makefile("w")
|
||
|
self.fis = self.client[0].makefile("r")
|
||
|
@@ -223,16 +223,16 @@ class Mobile(object):
|
||
|
pass
|
||
|
|
||
|
self.disconnect()
|
||
|
- note(u'Disconnected client %s' % address)
|
||
|
+ note('Disconnected client %s' % address)
|
||
|
|
||
|
def send(self, header, *message):
|
||
|
new_message = ""
|
||
|
|
||
|
if len(message) == 1:
|
||
|
- new_message = unicode(message[0])
|
||
|
+ new_message = str(message[0])
|
||
|
else:
|
||
|
for part in message:
|
||
|
- new_message += unicode(part) + str(NUM_SEPERATOR)
|
||
|
+ new_message += str(part) + str(NUM_SEPERATOR)
|
||
|
|
||
|
length = 1000
|
||
|
if len(new_message) > length:
|
||
|
@@ -247,7 +247,7 @@ class Mobile(object):
|
||
|
sentParts += 1
|
||
|
return
|
||
|
|
||
|
- self.fos.write(unicode(str(header) + str(NUM_END_HEADER) + new_message + str(NUM_END_TEXT)).encode("utf8") )
|
||
|
+ self.fos.write(str(str(header) + str(NUM_END_HEADER) + new_message + str(NUM_END_TEXT)).encode("utf8") )
|
||
|
self.fos.flush()
|
||
|
|
||
|
def wait(self):
|
||
|
@@ -256,7 +256,7 @@ class Mobile(object):
|
||
|
parts = data.split(NUM_END_HEADER)
|
||
|
|
||
|
header = int(parts[0])
|
||
|
- message = unicode(parts[1], "utf8")
|
||
|
+ message = str(parts[1], "utf8")
|
||
|
message_parts = message.split(NUM_SEPERATOR)
|
||
|
|
||
|
if (header != NUM_PARTIAL_MESSAGE and self.__partialMessage):
|
||
|
@@ -315,21 +315,21 @@ class Mobile(object):
|
||
|
|
||
|
elif (header == NUM_CONTACTS_DELETE):
|
||
|
id = int(message)
|
||
|
- if id in self.contactDb.keys():
|
||
|
+ if id in list(self.contactDb.keys()):
|
||
|
del self.contactDb[id]
|
||
|
|
||
|
elif (header == NUM_CONTACTS_CHANGE_ADDFIELD):
|
||
|
id = int(message_parts[0])
|
||
|
- type = unicode(message_parts[1])
|
||
|
- location = unicode(message_parts[2])
|
||
|
- value = unicode(message_parts[3])
|
||
|
+ type = str(message_parts[1])
|
||
|
+ location = str(message_parts[2])
|
||
|
+ value = str(message_parts[3])
|
||
|
self.modifyContact("add", id, type, location, value)
|
||
|
|
||
|
elif (header == NUM_CONTACTS_CHANGE_REMOVEFIELD):
|
||
|
id = int(message_parts[0])
|
||
|
- type = unicode(message_parts[1])
|
||
|
- location = unicode(message_parts[2])
|
||
|
- value = unicode(message_parts[3])
|
||
|
+ type = str(message_parts[1])
|
||
|
+ location = str(message_parts[2])
|
||
|
+ value = str(message_parts[3])
|
||
|
self.modifyContact("remove", id, type, location, value)
|
||
|
|
||
|
elif (header == NUM_CALENDAR_REQUEST_COUNT):
|
||
|
@@ -366,8 +366,8 @@ class Mobile(object):
|
||
|
elif (header == NUM_CALENDAR_ENTRY_ADD):
|
||
|
type = str(message_parts[0])
|
||
|
|
||
|
- content = unicode(message_parts[1])
|
||
|
- location = unicode(message_parts[2])
|
||
|
+ content = str(message_parts[1])
|
||
|
+ location = str(message_parts[2])
|
||
|
#start = float(message_parts[3]) if message_parts[3] else 0
|
||
|
if message_parts[3]:
|
||
|
start = float(message_parts[3])
|
||
|
@@ -429,10 +429,10 @@ class Mobile(object):
|
||
|
self.sendMessagesCount()
|
||
|
|
||
|
elif (header == NUM_MESSAGE_SEND_REQUEST):
|
||
|
- name = unicode(message_parts[0])
|
||
|
- phone = unicode(message_parts[1])
|
||
|
+ name = str(message_parts[0])
|
||
|
+ phone = str(message_parts[1])
|
||
|
enc = str(message_parts[2])
|
||
|
- msg = unicode(message_parts[3]).decode('string_escape')
|
||
|
+ msg = str(message_parts[3]).decode('string_escape')
|
||
|
self.sendMessage(name, phone, enc, msg)
|
||
|
|
||
|
elif (header == NUM_SET_READ):
|
||
|
@@ -459,7 +459,7 @@ class Mobile(object):
|
||
|
self.send(NUM_SYSINFO_REPLY_LINE, "free_ram", sysinfo.free_ram())
|
||
|
self.send(NUM_SYSINFO_REPLY_LINE, "pys60_version", e32.pys60_version)
|
||
|
|
||
|
- if sysinfo.active_profile() == u"offline":
|
||
|
+ if sysinfo.active_profile() == "offline":
|
||
|
# Return an error code if the phone is in offline mode
|
||
|
self.send(NUM_SYSINFO_REPLY_LINE, "signal_dbm", -1)
|
||
|
self.send(NUM_SYSINFO_REPLY_LINE, "signal_bars", -1)
|
||
|
@@ -467,7 +467,7 @@ class Mobile(object):
|
||
|
self.send(NUM_SYSINFO_REPLY_LINE, "signal_dbm", sysinfo.signal_dbm())
|
||
|
self.send(NUM_SYSINFO_REPLY_LINE, "signal_bars", sysinfo.signal_bars())
|
||
|
|
||
|
- for drive, free in sysinfo.free_drivespace().iteritems():
|
||
|
+ for drive, free in sysinfo.free_drivespace().items():
|
||
|
self.send(NUM_SYSINFO_REPLY_LINE, "free_drivespace", str(drive) + str(free))
|
||
|
|
||
|
if full:
|
||
|
@@ -484,7 +484,7 @@ class Mobile(object):
|
||
|
fn = self.getScreenshotFilename()
|
||
|
shot = graphics.screenshot()
|
||
|
shot.save(fn)
|
||
|
- note(u'Saved screenshot as %s' % fn)
|
||
|
+ note('Saved screenshot as %s' % fn)
|
||
|
f = file(fn, 'rb')
|
||
|
self.send(NUM_SCREENSHOT_REPLY, f.read().encode('base64'))
|
||
|
f.close()
|
||
|
@@ -498,7 +498,7 @@ class Mobile(object):
|
||
|
self.send(NUM_LOCATION_REPLY, '%03d' % mcc, '%02d' % mnc, '%X' % lac, '%X' % cellid)
|
||
|
|
||
|
def contactDict(self):
|
||
|
- keys = self.contactDb.keys()
|
||
|
+ keys = list(self.contactDb.keys())
|
||
|
|
||
|
contactDict = dict()
|
||
|
for key in keys:
|
||
|
@@ -514,8 +514,8 @@ class Mobile(object):
|
||
|
for field in contact:
|
||
|
_type = field.type
|
||
|
value = field.value
|
||
|
- value = unicode(value)
|
||
|
- value = value.replace(u'\u2029', u'\n') # PARAGRAPH SEPARATOR (\u2029) replaced by LINE FEED (\u000a)
|
||
|
+ value = str(value)
|
||
|
+ value = value.replace('\u2029', '\n') # PARAGRAPH SEPARATOR (\u2029) replaced by LINE FEED (\u000a)
|
||
|
location = field.location
|
||
|
|
||
|
if _type == "unknown":
|
||
|
@@ -538,10 +538,10 @@ class Mobile(object):
|
||
|
|
||
|
def sendContactHash(self):
|
||
|
contacts = self.contactDict()
|
||
|
- keys = contacts.keys()
|
||
|
+ keys = list(contacts.keys())
|
||
|
keys.sort()
|
||
|
|
||
|
- hash = unicode()
|
||
|
+ hash = str()
|
||
|
|
||
|
for key in keys:
|
||
|
hash += str(key)
|
||
|
@@ -559,11 +559,11 @@ class Mobile(object):
|
||
|
self.send(NUM_CONTACTS_REPLY_HASH_SINGLE_START)
|
||
|
|
||
|
contacts = self.contactDict()
|
||
|
- keys = contacts.keys()
|
||
|
+ keys = list(contacts.keys())
|
||
|
keys.sort()
|
||
|
|
||
|
for key in keys:
|
||
|
- hash = unicode()
|
||
|
+ hash = str()
|
||
|
for _type, location, value in contacts[key]:
|
||
|
hash += _type + INFO_SEP + location + INFO_SEP + value
|
||
|
hash += FIELD_SEP
|
||
|
@@ -575,7 +575,7 @@ class Mobile(object):
|
||
|
self.send(NUM_CONTACTS_REPLY_HASH_SINGLE_END)
|
||
|
|
||
|
def sendAllContacts(self):
|
||
|
- keys = self.contactDb.keys()
|
||
|
+ keys = list(self.contactDb.keys())
|
||
|
|
||
|
for key in keys:
|
||
|
contact = self.contactDb[key]
|
||
|
@@ -598,8 +598,8 @@ class Mobile(object):
|
||
|
for field in contact:
|
||
|
_type = field.type
|
||
|
value = field.value
|
||
|
- value = unicode(value)
|
||
|
- value = value.replace(u'\u2029', u'\n') # PARAGRAPH SEPARATOR (\u2029) replaced by LINE FEED (\u000a)
|
||
|
+ value = str(value)
|
||
|
+ value = value.replace('\u2029', '\n') # PARAGRAPH SEPARATOR (\u2029) replaced by LINE FEED (\u000a)
|
||
|
location = field.location
|
||
|
|
||
|
if _type == "unknown":
|
||
|
@@ -623,13 +623,13 @@ class Mobile(object):
|
||
|
except:
|
||
|
return
|
||
|
|
||
|
- if type == u"thumbnail_image":
|
||
|
+ if type == "thumbnail_image":
|
||
|
if modification == "remove":
|
||
|
self.setContactThumbnail(contact)
|
||
|
else:
|
||
|
self.setContactThumbnail(contact, value)
|
||
|
return
|
||
|
- elif type == u"date":
|
||
|
+ elif type == "date":
|
||
|
if modification == "remove":
|
||
|
self.setContactBirthday(contact)
|
||
|
else:
|
||
|
@@ -655,7 +655,7 @@ class Mobile(object):
|
||
|
def getDetailFromVcard(self, contact, detail, delimiter='\r\n'):
|
||
|
# This is an ugly hack, needed for some fields that cannot be handled using the contact object
|
||
|
try:
|
||
|
- value = unicode(contact.as_vcard(), 'utf8')
|
||
|
+ value = str(contact.as_vcard(), 'utf8')
|
||
|
value = value.split(detail + ":")[1].split(delimiter)[0]
|
||
|
return value
|
||
|
except:
|
||
|
@@ -665,7 +665,7 @@ class Mobile(object):
|
||
|
# This is an ugly hack, needed for some fields that cannot be handled using the contact object
|
||
|
card = contact.as_vcard()
|
||
|
|
||
|
- new = u""
|
||
|
+ new = ""
|
||
|
for line in card.split("\r\n"):
|
||
|
if line.startswith("BEGIN:") or line.startswith("VERSION:") or line.startswith("REV:") or line.startswith("UID:"):
|
||
|
new += line + "\r\n"
|
||
|
@@ -728,18 +728,18 @@ class Mobile(object):
|
||
|
line = entryType + sep + entry.content + sep + entry.location + sep
|
||
|
if entry.start_time:
|
||
|
# None if the start datetime of the entry is not set
|
||
|
- line += str(long(entry.start_time)) # entry.start_time is of type float
|
||
|
+ line += str(int(entry.start_time)) # entry.start_time is of type float
|
||
|
line += sep
|
||
|
|
||
|
if entry.end_time:
|
||
|
- line += str(long(entry.end_time))
|
||
|
+ line += str(int(entry.end_time))
|
||
|
line += sep
|
||
|
|
||
|
- line += str(long(entry.last_modified)) + sep
|
||
|
+ line += str(int(entry.last_modified)) + sep
|
||
|
line += entry.replication + sep # open, private or restricted
|
||
|
|
||
|
if entry.alarm:
|
||
|
- line += str(long(entry.alarm)) # The alarm datetime value (float) for the entry
|
||
|
+ line += str(int(entry.alarm)) # The alarm datetime value (float) for the entry
|
||
|
line += sep
|
||
|
|
||
|
line += str(entry.priority) + sep
|
||
|
@@ -768,11 +768,11 @@ class Mobile(object):
|
||
|
# example: on second Tuesday and last Monday of the month
|
||
|
# days is: [{'week': 1, 'day': 1}, {'week': 4, 'day': 0}]
|
||
|
# results in: 'week:1,day:1;week:4,day:0'
|
||
|
- line += ";".join([",".join([key + ":" + str(value) for key, value in entry.items()]) for entry in days])
|
||
|
+ line += ";".join([",".join([key + ":" + str(value) for key, value in list(entry.items())]) for entry in days])
|
||
|
elif isinstance(days, dict):
|
||
|
# for example: {'week': 1, 'day': 1, 'month': 1}
|
||
|
# results in: 'week:1,day:1,month:1'
|
||
|
- line += ",".join([key + ":" + str(value) for key, value in days.iteritems()])
|
||
|
+ line += ",".join([key + ":" + str(value) for key, value in days.items()])
|
||
|
line += sep
|
||
|
|
||
|
if repeated and "exceptions" in repeat:
|
||
|
@@ -780,13 +780,13 @@ class Mobile(object):
|
||
|
line += sep
|
||
|
|
||
|
if repeated and "start" in repeat:
|
||
|
- line += str(long(repeat["start"]))
|
||
|
+ line += str(int(repeat["start"]))
|
||
|
line += sep
|
||
|
|
||
|
if repeated and "end" in repeat:
|
||
|
- end = long(repeat["end"])
|
||
|
+ end = int(repeat["end"])
|
||
|
end -= time.timezone
|
||
|
- if end == 4102441200L:
|
||
|
+ if end == 4102441200:
|
||
|
# 4102441200L = 2100-01-01T00:00:00
|
||
|
# There is a bug in PyS60, which causes that None as end date throws as error
|
||
|
# As workarond, we use 2100-01-01 as end date for eternal repeats
|
||
|
@@ -805,7 +805,7 @@ class Mobile(object):
|
||
|
line += str(int(bool(entry.crossed_out))) + sep
|
||
|
|
||
|
if entry.cross_out_time:
|
||
|
- line += str(long(entry.cross_out_time))
|
||
|
+ line += str(int(entry.cross_out_time))
|
||
|
line += sep
|
||
|
|
||
|
# TODO lists no more supported!
|
||
|
@@ -840,10 +840,10 @@ class Mobile(object):
|
||
|
def sendCalendarHash(self):
|
||
|
calendarDict = self.calendarDict()
|
||
|
|
||
|
- keys = calendarDict.keys()
|
||
|
+ keys = list(calendarDict.keys())
|
||
|
keys.sort()
|
||
|
|
||
|
- hash = unicode()
|
||
|
+ hash = str()
|
||
|
for key in keys:
|
||
|
hash += str(key)
|
||
|
hash += FIELD_SEP
|
||
|
@@ -901,7 +901,7 @@ class Mobile(object):
|
||
|
|
||
|
entry.commit()
|
||
|
|
||
|
- self.send(NUM_CALENDAR_ENTRY_CHANGE_REPLY_TIME, id, str(long(entry.last_modified)))
|
||
|
+ self.send(NUM_CALENDAR_ENTRY_CHANGE_REPLY_TIME, id, str(int(entry.last_modified)))
|
||
|
|
||
|
def addCalendarEntry(self, type, content, location, start, end, replication, alarm, priority, repeat_type,
|
||
|
repeat_days, repeat_exceptions, repeat_start, repeat_end, repeat_interval):
|
||
|
@@ -922,7 +922,7 @@ class Mobile(object):
|
||
|
|
||
|
entry.commit()
|
||
|
|
||
|
- self.send(NUM_CALENDAR_ENTRY_ADD_REPLY, entry.id, str(long(entry.last_modified)))
|
||
|
+ self.send(NUM_CALENDAR_ENTRY_ADD_REPLY, entry.id, str(int(entry.last_modified)))
|
||
|
|
||
|
def modifyCalendarEntryFields(self, entry, content, location, start, end, replication, alarm, priority, repeat_type,
|
||
|
repeat_days, repeat_exceptions, repeat_start, repeat_end, repeat_interval):
|
||
|
@@ -1012,7 +1012,7 @@ class Mobile(object):
|
||
|
return
|
||
|
address = self.inbox.address(sms)
|
||
|
content = self.inbox.content(sms)
|
||
|
- content = content.replace(u'\u2029', u'\n') # PARAGRAPH SEPARATOR (\u2029) replaced by LINE FEED (\u000a)
|
||
|
+ content = content.replace('\u2029', '\n') # PARAGRAPH SEPARATOR (\u2029) replaced by LINE FEED (\u000a)
|
||
|
|
||
|
if self.inbox.unread(sms):
|
||
|
unread = '1'
|
||
|
@@ -1072,7 +1072,7 @@ class Mobile(object):
|
||
|
def sendMessage(self, name, phone, encoding, msg):
|
||
|
try:
|
||
|
messaging.sms_send(phone, msg, encoding, self.sentMessage, name)
|
||
|
- except RuntimeError, detail:
|
||
|
+ except RuntimeError as detail:
|
||
|
if str(detail) == "Already sending":
|
||
|
# Workaround for the "Already sending" bug:
|
||
|
# http://discussion.forum.nokia.com/forum/showthread.php?t=141083
|
||
|
@@ -1162,7 +1162,7 @@ class Mobile(object):
|
||
|
app.set_exit()
|
||
|
|
||
|
def portHandler(self):
|
||
|
- ret = query(u'Enter bluetooth port to use', 'number', self.port)
|
||
|
+ ret = query('Enter bluetooth port to use', 'number', self.port)
|
||
|
if ret is not None:
|
||
|
self.port = ret
|
||
|
self.quit()
|
||
|
@@ -1170,42 +1170,42 @@ class Mobile(object):
|
||
|
self.startService()
|
||
|
|
||
|
def aboutHandler(self):
|
||
|
- query(u'Gammu S60 Remote\nVersion %s\nhttps://wammu.eu/' % (VERSION) , 'query')
|
||
|
+ query('Gammu S60 Remote\nVersion %s\nhttps://wammu.eu/' % (VERSION) , 'query')
|
||
|
|
||
|
def toggleHandler(self):
|
||
|
- e32.start_exe(u'BtToggleApp.exe','')
|
||
|
+ e32.start_exe('BtToggleApp.exe','')
|
||
|
|
||
|
# Debug of SIS applications
|
||
|
try:
|
||
|
mobile = Mobile()
|
||
|
-except Exception, e:
|
||
|
+except Exception as e:
|
||
|
# Oops, something wrong. Report problems to user
|
||
|
# and ask him/her to send them to you.
|
||
|
import traceback
|
||
|
|
||
|
- new_line = u"\u2029"
|
||
|
+ new_line = "\u2029"
|
||
|
|
||
|
# Collecting call stack info
|
||
|
info = sys.exc_info()
|
||
|
|
||
|
# Show the last 4 lines of the call stack
|
||
|
- call_stack = u""
|
||
|
+ call_stack = ""
|
||
|
for filename, lineno, function, text in traceback.extract_tb(info[2]):
|
||
|
- call_stack += filename + u": " + str(lineno) + u" - " + function + new_line
|
||
|
- call_stack += u" " + repr(text) + new_line
|
||
|
- call_stack += u"%s: %s" % info[:2]
|
||
|
+ call_stack += filename + ": " + str(lineno) + " - " + function + new_line
|
||
|
+ call_stack += " " + repr(text) + new_line
|
||
|
+ call_stack += "%s: %s" % info[:2]
|
||
|
|
||
|
# Creating a friendly user message with exception details
|
||
|
- err_msg = u"This programs was unexpectedly closed due to the following error: "
|
||
|
- err_msg += unicode(repr(e)) + new_line
|
||
|
- err_msg += u"Please, copy and paste the text presented here and "
|
||
|
- err_msg += u"send it to gammu-users@lists.sourceforge.net. "
|
||
|
- err_msg += u"Thanks in advance and sorry for this inconvenience." + new_line*2
|
||
|
- err_msg += u"Call stack:" + new_line + call_stack
|
||
|
+ err_msg = "This programs was unexpectedly closed due to the following error: "
|
||
|
+ err_msg += str(repr(e)) + new_line
|
||
|
+ err_msg += "Please, copy and paste the text presented here and "
|
||
|
+ err_msg += "send it to gammu-users@lists.sourceforge.net. "
|
||
|
+ err_msg += "Thanks in advance and sorry for this inconvenience." + new_line*2
|
||
|
+ err_msg += "Call stack:" + new_line + call_stack
|
||
|
|
||
|
# Small PyS60 application
|
||
|
lock = e32.Ao_lock()
|
||
|
app.body = Text(err_msg)
|
||
|
app.body.set_pos(0)
|
||
|
- app.menu = [(u"Exit", lambda: lock.signal())]
|
||
|
+ app.menu = [("Exit", lambda: lock.signal())]
|
||
|
lock.wait()
|
||
|
diff --git a/contrib/usbsnoop/decode.py b/contrib/usbsnoop/decode.py
|
||
|
index c6d680a56..1185957f4 100755
|
||
|
--- a/contrib/usbsnoop/decode.py
|
||
|
+++ b/contrib/usbsnoop/decode.py
|
||
|
@@ -10,7 +10,7 @@ This is probably only useful for AT commands.
|
||
|
import sys
|
||
|
|
||
|
if len(sys.argv) < 2:
|
||
|
- print 'Usage: decode.py LOGFILE'
|
||
|
+ print('Usage: decode.py LOGFILE')
|
||
|
sys.exit(1)
|
||
|
|
||
|
f = open(sys.argv[1])
|
||
|
@@ -21,7 +21,7 @@ for line in f:
|
||
|
pos, data = line.split(':')
|
||
|
if pos == '00000000':
|
||
|
if output != '':
|
||
|
- print output.decode('hex')
|
||
|
+ print(output.decode('hex'))
|
||
|
output = ''
|
||
|
data = ''.join(data.strip().split(' '))
|
||
|
output += data
|
||
|
diff --git a/contrib/usbsnoop/decodexml.py b/contrib/usbsnoop/decodexml.py
|
||
|
index 27459b796..e58c0ef2e 100755
|
||
|
--- a/contrib/usbsnoop/decodexml.py
|
||
|
+++ b/contrib/usbsnoop/decodexml.py
|
||
|
@@ -10,7 +10,7 @@ This is probably only useful for AT commands.
|
||
|
import sys
|
||
|
|
||
|
if len(sys.argv) < 2:
|
||
|
- print 'Usage: decode.py LOGFILE'
|
||
|
+ print('Usage: decode.py LOGFILE')
|
||
|
sys.exit(1)
|
||
|
|
||
|
f = open(sys.argv[1])
|
||
|
@@ -18,6 +18,6 @@ output = ""
|
||
|
for line in f:
|
||
|
if line[:14] == '<payloadbytes>':
|
||
|
line = line[14:-17]
|
||
|
- print line
|
||
|
- print line.decode('hex')
|
||
|
+ print(line)
|
||
|
+ print((line.decode('hex')))
|
||
|
|
||
|
--
|
||
|
2.30.2
|
||
|
|