py2docfx 0.1.15.dev2025501__py3-none-any.whl → 0.1.15.dev2038808__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (597) hide show
  1. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_core_metadata.py +21 -5
  2. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +2 -0
  3. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/ccompiler.py +5 -2
  4. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/__init__.py +27 -8
  5. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build.py +1 -6
  6. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build_clib.py +1 -9
  7. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build_ext.py +1 -8
  8. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/check.py +1 -1
  9. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/config.py +0 -2
  10. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/install.py +8 -17
  11. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compat/numpy.py +2 -0
  12. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/base.py +8 -5
  13. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/msvc.py +1 -1
  14. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +15 -1
  15. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/dist.py +2 -1
  16. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/sysconfig.py +0 -10
  17. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/tests/test_build_ext.py +60 -5
  18. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/unixccompiler.py +6 -0
  19. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/util.py +7 -6
  20. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_normalization.py +29 -0
  21. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/__init__.py +1 -1
  22. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/_bdist_wheel.py +613 -0
  23. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/_setuptools_logging.py +2 -2
  24. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/bdist_wheel.py +25 -594
  25. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/cli/__init__.py +6 -6
  26. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/cli/convert.py +282 -223
  27. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/macosx_libfile.py +22 -9
  28. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/metadata.py +16 -13
  29. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/util.py +0 -9
  30. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/wheelfile.py +40 -9
  31. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_wheel.py +6 -2
  32. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +48 -11
  33. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/_validate_pyproject/extra_validations.py +31 -1
  34. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py +222 -129
  35. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/_validate_pyproject/formats.py +30 -3
  36. py2docfx/venv/basevenv/Lib/site-packages/setuptools/dist.py +115 -9
  37. py2docfx/venv/basevenv/Lib/site-packages/setuptools/msvc.py +12 -3
  38. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +246 -13
  39. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +93 -8
  40. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_meta.py +17 -4
  41. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_core_metadata.py +45 -0
  42. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_egg_info.py +24 -4
  43. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_sdist.py +13 -1
  44. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/__init__.py +1 -1
  45. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/any_pb2.py +4 -4
  46. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/api_pb2.py +4 -4
  47. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/compiler/plugin_pb2.py +4 -4
  48. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor_database.py +22 -4
  49. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor_pb2.py +82 -35
  50. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/duration_pb2.py +4 -4
  51. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/empty_pb2.py +4 -4
  52. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/field_mask_pb2.py +4 -4
  53. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/builder.py +4 -3
  54. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/containers.py +13 -0
  55. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/decoder.py +62 -115
  56. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/python_edition_defaults.py +1 -1
  57. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/python_message.py +15 -18
  58. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/testing_refleaks.py +4 -1
  59. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/type_checkers.py +5 -0
  60. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/well_known_types.py +3 -3
  61. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/json_format.py +25 -9
  62. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/message.py +26 -0
  63. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/message_factory.py +0 -63
  64. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/proto.py +38 -1
  65. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/proto_text.py +129 -0
  66. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/reflection.py +0 -49
  67. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/runtime_version.py +3 -3
  68. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/source_context_pb2.py +4 -4
  69. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/struct_pb2.py +4 -4
  70. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/symbol_database.py +0 -18
  71. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/text_format.py +8 -3
  72. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/timestamp_pb2.py +4 -4
  73. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/type_pb2.py +4 -4
  74. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/unknown_fields.py +3 -4
  75. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/wrappers_pb2.py +4 -4
  76. py2docfx/venv/venv1/Lib/site-packages/msal/__init__.py +1 -1
  77. py2docfx/venv/venv1/Lib/site-packages/msal/application.py +51 -17
  78. py2docfx/venv/venv1/Lib/site-packages/msal/broker.py +18 -4
  79. py2docfx/venv/venv1/Lib/site-packages/msal/cloudshell.py +5 -1
  80. py2docfx/venv/venv1/Lib/site-packages/msal/managed_identity.py +5 -4
  81. py2docfx/venv/venv1/Lib/site-packages/msal/sku.py +6 -0
  82. py2docfx/venv/venv1/Lib/site-packages/msal/token_cache.py +31 -10
  83. py2docfx/venv/venv1/Lib/site-packages/msal_extensions/__init__.py +2 -3
  84. py2docfx/venv/venv1/Lib/site-packages/msal_extensions/cache_lock.py +4 -1
  85. py2docfx/venv/venv1/Lib/site-packages/msal_extensions/filelock.py +62 -0
  86. py2docfx/venv/venv1/Lib/site-packages/msal_extensions/libsecret.py +1 -1
  87. py2docfx/venv/venv1/Lib/site-packages/msal_extensions/token_cache.py +7 -1
  88. py2docfx/venv/venv1/Lib/site-packages/setuptools/_core_metadata.py +21 -5
  89. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +2 -0
  90. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/ccompiler.py +5 -2
  91. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/__init__.py +27 -8
  92. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build.py +1 -6
  93. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build_clib.py +1 -9
  94. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build_ext.py +1 -8
  95. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/check.py +1 -1
  96. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/config.py +0 -2
  97. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/install.py +8 -17
  98. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compat/numpy.py +2 -0
  99. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/base.py +8 -5
  100. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/msvc.py +1 -1
  101. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +15 -1
  102. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/dist.py +2 -1
  103. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/sysconfig.py +0 -10
  104. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/tests/test_build_ext.py +60 -5
  105. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/unixccompiler.py +6 -0
  106. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/util.py +7 -6
  107. py2docfx/venv/venv1/Lib/site-packages/setuptools/_normalization.py +29 -0
  108. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/__init__.py +1 -1
  109. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/_bdist_wheel.py +613 -0
  110. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/_setuptools_logging.py +2 -2
  111. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/bdist_wheel.py +25 -594
  112. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/cli/__init__.py +6 -6
  113. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/cli/convert.py +282 -223
  114. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/macosx_libfile.py +22 -9
  115. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/metadata.py +16 -13
  116. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/util.py +0 -9
  117. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/wheelfile.py +40 -9
  118. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_wheel.py +6 -2
  119. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +48 -11
  120. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/_validate_pyproject/extra_validations.py +31 -1
  121. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py +222 -129
  122. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/_validate_pyproject/formats.py +30 -3
  123. py2docfx/venv/venv1/Lib/site-packages/setuptools/dist.py +115 -9
  124. py2docfx/venv/venv1/Lib/site-packages/setuptools/msvc.py +12 -3
  125. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +246 -13
  126. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +93 -8
  127. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_meta.py +17 -4
  128. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_core_metadata.py +45 -0
  129. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_egg_info.py +24 -4
  130. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_sdist.py +13 -1
  131. {py2docfx-0.1.15.dev2025501.dist-info → py2docfx-0.1.15.dev2038808.dist-info}/METADATA +1 -1
  132. {py2docfx-0.1.15.dev2025501.dist-info → py2docfx-0.1.15.dev2038808.dist-info}/RECORD +134 -590
  133. py2docfx/venv/venv1/Lib/site-packages/adodbapi/__init__.py +0 -82
  134. py2docfx/venv/venv1/Lib/site-packages/adodbapi/ado_consts.py +0 -283
  135. py2docfx/venv/venv1/Lib/site-packages/adodbapi/adodbapi.py +0 -1153
  136. py2docfx/venv/venv1/Lib/site-packages/adodbapi/apibase.py +0 -723
  137. py2docfx/venv/venv1/Lib/site-packages/adodbapi/examples/db_print.py +0 -72
  138. py2docfx/venv/venv1/Lib/site-packages/adodbapi/examples/db_table_names.py +0 -21
  139. py2docfx/venv/venv1/Lib/site-packages/adodbapi/examples/xls_read.py +0 -41
  140. py2docfx/venv/venv1/Lib/site-packages/adodbapi/examples/xls_write.py +0 -41
  141. py2docfx/venv/venv1/Lib/site-packages/adodbapi/is64bit.py +0 -34
  142. py2docfx/venv/venv1/Lib/site-packages/adodbapi/process_connect_string.py +0 -137
  143. py2docfx/venv/venv1/Lib/site-packages/adodbapi/schema_table.py +0 -16
  144. py2docfx/venv/venv1/Lib/site-packages/adodbapi/setup.py +0 -68
  145. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/adodbapitest.py +0 -1547
  146. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/adodbapitestconfig.py +0 -184
  147. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/dbapi20.py +0 -879
  148. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/is64bit.py +0 -34
  149. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/setuptestframework.py +0 -98
  150. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/test_adodbapi_dbapi20.py +0 -195
  151. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/tryconnection.py +0 -30
  152. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/_parameterized.py +0 -420
  153. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/service.py +0 -213
  154. py2docfx/venv/venv1/Lib/site-packages/isapi/__init__.py +0 -39
  155. py2docfx/venv/venv1/Lib/site-packages/isapi/install.py +0 -809
  156. py2docfx/venv/venv1/Lib/site-packages/isapi/isapicon.py +0 -121
  157. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/advanced.py +0 -218
  158. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/redirector.py +0 -116
  159. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/redirector_asynch.py +0 -85
  160. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/redirector_with_filter.py +0 -162
  161. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/test.py +0 -195
  162. py2docfx/venv/venv1/Lib/site-packages/isapi/simple.py +0 -73
  163. py2docfx/venv/venv1/Lib/site-packages/isapi/test/extension_simple.py +0 -114
  164. py2docfx/venv/venv1/Lib/site-packages/isapi/threaded_extension.py +0 -191
  165. py2docfx/venv/venv1/Lib/site-packages/portalocker/__about__.py +0 -6
  166. py2docfx/venv/venv1/Lib/site-packages/portalocker/__init__.py +0 -79
  167. py2docfx/venv/venv1/Lib/site-packages/portalocker/__main__.py +0 -122
  168. py2docfx/venv/venv1/Lib/site-packages/portalocker/constants.py +0 -59
  169. py2docfx/venv/venv1/Lib/site-packages/portalocker/exceptions.py +0 -27
  170. py2docfx/venv/venv1/Lib/site-packages/portalocker/portalocker.py +0 -154
  171. py2docfx/venv/venv1/Lib/site-packages/portalocker/redis.py +0 -236
  172. py2docfx/venv/venv1/Lib/site-packages/portalocker/utils.py +0 -569
  173. py2docfx/venv/venv1/Lib/site-packages/pythoncom.py +0 -4
  174. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/basictimerapp.py +0 -258
  175. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/customprint.py +0 -183
  176. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/demoutils.py +0 -63
  177. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/dlgappdemo.py +0 -51
  178. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/dojobapp.py +0 -71
  179. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/helloapp.py +0 -53
  180. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/cmdserver.py +0 -113
  181. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/createwin.py +0 -114
  182. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/demoutils.py +0 -65
  183. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/dibdemo.py +0 -73
  184. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/dlgtest.py +0 -145
  185. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/dyndlg.py +0 -104
  186. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/fontdemo.py +0 -85
  187. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/guidemo.py +0 -53
  188. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/hiertest.py +0 -138
  189. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/menutest.py +0 -13
  190. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/objdoc.py +0 -57
  191. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/demoutils.py +0 -63
  192. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/flash.py +0 -95
  193. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/msoffice.py +0 -159
  194. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/ocxserialtest.py +0 -132
  195. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/ocxtest.py +0 -243
  196. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/webbrowser.py +0 -72
  197. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/openGLDemo.py +0 -415
  198. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/progressbar.py +0 -105
  199. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/sliderdemo.py +0 -76
  200. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/splittst.py +0 -79
  201. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/threadedgui.py +0 -189
  202. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/toolbar.py +0 -105
  203. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/__init__.py +0 -3
  204. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/__init__.py +0 -133
  205. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/configui.py +0 -34
  206. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/dbgcon.py +0 -31
  207. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/dbgpyapp.py +0 -48
  208. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/debugger.py +0 -1097
  209. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/fail.py +0 -54
  210. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/__init__.py +0 -0
  211. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/ideoptions.py +0 -136
  212. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/list.py +0 -146
  213. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/login.py +0 -155
  214. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/status.py +0 -242
  215. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/docking/DockingBar.py +0 -676
  216. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/docking/__init__.py +0 -0
  217. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/__init__.py +0 -0
  218. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/app.py +0 -411
  219. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/bitmap.py +0 -168
  220. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/cmdline.py +0 -54
  221. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/dbgcommands.py +0 -188
  222. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/dlgappcore.py +0 -76
  223. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/ModuleBrowser.py +0 -235
  224. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/__init__.py +0 -105
  225. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/color/__init__.py +0 -0
  226. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/color/coloreditor.py +0 -646
  227. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/configui.py +0 -299
  228. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/document.py +0 -379
  229. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/editor.py +0 -511
  230. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/frame.py +0 -74
  231. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/template.py +0 -59
  232. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/vss.py +0 -104
  233. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/help.py +0 -173
  234. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/interact.py +0 -995
  235. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/intpyapp.py +0 -552
  236. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/intpydde.py +0 -65
  237. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/scriptutils.py +0 -684
  238. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/sgrepmdi.py +0 -749
  239. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/startup.py +0 -70
  240. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/stdin.py +0 -172
  241. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/toolmenu.py +0 -279
  242. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/window.py +0 -14
  243. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/winout.py +0 -589
  244. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/AutoExpand.py +0 -95
  245. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/AutoIndent.py +0 -536
  246. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/CallTips.py +0 -216
  247. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/FormatParagraph.py +0 -166
  248. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/IdleHistory.py +0 -87
  249. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/PyParse.py +0 -585
  250. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/__init__.py +0 -1
  251. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/__init__.py +0 -0
  252. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/activex.py +0 -79
  253. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/afxres.py +0 -501
  254. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/dialog.py +0 -277
  255. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/docview.py +0 -151
  256. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/object.py +0 -66
  257. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/thread.py +0 -25
  258. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/window.py +0 -50
  259. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/IDLEenvironment.py +0 -593
  260. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/__init__.py +0 -1
  261. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/bindings.py +0 -180
  262. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/config.py +0 -363
  263. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/configui.py +0 -291
  264. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/control.py +0 -565
  265. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/document.py +0 -312
  266. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/find.py +0 -511
  267. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/formatter.py +0 -704
  268. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/keycodes.py +0 -190
  269. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/scintillacon.py +0 -3083
  270. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/view.py +0 -841
  271. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/TraceCollector.py +0 -79
  272. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/__init__.py +0 -0
  273. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/browseProjects.py +0 -323
  274. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/browser.py +0 -494
  275. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/hierlist.py +0 -353
  276. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/regedit.py +0 -382
  277. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/regpy.py +0 -80
  278. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/BackupRead_BackupWrite.py +0 -119
  279. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/BackupSeek_streamheaders.py +0 -137
  280. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/CopyFileEx.py +0 -57
  281. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/CreateFileTransacted_MiniVersion.py +0 -122
  282. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/EvtFormatMessage.py +0 -83
  283. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/EvtSubscribe_pull.py +0 -28
  284. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/EvtSubscribe_push.py +0 -32
  285. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/FileSecurityTest.py +0 -137
  286. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/GetSaveFileName.py +0 -43
  287. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/NetValidatePasswordPolicy.py +0 -127
  288. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/OpenEncryptedFileRaw.py +0 -66
  289. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/RegCreateKeyTransacted.py +0 -60
  290. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/RegRestoreKey.py +0 -71
  291. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/SystemParametersInfo.py +0 -210
  292. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/c_extension/setup.py +0 -26
  293. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/dde/ddeclient.py +0 -18
  294. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/dde/ddeserver.py +0 -42
  295. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/desktopmanager.py +0 -246
  296. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/eventLogDemo.py +0 -143
  297. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/getfilever.py +0 -33
  298. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/mmapfile_demo.py +0 -101
  299. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/pipes/cat.py +0 -17
  300. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/pipes/runproc.py +0 -114
  301. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/print_desktop.py +0 -113
  302. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/rastest.py +0 -166
  303. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/GetTokenInformation.py +0 -110
  304. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/account_rights.py +0 -49
  305. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/explicit_entries.py +0 -170
  306. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/get_policy_info.py +0 -39
  307. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/list_rights.py +0 -35
  308. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/localized_names.py +0 -70
  309. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/lsaregevent.py +0 -14
  310. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/lsastore.py +0 -12
  311. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/query_information.py +0 -25
  312. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/regsave_sa.py +0 -61
  313. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/regsecurity.py +0 -36
  314. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sa_inherit.py +0 -8
  315. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/security_enums.py +0 -336
  316. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/set_file_audit.py +0 -106
  317. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/set_file_owner.py +0 -73
  318. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/set_policy_info.py +0 -25
  319. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/setkernelobjectsecurity.py +0 -134
  320. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/setnamedsecurityinfo.py +0 -131
  321. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/setsecurityinfo.py +0 -131
  322. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/setuserobjectsecurity.py +0 -102
  323. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sspi/fetch_url.py +0 -158
  324. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sspi/simple_auth.py +0 -72
  325. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sspi/socket_server.py +0 -199
  326. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sspi/validate_password.py +0 -41
  327. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/service/nativePipeTestService.py +0 -63
  328. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/service/pipeTestService.py +0 -185
  329. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/service/pipeTestServiceClient.py +0 -158
  330. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/service/serviceEvents.py +0 -98
  331. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/timer_demo.py +0 -72
  332. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32clipboardDemo.py +0 -155
  333. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32clipboard_bitmapdemo.py +0 -117
  334. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32comport_demo.py +0 -174
  335. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32console_demo.py +0 -132
  336. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32cred_demo.py +0 -82
  337. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32fileDemo.py +0 -41
  338. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_demo.py +0 -177
  339. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_devicenotify.py +0 -106
  340. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_dialog.py +0 -445
  341. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_menu.py +0 -464
  342. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_taskbar.py +0 -136
  343. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32netdemo.py +0 -272
  344. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32rcparser_demo.py +0 -86
  345. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32servicedemo.py +0 -23
  346. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32ts_logoff_disconnected.py +0 -25
  347. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32wnet/testwnet.py +0 -123
  348. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32wnet/winnetwk.py +0 -100
  349. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/winprocess.py +0 -230
  350. py2docfx/venv/venv1/Lib/site-packages/win32/lib/_win32verstamp_pywin32ctypes.py +0 -164
  351. py2docfx/venv/venv1/Lib/site-packages/win32/lib/afxres.py +0 -8
  352. py2docfx/venv/venv1/Lib/site-packages/win32/lib/commctrl.py +0 -1551
  353. py2docfx/venv/venv1/Lib/site-packages/win32/lib/mmsystem.py +0 -956
  354. py2docfx/venv/venv1/Lib/site-packages/win32/lib/netbios.py +0 -293
  355. py2docfx/venv/venv1/Lib/site-packages/win32/lib/ntsecuritycon.py +0 -731
  356. py2docfx/venv/venv1/Lib/site-packages/win32/lib/pywin32_bootstrap.py +0 -21
  357. py2docfx/venv/venv1/Lib/site-packages/win32/lib/pywin32_testutil.py +0 -291
  358. py2docfx/venv/venv1/Lib/site-packages/win32/lib/pywintypes.py +0 -124
  359. py2docfx/venv/venv1/Lib/site-packages/win32/lib/rasutil.py +0 -40
  360. py2docfx/venv/venv1/Lib/site-packages/win32/lib/regcheck.py +0 -161
  361. py2docfx/venv/venv1/Lib/site-packages/win32/lib/regutil.py +0 -395
  362. py2docfx/venv/venv1/Lib/site-packages/win32/lib/sspi.py +0 -413
  363. py2docfx/venv/venv1/Lib/site-packages/win32/lib/sspicon.py +0 -477
  364. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win2kras.py +0 -14
  365. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32con.py +0 -5064
  366. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32cryptcon.py +0 -1922
  367. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32evtlogutil.py +0 -225
  368. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32gui_struct.py +0 -957
  369. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32inetcon.py +0 -1086
  370. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32netcon.py +0 -627
  371. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32pdhquery.py +0 -570
  372. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32pdhutil.py +0 -212
  373. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32rcparser.py +0 -674
  374. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32serviceutil.py +0 -1073
  375. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32timezone.py +0 -1201
  376. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32traceutil.py +0 -59
  377. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32verstamp.py +0 -235
  378. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winerror.py +0 -7362
  379. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winioctlcon.py +0 -1079
  380. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winnt.py +0 -1347
  381. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winperf.py +0 -236
  382. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winxptheme.py +0 -8
  383. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/ControlService.py +0 -594
  384. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/VersionStamp/BrandProject.py +0 -97
  385. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/VersionStamp/bulkstamp.py +0 -156
  386. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/VersionStamp/vssutil.py +0 -201
  387. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/backupEventLog.py +0 -46
  388. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/h2py.py +0 -194
  389. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/killProcName.py +0 -62
  390. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/pywin32_postinstall.py +0 -733
  391. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/pywin32_testall.py +0 -120
  392. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/rasutil.py +0 -98
  393. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/regsetup.py +0 -607
  394. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/setup_d.py +0 -111
  395. py2docfx/venv/venv1/Lib/site-packages/win32/test/handles.py +0 -175
  396. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_clipboard.py +0 -137
  397. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_exceptions.py +0 -213
  398. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_odbc.py +0 -264
  399. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_pywintypes.py +0 -111
  400. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_security.py +0 -166
  401. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_sspi.py +0 -229
  402. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32api.py +0 -273
  403. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32clipboard.py +0 -59
  404. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32cred.py +0 -91
  405. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32crypt.py +0 -144
  406. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32event.py +0 -119
  407. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32file.py +0 -1096
  408. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32gui.py +0 -227
  409. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32guistruct.py +0 -333
  410. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32inet.py +0 -108
  411. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32net.py +0 -23
  412. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32pipe.py +0 -148
  413. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32print.py +0 -24
  414. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32profile.py +0 -19
  415. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32rcparser.py +0 -70
  416. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32timezone.py +0 -16
  417. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32trace.py +0 -366
  418. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32ts.py +0 -19
  419. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32wnet.py +0 -174
  420. py2docfx/venv/venv1/Lib/site-packages/win32/test/testall.py +0 -223
  421. py2docfx/venv/venv1/Lib/site-packages/win32/winxpgui.py +0 -13
  422. py2docfx/venv/venv1/Lib/site-packages/win32com/__init__.py +0 -134
  423. py2docfx/venv/venv1/Lib/site-packages/win32com/client/CLSIDToClass.py +0 -60
  424. py2docfx/venv/venv1/Lib/site-packages/win32com/client/__init__.py +0 -717
  425. py2docfx/venv/venv1/Lib/site-packages/win32com/client/build.py +0 -771
  426. py2docfx/venv/venv1/Lib/site-packages/win32com/client/combrowse.py +0 -604
  427. py2docfx/venv/venv1/Lib/site-packages/win32com/client/connect.py +0 -48
  428. py2docfx/venv/venv1/Lib/site-packages/win32com/client/dynamic.py +0 -699
  429. py2docfx/venv/venv1/Lib/site-packages/win32com/client/gencache.py +0 -825
  430. py2docfx/venv/venv1/Lib/site-packages/win32com/client/genpy.py +0 -1350
  431. py2docfx/venv/venv1/Lib/site-packages/win32com/client/makepy.py +0 -453
  432. py2docfx/venv/venv1/Lib/site-packages/win32com/client/selecttlb.py +0 -182
  433. py2docfx/venv/venv1/Lib/site-packages/win32com/client/tlbrowse.py +0 -277
  434. py2docfx/venv/venv1/Lib/site-packages/win32com/client/util.py +0 -103
  435. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/__init__.py +0 -0
  436. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/connect.py +0 -96
  437. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/dump_clipboard.py +0 -74
  438. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/eventsApartmentThreaded.py +0 -98
  439. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/eventsFreeThreaded.py +0 -92
  440. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/excelAddin.py +0 -169
  441. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/excelRTDServer.py +0 -434
  442. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/iebutton.py +0 -214
  443. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/ietoolbar.py +0 -368
  444. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/outlookAddin.py +0 -135
  445. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/trybag.py +0 -78
  446. py2docfx/venv/venv1/Lib/site-packages/win32com/makegw/__init__.py +0 -1
  447. py2docfx/venv/venv1/Lib/site-packages/win32com/makegw/makegw.py +0 -618
  448. py2docfx/venv/venv1/Lib/site-packages/win32com/makegw/makegwenum.py +0 -331
  449. py2docfx/venv/venv1/Lib/site-packages/win32com/makegw/makegwparse.py +0 -1017
  450. py2docfx/venv/venv1/Lib/site-packages/win32com/olectl.py +0 -70
  451. py2docfx/venv/venv1/Lib/site-packages/win32com/server/__init__.py +0 -1
  452. py2docfx/venv/venv1/Lib/site-packages/win32com/server/connect.py +0 -85
  453. py2docfx/venv/venv1/Lib/site-packages/win32com/server/dispatcher.py +0 -239
  454. py2docfx/venv/venv1/Lib/site-packages/win32com/server/exception.py +0 -99
  455. py2docfx/venv/venv1/Lib/site-packages/win32com/server/factory.py +0 -26
  456. py2docfx/venv/venv1/Lib/site-packages/win32com/server/localserver.py +0 -53
  457. py2docfx/venv/venv1/Lib/site-packages/win32com/server/policy.py +0 -803
  458. py2docfx/venv/venv1/Lib/site-packages/win32com/server/register.py +0 -677
  459. py2docfx/venv/venv1/Lib/site-packages/win32com/server/util.py +0 -229
  460. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/PythonTools.py +0 -47
  461. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/__init__.py +0 -0
  462. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/dictionary.py +0 -133
  463. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/interp.py +0 -59
  464. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/perfmon.py +0 -36
  465. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/test_pycomtest.py +0 -181
  466. py2docfx/venv/venv1/Lib/site-packages/win32com/storagecon.py +0 -142
  467. py2docfx/venv/venv1/Lib/site-packages/win32com/test/GenTestScripts.py +0 -95
  468. py2docfx/venv/venv1/Lib/site-packages/win32com/test/__init__.py +0 -1
  469. py2docfx/venv/venv1/Lib/site-packages/win32com/test/daodump.py +0 -88
  470. py2docfx/venv/venv1/Lib/site-packages/win32com/test/errorSemantics.py +0 -243
  471. py2docfx/venv/venv1/Lib/site-packages/win32com/test/pippo_server.py +0 -96
  472. py2docfx/venv/venv1/Lib/site-packages/win32com/test/policySemantics.py +0 -115
  473. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testADOEvents.py +0 -100
  474. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testAXScript.py +0 -44
  475. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testAccess.py +0 -185
  476. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testArrays.py +0 -99
  477. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testClipboard.py +0 -169
  478. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testCollections.py +0 -159
  479. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testConversionErrors.py +0 -35
  480. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testDCOM.py +0 -50
  481. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testDates.py +0 -74
  482. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testDictionary.py +0 -101
  483. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testDynamic.py +0 -83
  484. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testExchange.py +0 -121
  485. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testExplorer.py +0 -139
  486. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testGIT.py +0 -142
  487. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testGatewayAddresses.py +0 -149
  488. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testIterators.py +0 -140
  489. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testMSOffice.py +0 -184
  490. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testMSOfficeEvents.py +0 -138
  491. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testMarshal.py +0 -160
  492. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testPersist.py +0 -227
  493. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testPippo.py +0 -80
  494. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testPyComTest.py +0 -918
  495. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testROT.py +0 -29
  496. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testServers.py +0 -51
  497. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testShell.py +0 -272
  498. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testStorage.py +0 -88
  499. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testStreams.py +0 -147
  500. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testWMI.py +0 -18
  501. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testall.py +0 -320
  502. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testmakepy.py +0 -54
  503. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testvb.py +0 -583
  504. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testvbscript_regexp.py +0 -40
  505. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testxslt.py +0 -34
  506. py2docfx/venv/venv1/Lib/site-packages/win32com/test/util.py +0 -262
  507. py2docfx/venv/venv1/Lib/site-packages/win32com/universal.py +0 -224
  508. py2docfx/venv/venv1/Lib/site-packages/win32com/util.py +0 -35
  509. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/__init__.py +0 -113
  510. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/adsicon.py +0 -340
  511. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/demos/objectPicker.py +0 -68
  512. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/demos/scp.py +0 -565
  513. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/demos/search.py +0 -151
  514. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/demos/test.py +0 -274
  515. py2docfx/venv/venv1/Lib/site-packages/win32comext/authorization/__init__.py +0 -6
  516. py2docfx/venv/venv1/Lib/site-packages/win32comext/authorization/demos/EditSecurity.py +0 -229
  517. py2docfx/venv/venv1/Lib/site-packages/win32comext/authorization/demos/EditServiceSecurity.py +0 -219
  518. py2docfx/venv/venv1/Lib/site-packages/win32comext/axcontrol/__init__.py +0 -4
  519. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/__init__.py +0 -4
  520. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/adb.py +0 -467
  521. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/codecontainer.py +0 -279
  522. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/contexts.py +0 -58
  523. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/debugger.py +0 -238
  524. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/documents.py +0 -135
  525. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/dump.py +0 -57
  526. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/expressions.py +0 -212
  527. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/gateways.py +0 -583
  528. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/stackframe.py +0 -178
  529. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/util.py +0 -98
  530. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/__init__.py +0 -4
  531. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/asputil.py +0 -13
  532. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/__init__.py +0 -1
  533. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/debug.py +0 -223
  534. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/error.py +0 -262
  535. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/framework.py +0 -1291
  536. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/pydumper.py +0 -78
  537. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/pyscript.py +0 -438
  538. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/pyscript_rexec.py +0 -54
  539. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/scriptdispatch.py +0 -103
  540. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/server/__init__.py +0 -0
  541. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/server/axsite.py +0 -145
  542. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/test/leakTest.py +0 -185
  543. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/test/testHost.py +0 -240
  544. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/test/testHost4Dbg.py +0 -83
  545. py2docfx/venv/venv1/Lib/site-packages/win32comext/bits/__init__.py +0 -6
  546. py2docfx/venv/venv1/Lib/site-packages/win32comext/bits/test/show_all_jobs.py +0 -48
  547. py2docfx/venv/venv1/Lib/site-packages/win32comext/bits/test/test_bits.py +0 -119
  548. py2docfx/venv/venv1/Lib/site-packages/win32comext/directsound/__init__.py +0 -4
  549. py2docfx/venv/venv1/Lib/site-packages/win32comext/directsound/test/__init__.py +0 -1
  550. py2docfx/venv/venv1/Lib/site-packages/win32comext/directsound/test/ds_record.py +0 -60
  551. py2docfx/venv/venv1/Lib/site-packages/win32comext/directsound/test/ds_test.py +0 -402
  552. py2docfx/venv/venv1/Lib/site-packages/win32comext/ifilter/__init__.py +0 -1
  553. py2docfx/venv/venv1/Lib/site-packages/win32comext/ifilter/demo/filterDemo.py +0 -300
  554. py2docfx/venv/venv1/Lib/site-packages/win32comext/ifilter/ifiltercon.py +0 -110
  555. py2docfx/venv/venv1/Lib/site-packages/win32comext/internet/__init__.py +0 -4
  556. py2docfx/venv/venv1/Lib/site-packages/win32comext/internet/inetcon.py +0 -261
  557. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/__init__.py +0 -21
  558. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/demos/mapisend.py +0 -98
  559. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/emsabtags.py +0 -875
  560. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/mapitags.py +0 -1023
  561. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/mapiutil.py +0 -211
  562. py2docfx/venv/venv1/Lib/site-packages/win32comext/propsys/__init__.py +0 -1
  563. py2docfx/venv/venv1/Lib/site-packages/win32comext/propsys/pscon.py +0 -838
  564. py2docfx/venv/venv1/Lib/site-packages/win32comext/propsys/test/testpropsys.py +0 -5
  565. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/__init__.py +0 -4
  566. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/IActiveDesktop.py +0 -83
  567. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/IFileOperationProgressSink.py +0 -179
  568. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/IShellLinkDataList.py +0 -67
  569. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/ITransferAdviseSink.py +0 -93
  570. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/IUniformResourceLocator.py +0 -56
  571. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/browse_for_folder.py +0 -45
  572. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/create_link.py +0 -73
  573. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/dump_link.py +0 -58
  574. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/explorer_browser.py +0 -143
  575. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/column_provider.py +0 -125
  576. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/context_menu.py +0 -122
  577. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/copy_hook.py +0 -84
  578. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/empty_volume_cache.py +0 -188
  579. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/folder_view.py +0 -866
  580. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/icon_handler.py +0 -81
  581. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/shell_view.py +0 -971
  582. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/shellexecuteex.py +0 -19
  583. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/viewstate.py +0 -68
  584. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/walk_shell_folders.py +0 -24
  585. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/shellcon.py +0 -1615
  586. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/test/testSHFileOperation.py +0 -75
  587. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/test/testShellFolder.py +0 -21
  588. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/test/testShellItem.py +0 -69
  589. py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/__init__.py +0 -6
  590. py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_addtask.py +0 -66
  591. py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_addtask_1.py +0 -68
  592. py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_addtask_2.py +0 -49
  593. py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_localsystem.py +0 -3
  594. py2docfx/venv/venv1/Scripts/pywin32_postinstall.py +0 -733
  595. py2docfx/venv/venv1/Scripts/pywin32_testall.py +0 -120
  596. {py2docfx-0.1.15.dev2025501.dist-info → py2docfx-0.1.15.dev2038808.dist-info}/WHEEL +0 -0
  597. {py2docfx-0.1.15.dev2025501.dist-info → py2docfx-0.1.15.dev2038808.dist-info}/top_level.txt +0 -0
@@ -1,1073 +0,0 @@
1
- # General purpose service utilities, both for standard Python scripts,
2
- # and for for Python programs which run as services...
3
- #
4
- # Note that most utility functions here will raise win32api.error's
5
- # (which is win32service.error, pywintypes.error, etc)
6
- # when things go wrong - eg, not enough permissions to hit the
7
- # registry etc.
8
-
9
- import importlib.machinery
10
- import os
11
- import sys
12
- import warnings
13
-
14
- import pywintypes
15
- import win32api
16
- import win32con
17
- import win32service
18
- import winerror
19
-
20
- error = RuntimeError # Re-exported alias
21
-
22
-
23
- # Returns the full path to an executable for hosting a Python service - typically
24
- # 'pythonservice.exe'
25
- # * If you pass a param and it exists as a file, you'll get the abs path back
26
- # * Otherwise we'll use the param instead of 'pythonservice.exe', and we will
27
- # look for it.
28
- def LocatePythonServiceExe(exe=None):
29
- if not exe and hasattr(sys, "frozen"):
30
- # If py2exe etc calls this with no exe, default is current exe,
31
- # and all setup is their problem :)
32
- return sys.executable
33
-
34
- if exe and os.path.isfile(exe):
35
- return win32api.GetFullPathName(exe)
36
-
37
- suffix = "_d" if "_d.pyd" in importlib.machinery.EXTENSION_SUFFIXES else ""
38
-
39
- # We are confused if we aren't now looking for our default. But if that
40
- # exists as specified we assume it's good.
41
- exe = f"pythonservice{suffix}.exe"
42
- if os.path.isfile(exe):
43
- return win32api.GetFullPathName(exe)
44
-
45
- # Now we are searching for the .exe
46
- # We are going to want it here.
47
- correct = os.path.join(sys.exec_prefix, exe)
48
- # Even if that file already exists, we copy the one installed by pywin32
49
- # in-case it was upgraded.
50
- # pywin32 installed it next to win32service.pyd (but we can't run it from there)
51
- maybe = os.path.join(os.path.dirname(win32service.__file__), exe)
52
- if os.path.exists(maybe):
53
- print(f"moving host exe '{maybe}' -> '{correct}'")
54
- # Handle case where MoveFile() fails. Particularly if destination file
55
- # has a resource lock and can't be replaced by src file
56
- try:
57
- win32api.MoveFileEx(maybe, correct, win32con.MOVEFILE_REPLACE_EXISTING)
58
- except win32api.error as exc:
59
- print(f"Failed to move host exe '{exc}'")
60
-
61
- if not os.path.exists(correct):
62
- raise error(f"Can't find '{correct}'")
63
-
64
- # If pywintypes.dll isn't next to us, or at least next to pythonXX.dll,
65
- # there's a good chance the service will not run. That's usually copied by
66
- # `pywin32_postinstall`, but putting it next to the python DLL seems reasonable.
67
- # (Unlike the .exe above, we don't unconditionally copy this, and possibly
68
- # copy it to a different place. Doesn't seem a good reason for that!?)
69
- python_dll = win32api.GetModuleFileName(sys.dllhandle)
70
- pyw = f"pywintypes{sys.version_info.major}{sys.version_info.minor}{suffix}.dll"
71
- correct_pyw = os.path.join(os.path.dirname(python_dll), pyw)
72
-
73
- if not os.path.exists(correct_pyw):
74
- print(f"copying helper dll '{pywintypes.__file__}' -> '{correct_pyw}'")
75
- win32api.CopyFile(pywintypes.__file__, correct_pyw)
76
-
77
- return correct
78
-
79
-
80
- def _GetServiceShortName(longName):
81
- # looks up a services name
82
- # from the display name
83
- # Thanks to Andy McKay for this code.
84
- access = (
85
- win32con.KEY_READ | win32con.KEY_ENUMERATE_SUB_KEYS | win32con.KEY_QUERY_VALUE
86
- )
87
- hkey = win32api.RegOpenKey(
88
- win32con.HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services", 0, access
89
- )
90
- num = win32api.RegQueryInfoKey(hkey)[0]
91
- longName = longName.lower()
92
- # loop through number of subkeys
93
- for x in range(0, num):
94
- # find service name, open subkey
95
- svc = win32api.RegEnumKey(hkey, x)
96
- skey = win32api.RegOpenKey(hkey, svc, 0, access)
97
- try:
98
- # find display name
99
- thisName = str(win32api.RegQueryValueEx(skey, "DisplayName")[0])
100
- if thisName.lower() == longName:
101
- return svc
102
- except win32api.error:
103
- # in case there is no key called DisplayName
104
- pass
105
- return None
106
-
107
-
108
- # Open a service given either it's long or short name.
109
- def SmartOpenService(hscm, name, access):
110
- try:
111
- return win32service.OpenService(hscm, name, access)
112
- except win32api.error as details:
113
- if details.winerror not in [
114
- winerror.ERROR_SERVICE_DOES_NOT_EXIST,
115
- winerror.ERROR_INVALID_NAME,
116
- ]:
117
- raise
118
- name = win32service.GetServiceKeyName(hscm, name)
119
- return win32service.OpenService(hscm, name, access)
120
-
121
-
122
- def LocateSpecificServiceExe(serviceName):
123
- # Return the .exe name of any service.
124
- hkey = win32api.RegOpenKey(
125
- win32con.HKEY_LOCAL_MACHINE,
126
- "SYSTEM\\CurrentControlSet\\Services\\%s" % (serviceName),
127
- 0,
128
- win32con.KEY_QUERY_VALUE,
129
- )
130
- try:
131
- return win32api.RegQueryValueEx(hkey, "ImagePath")[0]
132
- finally:
133
- hkey.Close()
134
-
135
-
136
- def InstallPerfmonForService(serviceName, iniName, dllName=None):
137
- # If no DLL name, look it up in the INI file name
138
- if not dllName: # May be empty string!
139
- dllName = win32api.GetProfileVal("Python", "dll", "", iniName)
140
- # Still not found - look for the standard one in the same dir as win32service.pyd
141
- if not dllName:
142
- try:
143
- tryName = os.path.join(
144
- os.path.split(win32service.__file__)[0], "perfmondata.dll"
145
- )
146
- if os.path.isfile(tryName):
147
- dllName = tryName
148
- except AttributeError:
149
- # Frozen app? - anyway, can't find it!
150
- pass
151
- if not dllName:
152
- raise ValueError("The name of the performance DLL must be available")
153
- dllName = win32api.GetFullPathName(dllName)
154
- # Now setup all the required "Performance" entries.
155
- hkey = win32api.RegOpenKey(
156
- win32con.HKEY_LOCAL_MACHINE,
157
- "SYSTEM\\CurrentControlSet\\Services\\%s" % (serviceName),
158
- 0,
159
- win32con.KEY_ALL_ACCESS,
160
- )
161
- try:
162
- subKey = win32api.RegCreateKey(hkey, "Performance")
163
- try:
164
- win32api.RegSetValueEx(subKey, "Library", 0, win32con.REG_SZ, dllName)
165
- win32api.RegSetValueEx(
166
- subKey, "Open", 0, win32con.REG_SZ, "OpenPerformanceData"
167
- )
168
- win32api.RegSetValueEx(
169
- subKey, "Close", 0, win32con.REG_SZ, "ClosePerformanceData"
170
- )
171
- win32api.RegSetValueEx(
172
- subKey, "Collect", 0, win32con.REG_SZ, "CollectPerformanceData"
173
- )
174
- finally:
175
- win32api.RegCloseKey(subKey)
176
- finally:
177
- win32api.RegCloseKey(hkey)
178
- # Now do the "Lodctr" thang...
179
-
180
- try:
181
- import perfmon
182
-
183
- path, fname = os.path.split(iniName)
184
- oldPath = os.getcwd()
185
- if path:
186
- os.chdir(path)
187
- try:
188
- perfmon.LoadPerfCounterTextStrings("python.exe " + fname)
189
- finally:
190
- os.chdir(oldPath)
191
- except win32api.error as details:
192
- print("The service was installed OK, but the performance monitor")
193
- print("data could not be loaded.", details)
194
-
195
-
196
- def _GetCommandLine(exeName, exeArgs):
197
- if exeArgs is not None:
198
- return exeName + " " + exeArgs
199
- else:
200
- return exeName
201
-
202
-
203
- def InstallService(
204
- pythonClassString,
205
- serviceName,
206
- displayName,
207
- startType=None,
208
- errorControl=None,
209
- bRunInteractive=0,
210
- serviceDeps=None,
211
- userName=None,
212
- password=None,
213
- exeName=None,
214
- perfMonIni=None,
215
- perfMonDll=None,
216
- exeArgs=None,
217
- description=None,
218
- delayedstart=None,
219
- ):
220
- # Handle the default arguments.
221
- if startType is None:
222
- startType = win32service.SERVICE_DEMAND_START
223
- serviceType = win32service.SERVICE_WIN32_OWN_PROCESS
224
- if bRunInteractive:
225
- serviceType |= win32service.SERVICE_INTERACTIVE_PROCESS
226
- if errorControl is None:
227
- errorControl = win32service.SERVICE_ERROR_NORMAL
228
-
229
- exeName = '"%s"' % LocatePythonServiceExe(exeName)
230
- commandLine = _GetCommandLine(exeName, exeArgs)
231
- hscm = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACCESS)
232
- try:
233
- hs = win32service.CreateService(
234
- hscm,
235
- serviceName,
236
- displayName,
237
- win32service.SERVICE_ALL_ACCESS, # desired access
238
- serviceType, # service type
239
- startType,
240
- errorControl, # error control type
241
- commandLine,
242
- None,
243
- 0,
244
- serviceDeps,
245
- userName,
246
- password,
247
- )
248
- if description is not None:
249
- try:
250
- win32service.ChangeServiceConfig2(
251
- hs, win32service.SERVICE_CONFIG_DESCRIPTION, description
252
- )
253
- except NotImplementedError:
254
- pass ## ChangeServiceConfig2 and description do not exist on NT
255
- if delayedstart is not None:
256
- try:
257
- win32service.ChangeServiceConfig2(
258
- hs,
259
- win32service.SERVICE_CONFIG_DELAYED_AUTO_START_INFO,
260
- delayedstart,
261
- )
262
- except (win32service.error, NotImplementedError):
263
- ## delayed start only exists on Vista and later - warn only when trying to set delayed to True
264
- warnings.warn("Delayed Start not available on this system")
265
- win32service.CloseServiceHandle(hs)
266
- finally:
267
- win32service.CloseServiceHandle(hscm)
268
- InstallPythonClassString(pythonClassString, serviceName)
269
- # If I have performance monitor info to install, do that.
270
- if perfMonIni is not None:
271
- InstallPerfmonForService(serviceName, perfMonIni, perfMonDll)
272
-
273
-
274
- def ChangeServiceConfig(
275
- pythonClassString,
276
- serviceName,
277
- startType=None,
278
- errorControl=None,
279
- bRunInteractive=0,
280
- serviceDeps=None,
281
- userName=None,
282
- password=None,
283
- exeName=None,
284
- displayName=None,
285
- perfMonIni=None,
286
- perfMonDll=None,
287
- exeArgs=None,
288
- description=None,
289
- delayedstart=None,
290
- ):
291
- # Before doing anything, remove any perfmon counters.
292
- try:
293
- import perfmon
294
-
295
- perfmon.UnloadPerfCounterTextStrings("python.exe " + serviceName)
296
- except (ImportError, win32api.error):
297
- pass
298
-
299
- # The EXE location may have changed
300
- exeName = '"%s"' % LocatePythonServiceExe(exeName)
301
-
302
- # Handle the default arguments.
303
- if startType is None:
304
- startType = win32service.SERVICE_NO_CHANGE
305
- if errorControl is None:
306
- errorControl = win32service.SERVICE_NO_CHANGE
307
-
308
- hscm = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACCESS)
309
- serviceType = win32service.SERVICE_WIN32_OWN_PROCESS
310
- if bRunInteractive:
311
- serviceType |= win32service.SERVICE_INTERACTIVE_PROCESS
312
- commandLine = _GetCommandLine(exeName, exeArgs)
313
- try:
314
- hs = SmartOpenService(hscm, serviceName, win32service.SERVICE_ALL_ACCESS)
315
- try:
316
- win32service.ChangeServiceConfig(
317
- hs,
318
- serviceType, # service type
319
- startType,
320
- errorControl, # error control type
321
- commandLine,
322
- None,
323
- 0,
324
- serviceDeps,
325
- userName,
326
- password,
327
- displayName,
328
- )
329
- if description is not None:
330
- try:
331
- win32service.ChangeServiceConfig2(
332
- hs, win32service.SERVICE_CONFIG_DESCRIPTION, description
333
- )
334
- except NotImplementedError:
335
- pass ## ChangeServiceConfig2 and description do not exist on NT
336
- if delayedstart is not None:
337
- try:
338
- win32service.ChangeServiceConfig2(
339
- hs,
340
- win32service.SERVICE_CONFIG_DELAYED_AUTO_START_INFO,
341
- delayedstart,
342
- )
343
- except (win32service.error, NotImplementedError):
344
- ## Delayed start only exists on Vista and later. On Nt, will raise NotImplementedError since ChangeServiceConfig2
345
- ## doensn't exist. On Win2k and XP, will fail with ERROR_INVALID_LEVEL
346
- ## Warn only if trying to set delayed to True
347
- if delayedstart:
348
- warnings.warn("Delayed Start not available on this system")
349
- finally:
350
- win32service.CloseServiceHandle(hs)
351
- finally:
352
- win32service.CloseServiceHandle(hscm)
353
- InstallPythonClassString(pythonClassString, serviceName)
354
- # If I have performance monitor info to install, do that.
355
- if perfMonIni is not None:
356
- InstallPerfmonForService(serviceName, perfMonIni, perfMonDll)
357
-
358
-
359
- def InstallPythonClassString(pythonClassString, serviceName):
360
- # Now setup our Python specific entries.
361
- if pythonClassString:
362
- key = win32api.RegCreateKey(
363
- win32con.HKEY_LOCAL_MACHINE,
364
- "System\\CurrentControlSet\\Services\\%s\\PythonClass" % serviceName,
365
- )
366
- try:
367
- win32api.RegSetValue(key, None, win32con.REG_SZ, pythonClassString)
368
- finally:
369
- win32api.RegCloseKey(key)
370
-
371
-
372
- # Utility functions for Services, to allow persistant properties.
373
- def SetServiceCustomOption(serviceName, option, value):
374
- try:
375
- serviceName = serviceName._svc_name_
376
- except AttributeError:
377
- pass
378
- key = win32api.RegCreateKey(
379
- win32con.HKEY_LOCAL_MACHINE,
380
- "System\\CurrentControlSet\\Services\\%s\\Parameters" % serviceName,
381
- )
382
- try:
383
- if isinstance(value, int):
384
- win32api.RegSetValueEx(key, option, 0, win32con.REG_DWORD, value)
385
- else:
386
- win32api.RegSetValueEx(key, option, 0, win32con.REG_SZ, value)
387
- finally:
388
- win32api.RegCloseKey(key)
389
-
390
-
391
- def GetServiceCustomOption(serviceName, option, defaultValue=None):
392
- # First param may also be a service class/instance.
393
- # This allows services to pass "self"
394
- try:
395
- serviceName = serviceName._svc_name_
396
- except AttributeError:
397
- pass
398
- key = win32api.RegCreateKey(
399
- win32con.HKEY_LOCAL_MACHINE,
400
- "System\\CurrentControlSet\\Services\\%s\\Parameters" % serviceName,
401
- )
402
- try:
403
- try:
404
- return win32api.RegQueryValueEx(key, option)[0]
405
- except win32api.error: # No value.
406
- return defaultValue
407
- finally:
408
- win32api.RegCloseKey(key)
409
-
410
-
411
- def RemoveService(serviceName):
412
- try:
413
- import perfmon
414
-
415
- perfmon.UnloadPerfCounterTextStrings("python.exe " + serviceName)
416
- except (ImportError, win32api.error):
417
- pass
418
-
419
- hscm = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACCESS)
420
- try:
421
- hs = SmartOpenService(hscm, serviceName, win32service.SERVICE_ALL_ACCESS)
422
- win32service.DeleteService(hs)
423
- win32service.CloseServiceHandle(hs)
424
- finally:
425
- win32service.CloseServiceHandle(hscm)
426
-
427
- import win32evtlogutil
428
-
429
- try:
430
- win32evtlogutil.RemoveSourceFromRegistry(serviceName)
431
- except win32api.error:
432
- pass
433
-
434
-
435
- def ControlService(serviceName, code, machine=None):
436
- hscm = win32service.OpenSCManager(machine, None, win32service.SC_MANAGER_ALL_ACCESS)
437
- try:
438
- hs = SmartOpenService(hscm, serviceName, win32service.SERVICE_ALL_ACCESS)
439
- try:
440
- status = win32service.ControlService(hs, code)
441
- finally:
442
- win32service.CloseServiceHandle(hs)
443
- finally:
444
- win32service.CloseServiceHandle(hscm)
445
- return status
446
-
447
-
448
- def __FindSvcDeps(findName):
449
- dict = {}
450
- k = win32api.RegOpenKey(
451
- win32con.HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services"
452
- )
453
- num = 0
454
- while 1:
455
- try:
456
- svc = win32api.RegEnumKey(k, num)
457
- except win32api.error:
458
- break
459
- num += 1
460
- sk = win32api.RegOpenKey(k, svc)
461
- try:
462
- deps, typ = win32api.RegQueryValueEx(sk, "DependOnService")
463
- except win32api.error:
464
- deps = ()
465
- for dep in deps:
466
- dep = dep.lower()
467
- dep_on = dict.get(dep, [])
468
- dep_on.append(svc)
469
- dict[dep] = dep_on
470
-
471
- return __ResolveDeps(findName, dict)
472
-
473
-
474
- def __ResolveDeps(findName, dict):
475
- items = dict.get(findName.lower(), [])
476
- retList = []
477
- for svc in items:
478
- retList.insert(0, svc)
479
- retList = __ResolveDeps(svc, dict) + retList
480
- return retList
481
-
482
-
483
- def WaitForServiceStatus(serviceName, status, waitSecs, machine=None):
484
- """Waits for the service to return the specified status. You
485
- should have already requested the service to enter that state"""
486
- for i in range(waitSecs * 4):
487
- now_status = QueryServiceStatus(serviceName, machine)[1]
488
- if now_status == status:
489
- break
490
- win32api.Sleep(250)
491
- else:
492
- raise pywintypes.error(
493
- winerror.ERROR_SERVICE_REQUEST_TIMEOUT,
494
- "QueryServiceStatus",
495
- win32api.FormatMessage(winerror.ERROR_SERVICE_REQUEST_TIMEOUT)[:-2],
496
- )
497
-
498
-
499
- def __StopServiceWithTimeout(hs, waitSecs=30):
500
- try:
501
- status = win32service.ControlService(hs, win32service.SERVICE_CONTROL_STOP)
502
- except pywintypes.error as exc:
503
- if exc.winerror != winerror.ERROR_SERVICE_NOT_ACTIVE:
504
- raise
505
- for i in range(waitSecs):
506
- status = win32service.QueryServiceStatus(hs)
507
- if status[1] == win32service.SERVICE_STOPPED:
508
- break
509
- win32api.Sleep(1000)
510
- else:
511
- raise pywintypes.error(
512
- winerror.ERROR_SERVICE_REQUEST_TIMEOUT,
513
- "ControlService",
514
- win32api.FormatMessage(winerror.ERROR_SERVICE_REQUEST_TIMEOUT)[:-2],
515
- )
516
-
517
-
518
- def StopServiceWithDeps(serviceName, machine=None, waitSecs=30):
519
- # Stop a service recursively looking for dependant services
520
- hscm = win32service.OpenSCManager(machine, None, win32service.SC_MANAGER_ALL_ACCESS)
521
- try:
522
- deps = __FindSvcDeps(serviceName)
523
- for dep in deps:
524
- hs = win32service.OpenService(hscm, dep, win32service.SERVICE_ALL_ACCESS)
525
- try:
526
- __StopServiceWithTimeout(hs, waitSecs)
527
- finally:
528
- win32service.CloseServiceHandle(hs)
529
- # Now my service!
530
- hs = win32service.OpenService(
531
- hscm, serviceName, win32service.SERVICE_ALL_ACCESS
532
- )
533
- try:
534
- __StopServiceWithTimeout(hs, waitSecs)
535
- finally:
536
- win32service.CloseServiceHandle(hs)
537
-
538
- finally:
539
- win32service.CloseServiceHandle(hscm)
540
-
541
-
542
- def StopService(serviceName, machine=None):
543
- return ControlService(serviceName, win32service.SERVICE_CONTROL_STOP, machine)
544
-
545
-
546
- def StartService(serviceName, args=None, machine=None):
547
- hscm = win32service.OpenSCManager(machine, None, win32service.SC_MANAGER_ALL_ACCESS)
548
- try:
549
- hs = SmartOpenService(hscm, serviceName, win32service.SERVICE_ALL_ACCESS)
550
- try:
551
- win32service.StartService(hs, args)
552
- finally:
553
- win32service.CloseServiceHandle(hs)
554
- finally:
555
- win32service.CloseServiceHandle(hscm)
556
-
557
-
558
- def RestartService(serviceName, args=None, waitSeconds=30, machine=None):
559
- "Stop the service, and then start it again (with some tolerance for allowing it to stop.)"
560
- try:
561
- StopService(serviceName, machine)
562
- except pywintypes.error as exc:
563
- # Allow only "service not running" error
564
- if exc.winerror != winerror.ERROR_SERVICE_NOT_ACTIVE:
565
- raise
566
- # Give it a few goes, as the service may take time to stop
567
- for i in range(waitSeconds):
568
- try:
569
- StartService(serviceName, args, machine)
570
- break
571
- except pywintypes.error as exc:
572
- if exc.winerror != winerror.ERROR_SERVICE_ALREADY_RUNNING:
573
- raise
574
- win32api.Sleep(1000)
575
- else:
576
- print("Gave up waiting for the old service to stop!")
577
-
578
-
579
- def _DebugCtrlHandler(evt):
580
- if evt in (win32con.CTRL_C_EVENT, win32con.CTRL_BREAK_EVENT):
581
- assert g_debugService
582
- print("Stopping debug service.")
583
- g_debugService.SvcStop()
584
- return True
585
- return False
586
-
587
-
588
- def DebugService(cls, argv=[]):
589
- # Run a service in "debug" mode. Re-implements what pythonservice.exe
590
- # does when it sees a "-debug" param.
591
- # Currently only used by "frozen" (ie, py2exe) programs (but later may
592
- # end up being used for all services should we ever remove
593
- # pythonservice.exe)
594
- import servicemanager
595
-
596
- global g_debugService
597
-
598
- print(f"Debugging service {cls._svc_name_} - press Ctrl+C to stop.")
599
- servicemanager.Debugging(True)
600
- servicemanager.PrepareToHostSingle(cls)
601
- g_debugService = cls(argv)
602
- # Setup a ctrl+c handler to simulate a "stop"
603
- win32api.SetConsoleCtrlHandler(_DebugCtrlHandler, True)
604
- try:
605
- g_debugService.SvcRun()
606
- finally:
607
- win32api.SetConsoleCtrlHandler(_DebugCtrlHandler, False)
608
- servicemanager.Debugging(False)
609
- g_debugService = None
610
-
611
-
612
- def GetServiceClassString(cls, argv=None):
613
- if argv is None:
614
- argv = sys.argv
615
- import pickle
616
-
617
- modName = pickle.whichmodule(cls, cls.__name__)
618
- if modName == "__main__":
619
- try:
620
- fname = win32api.GetFullPathName(argv[0])
621
- path = os.path.split(fname)[0]
622
- # Eaaaahhhh - sometimes this will be a short filename, which causes
623
- # problems with 1.5.1 and the silly filename case rule.
624
- filelist = win32api.FindFiles(fname)
625
- # win32api.FindFiles will not detect files in a zip or exe. If list is empty,
626
- # skip the test and hope the file really exists.
627
- if len(filelist) != 0:
628
- # Get the long name
629
- fname = os.path.join(path, filelist[0][8])
630
- except win32api.error:
631
- raise error(
632
- "Could not resolve the path name '%s' to a full path" % (argv[0])
633
- )
634
- modName = os.path.splitext(fname)[0]
635
- return modName + "." + cls.__name__
636
-
637
-
638
- def QueryServiceStatus(serviceName, machine=None):
639
- hscm = win32service.OpenSCManager(machine, None, win32service.SC_MANAGER_CONNECT)
640
- try:
641
- hs = SmartOpenService(hscm, serviceName, win32service.SERVICE_QUERY_STATUS)
642
- try:
643
- status = win32service.QueryServiceStatus(hs)
644
- finally:
645
- win32service.CloseServiceHandle(hs)
646
- finally:
647
- win32service.CloseServiceHandle(hscm)
648
- return status
649
-
650
-
651
- def usage():
652
- try:
653
- fname = os.path.split(sys.argv[0])[1]
654
- except:
655
- fname = sys.argv[0]
656
- print(
657
- "Usage: '%s [options] install|update|remove|start [...]|stop|restart [...]|debug [...]'"
658
- % fname
659
- )
660
- print("Options for 'install' and 'update' commands only:")
661
- print(" --username domain\\username : The Username the service is to run under")
662
- print(" --password password : The password for the username")
663
- print(
664
- " --startup [manual|auto|disabled|delayed] : How the service starts, default = manual"
665
- )
666
- print(" --interactive : Allow the service to interact with the desktop.")
667
- print(
668
- " --perfmonini file: .ini file to use for registering performance monitor data"
669
- )
670
- print(" --perfmondll file: .dll file to use when querying the service for")
671
- print(" performance data, default = perfmondata.dll")
672
- print("Options for 'start' and 'stop' commands only:")
673
- print(" --wait seconds: Wait for the service to actually start or stop.")
674
- print(" If you specify --wait with the 'stop' option, the service")
675
- print(" and all dependent services will be stopped, each waiting")
676
- print(" the specified period.")
677
- sys.exit(1)
678
-
679
-
680
- def HandleCommandLine(
681
- cls,
682
- serviceClassString=None,
683
- argv=None,
684
- customInstallOptions="",
685
- customOptionHandler=None,
686
- ):
687
- """Utility function allowing services to process the command line.
688
-
689
- Allows standard commands such as 'start', 'stop', 'debug', 'install' etc.
690
-
691
- Install supports 'standard' command line options prefixed with '--', such as
692
- --username, --password, etc. In addition,
693
- the function allows custom command line options to be handled by the calling function.
694
- """
695
- err = 0
696
-
697
- if argv is None:
698
- argv = sys.argv
699
-
700
- if len(argv) <= 1:
701
- usage()
702
-
703
- serviceName = cls._svc_name_
704
- serviceDisplayName = cls._svc_display_name_
705
- if serviceClassString is None:
706
- serviceClassString = GetServiceClassString(cls)
707
-
708
- # Pull apart the command line
709
- import getopt
710
-
711
- try:
712
- opts, args = getopt.getopt(
713
- argv[1:],
714
- customInstallOptions,
715
- [
716
- "password=",
717
- "username=",
718
- "startup=",
719
- "perfmonini=",
720
- "perfmondll=",
721
- "interactive",
722
- "wait=",
723
- ],
724
- )
725
- except getopt.error as details:
726
- print(details)
727
- usage()
728
- userName = None
729
- password = None
730
- perfMonIni = perfMonDll = None
731
- startup = None
732
- delayedstart = None
733
- interactive = None
734
- waitSecs = 0
735
- for opt, val in opts:
736
- if opt == "--username":
737
- userName = val
738
- elif opt == "--password":
739
- password = val
740
- elif opt == "--perfmonini":
741
- perfMonIni = val
742
- elif opt == "--perfmondll":
743
- perfMonDll = val
744
- elif opt == "--interactive":
745
- interactive = 1
746
- elif opt == "--startup":
747
- map = {
748
- "manual": win32service.SERVICE_DEMAND_START,
749
- "auto": win32service.SERVICE_AUTO_START,
750
- "delayed": win32service.SERVICE_AUTO_START, ## ChangeServiceConfig2 called later
751
- "disabled": win32service.SERVICE_DISABLED,
752
- }
753
- startup = map.get(val.lower())
754
- if not startup:
755
- print(f"{val!r} is not a valid startup option")
756
- if val.lower() == "delayed":
757
- delayedstart = True
758
- elif val.lower() == "auto":
759
- delayedstart = False
760
- ## else no change
761
- elif opt == "--wait":
762
- try:
763
- waitSecs = int(val)
764
- except ValueError:
765
- print("--wait must specify an integer number of seconds.")
766
- usage()
767
-
768
- arg = args[0]
769
- knownArg = 0
770
- # First we process all arguments which pass additional args on
771
- if arg == "start":
772
- knownArg = 1
773
- print("Starting service %s" % (serviceName))
774
- try:
775
- StartService(serviceName, args[1:])
776
- if waitSecs:
777
- WaitForServiceStatus(
778
- serviceName, win32service.SERVICE_RUNNING, waitSecs
779
- )
780
- except win32service.error as exc:
781
- print("Error starting service: %s" % exc.strerror)
782
- err = exc.winerror
783
-
784
- elif arg == "restart":
785
- knownArg = 1
786
- print("Restarting service %s" % (serviceName))
787
- RestartService(serviceName, args[1:])
788
- if waitSecs:
789
- WaitForServiceStatus(serviceName, win32service.SERVICE_RUNNING, waitSecs)
790
-
791
- elif arg == "debug":
792
- knownArg = 1
793
- if not hasattr(sys, "frozen"):
794
- # non-frozen services use pythonservice.exe which handles a
795
- # -debug option
796
- svcArgs = " ".join(args[1:])
797
- try:
798
- exeName = LocateSpecificServiceExe(serviceName)
799
- except win32api.error as exc:
800
- if exc.winerror == winerror.ERROR_FILE_NOT_FOUND:
801
- print("The service does not appear to be installed.")
802
- print("Please install the service before debugging it.")
803
- sys.exit(1)
804
- raise
805
- try:
806
- os.system(f"{exeName} -debug {serviceName} {svcArgs}")
807
- # ^C is used to kill the debug service. Sometimes Python also gets
808
- # interrupted - ignore it...
809
- except KeyboardInterrupt:
810
- pass
811
- else:
812
- # py2exe services don't use pythonservice - so we simulate
813
- # debugging here.
814
- DebugService(cls, args)
815
-
816
- if not knownArg and len(args) != 1:
817
- usage() # the rest of the cmds don't take addn args
818
-
819
- if arg == "install":
820
- knownArg = 1
821
- try:
822
- serviceDeps = cls._svc_deps_
823
- except AttributeError:
824
- serviceDeps = None
825
- try:
826
- exeName = cls._exe_name_
827
- except AttributeError:
828
- exeName = None # Default to PythonService.exe
829
- try:
830
- exeArgs = cls._exe_args_
831
- except AttributeError:
832
- exeArgs = None
833
- try:
834
- description = cls._svc_description_
835
- except AttributeError:
836
- description = None
837
- print(f"Installing service {serviceName}")
838
- # Note that we install the service before calling the custom option
839
- # handler, so if the custom handler fails, we have an installed service (from NT's POV)
840
- # but is unlikely to work, as the Python code controlling it failed. Therefore
841
- # we remove the service if the first bit works, but the second doesn't!
842
- try:
843
- InstallService(
844
- serviceClassString,
845
- serviceName,
846
- serviceDisplayName,
847
- serviceDeps=serviceDeps,
848
- startType=startup,
849
- bRunInteractive=interactive,
850
- userName=userName,
851
- password=password,
852
- exeName=exeName,
853
- perfMonIni=perfMonIni,
854
- perfMonDll=perfMonDll,
855
- exeArgs=exeArgs,
856
- description=description,
857
- delayedstart=delayedstart,
858
- )
859
- if customOptionHandler:
860
- customOptionHandler(*(opts,))
861
- print("Service installed")
862
- except win32service.error as exc:
863
- if exc.winerror == winerror.ERROR_SERVICE_EXISTS:
864
- arg = "update" # Fall through to the "update" param!
865
- else:
866
- print(
867
- "Error installing service: %s (%d)" % (exc.strerror, exc.winerror)
868
- )
869
- err = exc.winerror
870
- except ValueError as msg: # Can be raised by custom option handler.
871
- print("Error installing service: %s" % str(msg))
872
- err = -1
873
- # xxx - maybe I should remove after _any_ failed install - however,
874
- # xxx - it may be useful to help debug to leave the service as it failed.
875
- # xxx - We really _must_ remove as per the comments above...
876
- # As we failed here, remove the service, so the next installation
877
- # attempt works.
878
- try:
879
- RemoveService(serviceName)
880
- except win32api.error:
881
- print("Warning - could not remove the partially installed service.")
882
-
883
- if arg == "update":
884
- knownArg = 1
885
- try:
886
- serviceDeps = cls._svc_deps_
887
- except AttributeError:
888
- serviceDeps = None
889
- try:
890
- exeName = cls._exe_name_
891
- except AttributeError:
892
- exeName = None # Default to PythonService.exe
893
- try:
894
- exeArgs = cls._exe_args_
895
- except AttributeError:
896
- exeArgs = None
897
- try:
898
- description = cls._svc_description_
899
- except AttributeError:
900
- description = None
901
- print("Changing service configuration")
902
- try:
903
- ChangeServiceConfig(
904
- serviceClassString,
905
- serviceName,
906
- serviceDeps=serviceDeps,
907
- startType=startup,
908
- bRunInteractive=interactive,
909
- userName=userName,
910
- password=password,
911
- exeName=exeName,
912
- displayName=serviceDisplayName,
913
- perfMonIni=perfMonIni,
914
- perfMonDll=perfMonDll,
915
- exeArgs=exeArgs,
916
- description=description,
917
- delayedstart=delayedstart,
918
- )
919
- if customOptionHandler:
920
- customOptionHandler(*(opts,))
921
- print("Service updated")
922
- except win32service.error as exc:
923
- print(
924
- "Error changing service configuration: %s (%d)"
925
- % (exc.strerror, exc.winerror)
926
- )
927
- err = exc.winerror
928
-
929
- elif arg == "remove":
930
- knownArg = 1
931
- print("Removing service %s" % (serviceName))
932
- try:
933
- RemoveService(serviceName)
934
- print("Service removed")
935
- except win32service.error as exc:
936
- print("Error removing service: %s (%d)" % (exc.strerror, exc.winerror))
937
- err = exc.winerror
938
- elif arg == "stop":
939
- knownArg = 1
940
- print("Stopping service %s" % (serviceName))
941
- try:
942
- if waitSecs:
943
- StopServiceWithDeps(serviceName, waitSecs=waitSecs)
944
- else:
945
- StopService(serviceName)
946
- except win32service.error as exc:
947
- print("Error stopping service: %s (%d)" % (exc.strerror, exc.winerror))
948
- err = exc.winerror
949
- if not knownArg:
950
- err = -1
951
- print("Unknown command - '%s'" % arg)
952
- usage()
953
- return err
954
-
955
-
956
- #
957
- # Useful base class to build services from.
958
- #
959
- class ServiceFramework:
960
- # Required Attributes:
961
- # _svc_name_ = The service name
962
- # _svc_display_name_ = The service display name
963
-
964
- # Optional Attributes:
965
- _svc_deps_ = None # sequence of service names on which this depends
966
- _exe_name_ = None # Default to PythonService.exe
967
- _exe_args_ = None # Default to no arguments
968
- _svc_description_ = (
969
- None # Only exists on Windows 2000 or later, ignored on windows NT
970
- )
971
-
972
- def __init__(self, args):
973
- import servicemanager
974
-
975
- self.ssh = servicemanager.RegisterServiceCtrlHandler(
976
- args[0], self.ServiceCtrlHandlerEx, True
977
- )
978
- servicemanager.SetEventSourceName(self._svc_name_)
979
- self.checkPoint = 0
980
-
981
- def GetAcceptedControls(self):
982
- # Setup the service controls we accept based on our attributes. Note
983
- # that if you need to handle controls via SvcOther[Ex](), you must
984
- # override this.
985
- accepted = 0
986
- if hasattr(self, "SvcStop"):
987
- accepted |= win32service.SERVICE_ACCEPT_STOP
988
- if hasattr(self, "SvcPause") and hasattr(self, "SvcContinue"):
989
- accepted |= win32service.SERVICE_ACCEPT_PAUSE_CONTINUE
990
- if hasattr(self, "SvcShutdown"):
991
- accepted |= win32service.SERVICE_ACCEPT_SHUTDOWN
992
- return accepted
993
-
994
- def ReportServiceStatus(
995
- self, serviceStatus, waitHint=5000, win32ExitCode=0, svcExitCode=0
996
- ):
997
- if self.ssh is None: # Debugging!
998
- return
999
- if serviceStatus == win32service.SERVICE_START_PENDING:
1000
- accepted = 0
1001
- else:
1002
- accepted = self.GetAcceptedControls()
1003
-
1004
- if serviceStatus in [
1005
- win32service.SERVICE_RUNNING,
1006
- win32service.SERVICE_STOPPED,
1007
- ]:
1008
- checkPoint = 0
1009
- else:
1010
- self.checkPoint += 1
1011
- checkPoint = self.checkPoint
1012
-
1013
- # Now report the status to the control manager
1014
- status = (
1015
- win32service.SERVICE_WIN32_OWN_PROCESS,
1016
- serviceStatus,
1017
- accepted, # dwControlsAccepted,
1018
- win32ExitCode, # dwWin32ExitCode;
1019
- svcExitCode, # dwServiceSpecificExitCode;
1020
- checkPoint, # dwCheckPoint;
1021
- waitHint,
1022
- )
1023
- win32service.SetServiceStatus(self.ssh, status)
1024
-
1025
- def SvcInterrogate(self):
1026
- # Assume we are running, and everyone is happy.
1027
- self.ReportServiceStatus(win32service.SERVICE_RUNNING)
1028
-
1029
- def SvcOther(self, control):
1030
- try:
1031
- print("Unknown control status - %d" % control)
1032
- except OSError:
1033
- # services may not have a valid stdout!
1034
- pass
1035
-
1036
- def ServiceCtrlHandler(self, control):
1037
- return self.ServiceCtrlHandlerEx(control, 0, None)
1038
-
1039
- # The 'Ex' functions, which take additional params
1040
- def SvcOtherEx(self, control, event_type, data):
1041
- # The default here is to call self.SvcOther as that is the old behaviour.
1042
- # If you want to take advantage of the extra data, override this method
1043
- return self.SvcOther(control)
1044
-
1045
- def ServiceCtrlHandlerEx(self, control, event_type, data):
1046
- if control == win32service.SERVICE_CONTROL_STOP:
1047
- return self.SvcStop()
1048
- elif control == win32service.SERVICE_CONTROL_PAUSE:
1049
- return self.SvcPause()
1050
- elif control == win32service.SERVICE_CONTROL_CONTINUE:
1051
- return self.SvcContinue()
1052
- elif control == win32service.SERVICE_CONTROL_INTERROGATE:
1053
- return self.SvcInterrogate()
1054
- elif control == win32service.SERVICE_CONTROL_SHUTDOWN:
1055
- return self.SvcShutdown()
1056
- else:
1057
- return self.SvcOtherEx(control, event_type, data)
1058
-
1059
- def SvcRun(self):
1060
- # This is the entry point the C framework calls when the Service is
1061
- # started. Your Service class should implement SvcDoRun().
1062
- # Or you can override this method for more control over the Service
1063
- # statuses reported to the SCM.
1064
-
1065
- # If this method raises an exception, the C framework will detect this
1066
- # and report a SERVICE_STOPPED status with a non-zero error code.
1067
-
1068
- self.ReportServiceStatus(win32service.SERVICE_RUNNING)
1069
- self.SvcDoRun()
1070
- # Once SvcDoRun terminates, the service has stopped.
1071
- # We tell the SCM the service is still stopping - the C framework
1072
- # will automatically tell the SCM it has stopped when this returns.
1073
- self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)