From b7b786f59c08709cadfe2f8d115d6e7b62bbbae2 Mon Sep 17 00:00:00 2001 From: newwingbird Date: Sat, 16 Nov 2024 22:10:40 +0900 Subject: [PATCH 1/8] Refactor string formatting in automation.py --- comtypes/automation.py | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/comtypes/automation.py b/comtypes/automation.py index fa7b68c86..f6bbbea57 100644 --- a/comtypes/automation.py +++ b/comtypes/automation.py @@ -209,14 +209,14 @@ def __del__(self): def __repr__(self): if self.vt & VT_BYREF: - return "VARIANT(vt=0x%x, byref(%r))" % (self.vt, self[0]) + return f"VARIANT(vt=0x{self.vt:x}, byref({self[0]!r}))" elif self is type(self).null: return "VARIANT.null" elif self is type(self).empty: return "VARIANT.empty" elif self is type(self).missing: return "VARIANT.missing" - return "VARIANT(vt=0x%x, %r)" % (self.vt, self.value) + return f"VARIANT(vt=0x{self.vt:x}, {self.value!r})" @classmethod def from_param(cls, value): @@ -425,7 +425,7 @@ def _set_value(self, value): else: self.vt = _ctype_to_vartype[type(ref)] | VT_BYREF else: - raise TypeError("Cannot put %r in VARIANT" % value) + raise TypeError(f"Cannot put {value!r} in VARIANT") # buffer -> SAFEARRAY of VT_UI1 ? # c:/sf/pywin32/com/win32com/src/oleargs.cpp 197 @@ -521,7 +521,7 @@ def _get_value(self, dynamic=False): typ = _vartype_to_ctype[self.vt & ~VT_ARRAY] return cast(self._.pparray, _midlSAFEARRAY(typ)).unpack() else: - raise NotImplementedError("typecode %d = 0x%x)" % (vt, vt)) + raise NotImplementedError(f"typecode {vt} = 0x{vt:x})") def __getitem__(self, index): if index != 0: @@ -711,17 +711,7 @@ class tagEXCEPINFO(Structure): scode: int def __repr__(self): - return "" % ( - ( - self.wCode, - self.bstrSource, - self.bstrDescription, - self.bstrHelpFile, - self.dwHelpContext, - self.pfnDeferredFillIn, - self.scode, - ), - ) + return f"" tagEXCEPINFO._fields_ = [ @@ -917,7 +907,7 @@ def Invoke(self, dispid: int, *args: Any, **kw: Any) -> Any: raise COMError( hresult, text, - ("TypeError: Parameter %s" % (argerr.value + 1), args), + (f"TypeError: Parameter {argerr.value + 1}", args), ) raise return result._get_value(dynamic=True) From a5d7e66f5bc8bd8fe69768397fcbbc8da2843e0d Mon Sep 17 00:00:00 2001 From: newwingbird Date: Sat, 16 Nov 2024 22:13:46 +0900 Subject: [PATCH 2/8] Refactor string formatting in _cominterface_meta_patcher.py --- comtypes/_post_coinit/_cominterface_meta_patcher.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/comtypes/_post_coinit/_cominterface_meta_patcher.py b/comtypes/_post_coinit/_cominterface_meta_patcher.py index 78e064e66..67f7efc03 100644 --- a/comtypes/_post_coinit/_cominterface_meta_patcher.py +++ b/comtypes/_post_coinit/_cominterface_meta_patcher.py @@ -17,7 +17,7 @@ def __getattr__(self, name): try: fixed_name = self.__map_case__[name.lower()] except KeyError: - raise AttributeError(name) # Should we use exception-chaining? + raise AttributeError(f"{name}") # Should we use exception-chaining? if fixed_name != name: # prevent unbounded recursion return getattr(self, fixed_name) raise AttributeError(name) @@ -122,8 +122,8 @@ def __setitem__(self, index, value): else: raise except TypeError: - msg = "%r object does not support item assignment" - raise TypeError(msg % type(self)) + msg = f"{type(self)!r} object does not support item assignment" + raise TypeError(msg) def iterator(itf: Type) -> None: From 8b392f2c3b76e8ac810c48f4bb4dcf7d8f9de154 Mon Sep 17 00:00:00 2001 From: newwingbird Date: Sat, 16 Nov 2024 22:59:55 +0900 Subject: [PATCH 3/8] Refactor string formatting to use f-strings in _comobject.py --- comtypes/_comobject.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/comtypes/_comobject.py b/comtypes/_comobject.py index 0ce4512b6..e1122fb4c 100644 --- a/comtypes/_comobject.py +++ b/comtypes/_comobject.py @@ -76,8 +76,7 @@ def winerror(exc): # cases we return a generic error code. return E_FAIL raise TypeError( - "Expected comtypes.COMERROR or WindowsError instance, got %s" - % type(exc).__name__ + f"Expected comtypes.COMERROR or WindowsError instance, got {type(exc).__name__}" ) @@ -178,7 +177,7 @@ def call_without_this(this, *args): args[args_out_idx[0]][0] = result elif args_out != 0: if len(result) != args_out: - msg = "Method should have returned a %s-tuple" % args_out + msg = f"Method should have returned a {args_out}-tuple" raise ValueError(msg) for i, value in enumerate(result): args[args_out_idx[i]][0] = value @@ -198,7 +197,7 @@ def call_without_this(this, *args): except (ValueError, TypeError): msg = str(details) else: - msg = "%s: %s" % (source, descr) + msg = f"{source}: {descr}" hr = HRESULT_FROM_WIN32(hr) return ReportError(msg, iid=interface._iid_, clsid=clsid, hresult=hr) except WindowsError as details: @@ -251,7 +250,7 @@ def find_method(self, fq_name, mthname): return getattr(self.inst, mthname) def find_impl(self, interface, mthname, paramflags, idlflags): - fq_name = "%s_%s" % (interface.__name__, mthname) + fq_name = f"{interface.__name__}_{mthname}" if interface._case_insensitive_: # simple name, like 'QueryInterface' mthname = self.names.get(mthname.lower(), mthname) @@ -306,7 +305,7 @@ def _create_vtbl_type(fields, itf): class Vtbl(Structure): _fields_ = fields - Vtbl.__name__ = "Vtbl_%s" % itf.__name__ + Vtbl.__name__ = f"Vtbl_{itf.__name__}" _vtbl_types[fields] = Vtbl return Vtbl From 0848d0cf4f4bd63c90128b2233a1a501a1e81dc6 Mon Sep 17 00:00:00 2001 From: newwingbird Date: Sat, 16 Nov 2024 23:06:29 +0900 Subject: [PATCH 4/8] Refactor string formatting to use f-strings in _memberspec.py --- comtypes/_memberspec.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/comtypes/_memberspec.py b/comtypes/_memberspec.py index 1797c3f2b..6f77e21f3 100644 --- a/comtypes/_memberspec.py +++ b/comtypes/_memberspec.py @@ -64,7 +64,7 @@ def _resolve_argspec( elif typ is ctypes.POINTER(VARIANT): defval = ctypes.pointer(VARIANT.missing) else: - # msg = ("'optional' only allowed for VARIANT and VARIANT*, not for %s" % typ.__name__) + # msg = f"'optional' only allowed for VARIANT and VARIANT*, not for {typ.__name__}" # warnings.warn(msg, IDLWarning, stacklevel=2) defval = typ() if defval is _NOTHING: @@ -175,14 +175,15 @@ def COMMETHOD(idlflags, restype, methodname, *argspec) -> _ComMemberSpec: # join them together(does this make sense?) and replace by None if empty. helptext = "".join(t for t in idlflags if isinstance(t, helpstring)) or None paramflags, argtypes = _resolve_argspec(argspec) - if "propget" in idlflags: - name = "_get_%s" % methodname - elif "propput" in idlflags: - name = "_set_%s" % methodname - elif "propputref" in idlflags: - name = "_setref_%s" % methodname - else: - name = methodname + name = ( + f"_get_{methodname}" + if "propget" in idlflags + else f"_set_{methodname}" + if "propput" in idlflags + else f"_setref_{methodname}" + if "propputref" in idlflags + else methodname + ) return _ComMemberSpec( restype, name, argtypes, paramflags, tuple(idlflags), helptext ) @@ -382,7 +383,7 @@ def __iter__(self) -> Iterator[Tuple[str, _UnionT[property, "named_property"]]]: # Hm, must be a descriptor where the __get__ method # returns a bound object having __getitem__ and # __setitem__ methods. - prop = named_property("%s.%s" % (self._cls_name, name), fget, fset, doc) + prop = named_property(f"{self._cls_name}.{name}", fget, fset, doc) yield (name, prop) def to_propget_keys(self, m: _MemberSpec) -> Tuple[str, _DocType, int]: @@ -605,7 +606,7 @@ def __setitem__(self, index, value): self.fset(self.instance, index, value) def __repr__(self): - return "" % (self.name, id(self)) + return f"" def __iter__(self): """Explicitly disallow iteration.""" @@ -630,4 +631,4 @@ def __set__(self, instance): raise AttributeError("Unsettable attribute") def __repr__(self): - return "" % (self.name, id(self)) + return f"" From 2d5ee2e3dd4fa58d718d286985718966bac5b25e Mon Sep 17 00:00:00 2001 From: newwingbird Date: Sat, 16 Nov 2024 23:11:18 +0900 Subject: [PATCH 5/8] Refactor string formatting to use f-strings in _memberspec.py --- comtypes/_memberspec.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/comtypes/_memberspec.py b/comtypes/_memberspec.py index 6f77e21f3..4790ccb76 100644 --- a/comtypes/_memberspec.py +++ b/comtypes/_memberspec.py @@ -610,7 +610,7 @@ def __repr__(self): def __iter__(self): """Explicitly disallow iteration.""" - msg = "%r is not iterable" % self.name + msg = f"{self.name!r} is not iterable" raise TypeError(msg) From 58034d9c6654136fb604974ea897852b1ddc1c9f Mon Sep 17 00:00:00 2001 From: newwingbird <62642238+newwingbird@users.noreply.github.com> Date: Sat, 16 Nov 2024 23:57:18 +0900 Subject: [PATCH 6/8] Updated modification. Co-authored-by: Jun Komoda <45822440+junkmd@users.noreply.github.com> --- comtypes/automation.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/comtypes/automation.py b/comtypes/automation.py index f6bbbea57..705bce2ee 100644 --- a/comtypes/automation.py +++ b/comtypes/automation.py @@ -711,7 +711,8 @@ class tagEXCEPINFO(Structure): scode: int def __repr__(self): - return f"" + info = (self.wCode, self.bstrSource, self.bstrDescription, self.bstrHelpFile, self.dwHelpContext, self.pfnDeferredFillIn, self.scode) + return f"" tagEXCEPINFO._fields_ = [ From 78f70a856bdd674902ec090b12ca78b27303d296 Mon Sep 17 00:00:00 2001 From: newwingbird Date: Sun, 17 Nov 2024 00:11:17 +0900 Subject: [PATCH 7/8] Updated modification by review sugestion --- comtypes/_memberspec.py | 17 ++++++++--------- .../_post_coinit/_cominterface_meta_patcher.py | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/comtypes/_memberspec.py b/comtypes/_memberspec.py index 4790ccb76..fad70987a 100644 --- a/comtypes/_memberspec.py +++ b/comtypes/_memberspec.py @@ -175,15 +175,14 @@ def COMMETHOD(idlflags, restype, methodname, *argspec) -> _ComMemberSpec: # join them together(does this make sense?) and replace by None if empty. helptext = "".join(t for t in idlflags if isinstance(t, helpstring)) or None paramflags, argtypes = _resolve_argspec(argspec) - name = ( - f"_get_{methodname}" - if "propget" in idlflags - else f"_set_{methodname}" - if "propput" in idlflags - else f"_setref_{methodname}" - if "propputref" in idlflags - else methodname - ) + if "propget" in idlflags: + name = f"_get_{methodname}" + elif "propput" in idlflags: + name = f"_set_{methodname}" + elif "propputref" in idlflags: + name = f"_setref_{methodname}" + else: + name = methodname return _ComMemberSpec( restype, name, argtypes, paramflags, tuple(idlflags), helptext ) diff --git a/comtypes/_post_coinit/_cominterface_meta_patcher.py b/comtypes/_post_coinit/_cominterface_meta_patcher.py index 67f7efc03..21da07a3e 100644 --- a/comtypes/_post_coinit/_cominterface_meta_patcher.py +++ b/comtypes/_post_coinit/_cominterface_meta_patcher.py @@ -17,7 +17,7 @@ def __getattr__(self, name): try: fixed_name = self.__map_case__[name.lower()] except KeyError: - raise AttributeError(f"{name}") # Should we use exception-chaining? + raise AttributeError(name) # Should we use exception-chaining? if fixed_name != name: # prevent unbounded recursion return getattr(self, fixed_name) raise AttributeError(name) From eb5617b0090700b271af8c3d06b7f007bbc567d5 Mon Sep 17 00:00:00 2001 From: newwingbird Date: Sun, 17 Nov 2024 00:25:08 +0900 Subject: [PATCH 8/8] fmt by ruff --- comtypes/automation.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/comtypes/automation.py b/comtypes/automation.py index 705bce2ee..61797dd8e 100644 --- a/comtypes/automation.py +++ b/comtypes/automation.py @@ -711,7 +711,15 @@ class tagEXCEPINFO(Structure): scode: int def __repr__(self): - info = (self.wCode, self.bstrSource, self.bstrDescription, self.bstrHelpFile, self.dwHelpContext, self.pfnDeferredFillIn, self.scode) + info = ( + self.wCode, + self.bstrSource, + self.bstrDescription, + self.bstrHelpFile, + self.dwHelpContext, + self.pfnDeferredFillIn, + self.scode, + ) return f""