Skip to content

Commit 2ec5946

Browse files
authored
Small refactoring for RegistryEntries. (#731)
* Assign the bitwise operation result of `clsctx` to a temporary variable to avoid redundant formatting. * Improve the iterator implementation of `RegistryEntries`.
1 parent 998fb98 commit 2ec5946

File tree

1 file changed

+20
-31
lines changed

1 file changed

+20
-31
lines changed

comtypes/server/register.py

Lines changed: 20 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -230,10 +230,6 @@ def _get_serverdll():
230230
class RegistryEntries(object):
231231
def __init__(self, cls):
232232
self._cls = cls
233-
self._table = []
234-
235-
def _add(self, rootkey: int, subkey: str, name: str, value: str) -> None:
236-
self._table.append((rootkey, subkey, name, value))
237233

238234
def _get_full_classname(self, cls):
239235
"""Return <modulename>.<classname> for 'cls'."""
@@ -285,36 +281,36 @@ def __iter__(self) -> Iterator[Tuple[int, str, str, str]]:
285281
)
286282
if reg_desc:
287283
reg_desc = reg_desc.replace(".", " ")
288-
self._add(HKCR, f"CLSID\\{reg_clsid}", "", reg_desc)
284+
yield (HKCR, f"CLSID\\{reg_clsid}", "", reg_desc)
289285

290286
reg_progid = getattr(cls, "_reg_progid_", None)
291287
if reg_progid:
292288
# for ProgIDFromCLSID:
293-
self._add(HKCR, f"CLSID\\{reg_clsid}\\ProgID", "", reg_progid) # 1
289+
yield (HKCR, f"CLSID\\{reg_clsid}\\ProgID", "", reg_progid) # 1
294290

295291
# for CLSIDFromProgID
296292
if reg_desc:
297-
self._add(HKCR, reg_progid, "", reg_desc) # 2
298-
self._add(HKCR, f"{reg_progid}\\CLSID", "", reg_clsid) # 3
293+
yield (HKCR, reg_progid, "", reg_desc) # 2
294+
yield (HKCR, f"{reg_progid}\\CLSID", "", reg_clsid) # 3
299295

300296
reg_novers_progid = getattr(cls, "_reg_novers_progid_", None)
301297
if reg_novers_progid:
302-
self._add(
298+
yield (
303299
HKCR,
304300
f"CLSID\\{reg_clsid}\\VersionIndependentProgID", # 1a
305301
"",
306302
reg_novers_progid,
307303
)
308304
if reg_desc:
309-
self._add(HKCR, reg_novers_progid, "", reg_desc) # 2a
310-
self._add(HKCR, f"{reg_novers_progid}\\CurVer", "", reg_progid) #
311-
self._add(HKCR, f"{reg_novers_progid}\\CLSID", "", reg_clsid) # 3a
305+
yield (HKCR, reg_novers_progid, "", reg_desc) # 2a
306+
yield (HKCR, f"{reg_novers_progid}\\CurVer", "", reg_progid) #
307+
yield (HKCR, f"{reg_novers_progid}\\CLSID", "", reg_clsid) # 3a
312308

313-
clsctx = getattr(cls, "_reg_clsctx_", 0)
309+
clsctx: int = getattr(cls, "_reg_clsctx_", 0)
310+
localsvr_ctx = bool(clsctx & comtypes.CLSCTX_LOCAL_SERVER)
311+
inprocsvr_ctx = bool(clsctx & comtypes.CLSCTX_INPROC_SERVER)
314312

315-
if clsctx & comtypes.CLSCTX_LOCAL_SERVER and not hasattr(
316-
sys, "frozendllhandle"
317-
):
313+
if localsvr_ctx and not hasattr(sys, "frozendllhandle"):
318314
exe = sys.executable
319315
if " " in exe:
320316
exe = f'"{exe}"'
@@ -324,31 +320,26 @@ def __iter__(self) -> Iterator[Tuple[int, str, str, str]]:
324320
script = os.path.abspath(sys.modules[cls.__module__].__file__)
325321
if " " in script:
326322
script = f'"{script}"'
327-
self._add(
328-
HKCR, rf"CLSID\{reg_clsid}\LocalServer32", "", f"{exe} {script}"
329-
)
323+
yield (HKCR, rf"CLSID\{reg_clsid}\LocalServer32", "", f"{exe} {script}")
330324
else:
331-
self._add(HKCR, rf"CLSID\{reg_clsid}\LocalServer32", "", f"{exe}")
325+
yield (HKCR, rf"CLSID\{reg_clsid}\LocalServer32", "", f"{exe}")
332326

333327
# Register InprocServer32 only when run from script or from
334328
# py2exe dll server, not from py2exe exe server.
335-
if clsctx & comtypes.CLSCTX_INPROC_SERVER and getattr(sys, "frozen", None) in (
336-
None,
337-
"dll",
338-
):
339-
self._add(HKCR, rf"CLSID\{reg_clsid}\InprocServer32", "", _get_serverdll())
329+
if inprocsvr_ctx and getattr(sys, "frozen", None) in (None, "dll"):
330+
yield (HKCR, rf"CLSID\{reg_clsid}\InprocServer32", "", _get_serverdll())
340331
# only for non-frozen inproc servers the PythonPath/PythonClass is needed.
341332
if (
342333
not hasattr(sys, "frozendllhandle")
343334
or not comtypes.server.inprocserver._clsid_to_class
344335
):
345-
self._add(
336+
yield (
346337
HKCR,
347338
rf"CLSID\{reg_clsid}\InprocServer32",
348339
"PythonClass",
349340
self._get_full_classname(cls),
350341
)
351-
self._add(
342+
yield (
352343
HKCR,
353344
rf"CLSID\{reg_clsid}\InprocServer32",
354345
"PythonPath",
@@ -357,7 +348,7 @@ def __iter__(self) -> Iterator[Tuple[int, str, str, str]]:
357348

358349
reg_threading = getattr(cls, "_reg_threading_", None)
359350
if reg_threading is not None:
360-
self._add(
351+
yield (
361352
HKCR,
362353
rf"CLSID\{reg_clsid}\InprocServer32",
363354
"ThreadingModel",
@@ -366,9 +357,7 @@ def __iter__(self) -> Iterator[Tuple[int, str, str, str]]:
366357

367358
reg_tlib = getattr(cls, "_reg_typelib_", None)
368359
if reg_tlib is not None:
369-
self._add(HKCR, rf"CLSID\{reg_clsid}\Typelib", "", reg_tlib[0])
370-
371-
yield from self._table
360+
yield (HKCR, rf"CLSID\{reg_clsid}\Typelib", "", reg_tlib[0])
372361

373362

374363
################################################################

0 commit comments

Comments
 (0)