@@ -230,10 +230,6 @@ def _get_serverdll():
230230class 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