gh-112278: Disable WMI queries on Windows after they time out (GH-112658)

This commit is contained in:
AN Long 2023-12-08 01:26:29 +08:00 committed by GitHub
parent b2923a61a1
commit a955fd68d6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 44 additions and 15 deletions

View file

@ -118,6 +118,10 @@ import re
import sys
import functools
import itertools
try:
import _wmi
except ImportError:
_wmi = None
### Globals & Constants
@ -312,24 +316,26 @@ def _syscmd_ver(system='', release='', version='',
version = _norm_version(version)
return system, release, version
try:
import _wmi
except ImportError:
def _wmi_query(*keys):
def _wmi_query(table, *keys):
global _wmi
if not _wmi:
raise OSError("not supported")
else:
def _wmi_query(table, *keys):
table = {
"OS": "Win32_OperatingSystem",
"CPU": "Win32_Processor",
}[table]
table = {
"OS": "Win32_OperatingSystem",
"CPU": "Win32_Processor",
}[table]
try:
data = _wmi.exec_query("SELECT {} FROM {}".format(
",".join(keys),
table,
)).split("\0")
split_data = (i.partition("=") for i in data)
dict_data = {i[0]: i[2] for i in split_data}
return (dict_data[k] for k in keys)
except OSError:
_wmi = None
raise OSError("not supported")
split_data = (i.partition("=") for i in data)
dict_data = {i[0]: i[2] for i in split_data}
return (dict_data[k] for k in keys)
_WIN32_CLIENT_RELEASES = [