Changeset beb4f8
- Timestamp:
- 02/23/2017 12:30:10 AM (8 years ago)
- Branches:
- 2.0.x, develop, master
- Children:
- 52a85c
- Parents:
- 3b1eeb0
- git-author:
- Calum Lind <calumlind+deluge@gmail.com> (02/22/2017 12:53:20 PM)
- git-committer:
- Calum Lind <calumlind+deluge@gmail.com> (02/23/2017 12:30:10 AM)
- Location:
- deluge
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
deluge/common.py
r3b1eeb0 rbeb4f8 778 778 else: 779 779 try: 780 return ipaddress.IPv6Address(decode_ string(ip))780 return ipaddress.IPv6Address(decode_bytes(ip)) 781 781 except ipaddress.AddressValueError: 782 782 pass … … 785 785 786 786 787 def decode_ string(s, encoding='utf8'):788 """ 789 Decodes a string and return unicode. If it cannot decode using 790 `:param:encoding` then it will try latin1, and if that fails,791 try to detect the string encoding. If that fails, decode with792 ignore.793 794 :param s: string to decode795 :type s: string796 :param encoding: the encoding to use in the decoding797 :type encoding: string 798 :returns: s converted to unicode799 :rtype: unicode800 801 """ 802 if not s:787 def decode_bytes(byte_str, encoding='utf8'): 788 """Decodes a byte string and return unicode. 789 790 If it cannot decode using `encoding` then it will try latin1, 791 and if that fails, try to detect the string encoding. If that fails, 792 decode with ignore. 793 794 Args: 795 byte_str (bytes): The byte string to decode. 796 encoding (str): The encoding to try first when decoding. 797 798 Returns: 799 str: A unicode string. 800 801 """ 802 if not byte_str: 803 803 return '' 804 elif isinstance( s, unicode):805 return s804 elif isinstance(byte_str, unicode): 805 return byte_str 806 806 807 807 encodings = [lambda: ('utf8', 'strict'), 808 808 lambda: ('iso-8859-1', 'strict'), 809 lambda: (chardet.detect( s)['encoding'], 'strict'),809 lambda: (chardet.detect(byte_str)['encoding'], 'strict'), 810 810 lambda: (encoding, 'ignore')] 811 811 … … 815 815 for l in encodings: 816 816 try: 817 return s.decode(*l())817 return byte_str.decode(*l()) 818 818 except UnicodeDecodeError: 819 819 pass … … 834 834 """ 835 835 if isinstance(s, str): 836 s = decode_ string(s, encoding).encode('utf8')836 s = decode_bytes(s, encoding).encode('utf8') 837 837 elif isinstance(s, unicode): 838 838 s = s.encode('utf8') … … 840 840 841 841 842 def convert_to_utf8(data):842 def utf8_encode_structure(data): 843 843 """Recursively convert all unicode keys and values in a data structure to utf8. 844 844 … … 852 852 853 853 """ 854 855 854 if isinstance(data, unicode): 856 855 return data.encode('utf8') 857 856 elif isinstance(data, (list, tuple)): 858 return type(data)(map( convert_to_utf8, data))857 return type(data)(map(utf8_encode_structure, data)) 859 858 elif isinstance(data, dict): 860 return dict(map( convert_to_utf8, data.items()))859 return dict(map(utf8_encode_structure, data.items())) 861 860 else: 862 861 return data -
deluge/config.py
r3b1eeb0 rbeb4f8 48 48 import shutil 49 49 50 from deluge.common import decode_ string, get_default_config_dir, utf8_encoded50 from deluge.common import decode_bytes, get_default_config_dir, utf8_encoded 51 51 52 52 log = logging.getLogger(__name__) … … 246 246 """ 247 247 if isinstance(self.__config[key], basestring): 248 return decode_ string(self.__config[key])248 return decode_bytes(self.__config[key]) 249 249 else: 250 250 return self.__config[key] -
deluge/core/alertmanager.py
r3b1eeb0 rbeb4f8 24 24 import deluge.component as component 25 25 from deluge._libtorrent import lt 26 from deluge.common import decode_ string26 from deluge.common import decode_bytes 27 27 28 28 log = logging.getLogger(__name__) … … 113 113 # Display the alert message 114 114 if log.isEnabledFor(logging.DEBUG): 115 log.debug('%s: %s', alert_type, decode_ string(alert.message()))115 log.debug('%s: %s', alert_type, decode_bytes(alert.message())) 116 116 # Call any handlers for this alert type 117 117 if alert_type in self.handlers: -
deluge/core/torrent.py
r3b1eeb0 rbeb4f8 27 27 import deluge.component as component 28 28 from deluge._libtorrent import lt 29 from deluge.common import decode_ string, utf8_encoded29 from deluge.common import decode_bytes, utf8_encoded 30 30 from deluge.configmanager import ConfigManager, get_config_dir 31 31 from deluge.core.authmanager import AUTH_LEVEL_ADMIN … … 613 613 # auto-manage status will be reverted upon resuming. 614 614 self.handle.auto_managed(False) 615 self.set_status_message(decode_ string(status_error))615 self.set_status_message(decode_bytes(status_error)) 616 616 elif status.moving_storage: 617 617 self.state = 'Moving' … … 762 762 continue 763 763 764 client = decode_ string(peer.client)764 client = decode_bytes(peer.client) 765 765 766 766 try: … … 869 869 handle_name = self.handle.name() 870 870 if handle_name: 871 name = decode_ string(handle_name)871 name = decode_bytes(handle_name) 872 872 else: 873 873 name = self.torrent_id … … 1014 1014 'tracker_status': lambda: self.tracker_status, 1015 1015 'upload_payload_rate': lambda: self.status.upload_payload_rate, 1016 'comment': lambda: decode_ string(self.torrent_info.comment()) if self.has_metadata else '',1016 'comment': lambda: decode_bytes(self.torrent_info.comment()) if self.has_metadata else '', 1017 1017 'num_files': lambda: self.torrent_info.num_files() if self.has_metadata else 0, 1018 1018 'num_pieces': lambda: self.torrent_info.num_pieces() if self.has_metadata else 0, … … 1115 1115 1116 1116 """ 1117 dest = decode_ string(dest)1117 dest = decode_bytes(dest) 1118 1118 1119 1119 if not os.path.exists(dest): … … 1254 1254 for index, filename in filenames: 1255 1255 # Make sure filename is a unicode object 1256 filename = sanitize_filepath(decode_ string(filename))1256 filename = sanitize_filepath(decode_bytes(filename)) 1257 1257 # libtorrent needs unicode object if wstrings are enabled, utf8 bytestring otherwise 1258 1258 try: -
deluge/core/torrentmanager.py
r3b1eeb0 rbeb4f8 25 25 import deluge.component as component 26 26 from deluge._libtorrent import lt 27 from deluge.common import decode_ string, get_magnet_info, utf8_encoded27 from deluge.common import decode_bytes, get_magnet_info, utf8_encoded 28 28 from deluge.configmanager import ConfigManager, get_config_dir 29 29 from deluge.core.authmanager import AUTH_LEVEL_ADMIN … … 359 359 if options['mapped_files'] and torrent_info: 360 360 for index, fname in options['mapped_files'].items(): 361 fname = sanitize_filepath(decode_ string(fname))361 fname = sanitize_filepath(decode_bytes(fname)) 362 362 if log.isEnabledFor(logging.DEBUG): 363 363 log.debug('renaming file index %s to %s', index, fname) … … 1046 1046 return 1047 1047 # Set the tracker status for the torrent 1048 torrent.set_tracker_status('Warning: %s' % decode_ string(alert.message()))1048 torrent.set_tracker_status('Warning: %s' % decode_bytes(alert.message())) 1049 1049 1050 1050 def on_alert_tracker_error(self, alert): … … 1055 1055 return 1056 1056 1057 error_message = decode_ string(alert.error_message())1057 error_message = decode_bytes(alert.error_message()) 1058 1058 if not error_message: 1059 1059 error_message = alert.error.message() 1060 log.debug('Tracker Error Alert: %s [%s]', decode_ string(alert.message()), error_message)1060 log.debug('Tracker Error Alert: %s [%s]', decode_bytes(alert.message()), error_message) 1061 1061 torrent.set_tracker_status('Error: ' + error_message) 1062 1062 … … 1086 1086 return 1087 1087 1088 log.warning('on_alert_storage_moved_failed: %s', decode_ string(alert.message()))1088 log.warning('on_alert_storage_moved_failed: %s', decode_bytes(alert.message())) 1089 1089 # Set an Error message and pause the torrent 1090 alert_msg = decode_ string(alert.message()).split(':', 1)[1].strip()1090 alert_msg = decode_bytes(alert.message()).split(':', 1)[1].strip() 1091 1091 torrent.force_error_state('Failed to move download folder: %s' % alert_msg) 1092 1092 … … 1146 1146 1147 1147 if torrent_id in self.waiting_on_resume_data: 1148 self.waiting_on_resume_data[torrent_id].errback(Exception(decode_ string(alert.message())))1148 self.waiting_on_resume_data[torrent_id].errback(Exception(decode_bytes(alert.message()))) 1149 1149 1150 1150 def on_alert_fastresume_rejected(self, alert): … … 1156 1156 return 1157 1157 1158 alert_msg = decode_ string(alert.message())1158 alert_msg = decode_bytes(alert.message()) 1159 1159 log.error('on_alert_fastresume_rejected: %s', alert_msg) 1160 1160 if alert.error.value() == 134: … … 1180 1180 return 1181 1181 1182 new_name = decode_ string(alert.new_name)1182 new_name = decode_bytes(alert.new_name) 1183 1183 log.debug('index: %s name: %s', alert.index, new_name) 1184 1184 … … 1252 1252 """ 1253 1253 1254 external_ip = decode_ string(alert.message()).split(' ')[-1]1254 external_ip = decode_bytes(alert.message()).split(' ')[-1] 1255 1255 log.info('on_alert_external_ip: %s', external_ip) 1256 1256 component.get('EventManager').emit(ExternalIPEvent(external_ip)) … … 1258 1258 def on_alert_performance(self, alert): 1259 1259 """Alert handler for libtorrent performance_alert""" 1260 log.warning('on_alert_performance: %s, %s', decode_ string(alert.message()), alert.warning_code)1260 log.warning('on_alert_performance: %s, %s', decode_bytes(alert.message()), alert.warning_code) 1261 1261 if alert.warning_code == lt.performance_warning_t.send_buffer_watermark_too_low: 1262 1262 max_send_buffer_watermark = 3 * 1024 * 1024 # 3MiB -
deluge/httpdownloader.py
r3b1eeb0 rbeb4f8 20 20 from twisted.web.error import PageRedirect 21 21 22 from deluge.common import convert_to_utf8, get_version22 from deluge.common import get_version, utf8_encode_structure 23 23 24 24 log = logging.getLogger(__name__) … … 176 176 url = url.encode('utf8') 177 177 filename = filename.encode('utf8') 178 headers = convert_to_utf8(headers) if headers else headers178 headers = utf8_encode_structure(headers) if headers else headers 179 179 factory = HTTPDownloader(url, filename, callback, headers, force_filename, allow_compression) 180 180 -
deluge/maketorrent.py
r3b1eeb0 rbeb4f8 15 15 16 16 from deluge.bencode import bencode 17 from deluge.common import convert_to_utf8, get_path_size17 from deluge.common import get_path_size, utf8_encode_structure 18 18 19 19 … … 195 195 # Write out the torrent file 196 196 with open(torrent_path, 'wb') as _file: 197 _file.write(bencode( convert_to_utf8(torrent)))197 _file.write(bencode(utf8_encode_structure(torrent))) 198 198 199 199 def get_data_path(self): -
deluge/tests/test_torrent.py
r3b1eeb0 rbeb4f8 19 19 import deluge.tests.common as common 20 20 from deluge._libtorrent import lt 21 from deluge.common import convert_to_utf821 from deluge.common import utf8_encode_structure 22 22 from deluge.core.core import Core 23 23 from deluge.core.rpcserver import RPCServer … … 181 181 with open(filename) as _file: 182 182 filedump = _file.read() 183 resume_data = convert_to_utf8(resume_data)183 resume_data = utf8_encode_structure(resume_data) 184 184 torrent_id = yield self.core.torrentmanager.add(state=torrent_state, filedump=filedump, 185 185 resume_data=lt.bencode(resume_data)) -
deluge/tests/test_ui_entry.py
r3b1eeb0 rbeb4f8 25 25 import deluge.ui.console.main 26 26 import deluge.ui.web.server 27 from deluge.common import convert_to_utf827 from deluge.common import utf8_encode_structure 28 28 from deluge.ui import ui_entry 29 29 from deluge.ui.web.server import DelugeWeb … … 169 169 self.var['cmd_name'] = 'deluge gtk' 170 170 self.var['start_cmd'] = ui_entry.start_ui 171 self.var['sys_arg_cmd'] = convert_to_utf8(['./deluge', 'gtk'])171 self.var['sys_arg_cmd'] = utf8_encode_structure(['./deluge', 'gtk']) 172 172 173 173 def set_up(self): -
deluge/tests/test_webserver.py
r3b1eeb0 rbeb4f8 19 19 from twisted.web.http_headers import Headers 20 20 21 from deluge.common import convert_to_utf821 from deluge.common import utf8_encode_structure 22 22 23 23 from . import common … … 47 47 url = 'http://127.0.0.1:%s/json' % self.webserver_listen_port 48 48 49 d = yield agent.request(b'POST', url.encode('utf-8'), Headers( convert_to_utf8(headers)),49 d = yield agent.request(b'POST', url.encode('utf-8'), Headers(utf8_encode_structure(headers)), 50 50 FileBodyProducer(StringIO(input_file.encode('utf-8')))) 51 51 try: -
deluge/ui/common.py
r3b1eeb0 rbeb4f8 21 21 import deluge.configmanager 22 22 from deluge import bencode 23 from deluge.common import decode_ string23 from deluge.common import decode_bytes 24 24 25 25 log = logging.getLogger(__name__) … … 167 167 # using the encoding found. 168 168 if 'name.utf-8' in self.__m_metadata['info']: 169 self.__m_name = decode_ string(self.__m_metadata['info']['name.utf-8'])169 self.__m_name = decode_bytes(self.__m_metadata['info']['name.utf-8']) 170 170 else: 171 self.__m_name = decode_ string(self.__m_metadata['info']['name'], self.encoding)171 self.__m_name = decode_bytes(self.__m_metadata['info']['name'], self.encoding) 172 172 173 173 # Get list of files from torrent info … … 181 181 for index, f in enumerate(self.__m_metadata['info']['files']): 182 182 if 'path.utf-8' in f: 183 path = decode_ string(os.path.join(prefix, *f['path.utf-8']))183 path = decode_bytes(os.path.join(prefix, *f['path.utf-8'])) 184 184 del f['path.utf-8'] 185 185 else: 186 path = os.path.join(prefix, decode_ string(os.path.join(*f['path']), self.encoding))186 path = os.path.join(prefix, decode_bytes(os.path.join(*f['path']), self.encoding)) 187 187 f['path'] = path 188 188 f['index'] = index -
deluge/ui/console/modes/addtorrents.py
r3b1eeb0 rbeb4f8 182 182 183 183 for row in self.raw_rows: 184 filename = deluge.common.decode_ string(row[0])184 filename = deluge.common.decode_bytes(row[0]) 185 185 size = row[1] 186 186 time = row[2] -
deluge/ui/gtkui/ipcinterface.py
r3b1eeb0 rbeb4f8 24 24 25 25 import deluge.component as component 26 from deluge.common import decode_ string, is_magnet, is_url, windows_check26 from deluge.common import decode_bytes, is_magnet, is_url, windows_check 27 27 from deluge.configmanager import ConfigManager, get_config_dir 28 28 from deluge.ui.client import client … … 207 207 if urlparse(arg).scheme == 'file': 208 208 arg = url2pathname(urlparse(arg).path) 209 path = os.path.abspath(decode_ string(arg))209 path = os.path.abspath(decode_bytes(arg)) 210 210 211 211 if not os.path.exists(path): -
deluge/ui/gtkui/preferences.py
r3b1eeb0 rbeb4f8 911 911 912 912 if response == gtk.RESPONSE_OK: 913 filepath = deluge.common.decode_ string(chooser.get_filename())913 filepath = deluge.common.decode_bytes(chooser.get_filename()) 914 914 else: 915 915 chooser.destroy()
Note:
See TracChangeset
for help on using the changeset viewer.