You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
266 lines
11 KiB
266 lines
11 KiB
From ea59f869dcbd73b1d0dca973314604f689b50c34 Mon Sep 17 00:00:00 2001
|
|
From: Eli Schwartz <eschwartz93@gmail.com>
|
|
Date: Thu, 4 Jan 2024 16:18:00 -0500
|
|
Subject: [PATCH 1/2] hardwareprofile: remove external dependency on simplejson
|
|
|
|
This uses the requests module and converts requests responses to json
|
|
using requests' own `.json()` method on responses. For incomprehensible
|
|
reasons, requests has spent about a decade using either simplejson or
|
|
the standard library's json module more or less at will, and returning
|
|
either one or the other exception types. They don't know why they use
|
|
simplejson, we don't know why they use simplejson. In requests 3 (which
|
|
will be released in the Year Of The Linux Desktop or when pigs fly,
|
|
whichever one comes later) simplejson is dropped entirely.
|
|
|
|
There are innumerable issues discussing the problem on the requests
|
|
bugtracker, with the general consensus being that it's better to
|
|
randomly return either one of two different libraries and two different
|
|
library return types in errors -- because it was historically done that
|
|
way and people might be depending on it. ??????
|
|
|
|
Bugs:
|
|
|
|
https://github.com/psf/requests/pull/710
|
|
https://github.com/psf/requests/pull/2516
|
|
https://github.com/psf/requests/issues/3052
|
|
https://github.com/psf/requests/issues/4169
|
|
https://github.com/psf/requests/issues/4842
|
|
https://github.com/psf/requests/issues/5794
|
|
https://github.com/psf/requests/issues/6084
|
|
|
|
The awkward workaround is to guarantee that requests' silent behavior of
|
|
using simplejson *if it is installed* is forcibly triggered by forcibly
|
|
depending on simplejson, and then catching the simplejson exception.
|
|
|
|
The better solution here is pretty simple: do not rely on the requests
|
|
module's automatic json conversion, this is as simple as using the
|
|
already-imported json module and calling json.loads() on the retrieved
|
|
content.
|
|
|
|
Fixes: 1df343e9ab7defa284a73390210a65cf2112f17e
|
|
Reimplements: bb154a843b737cc3ad8c1a45fa04a1a3609aff05
|
|
(cherry picked from commit 6348dc01a45af6ed63c09326ec94cd425db1d6d7)
|
|
---
|
|
mythtv/configure | 1 -
|
|
mythtv/programs/scripts/hardwareprofile/smolt.py | 5 ++---
|
|
2 files changed, 2 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/mythtv/configure b/mythtv/configure
|
|
index 7e966ef817..3429c208e2 100755
|
|
--- a/mythtv/configure
|
|
+++ b/mythtv/configure
|
|
@@ -6555,7 +6555,6 @@ if enabled bindings_python; then
|
|
check_py_lib MySQLdb || disable_bindings_python "MySQLdb"
|
|
check_py_lib lxml || disable_bindings_python "lxml"
|
|
check_py_lib requests || disable_bindings_python "requests"
|
|
- check_py_lib simplejson || disable_bindings_python "simplejson"
|
|
check_py_lib future || disable_bindings_python "future"
|
|
fi
|
|
|
|
diff --git a/mythtv/programs/scripts/hardwareprofile/smolt.py b/mythtv/programs/scripts/hardwareprofile/smolt.py
|
|
index 1bcc8060d0..464f068d6f 100644
|
|
--- a/mythtv/programs/scripts/hardwareprofile/smolt.py
|
|
+++ b/mythtv/programs/scripts/hardwareprofile/smolt.py
|
|
@@ -50,7 +50,6 @@ except ImportError:
|
|
from urlparse import urlparse
|
|
import json
|
|
from json import JSONEncoder
|
|
-from simplejson import errors as sje
|
|
import datetime
|
|
import logging
|
|
|
|
@@ -790,8 +789,8 @@ class _HardwareProfile:
|
|
sys.exit(1)
|
|
|
|
try:
|
|
- admin_obj = admin_token.json()
|
|
- except sje.JSONDecodeError:
|
|
+ admin_obj = json.loads(admin_token.content)
|
|
+ except json.JSONDecodeError:
|
|
self.session.close()
|
|
error(_('Incorrect server response. Expected a JSON string'))
|
|
return (1, None, None)
|
|
--
|
|
2.41.0
|
|
|
|
|
|
From 7c1dbe7a86dc9b445a1a491f5a849b0eba21aead Mon Sep 17 00:00:00 2001
|
|
From: Eli Schwartz <eschwartz93@gmail.com>
|
|
Date: Wed, 13 Dec 2023 23:11:11 -0500
|
|
Subject: [PATCH 2/2] hardwareprofile: remove ancient "future" compatibility
|
|
library for python2
|
|
|
|
Ironically, for a package that was intended to provide portability
|
|
between python2 and python3, it is broken with python 3.12. A better
|
|
library to use in all cases is "six".
|
|
|
|
However, mythtv requires python 3.8 for a while now. Using
|
|
"future.standard_library" is a no-op other than costing a pointless
|
|
import and being troublesome to actually install.
|
|
|
|
The hacky copy of six.with_metaclass included in "future" is rewritten
|
|
to use the pure python3 form of a metaclass.
|
|
|
|
(cherry picked from commit 4a1ea331bb2b106e7ae7e7e9bb7970f71b8a84b3)
|
|
---
|
|
mythtv/configure | 1 -
|
|
.../scripts/hardwareprofile/MultipartPostHandler.py | 2 --
|
|
.../hardwareprofile/distros/mythtv_data/request.py | 2 --
|
|
.../scripts/hardwareprofile/distros/mythtv_data/uuiddb.py | 2 --
|
|
mythtv/programs/scripts/hardwareprofile/hwdata.py | 8 +++-----
|
|
mythtv/programs/scripts/hardwareprofile/os_detect.py | 5 ++---
|
|
mythtv/programs/scripts/hardwareprofile/request.py | 2 --
|
|
mythtv/programs/scripts/hardwareprofile/scan.py | 2 --
|
|
mythtv/programs/scripts/hardwareprofile/uuiddb.py | 2 --
|
|
9 files changed, 5 insertions(+), 21 deletions(-)
|
|
|
|
diff --git a/mythtv/configure b/mythtv/configure
|
|
index 3429c208e2..4bfbbd8c64 100755
|
|
--- a/mythtv/configure
|
|
+++ b/mythtv/configure
|
|
@@ -6555,7 +6555,6 @@ if enabled bindings_python; then
|
|
check_py_lib MySQLdb || disable_bindings_python "MySQLdb"
|
|
check_py_lib lxml || disable_bindings_python "lxml"
|
|
check_py_lib requests || disable_bindings_python "requests"
|
|
- check_py_lib future || disable_bindings_python "future"
|
|
fi
|
|
|
|
# Check for perl dependencies
|
|
diff --git a/mythtv/programs/scripts/hardwareprofile/MultipartPostHandler.py b/mythtv/programs/scripts/hardwareprofile/MultipartPostHandler.py
|
|
index 51619096b8..6ff2443d2e 100644
|
|
--- a/mythtv/programs/scripts/hardwareprofile/MultipartPostHandler.py
|
|
+++ b/mythtv/programs/scripts/hardwareprofile/MultipartPostHandler.py
|
|
@@ -41,8 +41,6 @@ Further Example:
|
|
"""
|
|
from __future__ import print_function
|
|
|
|
-from future import standard_library
|
|
-standard_library.install_aliases()
|
|
from builtins import object
|
|
from email.generator import _make_boundary
|
|
import mimetypes
|
|
diff --git a/mythtv/programs/scripts/hardwareprofile/distros/mythtv_data/request.py b/mythtv/programs/scripts/hardwareprofile/distros/mythtv_data/request.py
|
|
index 2ae4fd3fdd..81362ba8b7 100644
|
|
--- a/mythtv/programs/scripts/hardwareprofile/distros/mythtv_data/request.py
|
|
+++ b/mythtv/programs/scripts/hardwareprofile/distros/mythtv_data/request.py
|
|
@@ -21,8 +21,6 @@
|
|
# providing the base url, user agent, and proxy information.
|
|
# The object returned is slightly modified, with a shortcut to urlopen.
|
|
|
|
-from future import standard_library
|
|
-standard_library.install_aliases()
|
|
from builtins import object
|
|
import urllib.request, urllib.error, urllib.parse
|
|
import urllib.parse
|
|
diff --git a/mythtv/programs/scripts/hardwareprofile/distros/mythtv_data/uuiddb.py b/mythtv/programs/scripts/hardwareprofile/distros/mythtv_data/uuiddb.py
|
|
index 6960f8705a..9d22556c04 100644
|
|
--- a/mythtv/programs/scripts/hardwareprofile/distros/mythtv_data/uuiddb.py
|
|
+++ b/mythtv/programs/scripts/hardwareprofile/distros/mythtv_data/uuiddb.py
|
|
@@ -16,8 +16,6 @@
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
-from future import standard_library
|
|
-standard_library.install_aliases()
|
|
from builtins import map
|
|
from builtins import str
|
|
from builtins import object
|
|
diff --git a/mythtv/programs/scripts/hardwareprofile/hwdata.py b/mythtv/programs/scripts/hardwareprofile/hwdata.py
|
|
index ba297bf24f..0770d32b96 100644
|
|
--- a/mythtv/programs/scripts/hardwareprofile/hwdata.py
|
|
+++ b/mythtv/programs/scripts/hardwareprofile/hwdata.py
|
|
@@ -25,8 +25,6 @@ from __future__ import division
|
|
from __future__ import absolute_import
|
|
from builtins import int
|
|
from builtins import open
|
|
-from future import standard_library
|
|
-standard_library.install_aliases()
|
|
from builtins import object
|
|
from smolt_config import get_config_attr
|
|
|
|
@@ -71,9 +69,9 @@ class DeviceMap(object):
|
|
pass
|
|
else:
|
|
raise Exception('Hardware data file not found. Please set the location HWDATA_DIR in config.py')
|
|
-
|
|
-
|
|
-
|
|
+
|
|
+
|
|
+
|
|
vendors = {}
|
|
curvendor = None
|
|
curdevice = None
|
|
diff --git a/mythtv/programs/scripts/hardwareprofile/os_detect.py b/mythtv/programs/scripts/hardwareprofile/os_detect.py
|
|
index 7d0edee00e..beabf7d865 100644
|
|
--- a/mythtv/programs/scripts/hardwareprofile/os_detect.py
|
|
+++ b/mythtv/programs/scripts/hardwareprofile/os_detect.py
|
|
@@ -26,7 +26,6 @@
|
|
from __future__ import print_function
|
|
from builtins import object
|
|
import os
|
|
-from future.utils import with_metaclass
|
|
|
|
class OrderedType( type ):
|
|
# provide global sequencing for OS class and subclasses to ensure
|
|
@@ -37,7 +36,7 @@ class OrderedType( type ):
|
|
mcs.nextorder += 1
|
|
return type.__new__(mcs, name, bases, attrs)
|
|
|
|
-class OS( with_metaclass(OrderedType, object) ):
|
|
+class OS(metaclass=OrderedType):
|
|
_requires_func = True
|
|
def __init__(self, ostype=-1, func=None, inst=None):
|
|
if callable(ostype):
|
|
@@ -189,7 +188,7 @@ class OSInfoType( type ):
|
|
# fall through to Unknown
|
|
return 'Unknown'
|
|
|
|
-class get_os_info( with_metaclass(OSInfoType, object) ):
|
|
+class get_os_info(metaclass=OSInfoType):
|
|
@OS('nt')
|
|
def windows(self):
|
|
win_version = {
|
|
diff --git a/mythtv/programs/scripts/hardwareprofile/request.py b/mythtv/programs/scripts/hardwareprofile/request.py
|
|
index 6e6a20b9e7..d6668cef3d 100644
|
|
--- a/mythtv/programs/scripts/hardwareprofile/request.py
|
|
+++ b/mythtv/programs/scripts/hardwareprofile/request.py
|
|
@@ -21,8 +21,6 @@
|
|
# providing the base url, user agent, and proxy information.
|
|
# The object returned is slightly modified, with a shortcut to urlopen.
|
|
|
|
-from future import standard_library
|
|
-standard_library.install_aliases()
|
|
from builtins import object
|
|
|
|
try:
|
|
diff --git a/mythtv/programs/scripts/hardwareprofile/scan.py b/mythtv/programs/scripts/hardwareprofile/scan.py
|
|
index 1389400ece..d100bfe692 100644
|
|
--- a/mythtv/programs/scripts/hardwareprofile/scan.py
|
|
+++ b/mythtv/programs/scripts/hardwareprofile/scan.py
|
|
@@ -18,8 +18,6 @@
|
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
from __future__ import print_function
|
|
-from future import standard_library
|
|
-standard_library.install_aliases()
|
|
import smolt
|
|
import json
|
|
|
|
diff --git a/mythtv/programs/scripts/hardwareprofile/uuiddb.py b/mythtv/programs/scripts/hardwareprofile/uuiddb.py
|
|
index e7ba3891ec..3c2fc16d86 100644
|
|
--- a/mythtv/programs/scripts/hardwareprofile/uuiddb.py
|
|
+++ b/mythtv/programs/scripts/hardwareprofile/uuiddb.py
|
|
@@ -16,8 +16,6 @@
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
-from future import standard_library
|
|
-standard_library.install_aliases()
|
|
from builtins import object
|
|
import configparser
|
|
import logging
|
|
--
|
|
2.41.0
|
|
|