Switched to using Python 3.4.

This commit is contained in:
Joey Payne 2016-01-25 11:33:57 -07:00
commit a8f69c2a62
8 changed files with 82 additions and 97 deletions

View file

@ -12,7 +12,7 @@ from pycns import save_icns
from pepy.pe import PEFile from pepy.pe import PEFile
import argparse import argparse
import urllib2 import urllib.request as request
import platform import platform
import re import re
import time import time
@ -40,10 +40,7 @@ from semantic_version import Version
from zipfile import ZipFile from zipfile import ZipFile
from tarfile import TarFile from tarfile import TarFile
try: from io import StringIO
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
from configobj import ConfigObj from configobj import ConfigObj
@ -93,7 +90,7 @@ handler = lh.RotatingFileHandler(LOG_FILENAME, maxBytes=100000, backupCount=2)
logger.addHandler(handler) logger.addHandler(handler)
def my_excepthook(type_, value, tback): def my_excepthook(type_, value, tback):
output_err = u''.join([unicode(x) for x in traceback.format_exception(type_, value, tback)]) output_err = u''.join([x for x in traceback.format_exception(type_, value, tback)])
logger.error(u'{}'.format(output_err)) logger.error(u'{}'.format(output_err))
sys.__excepthook__(type_, value, tback) sys.__excepthook__(type_, value, tback)
@ -150,10 +147,10 @@ class Setting(object):
self.get_file_information_from_url() self.get_file_information_from_url()
def filter_name(self, text): def filter_name(self, text):
action = unicode if hasattr(self.filter_action, text):
if hasattr(unicode, self.filter_action): action = getattr(self.filter_action, text)
action = getattr(unicode, self.filter_action) return action(text)
return action(unicode(text)) return text
def get_file_information_from_url(self): def get_file_information_from_url(self):
if hasattr(self, 'url'): if hasattr(self, 'url'):
@ -256,9 +253,9 @@ class Setting(object):
elif self.file_ext == '.zip': elif self.file_ext == '.zip':
new_bytes = file.read(extract_p) new_bytes = file.read(extract_p)
except KeyError as e: except KeyError as e:
logger.error(unicode(e)) logger.error(str(e))
# dirty hack to support old versions of nw # dirty hack to support old versions of nw
if 'no item named' in unicode(e): if 'no item named' in str(e):
extract_path = '/'.join(extract_path.split('/')[1:]) extract_path = '/'.join(extract_path.split('/')[1:])
try: try:
if self.file_ext == '.gz': if self.file_ext == '.gz':
@ -266,7 +263,7 @@ class Setting(object):
elif self.file_ext == '.zip': elif self.file_ext == '.zip':
new_bytes = file.read(extract_path) new_bytes = file.read(extract_path)
except KeyError as e: except KeyError as e:
logger.error(unicode(e)) logger.error(str(e))
if new_bytes is not None: if new_bytes is not None:
fbytes.append((dest_path, new_bytes)) fbytes.append((dest_path, new_bytes))
@ -335,7 +332,7 @@ class CommandBase(object):
config_io = StringIO(contents) config_io = StringIO(contents)
config = ConfigObj(config_io, unrepr=True).dict() config = ConfigObj(config_io, unrepr=True).dict()
settings = {'setting_groups': []} settings = {'setting_groups': []}
setting_items = (config['setting_groups'].items() + setting_items = (list(config['setting_groups'].items()) +
[('export_settings', config['export_settings'])] + [('export_settings', config['export_settings'])] +
[('compression', config['compression'])]) [('compression', config['compression'])])
for setting_group, setting_group_dict in setting_items: for setting_group, setting_group_dict in setting_items:
@ -351,7 +348,7 @@ class CommandBase(object):
for setting_group, setting_group_dict in sgroup_items: for setting_group, setting_group_dict in sgroup_items:
settings['setting_groups'].append(settings[setting_group]) settings['setting_groups'].append(settings[setting_group])
self._setting_items = (config['setting_groups'].items() + self._setting_items = (list(config['setting_groups'].items()) +
[('export_settings', config['export_settings'])] + [('export_settings', config['export_settings'])] +
[('compression', config['compression'])]) [('compression', config['compression'])])
config.pop('setting_groups') config.pop('setting_groups')
@ -405,8 +402,8 @@ class CommandBase(object):
union_versions = set() union_versions = set()
for url in self.settings['version_info']['urls']: for url in self.settings['version_info']['urls']:
response = urllib2.urlopen(url) response = request.urlopen(url)
html = response.read() html = response.read().decode('utf-8')
nw_version = self.get_setting('nw_version') nw_version = self.get_setting('nw_version')
@ -431,7 +428,7 @@ class CommandBase(object):
f.write(v+os.linesep) f.write(v+os.linesep)
f.close() f.close()
except IOError: except IOError:
error = u''.join([unicode(x) for x in traceback.format_exception(sys.exc_info()[0], error = u''.join([x for x in traceback.format_exception(sys.exc_info()[0],
sys.exc_info()[1], sys.exc_info()[1],
sys.exc_info()[2])]) sys.exc_info()[2])])
self.show_error(error) self.show_error(error)
@ -458,7 +455,7 @@ class CommandBase(object):
if os.path.exists(setting.save_file_path(version, location)): if os.path.exists(setting.save_file_path(version, location)):
os.remove(setting.save_file_path(version, location)) os.remove(setting.save_file_path(version, location))
error = u''.join([unicode(x) for x in traceback.format_exception(sys.exc_info()[0], error = u''.join([x for x in traceback.format_exception(sys.exc_info()[0],
sys.exc_info()[1], sys.exc_info()[1],
sys.exc_info()[2])]) sys.exc_info()[2])])
self.show_error(error) self.show_error(error)
@ -498,7 +495,7 @@ class CommandBase(object):
if setting.value is not None: if setting.value is not None:
dic[setting_name] = setting.value dic[setting_name] = setting.value
if setting_name == 'keywords': if setting_name == 'keywords':
dic[setting_name] = re.findall("\w+", setting.value) dic[setting_name] = re.findall('\w+', setting.value)
for setting_name, setting in self.settings['window_settings'].items(): for setting_name, setting in self.settings['window_settings'].items():
if setting.value is not None: if setting.value is not None:
@ -515,14 +512,14 @@ class CommandBase(object):
dic['webkit'][setting_name] = setting.value dic['webkit'][setting_name] = setting.value
if not global_json: if not global_json:
dl_export_items = (self.settings['download_settings'].items() + dl_export_items = (list(self.settings['download_settings'].items()) +
self.settings['export_settings'].items() + list(self.settings['export_settings'].items()) +
self.settings['compression'].items() + list(self.settings['compression'].items()) +
self.settings['web2exe_settings'].items()) list(self.settings['web2exe_settings'].items()))
else: else:
dl_export_items = (self.settings['download_settings'].items() + dl_export_items = (list(self.settings['download_settings'].items()) +
self.settings['export_settings'].items() + list(self.settings['export_settings'].items()) +
self.settings['compression'].items()) list(self.settings['compression'].items()))
for setting_name, setting in dl_export_items: for setting_name, setting in dl_export_items:
if setting.value is not None: if setting.value is not None:
@ -539,7 +536,7 @@ class CommandBase(object):
@extract_error.setter @extract_error.setter
def extract_error(self, value): def extract_error(self, value):
if value is not None and not self.quiet and COMMAND_LINE: if value is not None and not self.quiet and COMMAND_LINE:
self._extract_error = unicode(value) self._extract_error = value
sys.stderr.write(u'\r{}'.format(self._extract_error)) sys.stderr.write(u'\r{}'.format(self._extract_error))
sys.stderr.flush() sys.stderr.flush()
@ -550,7 +547,7 @@ class CommandBase(object):
@output_err.setter @output_err.setter
def output_err(self, value): def output_err(self, value):
if value is not None and not self.quiet and COMMAND_LINE: if value is not None and not self.quiet and COMMAND_LINE:
self._output_err = unicode(value) self._output_err = value
sys.stderr.write(u'\r{}'.format(self._output_err)) sys.stderr.write(u'\r{}'.format(self._output_err))
sys.stderr.flush() sys.stderr.flush()
@ -561,7 +558,7 @@ class CommandBase(object):
@progress_text.setter @progress_text.setter
def progress_text(self, value): def progress_text(self, value):
if value is not None and not self.quiet and COMMAND_LINE: if value is not None and not self.quiet and COMMAND_LINE:
self._progress_text = unicode(value) self._progress_text = value
sys.stdout.write(u'\r{}'.format(self._progress_text)) sys.stdout.write(u'\r{}'.format(self._progress_text))
sys.stdout.flush() sys.stdout.flush()
@ -624,7 +621,7 @@ class CommandBase(object):
if os.path.exists(save_file_path): if os.path.exists(save_file_path):
os.remove(save_file_path) os.remove(save_file_path)
self.extract_error = e self.extract_error = e
self.logger.error(unicode(self.extract_error)) self.logger.error(self.extract_error)
# cannot use GUI in thread to notify user. Save it for later # cannot use GUI in thread to notify user. Save it for later
self.progress_text = '\nDone.\n' self.progress_text = '\nDone.\n'
return True return True
@ -814,7 +811,7 @@ class CommandBase(object):
os.remove(nw_path) os.remove(nw_path)
except Exception: except Exception:
error = u''.join([unicode(x) for x in traceback.format_exception(sys.exc_info()[0], error = u''.join([x for x in traceback.format_exception(sys.exc_info()[0],
sys.exc_info()[1], sys.exc_info()[1],
sys.exc_info()[2])]) sys.exc_info()[2])])
self.logger.error(error) self.logger.error(error)
@ -860,7 +857,7 @@ class CommandBase(object):
with codecs.open(dfile_path, 'w+', encoding='utf-8') as f: with codecs.open(dfile_path, 'w+', encoding='utf-8') as f:
f.write(file_str) f.write(file_str)
os.chmod(dfile_path, 0755) os.chmod(dfile_path, 0o755)
def compress_nw(self, nw_path): def compress_nw(self, nw_path):
compression = self.get_setting('nw_compression_level') compression = self.get_setting('nw_compression_level')
@ -884,8 +881,8 @@ class CommandBase(object):
if upx_version is not None: if upx_version is not None:
upx_bin = upx_version upx_bin = upx_version
os.chmod(upx_bin, 0755) os.chmod(upx_bin, 0o755)
cmd = [upx_bin, '--lzma', u'-{}'.format(compression.value), unicode(nw_path)] cmd = [upx_bin, '--lzma', u'-{}'.format(compression.value), nw_path]
if platform.system() == 'Windows': if platform.system() == 'Windows':
startupinfo = subprocess.STARTUPINFO() startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
@ -927,7 +924,7 @@ class CommandBase(object):
def convert_val_to_str(self, val): def convert_val_to_str(self, val):
if isinstance(val, (list, tuple)): if isinstance(val, (list, tuple)):
return ', '.join(val) return ', '.join(val)
return unicode(val).replace(self.project_dir()+os.path.sep, '') return str(val).replace(self.project_dir()+os.path.sep, '')
def run_script(self, script): def run_script(self, script):
@ -1115,9 +1112,9 @@ class CommandBase(object):
elif tmp_exists and (os.stat(tmp_file).st_size > 0): elif tmp_exists and (os.stat(tmp_file).st_size > 0):
tmp_size = os.stat(tmp_file).st_size tmp_size = os.stat(tmp_file).st_size
headers = {'Range': 'bytes={}-'.format(tmp_size)} headers = {'Range': 'bytes={}-'.format(tmp_size)}
url = urllib2.Request(url, headers=headers) url = request.Request(url, headers=headers)
web_file = urllib2.urlopen(url) web_file = request.urlopen(url)
f = open(tmp_file, 'ab') f = open(tmp_file, 'ab')
meta = web_file.info() meta = web_file.info()
file_size = tmp_size + int(meta.getheaders("Content-Length")[0]) file_size = tmp_size + int(meta.getheaders("Content-Length")[0])
@ -1179,8 +1176,7 @@ class ArgParser(argparse.ArgumentParser):
sys.exit(2) sys.exit(2)
def unicode_arg(bytestring): def unicode_arg(bytestring):
unicode_string = bytestring.decode(sys.getfilesystemencoding()) return bytestring
return unicode_string
def main(): def main():
parser = ArgParser(description=('Command line interface ' parser = ArgParser(description=('Command line interface '
@ -1233,7 +1229,7 @@ def main():
else: else:
if setting.values: if setting.values:
kwargs.update({'choices': setting.values}) kwargs.update({'choices': setting.values})
setting.description += u' Possible values: {{{}}}'.format(', '.join([unicode(x) for x in setting.values])) setting.description += u' Possible values: {{{}}}'.format(', '.join([x for x in setting.values]))
kwargs.update({'metavar': ''}) kwargs.update({'metavar': ''})
else: else:
kwargs.update({'metavar': '<{}>'.format(setting.display_name)}) kwargs.update({'metavar': '<{}>'.format(setting.display_name)})
@ -1276,7 +1272,7 @@ def main():
logger.addHandler(handler) logger.addHandler(handler)
def my_excepthook(type_, value, tback): def my_excepthook(type_, value, tback):
output_err = u''.join([unicode(x) for x in traceback.format_exception(type_, value, tback)]) output_err = u''.join([x for x in traceback.format_exception(type_, value, tback)])
logger.error(u'{}'.format(output_err)) logger.error(u'{}'.format(output_err))
sys.__excepthook__(type_, value, tback) sys.__excepthook__(type_, value, tback)

View file

@ -3,7 +3,7 @@ import image_utils
import png import png
from PIL import Image from PIL import Image
import os import os
from cStringIO import StringIO from io import BytesIO
#---------------------CONSTANTS-----------------------------------------------# #---------------------CONSTANTS-----------------------------------------------#
@ -406,13 +406,13 @@ def encode_rle24(data):
if len(data) >= 65536: if len(data) >= 65536:
dataTempCount = 4 dataTempCount = 4
for colorOffset in xrange(3): for colorOffset in range(3):
runCount = 0 runCount = 0
runLength = 1 runLength = 1
runType = 0 runType = 0
dataRun[0] = data[colorOffset] dataRun[0] = data[colorOffset]
for dataInCount in xrange(1, dataInChanSize): for dataInCount in range(1, dataInChanSize):
dataByte = data[colorOffset+(dataInCount*4)] dataByte = data[colorOffset+(dataInCount*4)]
if runLength < 2: if runLength < 2:
dataRun[runLength] = dataByte dataRun[runLength] = dataByte
@ -588,7 +588,7 @@ def to_bytes(n, length, endianess='big'):
def from_bytes(byte_str): def from_bytes(byte_str):
bits = (len(byte_str)-1)*8 bits = (len(byte_str)-1)*8
result = 0 result = 0
for i in xrange(len(byte_str)): for i in range(len(byte_str)):
result = (byte_str[i] << bits) + result result = (byte_str[i] << bits) + result
bits -= 8 bits -= 8
return result return result
@ -625,12 +625,9 @@ class Printable(object):
return u', '.join(vals) return u', '.join(vals)
def __repr__(self): def __repr__(self):
return unicode(self) return str(self)
def __str__(self): def __str__(self):
return unicode(self).encode('utf-8')
def __unicode__(self):
return u'{} [{}]'.format(self.__class__.__name__, self._dict_string()) return u'{} [{}]'.format(self.__class__.__name__, self._dict_string())
@ -953,7 +950,7 @@ class ICNSInfo(Printable):
icon_info.iconPixelDepth = 1 icon_info.iconPixelDepth = 1
icon_info.iconBitDepth = 1 icon_info.iconBitDepth = 1
else: else:
print 'Unable to parse icon type {}'.format(type_to_str(type)) print('Unable to parse icon type {}'.format(type_to_str(type)))
icon_info.iconType = ICNS_NULL_TYPE icon_info.iconType = ICNS_NULL_TYPE
icon_info.iconRawDataSize = icon_info.iconSize.height * icon_info.iconSize.width * icon_info.iconBitDepth/ICNS_BYTE_BITS icon_info.iconRawDataSize = icon_info.iconSize.height * icon_info.iconSize.width * icon_info.iconBitDepth/ICNS_BYTE_BITS
@ -1112,9 +1109,9 @@ class ICNSElement(Structure):
icns_info.iconRawDataSize = width * height * 4 icns_info.iconRawDataSize = width * height * 4
icns_info.data = bytearray(list(png_data)) icns_info.data = bytearray(list(png_data))
else: else:
image = Image.open(StringIO(data)) image = Image.open(BytesIO(data))
mode_to_bpp = {'1':1, 'L':8, 'P':8, 'RGB':24, 'RGBA':32, 'CMYK':32, 'YCbCr':24, 'I':32, 'F':32} mode_to_bpp = {'1':1, 'L':8, 'P':8, 'RGB':24, 'RGBA':32, 'CMYK':32, 'YCbCr':24, 'I':32, 'F':32}
output = StringIO() output = BytesIO()
image.save(output, format='PNG') image.save(output, format='PNG')
bpp = mode_to_bpp[image.mode] bpp = mode_to_bpp[image.mode]
png_data = bytearray(output.getvalue()) png_data = bytearray(output.getvalue())
@ -1291,7 +1288,7 @@ def get_image_with_mask(icns_data, element_type):
ICNS_32x32_8BIT_DATA, ICNS_32x32_8BIT_DATA,
ICNS_16x16_8BIT_DATA, ICNS_16x16_8BIT_DATA,
ICNS_16x12_8BIT_DATA]: ICNS_16x12_8BIT_DATA]:
for pixel_id in xrange(pixel_count): for pixel_id in range(pixel_count):
color_index = old_data[data_count] color_index = old_data[data_count]
color_rgb = icns_colormap_8[color_index] color_rgb = icns_colormap_8[color_index]
new_data[pixel_id*4+0] = color_rgb[0] new_data[pixel_id*4+0] = color_rgb[0]
@ -1304,7 +1301,7 @@ def get_image_with_mask(icns_data, element_type):
ICNS_16x16_4BIT_DATA, ICNS_16x16_4BIT_DATA,
ICNS_16x12_4BIT_DATA]: ICNS_16x12_4BIT_DATA]:
data_value = 0 data_value = 0
for pixel_id in xrange(pixel_count): for pixel_id in range(pixel_count):
if (pixel_id % 2) == 0: if (pixel_id % 2) == 0:
data_value = old_data[data_count] data_value = old_data[data_count]
data_count += 1 data_count += 1
@ -1319,7 +1316,7 @@ def get_image_with_mask(icns_data, element_type):
ICNS_16x16_1BIT_DATA, ICNS_16x16_1BIT_DATA,
ICNS_16x12_1BIT_DATA]: ICNS_16x12_1BIT_DATA]:
data_value = 0 data_value = 0
for pixel_id in xrange(pixel_count): for pixel_id in range(pixel_count):
if (pixel_id % 8) == 0: if (pixel_id % 8) == 0:
data_value = old_data[data_count] data_value = old_data[data_count]
data_count += 1 data_count += 1
@ -1341,7 +1338,7 @@ def get_image_with_mask(icns_data, element_type):
ICNS_16x16_8BIT_MASK]: ICNS_16x16_8BIT_MASK]:
pixel_count = mask_image.iconSize.width * mask_image.iconSize.height pixel_count = mask_image.iconSize.width * mask_image.iconSize.height
data_count = 0 data_count = 0
for pixel_id in xrange(pixel_count): for pixel_id in range(pixel_count):
icns_image.data[pixel_id*4+3] = mask_image.data[data_count] icns_image.data[pixel_id*4+3] = mask_image.data[data_count]
data_count += 1 data_count += 1
@ -1352,7 +1349,7 @@ def get_image_with_mask(icns_data, element_type):
pixel_count = mask_image.iconSize.width * mask_image.iconSize.height pixel_count = mask_image.iconSize.width * mask_image.iconSize.height
data_count = 0 data_count = 0
data_value = 0 data_value = 0
for pixel_id in xrange(pixel_count): for pixel_id in range(pixel_count):
if (pixel_id % 8) == 0: if (pixel_id % 8) == 0:
data_value = mask_image.data[data_count] data_value = mask_image.data[data_count]
data_count += 1 data_count += 1
@ -1360,7 +1357,7 @@ def get_image_with_mask(icns_data, element_type):
data_value = data_value << 1 data_value = data_value << 1
icns_image.data[pixel_id*4+3] = color_index icns_image.data[pixel_id*4+3] = color_index
im = Image.frombytes('RGBA', [icns_image.iconSize.width,icns_image.iconSize.height],str(icns_image.data)) im = Image.frombytes('RGBA', [icns_image.iconSize.width,icns_image.iconSize.height],str(icns_image.data))
output = StringIO() output = BytesIO()
im.save(output, format='PNG') im.save(output, format='PNG')
icns_image.data = bytearray(output.getvalue()) icns_image.data = bytearray(output.getvalue())

View file

@ -1,10 +1,10 @@
from cStringIO import StringIO from io import BytesIO
try: try:
from PIL import Image as im from PIL import Image as im
IMAGE_UTILS_AVAILABLE = True IMAGE_UTILS_AVAILABLE = True
Image = im.open Image = im.open
def resize(image, size): def resize(image, size):
output = StringIO() output = BytesIO()
back = im.new('RGBA', size, (0,0,0,0)) back = im.new('RGBA', size, (0,0,0,0))
image.thumbnail(size, im.ANTIALIAS) image.thumbnail(size, im.ANTIALIAS)
offset = [0,0] offset = [0,0]
@ -32,7 +32,7 @@ def nearest_icon_size(width, height):
if maximum <= SMALLEST_ICON_SIZE: if maximum <= SMALLEST_ICON_SIZE:
return SMALLEST_ICON_SIZE return SMALLEST_ICON_SIZE
for i in xrange(len(sizes)-1): for i in range(len(sizes)-1):
current_size = sizes[i] current_size = sizes[i]
next_size = sizes[i+1] next_size = sizes[i+1]
if current_size > maximum >= next_size: if current_size > maximum >= next_size:

42
main.py
View file

@ -48,7 +48,7 @@ class ExistingProjectDialog(QtGui.QDialog):
self.projects = recent_projects self.projects = recent_projects
for i in xrange(len(recent_projects)): for i in range(len(recent_projects)):
project = recent_projects[i] project = recent_projects[i]
text = u'{} - {}'.format(os.path.basename(project), project) text = u'{} - {}'.format(os.path.basename(project), project)
self.project_list.addItem(text) self.project_list.addItem(text)
@ -104,9 +104,9 @@ class ExistingProjectDialog(QtGui.QDialog):
class Validator(QtGui.QRegExpValidator): class Validator(QtGui.QRegExpValidator):
def __init__(self, regex, action, parent=None): def __init__(self, regex, action, parent=None):
self.exp = regex self.exp = regex
self.action = unicode self.action = str
if hasattr(unicode, action): if hasattr(str, action):
self.action = getattr(unicode, action) self.action = getattr(str, action)
reg = QtCore.QRegExp(regex) reg = QtCore.QRegExp(regex)
super(Validator, self).__init__(reg, parent) super(Validator, self).__init__(reg, parent)
@ -115,7 +115,7 @@ class Validator(QtGui.QRegExpValidator):
return result return result
def fixup(self, text): def fixup(self, text):
return ''.join(re.findall(self.exp, self.action(unicode(text)))) return ''.join(re.findall(self.exp, self.action(text)))
class BackgroundThread(QtCore.QThread): class BackgroundThread(QtCore.QThread):
@ -184,7 +184,7 @@ class MainWindow(QtGui.QMainWindow, CommandBase):
def update_recent_files(self): def update_recent_files(self):
previous_files = self.load_recent_projects() previous_files = self.load_recent_projects()
self.recent_separator.setVisible(len(previous_files) > 0) self.recent_separator.setVisible(len(previous_files) > 0)
for i in xrange(len(previous_files)): for i in range(len(previous_files)):
text = u'{} - {}'.format(i+1, os.path.basename(previous_files[i])) text = u'{} - {}'.format(i+1, os.path.basename(previous_files[i]))
action = self.recent_file_actions[i] action = self.recent_file_actions[i]
action.setText(text) action.setText(text)
@ -223,7 +223,7 @@ class MainWindow(QtGui.QMainWindow, CommandBase):
self.recent_file_actions = [] self.recent_file_actions = []
for i in xrange(MAX_RECENT): for i in range(MAX_RECENT):
if i == 9: if i == 9:
key = 0 key = 0
else: else:
@ -381,7 +381,7 @@ class MainWindow(QtGui.QMainWindow, CommandBase):
self.cancel_button.setEnabled(False) self.cancel_button.setEnabled(False)
def show_error(self, exception): def show_error(self, exception):
QtGui.QMessageBox.information(self, 'Error!', unicode(exception)) QtGui.QMessageBox.information(self, 'Error!', exception)
def disable_ui_while_working(self): def disable_ui_while_working(self):
self.option_settings_enabled(False) self.option_settings_enabled(False)
@ -413,10 +413,10 @@ class MainWindow(QtGui.QMainWindow, CommandBase):
for sgroup in self.settings['setting_groups']+[self.settings['web2exe_settings']]: for sgroup in self.settings['setting_groups']+[self.settings['web2exe_settings']]:
for sname, setting in sgroup.items(): for sname, setting in sgroup.items():
if setting.type in set(['file', 'folder']) and os.path.isabs(setting.value): if setting.type in set(['file', 'folder']) and os.path.isabs(setting.value):
setting_path = unicode(setting.value) setting_path = setting.value
else: else:
setting_path = utils.path_join(self.project_dir(), setting_path = utils.path_join(self.project_dir(),
unicode(setting.value)) setting.value)
if setting.required and not setting.value: if setting.required and not setting.value:
settings_valid = False settings_valid = False
@ -605,7 +605,7 @@ class MainWindow(QtGui.QMainWindow, CommandBase):
@progress_text.setter @progress_text.setter
def progress_text(self, value): def progress_text(self, value):
self.progress_label.setText(unicode(value)) self.progress_label.setText(value)
def run_in_background(self, method_name, callback): def run_in_background(self, method_name, callback):
self.thread = BackgroundThread(self, method_name) self.thread = BackgroundThread(self, method_name)
@ -737,7 +737,7 @@ class MainWindow(QtGui.QMainWindow, CommandBase):
path = QUrl.toPercentEncoding(url.path(), "!$&'()*+,;=:@/") path = QUrl.toPercentEncoding(url.path(), "!$&'()*+,;=:@/")
if path: if path:
path = unicode(path) path = str(path)
else: else:
path = u'/' path = u'/'
@ -1115,7 +1115,7 @@ class MainWindow(QtGui.QMainWindow, CommandBase):
text.textChanged.connect(self.call_with_object('setting_changed', text.textChanged.connect(self.call_with_object('setting_changed',
text, setting)) text, setting))
if setting.value: if setting.value:
text.setText(unicode(setting.value)) text.setText(setting.value)
text.setStatusTip(setting.description) text.setStatusTip(setting.description)
text.setToolTip(setting.description) text.setToolTip(setting.description)
@ -1139,7 +1139,7 @@ class MainWindow(QtGui.QMainWindow, CommandBase):
text, setting)) text, setting))
if setting.value: if setting.value:
text.setText(unicode(setting.value)) text.setText(setting.value)
text.setStatusTip(setting.description) text.setStatusTip(setting.description)
text.setToolTip(setting.description) text.setToolTip(setting.description)
@ -1167,7 +1167,7 @@ class MainWindow(QtGui.QMainWindow, CommandBase):
text, setting)) text, setting))
if setting.value: if setting.value:
text.setText(unicode(setting.value)) text.setText(setting.value)
text.setStatusTip(setting.description) text.setStatusTip(setting.description)
text.setToolTip(setting.description) text.setToolTip(setting.description)
@ -1195,12 +1195,12 @@ class MainWindow(QtGui.QMainWindow, CommandBase):
old_val = setting.default_value old_val = setting.default_value
setting.value = old_val.replace('\\', '\\\\') setting.value = old_val.replace('\\', '\\\\')
widget.setText(unicode(old_val)) widget.setText(old_val)
elif setting.type == 'strings': elif setting.type == 'strings':
old_val = [] old_val = []
if setting.default_value is not None: if setting.default_value is not None:
old_val = setting.default_value old_val = setting.default_value
setting.value = [unicode(v.replace('\\', '\\\\')) for v in old_val] setting.value = [v.replace('\\', '\\\\') for v in old_val]
widget.setText(','.join(setting.value)) widget.setText(','.join(setting.value))
elif setting.type == 'check': elif setting.type == 'check':
@ -1222,10 +1222,10 @@ class MainWindow(QtGui.QMainWindow, CommandBase):
def set_kiosk_emulation_options(self, is_checked): def set_kiosk_emulation_options(self, is_checked):
if is_checked: if is_checked:
width_field = self.find_child_by_name('width') width_field = self.find_child_by_name('width')
width_field.setText(unicode(self.desktop_width)) width_field.setText(self.desktop_width)
height_field = self.find_child_by_name('height') height_field = self.find_child_by_name('height')
height_field.setText(unicode(self.desktop_height)) height_field.setText(self.desktop_height)
toolbar_field = self.find_child_by_name('toolbar') toolbar_field = self.find_child_by_name('toolbar')
toolbar_field.setChecked(not is_checked) toolbar_field.setChecked(not is_checked)
@ -1367,7 +1367,7 @@ class MainWindow(QtGui.QMainWindow, CommandBase):
slider.setStatusTip(setting.description) slider.setStatusTip(setting.description)
slider.setToolTip(setting.description) slider.setToolTip(setting.description)
range_label = QtGui.QLabel(unicode(setting.default_value)) range_label = QtGui.QLabel(str(setting.default_value))
range_label.setMaximumWidth(30) range_label.setMaximumWidth(30)
slider.valueChanged.connect(self.call_with_object('_update_range_label', slider.valueChanged.connect(self.call_with_object('_update_range_label',
@ -1384,7 +1384,7 @@ class MainWindow(QtGui.QMainWindow, CommandBase):
return hlayout return hlayout
def _update_range_label(self, label, value): def _update_range_label(self, label, value):
label.setText(unicode(value)) label.setText(value)
def load_package_json(self, json_path=None): def load_package_json(self, json_path=None):
setting_list = super(MainWindow, self).load_package_json(json_path) setting_list = super(MainWindow, self).load_package_json(json_path)

6
png.py
View file

@ -1887,7 +1887,7 @@ class Reader:
while True: while True:
try: try:
type, data = self.chunk(lenient=lenient) type, data = self.chunk(lenient=lenient)
except ValueError, e: except ValueError as e:
raise ChunkError(e.args[0]) raise ChunkError(e.args[0])
if type == 'IEND': if type == 'IEND':
# http://www.w3.org/TR/PNG/#11IEND # http://www.w3.org/TR/PNG/#11IEND
@ -2752,5 +2752,5 @@ def _main(argv):
if __name__ == '__main__': if __name__ == '__main__':
try: try:
_main(sys.argv) _main(sys.argv)
except Error, e: except Error as e:
print >>sys.stderr, e print(e, file=sys.stderr)

View file

@ -27,7 +27,7 @@ def pngs_from_icns(icns_path):
if __name__ == '__main__': if __name__ == '__main__':
if len(sys.argv) != 3: if len(sys.argv) != 3:
print 'Usage: pycns input_image_path output_icns_path' print('Usage: pycns input_image_path output_icns_path')
sys.exit() sys.exit()
image_path, icns_path = sys.argv[1:3] image_path, icns_path = sys.argv[1:3]

View file

@ -1,5 +1,4 @@
pillow pillow
qt
pyside pyside
configobj configobj
semantic_version semantic_version

View file

@ -20,16 +20,9 @@ def get_temp_dir():
return tempfile.gettempdir() return tempfile.gettempdir()
def path_join(base, *rest): def path_join(base, *rest):
try:
base = base.decode('utf-8')
except UnicodeEncodeError:
base = unicode(base)
new_rest = [] new_rest = []
for i in xrange(len(rest)): for i in range(len(rest)):
try: new_rest.append(str(rest[i]))
new_rest.append(rest[i].decode('utf-8'))
except UnicodeEncodeError:
new_rest.append(unicode(rest[i]))
rpath = u'/'.join(new_rest) rpath = u'/'.join(new_rest)