From 47b2983f28357dee8bd29bda7909386dc8d44950 Mon Sep 17 00:00:00 2001 From: nicolargo Date: Mon, 22 Apr 2019 10:40:29 +0200 Subject: [PATCH] Improve string encodeing/deconding --- glances/compat.py | 34 ++++++++++++++++++------------ glances/folder_list.py | 1 + glances/outputs/glances_curses.py | 1 + glances/plugins/glances_diskio.py | 5 +++-- glances/plugins/glances_folders.py | 3 ++- glances/plugins/glances_fs.py | 3 ++- glances/plugins/glances_network.py | 4 +++- 7 files changed, 33 insertions(+), 18 deletions(-) diff --git a/glances/compat.py b/glances/compat.py index ac971075..c19bde05 100644 --- a/glances/compat.py +++ b/glances/compat.py @@ -21,7 +21,8 @@ # pylint: skip-file """Python 2/3 compatibility shims.""" -from __future__ import print_function +from __future__ import print_function, unicode_literals + import operator import sys import unicodedata @@ -84,23 +85,29 @@ if PY3: def itervalues(d): return iter(d.values()) - def u(s): + def u(s, errors='replace'): if isinstance(s, text_type): return s - return s.decode('utf-8', 'replace') + return s.decode('utf-8', errors=errors) - def b(s): + def b(s, errors='replace'): if isinstance(s, binary_type): return s - return s.encode('utf-8') + return s.encode('utf-8', errors=errors) - def nativestr(s): + def n(s): + '''Only in Python 2... + from future.utils import bytes_to_native_str as n + ''' + return s + + def nativestr(s, errors='replace'): if isinstance(s, text_type): return s elif isinstance(s, (int, float)): return s.__str__() else: - return s.decode('utf-8', 'replace') + return s.decode('utf-8', errors=errors) def system_exec(command): """Execute a system command and return the resul as a str""" @@ -113,6 +120,7 @@ if PY3: return res.rstrip() else: + from future.utils import bytes_to_native_str as n import Queue as queue from itertools import imap as map from ConfigParser import SafeConfigParser as ConfigParser, NoOptionError, NoSectionError @@ -167,23 +175,23 @@ else: def itervalues(d): return d.itervalues() - def u(s): + def u(s, errors='replace'): if isinstance(s, text_type): return s - return s.decode('utf-8') + return s.decode('utf-8', errors=errors) - def b(s): + def b(s, errors='replace'): if isinstance(s, binary_type): return s - return s.encode('utf-8', 'replace') + return s.encode('utf-8', errors=errors) - def nativestr(s): + def nativestr(s, errors='replace'): if isinstance(s, binary_type): return s elif isinstance(s, (int, float)): return s.__str__() else: - return s.encode('utf-8', 'replace') + return s.encode('utf-8', errors=errors) def system_exec(command): """Execute a system command and return the resul as a str""" diff --git a/glances/folder_list.py b/glances/folder_list.py index 892cdfeb..cbd5df15 100644 --- a/glances/folder_list.py +++ b/glances/folder_list.py @@ -18,6 +18,7 @@ # along with this program. If not, see . """Manage the folder list.""" +from __future__ import unicode_literals import os diff --git a/glances/outputs/glances_curses.py b/glances/outputs/glances_curses.py index 230408aa..3251ad0e 100644 --- a/glances/outputs/glances_curses.py +++ b/glances/outputs/glances_curses.py @@ -18,6 +18,7 @@ # along with this program. If not, see . """Curses interface class.""" +from __future__ import unicode_literals import re import sys diff --git a/glances/plugins/glances_diskio.py b/glances/plugins/glances_diskio.py index 1b3b6bd1..0635115f 100644 --- a/glances/plugins/glances_diskio.py +++ b/glances/plugins/glances_diskio.py @@ -18,8 +18,9 @@ # along with this program. If not, see . """Disk I/O plugin.""" +from __future__ import unicode_literals -from glances.compat import nativestr +from glances.compat import nativestr, n from glances.timer import getTimeSinceLastUpdate from glances.plugins.glances_plugin import GlancesPlugin @@ -110,7 +111,7 @@ class Plugin(GlancesPlugin): self.diskio_old[disk].write_bytes) diskstat = { 'time_since_update': time_since_update, - 'disk_name': disk, + 'disk_name': n(disk), 'read_count': read_count, 'write_count': write_count, 'read_bytes': read_bytes, diff --git a/glances/plugins/glances_folders.py b/glances/plugins/glances_folders.py index f6505221..014343d6 100644 --- a/glances/plugins/glances_folders.py +++ b/glances/plugins/glances_folders.py @@ -18,10 +18,11 @@ # along with this program. If not, see . """Folder plugin.""" +from __future__ import unicode_literals import numbers -from glances.compat import nativestr +from glances.compat import nativestr, n from glances.folder_list import FolderList as glancesFolderList from glances.plugins.glances_plugin import GlancesPlugin from glances.logger import logger diff --git a/glances/plugins/glances_fs.py b/glances/plugins/glances_fs.py index 80e3a028..27eec413 100644 --- a/glances/plugins/glances_fs.py +++ b/glances/plugins/glances_fs.py @@ -18,10 +18,11 @@ # along with this program. If not, see . """File system plugin.""" +from __future__ import unicode_literals import operator -from glances.compat import u, nativestr +from glances.compat import u, nativestr, n from glances.plugins.glances_plugin import GlancesPlugin import psutil diff --git a/glances/plugins/glances_network.py b/glances/plugins/glances_network.py index 34e3429b..90535355 100644 --- a/glances/plugins/glances_network.py +++ b/glances/plugins/glances_network.py @@ -18,12 +18,14 @@ # along with this program. If not, see . """Network plugin.""" +from __future__ import unicode_literals import base64 import operator from glances.timer import getTimeSinceLastUpdate from glances.plugins.glances_plugin import GlancesPlugin +from glances.compat import n, u, b, nativestr import psutil @@ -119,7 +121,7 @@ class Plugin(GlancesPlugin): rx = cumulative_rx - self.network_old[net].bytes_recv tx = cumulative_tx - self.network_old[net].bytes_sent cx = rx + tx - netstat = {'interface_name': net, + netstat = {'interface_name': n(net), 'time_since_update': time_since_update, 'cumulative_rx': cumulative_rx, 'rx': rx,