From 41da8be815e213e4e67dda644ef2d97781c2d94f Mon Sep 17 00:00:00 2001 From: Avasam Date: Sun, 13 Oct 2024 19:43:01 -0400 Subject: [PATCH] pycln: cleanup of more imports (#2342) --- AutoDuck/TOCToHHK.py | 1 - .../pywin/framework/editor/ModuleBrowser.py | 2 +- Pythonwin/pywin/framework/editor/__init__.py | 4 +- Pythonwin/pywin/framework/editor/document.py | 1 - Pythonwin/pywin/framework/interact.py | 2 +- Pythonwin/pywin/framework/intpydde.py | 8 ++- Pythonwin/pywin/framework/toolmenu.py | 2 - Pythonwin/pywin/scintilla/bindings.py | 4 +- Pythonwin/pywin/scintilla/view.py | 2 +- Pythonwin/pywin/test/test_pywin.py | 2 +- adodbapi/__init__.py | 1 + adodbapi/test/adodbapitest.py | 1 - com/win32com/client/combrowse.py | 3 - com/win32com/client/util.py | 2 +- com/win32com/demos/excelAddin.py | 2 +- com/win32com/demos/iebutton.py | 3 - com/win32com/server/dispatcher.py | 2 +- com/win32com/server/policy.py | 4 +- com/win32com/servers/test_pycomtest.py | 1 - com/win32com/test/testADOEvents.py | 2 +- com/win32com/test/testAXScript.py | 3 +- com/win32com/test/testDictionary.py | 5 +- com/win32com/test/testExchange.py | 3 +- com/win32com/test/testMSOffice.py | 2 +- com/win32com/test/testMSOfficeEvents.py | 2 +- com/win32com/test/testPyComTest.py | 4 +- com/win32com/test/testServers.py | 3 +- com/win32com/test/testall.py | 3 +- com/win32com/test/util.py | 4 +- .../authorization/demos/EditSecurity.py | 25 +------- .../demos/EditServiceSecurity.py | 19 ------ com/win32comext/axscript/client/debug.py | 3 - com/win32comext/axscript/client/pydumper.py | 1 - com/win32comext/axscript/client/pyscript.py | 1 - .../axscript/client/scriptdispatch.py | 1 - com/win32comext/axscript/server/axsite.py | 1 - com/win32comext/axscript/test/leakTest.py | 1 - com/win32comext/axscript/test/testHost4Dbg.py | 3 - com/win32comext/mapi/emsabtags.py | 1 + com/win32comext/propsys/test/testpropsys.py | 2 +- .../shell/demos/servers/column_provider.py | 1 - .../shell/demos/servers/copy_hook.py | 2 +- .../shell/demos/servers/icon_handler.py | 2 +- .../shell/demos/servers/shell_view.py | 1 - isapi/install.py | 3 +- pycln.toml | 34 ++++++----- win32/Demos/security/account_rights.py | 1 - win32/Demos/security/get_policy_info.py | 1 - win32/Demos/security/list_rights.py | 1 - win32/Demos/security/localized_names.py | 7 ++- win32/Demos/security/query_information.py | 2 +- win32/Demos/security/set_policy_info.py | 1 - win32/Demos/service/pipeTestService.py | 19 +++--- win32/Demos/service/pipeTestServiceClient.py | 9 ++- win32/Demos/win32clipboardDemo.py | 13 +++- win32/Demos/win32comport_demo.py | 34 ++++++++++- win32/Demos/win32gui_menu.py | 61 ++++++++++++++++++- win32/Lib/winxptheme.py | 2 +- win32/test/test_clipboard.py | 13 +++- win32/test/test_win32crypt.py | 16 ++++- win32/test/test_win32gui.py | 1 - win32/test/test_win32inet.py | 21 ++++++- win32/test/test_win32net.py | 1 - 63 files changed, 231 insertions(+), 151 deletions(-) diff --git a/AutoDuck/TOCToHHK.py b/AutoDuck/TOCToHHK.py index edeb8457e3..81fd75a883 100644 --- a/AutoDuck/TOCToHHK.py +++ b/AutoDuck/TOCToHHK.py @@ -1,4 +1,3 @@ -import os.path import sys """ diff --git a/Pythonwin/pywin/framework/editor/ModuleBrowser.py b/Pythonwin/pywin/framework/editor/ModuleBrowser.py index 634de43917..a0210eca87 100644 --- a/Pythonwin/pywin/framework/editor/ModuleBrowser.py +++ b/Pythonwin/pywin/framework/editor/ModuleBrowser.py @@ -8,7 +8,7 @@ import win32con import win32ui from pywin.mfc import afxres -from pywin.tools import browser, hierlist +from pywin.tools import hierlist class HierListCLBRModule(hierlist.HierListItem): diff --git a/Pythonwin/pywin/framework/editor/__init__.py b/Pythonwin/pywin/framework/editor/__init__.py index 59a52cd34e..f237244924 100644 --- a/Pythonwin/pywin/framework/editor/__init__.py +++ b/Pythonwin/pywin/framework/editor/__init__.py @@ -100,4 +100,6 @@ def SetEditorFontOption(option, newValue): SetEditorOption(option, str(newValue)) -from pywin.framework.editor.color.coloreditor import editorTemplate +from pywin.framework.editor.color.coloreditor import ( # nopycln: import + editorTemplate as editorTemplate, # Adds doc template & Re-export +) diff --git a/Pythonwin/pywin/framework/editor/document.py b/Pythonwin/pywin/framework/editor/document.py index a78cb3eea7..1579dbfe62 100644 --- a/Pythonwin/pywin/framework/editor/document.py +++ b/Pythonwin/pywin/framework/editor/document.py @@ -8,7 +8,6 @@ import win32con import win32ui from pywin.framework.editor import GetEditorOption -from pywin.mfc import docview, object BAK_NONE = 0 BAK_DOT_BAK = 1 diff --git a/Pythonwin/pywin/framework/interact.py b/Pythonwin/pywin/framework/interact.py index 1d940c3ca6..c26bf6e829 100644 --- a/Pythonwin/pywin/framework/interact.py +++ b/Pythonwin/pywin/framework/interact.py @@ -14,7 +14,7 @@ import pywin.framework.app import pywin.scintilla.control import pywin.scintilla.formatter -import pywin.scintilla.IDLEenvironment +import pywin.scintilla.IDLEenvironment # nopycln: import # Injects fast_readline into the IDLE auto-indent extension import win32api import win32clipboard import win32con diff --git a/Pythonwin/pywin/framework/intpydde.py b/Pythonwin/pywin/framework/intpydde.py index 2401cdc566..9c4c50b238 100644 --- a/Pythonwin/pywin/framework/intpydde.py +++ b/Pythonwin/pywin/framework/intpydde.py @@ -10,7 +10,13 @@ import win32api import win32ui -from dde import * +from dde import ( # nopycln: import # Re-exported for intpyapp.py + CBF_FAIL_SELFCONNECTIONS as CBF_FAIL_SELFCONNECTIONS, # noqa: PLC0414 + CreateConversation as CreateConversation, # noqa: PLC0414 + CreateServer, + CreateServerSystemTopic, + error as error, # noqa: PLC0414 +) from pywin.mfc import object diff --git a/Pythonwin/pywin/framework/toolmenu.py b/Pythonwin/pywin/framework/toolmenu.py index d1b7e80bbe..2666468993 100644 --- a/Pythonwin/pywin/framework/toolmenu.py +++ b/Pythonwin/pywin/framework/toolmenu.py @@ -6,8 +6,6 @@ import win32con import win32ui -from . import app - tools = {} idPos = 100 diff --git a/Pythonwin/pywin/scintilla/bindings.py b/Pythonwin/pywin/scintilla/bindings.py index e35be8a574..76b7739e6e 100644 --- a/Pythonwin/pywin/scintilla/bindings.py +++ b/Pythonwin/pywin/scintilla/bindings.py @@ -6,7 +6,9 @@ import win32con import win32ui -from . import IDLEenvironment, keycodes +from . import ( # nopycln: import # Injects fast_readline into the IDLE auto-indent extension + IDLEenvironment, +) HANDLER_ARGS_GUESS = 0 HANDLER_ARGS_NATIVE = 1 diff --git a/Pythonwin/pywin/scintilla/view.py b/Pythonwin/pywin/scintilla/view.py index 1cbc26e0d2..99680f18ed 100644 --- a/Pythonwin/pywin/scintilla/view.py +++ b/Pythonwin/pywin/scintilla/view.py @@ -12,7 +12,7 @@ from pywin.mfc import afxres, docview from . import ( - IDLEenvironment, # IDLE emulation. + IDLEenvironment, # nopycln: import # Injects fast_readline into the IDLE auto-indent extension bindings, control, scintillacon, diff --git a/Pythonwin/pywin/test/test_pywin.py b/Pythonwin/pywin/test/test_pywin.py index b38d87ec03..6cf973a92d 100644 --- a/Pythonwin/pywin/test/test_pywin.py +++ b/Pythonwin/pywin/test/test_pywin.py @@ -376,7 +376,7 @@ def test_ia(self): def test_docedit(self): import tempfile - import pywin.scintilla.IDLEenvironment + import pywin.scintilla.IDLEenvironment # nopycln: import # Injects fast_readline into the IDLE auto-indent extension ##doc = pywin.framework.editor.editorTemplate.OpenDocumentFile(None) def t_print(*args): diff --git a/adodbapi/__init__.py b/adodbapi/__init__.py index 94a04bee36..b569936aa2 100644 --- a/adodbapi/__init__.py +++ b/adodbapi/__init__.py @@ -1,3 +1,4 @@ +# nopycln: file # undecidable cases due to explicit re-exports https://github.com/hadialqattan/pycln/issues/205 """adodbapi - A python DB API 2.0 (PEP 249) interface to Microsoft ADO Copyright (C) 2002 Henrik Ekelund, version 2.1 by Vernon Cole diff --git a/adodbapi/test/adodbapitest.py b/adodbapi/test/adodbapitest.py index fc5babf9bc..1b50e595f8 100644 --- a/adodbapi/test/adodbapitest.py +++ b/adodbapi/test/adodbapitest.py @@ -33,7 +33,6 @@ import adodbapitestconfig as config # run the configuration module. # will set sys.path to find correct version of adodbapi import tryconnection # in our code below, all our switches are from config.whatever -import win32com.client import adodbapi import adodbapi.apibase as api diff --git a/com/win32com/client/combrowse.py b/com/win32com/client/combrowse.py index d2abacf144..f83aa9c9b0 100644 --- a/com/win32com/client/combrowse.py +++ b/com/win32com/client/combrowse.py @@ -93,8 +93,6 @@ def CalculateIsExpandable(self): rc = 0 return rc - pass - class HLI_IEnumMoniker(HLI_Enum): def GetSubList(self): @@ -583,7 +581,6 @@ def GetSubList(self): def main(modal=True, mdi=False): - from pywin.tools import hierlist root = HLIRoot("COM Browser") if mdi and "pywin.framework.app" in sys.modules: diff --git a/com/win32com/client/util.py b/com/win32com/client/util.py index 33f5763367..8a2e4eb361 100644 --- a/com/win32com/client/util.py +++ b/com/win32com/client/util.py @@ -5,7 +5,7 @@ """ import pythoncom -from win32com.client import Dispatch, _get_good_object_ +from win32com.client import _get_good_object_ PyIDispatchType = pythoncom.TypeIIDs[pythoncom.IID_IDispatch] diff --git a/com/win32com/demos/excelAddin.py b/com/win32com/demos/excelAddin.py index 18a76eb8be..786745d8c5 100644 --- a/com/win32com/demos/excelAddin.py +++ b/com/win32com/demos/excelAddin.py @@ -50,7 +50,7 @@ import pythoncom from win32com import universal -from win32com.client import Dispatch, DispatchWithEvents, constants, gencache +from win32com.client import DispatchWithEvents, constants, gencache # Support for COM objects we use. gencache.EnsureModule( diff --git a/com/win32com/demos/iebutton.py b/com/win32com/demos/iebutton.py index 6ded24c9f0..7ccfe866fd 100644 --- a/com/win32com/demos/iebutton.py +++ b/com/win32com/demos/iebutton.py @@ -30,8 +30,6 @@ import win32api import win32com import win32com.server.register -from win32com import universal -from win32com.client import Dispatch, DispatchWithEvents, constants, gencache, getevents # This demo uses 'print' - use win32traceutil to see it if we have no # console. @@ -40,7 +38,6 @@ except win32api.error: import win32traceutil -import array from win32com.axcontrol import axcontrol diff --git a/com/win32com/server/dispatcher.py b/com/win32com/server/dispatcher.py index 241edfef89..d7ef82a6f6 100644 --- a/com/win32com/server/dispatcher.py +++ b/com/win32com/server/dispatcher.py @@ -236,7 +236,7 @@ def _trace_(self, *args): try: - import win32trace + import win32trace # nopycln: import # Check for win32traceutil w/o importing it DefaultDebugDispatcher: type[DispatcherTrace] = DispatcherWin32trace except ImportError: # no win32trace module - just use a print based one. diff --git a/com/win32com/server/policy.py b/com/win32com/server/policy.py index 2c6bc44728..0c1f924271 100644 --- a/com/win32com/server/policy.py +++ b/com/win32com/server/policy.py @@ -66,8 +66,6 @@ problem, rather than a COM error. """ -__author__ = "Greg Stein and Mark Hammond" - import sys import types @@ -92,6 +90,8 @@ from .exception import COMException +__author__ = "Greg Stein and Mark Hammond" + S_OK = 0 # Few more globals to speed things. diff --git a/com/win32com/servers/test_pycomtest.py b/com/win32com/servers/test_pycomtest.py index da606efa84..bf6d8fa7ac 100644 --- a/com/win32com/servers/test_pycomtest.py +++ b/com/win32com/servers/test_pycomtest.py @@ -6,7 +6,6 @@ import winerror # Ensure the vtables in the tlb are known. -from win32com import universal from win32com.client import constants, gencache from win32com.server.exception import COMException from win32com.server.util import wrap diff --git a/com/win32com/test/testADOEvents.py b/com/win32com/test/testADOEvents.py index c79b2f7e88..3b0aa83493 100644 --- a/com/win32com/test/testADOEvents.py +++ b/com/win32com/test/testADOEvents.py @@ -2,7 +2,7 @@ import time import pythoncom -from win32com.client import Dispatch, DispatchWithEvents, constants +from win32com.client import DispatchWithEvents, constants finished = 0 # Flag for the wait loop from (3) to test diff --git a/com/win32com/test/testAXScript.py b/com/win32com/test/testAXScript.py index d1dc7f11c7..ac5753668d 100644 --- a/com/win32com/test/testAXScript.py +++ b/com/win32com/test/testAXScript.py @@ -15,10 +15,9 @@ def setUp(self): file = win32api.GetFullPathName( os.path.join(next(iter(win32com.axscript.client.__path__)), "pyscript.py") ) - from win32com.test.util import RegisterPythonServer self.verbose = verbose - RegisterPythonServer(file, "python", verbose=self.verbose) + win32com.test.util.RegisterPythonServer(file, "python", verbose=self.verbose) def testHost(self): file = win32api.GetFullPathName( diff --git a/com/win32com/test/testDictionary.py b/com/win32com/test/testDictionary.py index 020efb6068..4a2edc1e0d 100644 --- a/com/win32com/test/testDictionary.py +++ b/com/win32com/test/testDictionary.py @@ -26,9 +26,10 @@ def TestDictAgainst(dict, check): # Ensure we have the correct version registered. def Register(quiet): import win32com.servers.dictionary - from win32com.test.util import RegisterPythonServer - RegisterPythonServer(win32com.servers.dictionary.__file__, "Python.Dictionary") + win32com.test.util.RegisterPythonServer( + win32com.servers.dictionary.__file__, "Python.Dictionary" + ) def TestDict(quiet=None): diff --git a/com/win32com/test/testExchange.py b/com/win32com/test/testExchange.py index c20b9c0d4c..119c16a17b 100644 --- a/com/win32com/test/testExchange.py +++ b/com/win32com/test/testExchange.py @@ -6,7 +6,7 @@ import os import pythoncom -from win32com.client import constants, gencache +from win32com.client import gencache ammodule = None # was the generated module! @@ -91,7 +91,6 @@ def TestUser(session): def test(): - import win32com.client oldcwd = os.getcwd() try: diff --git a/com/win32com/test/testMSOffice.py b/com/win32com/test/testMSOffice.py index 37a37fe935..514b9b55f5 100644 --- a/com/win32com/test/testMSOffice.py +++ b/com/win32com/test/testMSOffice.py @@ -182,7 +182,7 @@ def TestAll(): traceback.print_exc() try: - import xl5en32 + import xl5en32 # nopycln: import # Test import. TODO: Is testing Excel 95 still relevant ? mod = gencache.EnsureModule("{00020813-0000-0000-C000-000000000046}", 9, 1, 0) xl = win32com.client.Dispatch("Excel.Application.5") diff --git a/com/win32com/test/testMSOfficeEvents.py b/com/win32com/test/testMSOfficeEvents.py index f44e1d9b8b..7874edafca 100644 --- a/com/win32com/test/testMSOfficeEvents.py +++ b/com/win32com/test/testMSOfficeEvents.py @@ -6,7 +6,7 @@ import types import pythoncom -from win32com.client import Dispatch, DispatchWithEvents +from win32com.client import DispatchWithEvents stopEvent = threading.Event() diff --git a/com/win32com/test/testPyComTest.py b/com/win32com/test/testPyComTest.py index 3d0a422db1..6b9b7f7923 100644 --- a/com/win32com/test/testPyComTest.py +++ b/com/win32com/test/testPyComTest.py @@ -14,15 +14,15 @@ import win32api import win32com import win32com.client.connect +import win32com.test.util import win32timezone import winerror from win32com.client import VARIANT, CastTo, DispatchBaseClass, constants -from win32com.test.util import RegisterPythonServer importMsg = "**** PyCOMTest is not installed ***\n PyCOMTest is a Python test specific COM client and server.\n It is likely this server is not installed on this machine\n To install the server, you must get the win32com sources\n and build it using MS Visual C++" # This test uses a Python implemented COM server - ensure correctly registered. -RegisterPythonServer( +win32com.test.util.RegisterPythonServer( os.path.join(os.path.dirname(__file__), "..", "servers", "test_pycomtest.py"), "Python.Test.PyCOMTest", ) diff --git a/com/win32com/test/testServers.py b/com/win32com/test/testServers.py index f25009bfcf..a7b7964431 100644 --- a/com/win32com/test/testServers.py +++ b/com/win32com/test/testServers.py @@ -16,9 +16,8 @@ class InterpCase(win32com.test.util.TestCase): def setUp(self): # Ensure the correct version registered. from win32com.servers import interp - from win32com.test.util import RegisterPythonServer - RegisterPythonServer(interp.__file__, "Python.Interpreter") + win32com.test.util.RegisterPythonServer(interp.__file__, "Python.Interpreter") def _testInterp(self, interp): self.assertEqual(interp.Eval("1+1"), 2) diff --git a/com/win32com/test/testall.py b/com/win32com/test/testall.py index 9667f2348a..db30a0a8ee 100644 --- a/com/win32com/test/testall.py +++ b/com/win32com/test/testall.py @@ -23,14 +23,13 @@ import pythoncom import win32com.client +from pywin32_testutil import TestLoader, TestRunner from win32com.test.util import ( CapturingFunctionTestCase, CheckClean, RegisterPythonServer, ShellTestCase, TestCase, - TestLoader, - TestRunner, ) verbosity = 1 # default unittest verbosity. diff --git a/com/win32com/test/util.py b/com/win32com/test/util.py index fd3820a38e..877d99bf12 100644 --- a/com/win32com/test/util.py +++ b/com/win32com/test/util.py @@ -1,4 +1,3 @@ -import gc import logging import os import sys @@ -13,7 +12,6 @@ import win32com import winerror from pythoncom import _GetGatewayCount, _GetInterfaceCount -from pywin32_testutil import LeakTestCase, TestLoader, TestResult, TestRunner def CheckClean(): @@ -213,7 +211,7 @@ def restore_test_logger(prev_logger): def CapturingFunctionTestCase(*args, **kw): real_test = _CapturingFunctionTestCase(*args, **kw) - return LeakTestCase(real_test) + return pywin32_testutil.LeakTestCase(real_test) class _CapturingFunctionTestCase(unittest.FunctionTestCase): # , TestCaseMixin): diff --git a/com/win32comext/authorization/demos/EditSecurity.py b/com/win32comext/authorization/demos/EditSecurity.py index 48df43b17a..8f9f8c5c5f 100644 --- a/com/win32comext/authorization/demos/EditSecurity.py +++ b/com/win32comext/authorization/demos/EditSecurity.py @@ -1,6 +1,5 @@ import os -import ntsecuritycon import pythoncom import win32api import win32com.server.policy @@ -12,43 +11,21 @@ FILE_GENERIC_EXECUTE, FILE_GENERIC_READ, FILE_GENERIC_WRITE, - FILE_READ_ATTRIBUTES, - FILE_READ_DATA, - FILE_READ_EA, - FILE_WRITE_ATTRIBUTES, FILE_WRITE_DATA, - FILE_WRITE_EA, - PSPCB_SI_INITDIALOG, READ_CONTROL, - SI_ACCESS_CONTAINER, SI_ACCESS_GENERAL, - SI_ACCESS_PROPERTY, SI_ACCESS_SPECIFIC, SI_ADVANCED, SI_CONTAINER, SI_EDIT_ALL, - SI_EDIT_AUDITS, - SI_EDIT_PROPERTIES, - SI_PAGE_ADVPERM, - SI_PAGE_AUDIT, - SI_PAGE_OWNER, - SI_PAGE_PERM, SI_PAGE_TITLE, SI_RESET, - STANDARD_RIGHTS_EXECUTE, - STANDARD_RIGHTS_READ, - STANDARD_RIGHTS_WRITE, - SYNCHRONIZE, WRITE_DAC, WRITE_OWNER, ) from pythoncom import IID_NULL from win32com.authorization import authorization -from win32com.shell.shellcon import ( # # Msg parameter to PropertySheetPageCallback - PSPCB_CREATE, - PSPCB_RELEASE, -) -from win32security import CONTAINER_INHERIT_ACE, INHERIT_ONLY_ACE, OBJECT_INHERIT_ACE +from win32security import CONTAINER_INHERIT_ACE, OBJECT_INHERIT_ACE class SecurityInformation(win32com.server.policy.DesignatedWrapPolicy): diff --git a/com/win32comext/authorization/demos/EditServiceSecurity.py b/com/win32comext/authorization/demos/EditServiceSecurity.py index f60f71a7c9..5d16810658 100644 --- a/com/win32comext/authorization/demos/EditServiceSecurity.py +++ b/com/win32comext/authorization/demos/EditServiceSecurity.py @@ -6,7 +6,6 @@ import os -import ntsecuritycon import pythoncom import win32api import win32com.server.policy @@ -30,35 +29,17 @@ SERVICE_GENERIC_WRITE = win32service.SERVICE_CHANGE_CONFIG from ntsecuritycon import ( - PSPCB_SI_INITDIALOG, READ_CONTROL, - SI_ACCESS_CONTAINER, SI_ACCESS_GENERAL, - SI_ACCESS_PROPERTY, SI_ACCESS_SPECIFIC, SI_ADVANCED, - SI_CONTAINER, SI_EDIT_ALL, - SI_EDIT_AUDITS, - SI_EDIT_PROPERTIES, - SI_PAGE_ADVPERM, - SI_PAGE_AUDIT, - SI_PAGE_OWNER, - SI_PAGE_PERM, SI_PAGE_TITLE, SI_RESET, - STANDARD_RIGHTS_EXECUTE, - STANDARD_RIGHTS_READ, - STANDARD_RIGHTS_WRITE, WRITE_DAC, WRITE_OWNER, ) from pythoncom import IID_NULL -from win32com.shell.shellcon import ( # # Msg parameter to PropertySheetPageCallback - PSPCB_CREATE, - PSPCB_RELEASE, -) -from win32security import CONTAINER_INHERIT_ACE, INHERIT_ONLY_ACE, OBJECT_INHERIT_ACE class ServiceSecurity(win32com.server.policy.DesignatedWrapPolicy): diff --git a/com/win32comext/axscript/client/debug.py b/com/win32comext/axscript/client/debug.py index cceb01db46..352b86453e 100644 --- a/com/win32comext/axscript/client/debug.py +++ b/com/win32comext/axscript/client/debug.py @@ -3,14 +3,11 @@ import pythoncom import win32api -import win32com.server.util import winerror from win32com.axdebug import adb, axdebug, documents, gateways from win32com.axdebug.codecontainer import SourceCodeContainer from win32com.axdebug.util import _wrap -from win32com.client.util import Enumerator from win32com.server.exception import COMException -from win32com.util import IIDToInterfaceName debuggingTrace = "DEBUG_AXDEBUG" in os.environ # Should we print "trace" output? diff --git a/com/win32comext/axscript/client/pydumper.py b/com/win32comext/axscript/client/pydumper.py index 0380d21be3..98517acdda 100644 --- a/com/win32comext/axscript/client/pydumper.py +++ b/com/win32comext/axscript/client/pydumper.py @@ -20,7 +20,6 @@ from win32com.axscript import axscript from . import pyscript -from .pyscript import SCRIPTTEXT_FORCEEXECUTION, RaiseAssert, trace PyDump_CLSID = "{ac527e60-c693-11d0-9c25-00aa00125a98}" diff --git a/com/win32comext/axscript/client/pyscript.py b/com/win32comext/axscript/client/pyscript.py index a486b1229e..fd7806073d 100644 --- a/com/win32comext/axscript/client/pyscript.py +++ b/com/win32comext/axscript/client/pyscript.py @@ -22,7 +22,6 @@ SCRIPTTEXT_FORCEEXECUTION, SCRIPTTEXT_ISEXPRESSION, SCRIPTTEXT_ISPERSISTENT, - RaiseAssert, trace, ) from win32com.server.exception import COMException diff --git a/com/win32comext/axscript/client/scriptdispatch.py b/com/win32comext/axscript/client/scriptdispatch.py index 227467e5cd..ca696fe849 100644 --- a/com/win32comext/axscript/client/scriptdispatch.py +++ b/com/win32comext/axscript/client/scriptdispatch.py @@ -13,7 +13,6 @@ import win32com.server.policy import win32com.server.util import winerror -from win32com.axscript import axscript from win32com.client import Dispatch from win32com.server.exception import COMException diff --git a/com/win32comext/axscript/server/axsite.py b/com/win32comext/axscript/server/axsite.py index 359ea5e0f1..50c1938547 100644 --- a/com/win32comext/axscript/server/axsite.py +++ b/com/win32comext/axscript/server/axsite.py @@ -1,5 +1,4 @@ import pythoncom -import win32com.axscript.axscript import winerror from win32com.axscript import axscript from win32com.server import util diff --git a/com/win32comext/axscript/test/leakTest.py b/com/win32comext/axscript/test/leakTest.py index 7b52e36a98..9612553721 100644 --- a/com/win32comext/axscript/test/leakTest.py +++ b/com/win32comext/axscript/test/leakTest.py @@ -1,7 +1,6 @@ import sys import pythoncom -import win32com.server.policy from win32com.axscript import axscript from win32com.axscript.server import axsite from win32com.server import connect, util diff --git a/com/win32comext/axscript/test/testHost4Dbg.py b/com/win32comext/axscript/test/testHost4Dbg.py index c618a41206..3e18b2336e 100644 --- a/com/win32comext/axscript/test/testHost4Dbg.py +++ b/com/win32comext/axscript/test/testHost4Dbg.py @@ -4,7 +4,6 @@ import pythoncom import win32ui -from win32com.axscript import axscript from win32com.axscript.server import axsite from win32com.server import util @@ -76,8 +75,6 @@ def TestEngine(): if __name__ == "__main__": - import win32com.axdebug.util - try: TestEngine() except: diff --git a/com/win32comext/mapi/emsabtags.py b/com/win32comext/mapi/emsabtags.py index 65e93df172..1e90a7d8c0 100644 --- a/com/win32comext/mapi/emsabtags.py +++ b/com/win32comext/mapi/emsabtags.py @@ -1,3 +1,4 @@ +# nopycln: file # Re-exporting many constants # Converted "manually" from EMSABTAG.H from .mapitags import ( PROP_TAG, diff --git a/com/win32comext/propsys/test/testpropsys.py b/com/win32comext/propsys/test/testpropsys.py index 356d3e6732..de831970e9 100644 --- a/com/win32comext/propsys/test/testpropsys.py +++ b/com/win32comext/propsys/test/testpropsys.py @@ -1,4 +1,4 @@ -from win32com.propsys import propsys, pscon +from win32com.propsys import propsys, pscon # nopycln: import print("propsys was imported (sorry - that is the extent of the tests,") print("but see the shell folder_view demo, which uses this module)") diff --git a/com/win32comext/shell/demos/servers/column_provider.py b/com/win32comext/shell/demos/servers/column_provider.py index ca0a2a10ae..092f99ff86 100644 --- a/com/win32comext/shell/demos/servers/column_provider.py +++ b/com/win32comext/shell/demos/servers/column_provider.py @@ -15,7 +15,6 @@ import commctrl import pythoncom from pywintypes import IID -from win32com.server.util import wrap from win32com.shell import shell, shellcon IPersist_Methods = ["GetClassID"] diff --git a/com/win32comext/shell/demos/servers/copy_hook.py b/com/win32comext/shell/demos/servers/copy_hook.py index 0b403b7fbc..b4de5bfe1f 100644 --- a/com/win32comext/shell/demos/servers/copy_hook.py +++ b/com/win32comext/shell/demos/servers/copy_hook.py @@ -9,7 +9,7 @@ import pythoncom import win32con import win32gui -from win32com.shell import shell, shellcon +from win32com.shell import shell # Our shell extension. diff --git a/com/win32comext/shell/demos/servers/icon_handler.py b/com/win32comext/shell/demos/servers/icon_handler.py index 605dbeed09..00d494c1f5 100644 --- a/com/win32comext/shell/demos/servers/icon_handler.py +++ b/com/win32comext/shell/demos/servers/icon_handler.py @@ -15,7 +15,7 @@ import pythoncom import win32gui import winerror -from win32com.shell import shell, shellcon +from win32com.shell import shell ico_files = glob.glob(os.path.join(sys.prefix, "*.ico")) if not ico_files: diff --git a/com/win32comext/shell/demos/servers/shell_view.py b/com/win32comext/shell/demos/servers/shell_view.py index cac0e19adc..01d1294898 100644 --- a/com/win32comext/shell/demos/servers/shell_view.py +++ b/com/win32comext/shell/demos/servers/shell_view.py @@ -46,7 +46,6 @@ # a field sep just 'cos we can (and 'cos it can't possibly conflict with the # string content) -import _thread import os import pyclbr import sys diff --git a/isapi/install.py b/isapi/install.py index 8429f41ef9..aa861bbfc5 100644 --- a/isapi/install.py +++ b/isapi/install.py @@ -15,8 +15,7 @@ import pythoncom import win32api import winerror -from win32com.client import Dispatch, GetObject -from win32com.client.gencache import EnsureDispatch, EnsureModule +from win32com.client import GetObject _APP_INPROC = 0 _APP_OUTPROC = 1 diff --git a/pycln.toml b/pycln.toml index 9ffd3c5cc9..f9aaee1c8c 100644 --- a/pycln.toml +++ b/pycln.toml @@ -1,23 +1,25 @@ [tool.pycln] # Many imports with side-effects -all = false +all = true skip_imports = [ - # Star imported C wrapped modules - "_winxptheme", - "dde", - "ntsecuritycon", - "odbc", + # TODO: Confirm whether these produce side-effects, + # if yes: add to the list below + # if not: remove from here + # NOTE: https://github.com/mhammond/pywin32/pull/2342#discussion_r1798419855 + # It seems we should be able to remove these. TODO in its own PR. "win32api", - "win32clipboard", - "win32com", - "win32cryptcon", - "win32event", "win32file", - "win32gui_struct", "win32gui", - "win32inet", - "win32inetcon", - "win32pipe", - "win32ras", - "win32ui", + "win32process", + "win32security", + "win32uiole", + # Modules with known side-effects + "coloreditor", # Adds doc template + "IDLEenvironment", # Injects fast_readline into the IDLE auto-indent extension + "pythoncom", # pythoncomXX.dll loader + "pywintypes", # pywintypesXX.dll loader + "win32com", # Sets pythoncom.frozen and adds modules to path based on the registry + "win32traceutil", # Redirects output to win32trace remote collector + "win32ui", # Must always be imported before dde ] +# Note: com/win32com/client/gencache.py does read files but only to fill in it's own dicts from cache diff --git a/win32/Demos/security/account_rights.py b/win32/Demos/security/account_rights.py index 357b789a51..e2507389c9 100644 --- a/win32/Demos/security/account_rights.py +++ b/win32/Demos/security/account_rights.py @@ -3,7 +3,6 @@ import win32con import win32file import win32security -from security_enums import ACCESS_MODE, ACE_FLAGS, TRUSTEE_FORM, TRUSTEE_TYPE new_privs = ( ( diff --git a/win32/Demos/security/get_policy_info.py b/win32/Demos/security/get_policy_info.py index 180aaa9fcf..d02804683a 100644 --- a/win32/Demos/security/get_policy_info.py +++ b/win32/Demos/security/get_policy_info.py @@ -1,4 +1,3 @@ -import ntsecuritycon import win32api import win32file import win32security diff --git a/win32/Demos/security/list_rights.py b/win32/Demos/security/list_rights.py index 780008a252..9a38349315 100644 --- a/win32/Demos/security/list_rights.py +++ b/win32/Demos/security/list_rights.py @@ -3,7 +3,6 @@ import win32con import win32file import win32security -from security_enums import ACCESS_MODE, ACE_FLAGS, TRUSTEE_FORM, TRUSTEE_TYPE new_privs = ( ( diff --git a/win32/Demos/security/localized_names.py b/win32/Demos/security/localized_names.py index ae2acc28c4..d491d2e222 100644 --- a/win32/Demos/security/localized_names.py +++ b/win32/Demos/security/localized_names.py @@ -5,7 +5,12 @@ import sys import pywintypes -from ntsecuritycon import * +from ntsecuritycon import ( + DOMAIN_ALIAS_RID_ADMINS, + DOMAIN_USER_RID_ADMIN, + SECURITY_BUILTIN_DOMAIN_RID, + SECURITY_NT_AUTHORITY, +) from win32net import NetUserModalsGet from win32security import LookupAccountSid diff --git a/win32/Demos/security/query_information.py b/win32/Demos/security/query_information.py index 9fa3e4a956..da55022ee7 100644 --- a/win32/Demos/security/query_information.py +++ b/win32/Demos/security/query_information.py @@ -1,7 +1,7 @@ import win32api import win32security import winerror -from ntsecuritycon import * +from ntsecuritycon import TOKEN_QUERY, TokenUser # This is a Python implementation of win32api.GetDomainName() diff --git a/win32/Demos/security/set_policy_info.py b/win32/Demos/security/set_policy_info.py index 5dd3cf819d..b0802ffa3a 100644 --- a/win32/Demos/security/set_policy_info.py +++ b/win32/Demos/security/set_policy_info.py @@ -1,4 +1,3 @@ -import ntsecuritycon import win32api import win32file import win32security diff --git a/win32/Demos/service/pipeTestService.py b/win32/Demos/service/pipeTestService.py index f062fcd2c9..56512e4480 100644 --- a/win32/Demos/service/pipeTestService.py +++ b/win32/Demos/service/pipeTestService.py @@ -11,23 +11,24 @@ import _thread import traceback -# Old versions of the service framework would not let you import this -# module at the top-level. Now you can, and can check 'Debugging()' and -# 'RunningAsService()' to check your context. import pywintypes + +# Old versions of the service framework would not let you import this +# module at the top-level. Now you can, and can check 'servicemanager.Debugging()' +# and 'servicemanager.RunningAsService()' to check your context. import servicemanager import win32con import win32service import win32serviceutil import winerror -from ntsecuritycon import * -from win32api import * -# Use "import *" to keep this looking as much as a "normal" service +# # Use "import *" to keep this looking as much as a "normal" service # as possible. Real code shouldn't do this. -from win32event import * -from win32file import * -from win32pipe import * +from ntsecuritycon import * # nopycln: import +from win32api import * # nopycln: import +from win32event import * # nopycln: import +from win32file import * # nopycln: import +from win32pipe import * # nopycln: import def ApplyIgnoreError(fn, args): diff --git a/win32/Demos/service/pipeTestServiceClient.py b/win32/Demos/service/pipeTestServiceClient.py index 507219c09e..3ac26b793e 100644 --- a/win32/Demos/service/pipeTestServiceClient.py +++ b/win32/Demos/service/pipeTestServiceClient.py @@ -13,9 +13,12 @@ import pywintypes import win32api import winerror -from win32event import * -from win32file import * -from win32pipe import * + +# # Use "import *" to keep this looking as much as a "normal" service +# as possible. Real code shouldn't do this. +from win32event import * # nopycln: import +from win32file import * # nopycln: import +from win32pipe import * # nopycln: import verbose = 0 diff --git a/win32/Demos/win32clipboardDemo.py b/win32/Demos/win32clipboardDemo.py index 564233f68b..809c2b26e0 100644 --- a/win32/Demos/win32clipboardDemo.py +++ b/win32/Demos/win32clipboardDemo.py @@ -2,7 +2,18 @@ # # Demo/test of the win32clipboard module. import win32con -from win32clipboard import * +from win32clipboard import ( + CloseClipboard, + EmptyClipboard, + EnumClipboardFormats, + GetClipboardData, + GetClipboardFormatName, + IsClipboardFormatAvailable, + OpenClipboard, + RegisterClipboardFormat, + SetClipboardData, + SetClipboardText, +) if not __debug__: print("WARNING: The test code in this module uses assert") diff --git a/win32/Demos/win32comport_demo.py b/win32/Demos/win32comport_demo.py index 1596e41395..54f8f23368 100644 --- a/win32/Demos/win32comport_demo.py +++ b/win32/Demos/win32comport_demo.py @@ -18,8 +18,38 @@ import threading import win32con # constants. -from win32event import * # We use events and the WaitFor[Multiple]Objects functions. -from win32file import * # The base COM port and file IO functions. +from win32event import ( # We use events and the WaitFor[Multiple]Objects functions. + INFINITE, + WAIT_OBJECT_0, + CreateEvent, + SetEvent, + WaitForMultipleObjects, + WaitForSingleObject, +) +from win32file import ( # The base COM port and file IO functions. + CBR_115200, + EV_RXCHAR, + NOPARITY, + ONESTOPBIT, + OVERLAPPED, + PURGE_RXABORT, + PURGE_RXCLEAR, + PURGE_TXABORT, + PURGE_TXCLEAR, + ClearCommError, + CreateFile, + GetCommModemStatus, + GetCommState, + PurgeComm, + ReadFile, + SetCommMask, + SetCommState, + SetCommTimeouts, + SetupComm, + WaitCommEvent, + WriteFile, + error, +) def FindModem(): diff --git a/win32/Demos/win32gui_menu.py b/win32/Demos/win32gui_menu.py index 4b9b71dd0d..fb10b118c4 100644 --- a/win32/Demos/win32gui_menu.py +++ b/win32/Demos/win32gui_menu.py @@ -14,9 +14,64 @@ import sys import win32con -from win32api import * -from win32gui import * -from win32gui_struct import * +from win32api import GetSystemDirectory, GetSystemMetrics +from win32gui import ( + LOWORD, + NIF_ICON, + NIF_MESSAGE, + NIF_TIP, + NIM_ADD, + NIM_DELETE, + WNDCLASS, + CheckMenuItem, + CheckMenuRadioItem, + CreateCompatibleBitmap, + CreateCompatibleDC, + CreateFontIndirect, + CreatePopupMenu, + CreateWindow, + DeleteDC, + DestroyIcon, + DestroyWindow, + DrawIconEx, + ExtTextOut, + FillRect, + GetCursorPos, + GetDC, + GetMenuDefaultItem, + GetMenuState, + GetModuleHandle, + GetSysColor, + GetSysColorBrush, + GetTextExtentPoint32, + InsertMenu, + InsertMenuItem, + LoadIcon, + LoadImage, + PostMessage, + PostQuitMessage, + PumpMessages, + PyGetMemory, + PyMakeBuffer, + PySetMemory, + RegisterClass, + ReleaseDC, + SelectObject, + SetBkColor, + SetBkMode, + SetForegroundWindow, + SetMenuDefaultItem, + SetTextColor, + Shell_NotifyIcon, + SystemParametersInfo, + TrackPopupMenu, + UpdateWindow, +) +from win32gui_struct import ( + EmptyMENUITEMINFO, + PackMENUITEMINFO, + UnpackMENUITEMINFO, +) this_dir = os.path.split(sys.argv[0])[0] diff --git a/win32/Lib/winxptheme.py b/win32/Lib/winxptheme.py index e147eda58f..4fd7ed9626 100644 --- a/win32/Lib/winxptheme.py +++ b/win32/Lib/winxptheme.py @@ -5,4 +5,4 @@ around _winxptheme. """ -from _winxptheme import * +from _winxptheme import * # nopycln: import diff --git a/win32/test/test_clipboard.py b/win32/test/test_clipboard.py index 3d6c1efc5a..0c89d4babb 100644 --- a/win32/test/test_clipboard.py +++ b/win32/test/test_clipboard.py @@ -7,7 +7,18 @@ import pywintypes import win32con import win32gui -from win32clipboard import * +from win32clipboard import ( + CloseClipboard, + EmptyClipboard, + GetClipboardData, + GetClipboardDataHandle, + GetClipboardFormatName, + GetGlobalMemory, + OpenClipboard, + RegisterClipboardFormat, + SetClipboardData, + SetClipboardText, +) custom_format_name = "PythonClipboardTestFormat" diff --git a/win32/test/test_win32crypt.py b/win32/test/test_win32crypt.py index d5e3150079..9360cfbe22 100644 --- a/win32/test/test_win32crypt.py +++ b/win32/test/test_win32crypt.py @@ -5,8 +5,20 @@ from typing import Any, Iterator import win32crypt -from pywin32_testutil import TestSkipped, find_test_fixture, testmain -from win32cryptcon import * +from pywin32_testutil import find_test_fixture, testmain +from win32cryptcon import ( + CERT_QUERY_CONTENT_CERT, + CERT_QUERY_CONTENT_FLAG_CERT, + CERT_QUERY_FORMAT_BASE64_ENCODED, + CERT_QUERY_FORMAT_BINARY, + CERT_QUERY_FORMAT_FLAG_ALL, + CERT_QUERY_OBJECT_BLOB, + CERT_QUERY_OBJECT_FILE, + CERT_STORE_ADD_REPLACE_EXISTING, + CERT_STORE_PROV_SYSTEM, + CERT_SYSTEM_STORE_CURRENT_USER, + CERT_SYSTEM_STORE_LOCAL_MACHINE, +) class Crypt(unittest.TestCase): diff --git a/win32/test/test_win32gui.py b/win32/test/test_win32gui.py index e61bae1b8e..bc91a7add7 100644 --- a/win32/test/test_win32gui.py +++ b/win32/test/test_win32gui.py @@ -4,7 +4,6 @@ import sys import unittest -import pywin32_testutil import pywintypes import win32api import win32gui diff --git a/win32/test/test_win32inet.py b/win32/test/test_win32inet.py index fe7de185c0..99204e4344 100644 --- a/win32/test/test_win32inet.py +++ b/win32/test/test_win32inet.py @@ -2,8 +2,25 @@ import winerror from pywin32_testutil import TestSkipped, testmain -from win32inet import * -from win32inetcon import * +from win32inet import ( + FtpCommand, + InternetCanonicalizeUrl, + InternetConnect, + InternetGetCookie, + InternetGetLastResponseInfo, + InternetOpen, + InternetOpenUrl, + InternetReadFile, + InternetSetCookie, + error, +) +from win32inetcon import ( + FTP_TRANSFER_TYPE_ASCII, + INTERNET_FLAG_EXISTING_CONNECT, + INTERNET_INVALID_PORT_NUMBER, + INTERNET_OPEN_TYPE_DIRECT, + INTERNET_SERVICE_FTP, +) class CookieTests(unittest.TestCase): diff --git a/win32/test/test_win32net.py b/win32/test/test_win32net.py index 9307196333..04e473db17 100644 --- a/win32/test/test_win32net.py +++ b/win32/test/test_win32net.py @@ -1,7 +1,6 @@ import unittest import win32net -import win32netcon class TestCase(unittest.TestCase):