Skip to content

Commit 1e278fa

Browse files
committed
chg: make orjson optional
1 parent 92de3be commit 1e278fa

File tree

4 files changed

+33
-28
lines changed

4 files changed

+33
-28
lines changed

Diff for: glances/client.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,8 @@
1111
import sys
1212
import time
1313

14-
import orjson
15-
1614
from glances import __version__
17-
from glances.globals import Fault, ProtocolError, ServerProxy, Transport
15+
from glances.globals import Fault, ProtocolError, ServerProxy, Transport, json_loads
1816
from glances.logger import logger
1917
from glances.outputs.glances_curses import GlancesCursesClient
2018
from glances.stats_client import GlancesStatsClient
@@ -118,7 +116,7 @@ def _login_glances(self):
118116
if __version__.split('.')[0] == client_version.split('.')[0]:
119117
# Init stats
120118
self.stats = GlancesStatsClient(config=self.config, args=self.args)
121-
self.stats.set_plugins(orjson.loads(self.client.getAllPlugins()))
119+
self.stats.set_plugins(json_loads(self.client.getAllPlugins()))
122120
logger.debug(f"Client version: {__version__} / Server version: {client_version}")
123121
else:
124122
self.log_and_exit(
@@ -195,7 +193,7 @@ def update_glances(self):
195193
"""
196194
# Update the stats
197195
try:
198-
server_stats = orjson.loads(self.client.getAll())
196+
server_stats = json_loads(self.client.getAll())
199197
except OSError:
200198
# Client cannot get server stats
201199
return "Disconnected"

Diff for: glances/client_browser.py

+8-10
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,9 @@
1010

1111
import threading
1212

13-
import orjson
14-
1513
from glances.autodiscover import GlancesAutoDiscoverServer
1614
from glances.client import GlancesClient, GlancesClientTransport
17-
from glances.globals import Fault, ProtocolError, ServerProxy
15+
from glances.globals import Fault, ProtocolError, ServerProxy, json_loads
1816
from glances.logger import LOG_FILENAME, logger
1917
from glances.outputs.glances_curses_browser import GlancesCursesBrowser
2018
from glances.password_list import GlancesPasswordList as GlancesPassword
@@ -97,13 +95,13 @@ def __update_stats(self, server):
9795
# CPU%
9896
# logger.info(f"CPU stats {s.getPlugin('cpu')}")
9997
# logger.info(f"CPU views {s.getPluginView('cpu')}")
100-
server['cpu_percent'] = orjson.loads(s.getPlugin('cpu'))['total']
101-
server['cpu_percent_decoration'] = orjson.loads(s.getPluginView('cpu'))['total']['decoration']
98+
server['cpu_percent'] = json_loads(s.getPlugin('cpu'))['total']
99+
server['cpu_percent_decoration'] = json_loads(s.getPluginView('cpu'))['total']['decoration']
102100
# MEM%
103-
server['mem_percent'] = orjson.loads(s.getPlugin('mem'))['percent']
104-
server['mem_percent_decoration'] = orjson.loads(s.getPluginView('mem'))['percent']['decoration']
101+
server['mem_percent'] = json_loads(s.getPlugin('mem'))['percent']
102+
server['mem_percent_decoration'] = json_loads(s.getPluginView('mem'))['percent']['decoration']
105103
# OS (Human Readable name)
106-
server['hr_name'] = orjson.loads(s.getPlugin('system'))['hr_name']
104+
server['hr_name'] = json_loads(s.getPlugin('system'))['hr_name']
107105
server['hr_name_decoration'] = 'DEFAULT'
108106
except (OSError, Fault, KeyError) as e:
109107
logger.debug(f"Error while grabbing stats form server ({e})")
@@ -124,8 +122,8 @@ def __update_stats(self, server):
124122
# Optional stats (load is not available on Windows OS)
125123
try:
126124
# LOAD
127-
server['load_min5'] = round(orjson.loads(s.getPlugin('load'))['min5'], 1)
128-
server['load_min5_decoration'] = orjson.loads(s.getPluginView('load'))['min5']['decoration']
125+
server['load_min5'] = round(json_loads(s.getPlugin('load'))['min5'], 1)
126+
server['load_min5_decoration'] = json_loads(s.getPluginView('load'))['min5']['decoration']
129127
except Exception as e:
130128
logger.warning(f"Error while grabbing stats form server ({e})")
131129

Diff for: glances/globals.py

+16-6
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,22 @@
2727
from datetime import datetime
2828
from operator import itemgetter, methodcaller
2929
from statistics import mean
30+
from typing import Dict, List, Union
3031
from urllib.error import HTTPError, URLError
3132
from urllib.parse import urlparse
3233
from urllib.request import Request, urlopen
3334
from xmlrpc.client import Fault, ProtocolError, Server, ServerProxy, Transport
3435
from xmlrpc.server import SimpleXMLRPCRequestHandler, SimpleXMLRPCServer
3536

36-
import orjson
37-
38-
# Correct issue #1025 by monkey path the xmlrpc lib
3937
from defusedxml.xmlrpc import monkey_patch
4038

39+
# Optionally use orjson if available
40+
try:
41+
import orjson as json
42+
except ImportError:
43+
import json
44+
45+
# Correct issue #1025 by monkey path the xmlrpc lib
4146
monkey_patch()
4247

4348
##############
@@ -303,15 +308,20 @@ def urlopen_auth(url, username, password):
303308
)
304309

305310

306-
def json_dumps(data):
311+
def json_dumps(data) -> str:
307312
"""Return the object data in a JSON format.
308313
309314
Manage the issue #815 for Windows OS with UnicodeDecodeError catching.
310315
"""
311316
try:
312-
return orjson.dumps(data)
317+
return json.dumps(data)
313318
except UnicodeDecodeError:
314-
return orjson.dumps(data, ensure_ascii=False)
319+
return json.dumps(data, ensure_ascii=False)
320+
321+
322+
def json_loads(data: Union[str, bytes, bytearray]) -> Union[Dict, List]:
323+
"""Load a JSON buffer into memory as a Python object"""
324+
return json.loads(data)
315325

316326

317327
def dictlist(data, item):

Diff for: glances/plugins/vms/engines/multipass.py

+6-7
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,11 @@
88

99
"""Multipass Extension unit for Glances' Vms plugin."""
1010

11+
import json
1112
import os
1213
from typing import Any, Dict, List, Tuple
1314

14-
import orjson
15-
16-
from glances.globals import nativestr
15+
from glances.globals import json_loads, nativestr
1716
from glances.secure import secure_popen
1817

1918
# Check if multipass binary exist
@@ -40,8 +39,8 @@ def update_version(self):
4039
# }
4140
ret_cmd = secure_popen(f'{MULTIPASS_PATH} {MULTIPASS_VERSION_OPTIONS}')
4241
try:
43-
ret = orjson.loads(ret_cmd)
44-
except orjson.JSONDecodeError:
42+
ret = json_loads(ret_cmd)
43+
except json.JSONDecodeError:
4544
return {}
4645
else:
4746
return ret.get('multipass', None)
@@ -84,8 +83,8 @@ def update_info(self):
8483
# }
8584
ret_cmd = secure_popen(f'{MULTIPASS_PATH} {MULTIPASS_INFO_OPTIONS}')
8685
try:
87-
ret = orjson.loads(ret_cmd)
88-
except orjson.JSONDecodeError:
86+
ret = json_loads(ret_cmd)
87+
except json.JSONDecodeError:
8988
return {}
9089
else:
9190
return ret.get('info', {})

0 commit comments

Comments
 (0)