py2docfx 0.1.15rc2025477__py3-none-any.whl → 0.1.16.dev2051338__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 (604) hide show
  1. py2docfx/docfx_yaml/process_doctree.py +21 -34
  2. py2docfx/docfx_yaml/tests/test_method_arguments.py +1 -7
  3. py2docfx/docfx_yaml/tests/test_process_doctree.py +120 -0
  4. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_core_metadata.py +21 -5
  5. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +13 -0
  6. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/ccompiler.py +5 -2
  7. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build.py +1 -6
  8. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build_clib.py +1 -9
  9. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build_ext.py +1 -8
  10. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/check.py +1 -1
  11. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/config.py +0 -2
  12. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/install.py +8 -17
  13. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compat/numpy.py +2 -0
  14. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/base.py +8 -5
  15. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/msvc.py +1 -1
  16. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +15 -1
  17. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/dist.py +2 -1
  18. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/sysconfig.py +0 -10
  19. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/tests/test_build_ext.py +60 -5
  20. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/unixccompiler.py +6 -0
  21. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/util.py +7 -6
  22. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_normalization.py +29 -0
  23. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/__init__.py +1 -1
  24. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/_bdist_wheel.py +613 -0
  25. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/_setuptools_logging.py +2 -2
  26. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/bdist_wheel.py +25 -594
  27. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/cli/__init__.py +6 -6
  28. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/cli/convert.py +282 -223
  29. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/macosx_libfile.py +22 -9
  30. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/metadata.py +16 -13
  31. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/util.py +0 -9
  32. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/wheelfile.py +40 -9
  33. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_wheel.py +6 -2
  34. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +49 -11
  35. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/_validate_pyproject/extra_validations.py +31 -1
  36. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py +222 -129
  37. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/_validate_pyproject/formats.py +30 -3
  38. py2docfx/venv/basevenv/Lib/site-packages/setuptools/dist.py +168 -51
  39. py2docfx/venv/basevenv/Lib/site-packages/setuptools/msvc.py +12 -3
  40. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +246 -13
  41. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +42 -29
  42. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +1 -1
  43. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +93 -8
  44. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_meta.py +17 -4
  45. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_core_metadata.py +45 -0
  46. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_egg_info.py +24 -4
  47. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_sdist.py +13 -1
  48. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/__init__.py +1 -1
  49. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/any_pb2.py +4 -4
  50. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/api_pb2.py +4 -4
  51. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/compiler/plugin_pb2.py +4 -4
  52. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor_database.py +22 -4
  53. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor_pb2.py +82 -35
  54. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/duration_pb2.py +4 -4
  55. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/empty_pb2.py +4 -4
  56. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/field_mask_pb2.py +4 -4
  57. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/builder.py +4 -3
  58. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/containers.py +13 -0
  59. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/decoder.py +62 -115
  60. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/python_edition_defaults.py +1 -1
  61. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/python_message.py +15 -18
  62. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/testing_refleaks.py +4 -1
  63. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/type_checkers.py +5 -0
  64. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/well_known_types.py +3 -3
  65. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/json_format.py +25 -9
  66. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/message.py +26 -0
  67. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/message_factory.py +0 -63
  68. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/proto.py +38 -1
  69. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/proto_text.py +129 -0
  70. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/reflection.py +0 -49
  71. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/runtime_version.py +3 -3
  72. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/source_context_pb2.py +4 -4
  73. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/struct_pb2.py +4 -4
  74. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/symbol_database.py +0 -18
  75. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/text_format.py +8 -3
  76. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/timestamp_pb2.py +4 -4
  77. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/type_pb2.py +4 -4
  78. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/unknown_fields.py +3 -4
  79. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/wrappers_pb2.py +4 -4
  80. py2docfx/venv/venv1/Lib/site-packages/msal/__init__.py +1 -1
  81. py2docfx/venv/venv1/Lib/site-packages/msal/application.py +51 -17
  82. py2docfx/venv/venv1/Lib/site-packages/msal/broker.py +18 -4
  83. py2docfx/venv/venv1/Lib/site-packages/msal/cloudshell.py +5 -1
  84. py2docfx/venv/venv1/Lib/site-packages/msal/managed_identity.py +5 -4
  85. py2docfx/venv/venv1/Lib/site-packages/msal/sku.py +6 -0
  86. py2docfx/venv/venv1/Lib/site-packages/msal/token_cache.py +31 -10
  87. py2docfx/venv/venv1/Lib/site-packages/msal_extensions/__init__.py +2 -3
  88. py2docfx/venv/venv1/Lib/site-packages/msal_extensions/cache_lock.py +4 -1
  89. py2docfx/venv/venv1/Lib/site-packages/msal_extensions/filelock.py +62 -0
  90. py2docfx/venv/venv1/Lib/site-packages/msal_extensions/libsecret.py +1 -1
  91. py2docfx/venv/venv1/Lib/site-packages/msal_extensions/token_cache.py +7 -1
  92. py2docfx/venv/venv1/Lib/site-packages/pyasn1_modules/__init__.py +1 -1
  93. py2docfx/venv/venv1/Lib/site-packages/setuptools/_core_metadata.py +21 -5
  94. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +13 -0
  95. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/ccompiler.py +5 -2
  96. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build.py +1 -6
  97. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build_clib.py +1 -9
  98. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build_ext.py +1 -8
  99. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/check.py +1 -1
  100. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/config.py +0 -2
  101. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/install.py +8 -17
  102. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compat/numpy.py +2 -0
  103. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/base.py +8 -5
  104. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/msvc.py +1 -1
  105. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +15 -1
  106. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/dist.py +2 -1
  107. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/sysconfig.py +0 -10
  108. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/tests/test_build_ext.py +60 -5
  109. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/unixccompiler.py +6 -0
  110. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/util.py +7 -6
  111. py2docfx/venv/venv1/Lib/site-packages/setuptools/_normalization.py +29 -0
  112. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/__init__.py +1 -1
  113. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/_bdist_wheel.py +613 -0
  114. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/_setuptools_logging.py +2 -2
  115. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/bdist_wheel.py +25 -594
  116. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/cli/__init__.py +6 -6
  117. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/cli/convert.py +282 -223
  118. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/macosx_libfile.py +22 -9
  119. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/metadata.py +16 -13
  120. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/util.py +0 -9
  121. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/wheelfile.py +40 -9
  122. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_wheel.py +6 -2
  123. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +49 -11
  124. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/_validate_pyproject/extra_validations.py +31 -1
  125. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py +222 -129
  126. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/_validate_pyproject/formats.py +30 -3
  127. py2docfx/venv/venv1/Lib/site-packages/setuptools/dist.py +168 -51
  128. py2docfx/venv/venv1/Lib/site-packages/setuptools/msvc.py +12 -3
  129. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +246 -13
  130. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +42 -29
  131. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +1 -1
  132. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +93 -8
  133. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_meta.py +17 -4
  134. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_core_metadata.py +45 -0
  135. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_egg_info.py +24 -4
  136. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_sdist.py +13 -1
  137. py2docfx/venv/venv1/Lib/site-packages/typing_extensions.py +999 -74
  138. {py2docfx-0.1.15rc2025477.dist-info → py2docfx-0.1.16.dev2051338.dist-info}/METADATA +1 -1
  139. {py2docfx-0.1.15rc2025477.dist-info → py2docfx-0.1.16.dev2051338.dist-info}/RECORD +141 -596
  140. py2docfx/venv/venv1/Lib/site-packages/adodbapi/__init__.py +0 -82
  141. py2docfx/venv/venv1/Lib/site-packages/adodbapi/ado_consts.py +0 -283
  142. py2docfx/venv/venv1/Lib/site-packages/adodbapi/adodbapi.py +0 -1153
  143. py2docfx/venv/venv1/Lib/site-packages/adodbapi/apibase.py +0 -723
  144. py2docfx/venv/venv1/Lib/site-packages/adodbapi/examples/db_print.py +0 -72
  145. py2docfx/venv/venv1/Lib/site-packages/adodbapi/examples/db_table_names.py +0 -21
  146. py2docfx/venv/venv1/Lib/site-packages/adodbapi/examples/xls_read.py +0 -41
  147. py2docfx/venv/venv1/Lib/site-packages/adodbapi/examples/xls_write.py +0 -41
  148. py2docfx/venv/venv1/Lib/site-packages/adodbapi/is64bit.py +0 -34
  149. py2docfx/venv/venv1/Lib/site-packages/adodbapi/process_connect_string.py +0 -137
  150. py2docfx/venv/venv1/Lib/site-packages/adodbapi/schema_table.py +0 -16
  151. py2docfx/venv/venv1/Lib/site-packages/adodbapi/setup.py +0 -68
  152. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/adodbapitest.py +0 -1547
  153. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/adodbapitestconfig.py +0 -184
  154. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/dbapi20.py +0 -879
  155. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/is64bit.py +0 -34
  156. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/setuptestframework.py +0 -98
  157. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/test_adodbapi_dbapi20.py +0 -195
  158. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/tryconnection.py +0 -30
  159. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/_parameterized.py +0 -420
  160. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/service.py +0 -213
  161. py2docfx/venv/venv1/Lib/site-packages/isapi/__init__.py +0 -39
  162. py2docfx/venv/venv1/Lib/site-packages/isapi/install.py +0 -809
  163. py2docfx/venv/venv1/Lib/site-packages/isapi/isapicon.py +0 -121
  164. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/advanced.py +0 -218
  165. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/redirector.py +0 -116
  166. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/redirector_asynch.py +0 -85
  167. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/redirector_with_filter.py +0 -162
  168. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/test.py +0 -195
  169. py2docfx/venv/venv1/Lib/site-packages/isapi/simple.py +0 -73
  170. py2docfx/venv/venv1/Lib/site-packages/isapi/test/extension_simple.py +0 -114
  171. py2docfx/venv/venv1/Lib/site-packages/isapi/threaded_extension.py +0 -191
  172. py2docfx/venv/venv1/Lib/site-packages/portalocker/__about__.py +0 -6
  173. py2docfx/venv/venv1/Lib/site-packages/portalocker/__init__.py +0 -79
  174. py2docfx/venv/venv1/Lib/site-packages/portalocker/__main__.py +0 -122
  175. py2docfx/venv/venv1/Lib/site-packages/portalocker/constants.py +0 -59
  176. py2docfx/venv/venv1/Lib/site-packages/portalocker/exceptions.py +0 -27
  177. py2docfx/venv/venv1/Lib/site-packages/portalocker/portalocker.py +0 -154
  178. py2docfx/venv/venv1/Lib/site-packages/portalocker/redis.py +0 -236
  179. py2docfx/venv/venv1/Lib/site-packages/portalocker/utils.py +0 -569
  180. py2docfx/venv/venv1/Lib/site-packages/pythoncom.py +0 -4
  181. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/basictimerapp.py +0 -258
  182. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/customprint.py +0 -183
  183. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/demoutils.py +0 -63
  184. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/dlgappdemo.py +0 -51
  185. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/dojobapp.py +0 -71
  186. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/helloapp.py +0 -53
  187. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/cmdserver.py +0 -113
  188. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/createwin.py +0 -114
  189. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/demoutils.py +0 -65
  190. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/dibdemo.py +0 -73
  191. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/dlgtest.py +0 -145
  192. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/dyndlg.py +0 -104
  193. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/fontdemo.py +0 -85
  194. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/guidemo.py +0 -53
  195. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/hiertest.py +0 -138
  196. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/menutest.py +0 -13
  197. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/objdoc.py +0 -57
  198. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/demoutils.py +0 -63
  199. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/flash.py +0 -95
  200. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/msoffice.py +0 -159
  201. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/ocxserialtest.py +0 -132
  202. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/ocxtest.py +0 -243
  203. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/webbrowser.py +0 -72
  204. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/openGLDemo.py +0 -415
  205. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/progressbar.py +0 -105
  206. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/sliderdemo.py +0 -76
  207. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/splittst.py +0 -79
  208. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/threadedgui.py +0 -189
  209. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/toolbar.py +0 -105
  210. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/__init__.py +0 -3
  211. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/__init__.py +0 -133
  212. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/configui.py +0 -34
  213. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/dbgcon.py +0 -31
  214. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/dbgpyapp.py +0 -48
  215. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/debugger.py +0 -1097
  216. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/fail.py +0 -54
  217. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/__init__.py +0 -0
  218. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/ideoptions.py +0 -136
  219. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/list.py +0 -146
  220. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/login.py +0 -155
  221. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/status.py +0 -242
  222. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/docking/DockingBar.py +0 -676
  223. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/docking/__init__.py +0 -0
  224. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/__init__.py +0 -0
  225. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/app.py +0 -411
  226. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/bitmap.py +0 -168
  227. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/cmdline.py +0 -54
  228. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/dbgcommands.py +0 -188
  229. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/dlgappcore.py +0 -76
  230. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/ModuleBrowser.py +0 -235
  231. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/__init__.py +0 -105
  232. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/color/__init__.py +0 -0
  233. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/color/coloreditor.py +0 -646
  234. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/configui.py +0 -299
  235. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/document.py +0 -379
  236. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/editor.py +0 -511
  237. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/frame.py +0 -74
  238. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/template.py +0 -59
  239. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/vss.py +0 -104
  240. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/help.py +0 -173
  241. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/interact.py +0 -995
  242. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/intpyapp.py +0 -552
  243. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/intpydde.py +0 -65
  244. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/scriptutils.py +0 -684
  245. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/sgrepmdi.py +0 -749
  246. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/startup.py +0 -70
  247. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/stdin.py +0 -172
  248. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/toolmenu.py +0 -279
  249. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/window.py +0 -14
  250. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/winout.py +0 -589
  251. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/AutoExpand.py +0 -95
  252. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/AutoIndent.py +0 -536
  253. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/CallTips.py +0 -216
  254. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/FormatParagraph.py +0 -166
  255. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/IdleHistory.py +0 -87
  256. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/PyParse.py +0 -585
  257. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/__init__.py +0 -1
  258. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/__init__.py +0 -0
  259. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/activex.py +0 -79
  260. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/afxres.py +0 -501
  261. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/dialog.py +0 -277
  262. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/docview.py +0 -151
  263. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/object.py +0 -66
  264. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/thread.py +0 -25
  265. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/window.py +0 -50
  266. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/IDLEenvironment.py +0 -593
  267. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/__init__.py +0 -1
  268. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/bindings.py +0 -180
  269. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/config.py +0 -363
  270. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/configui.py +0 -291
  271. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/control.py +0 -565
  272. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/document.py +0 -312
  273. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/find.py +0 -511
  274. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/formatter.py +0 -704
  275. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/keycodes.py +0 -190
  276. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/scintillacon.py +0 -3083
  277. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/view.py +0 -841
  278. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/TraceCollector.py +0 -79
  279. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/__init__.py +0 -0
  280. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/browseProjects.py +0 -323
  281. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/browser.py +0 -494
  282. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/hierlist.py +0 -353
  283. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/regedit.py +0 -382
  284. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/regpy.py +0 -80
  285. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/BackupRead_BackupWrite.py +0 -119
  286. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/BackupSeek_streamheaders.py +0 -137
  287. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/CopyFileEx.py +0 -57
  288. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/CreateFileTransacted_MiniVersion.py +0 -122
  289. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/EvtFormatMessage.py +0 -83
  290. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/EvtSubscribe_pull.py +0 -28
  291. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/EvtSubscribe_push.py +0 -32
  292. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/FileSecurityTest.py +0 -137
  293. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/GetSaveFileName.py +0 -43
  294. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/NetValidatePasswordPolicy.py +0 -127
  295. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/OpenEncryptedFileRaw.py +0 -66
  296. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/RegCreateKeyTransacted.py +0 -60
  297. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/RegRestoreKey.py +0 -71
  298. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/SystemParametersInfo.py +0 -210
  299. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/c_extension/setup.py +0 -26
  300. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/dde/ddeclient.py +0 -18
  301. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/dde/ddeserver.py +0 -42
  302. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/desktopmanager.py +0 -246
  303. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/eventLogDemo.py +0 -143
  304. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/getfilever.py +0 -33
  305. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/mmapfile_demo.py +0 -101
  306. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/pipes/cat.py +0 -17
  307. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/pipes/runproc.py +0 -114
  308. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/print_desktop.py +0 -113
  309. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/rastest.py +0 -166
  310. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/GetTokenInformation.py +0 -110
  311. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/account_rights.py +0 -49
  312. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/explicit_entries.py +0 -170
  313. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/get_policy_info.py +0 -39
  314. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/list_rights.py +0 -35
  315. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/localized_names.py +0 -70
  316. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/lsaregevent.py +0 -14
  317. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/lsastore.py +0 -12
  318. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/query_information.py +0 -25
  319. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/regsave_sa.py +0 -61
  320. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/regsecurity.py +0 -36
  321. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sa_inherit.py +0 -8
  322. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/security_enums.py +0 -336
  323. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/set_file_audit.py +0 -106
  324. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/set_file_owner.py +0 -73
  325. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/set_policy_info.py +0 -25
  326. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/setkernelobjectsecurity.py +0 -134
  327. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/setnamedsecurityinfo.py +0 -131
  328. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/setsecurityinfo.py +0 -131
  329. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/setuserobjectsecurity.py +0 -102
  330. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sspi/fetch_url.py +0 -158
  331. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sspi/simple_auth.py +0 -72
  332. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sspi/socket_server.py +0 -199
  333. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sspi/validate_password.py +0 -41
  334. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/service/nativePipeTestService.py +0 -63
  335. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/service/pipeTestService.py +0 -185
  336. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/service/pipeTestServiceClient.py +0 -158
  337. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/service/serviceEvents.py +0 -98
  338. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/timer_demo.py +0 -72
  339. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32clipboardDemo.py +0 -155
  340. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32clipboard_bitmapdemo.py +0 -117
  341. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32comport_demo.py +0 -174
  342. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32console_demo.py +0 -132
  343. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32cred_demo.py +0 -82
  344. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32fileDemo.py +0 -41
  345. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_demo.py +0 -177
  346. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_devicenotify.py +0 -106
  347. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_dialog.py +0 -445
  348. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_menu.py +0 -464
  349. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_taskbar.py +0 -136
  350. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32netdemo.py +0 -272
  351. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32rcparser_demo.py +0 -86
  352. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32servicedemo.py +0 -23
  353. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32ts_logoff_disconnected.py +0 -25
  354. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32wnet/testwnet.py +0 -123
  355. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32wnet/winnetwk.py +0 -100
  356. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/winprocess.py +0 -230
  357. py2docfx/venv/venv1/Lib/site-packages/win32/lib/_win32verstamp_pywin32ctypes.py +0 -164
  358. py2docfx/venv/venv1/Lib/site-packages/win32/lib/afxres.py +0 -8
  359. py2docfx/venv/venv1/Lib/site-packages/win32/lib/commctrl.py +0 -1551
  360. py2docfx/venv/venv1/Lib/site-packages/win32/lib/mmsystem.py +0 -956
  361. py2docfx/venv/venv1/Lib/site-packages/win32/lib/netbios.py +0 -293
  362. py2docfx/venv/venv1/Lib/site-packages/win32/lib/ntsecuritycon.py +0 -731
  363. py2docfx/venv/venv1/Lib/site-packages/win32/lib/pywin32_bootstrap.py +0 -21
  364. py2docfx/venv/venv1/Lib/site-packages/win32/lib/pywin32_testutil.py +0 -291
  365. py2docfx/venv/venv1/Lib/site-packages/win32/lib/pywintypes.py +0 -124
  366. py2docfx/venv/venv1/Lib/site-packages/win32/lib/rasutil.py +0 -40
  367. py2docfx/venv/venv1/Lib/site-packages/win32/lib/regcheck.py +0 -161
  368. py2docfx/venv/venv1/Lib/site-packages/win32/lib/regutil.py +0 -395
  369. py2docfx/venv/venv1/Lib/site-packages/win32/lib/sspi.py +0 -413
  370. py2docfx/venv/venv1/Lib/site-packages/win32/lib/sspicon.py +0 -477
  371. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win2kras.py +0 -14
  372. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32con.py +0 -5064
  373. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32cryptcon.py +0 -1922
  374. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32evtlogutil.py +0 -225
  375. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32gui_struct.py +0 -957
  376. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32inetcon.py +0 -1086
  377. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32netcon.py +0 -627
  378. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32pdhquery.py +0 -570
  379. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32pdhutil.py +0 -212
  380. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32rcparser.py +0 -674
  381. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32serviceutil.py +0 -1073
  382. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32timezone.py +0 -1201
  383. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32traceutil.py +0 -59
  384. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32verstamp.py +0 -235
  385. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winerror.py +0 -7362
  386. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winioctlcon.py +0 -1079
  387. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winnt.py +0 -1347
  388. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winperf.py +0 -236
  389. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winxptheme.py +0 -8
  390. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/ControlService.py +0 -594
  391. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/VersionStamp/BrandProject.py +0 -97
  392. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/VersionStamp/bulkstamp.py +0 -156
  393. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/VersionStamp/vssutil.py +0 -201
  394. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/backupEventLog.py +0 -46
  395. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/h2py.py +0 -194
  396. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/killProcName.py +0 -62
  397. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/pywin32_postinstall.py +0 -733
  398. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/pywin32_testall.py +0 -120
  399. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/rasutil.py +0 -98
  400. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/regsetup.py +0 -607
  401. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/setup_d.py +0 -111
  402. py2docfx/venv/venv1/Lib/site-packages/win32/test/handles.py +0 -175
  403. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_clipboard.py +0 -137
  404. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_exceptions.py +0 -213
  405. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_odbc.py +0 -264
  406. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_pywintypes.py +0 -111
  407. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_security.py +0 -166
  408. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_sspi.py +0 -229
  409. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32api.py +0 -273
  410. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32clipboard.py +0 -59
  411. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32cred.py +0 -91
  412. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32crypt.py +0 -144
  413. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32event.py +0 -119
  414. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32file.py +0 -1096
  415. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32gui.py +0 -227
  416. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32guistruct.py +0 -333
  417. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32inet.py +0 -108
  418. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32net.py +0 -23
  419. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32pipe.py +0 -148
  420. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32print.py +0 -24
  421. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32profile.py +0 -19
  422. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32rcparser.py +0 -70
  423. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32timezone.py +0 -16
  424. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32trace.py +0 -366
  425. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32ts.py +0 -19
  426. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32wnet.py +0 -174
  427. py2docfx/venv/venv1/Lib/site-packages/win32/test/testall.py +0 -223
  428. py2docfx/venv/venv1/Lib/site-packages/win32/winxpgui.py +0 -13
  429. py2docfx/venv/venv1/Lib/site-packages/win32com/__init__.py +0 -134
  430. py2docfx/venv/venv1/Lib/site-packages/win32com/client/CLSIDToClass.py +0 -60
  431. py2docfx/venv/venv1/Lib/site-packages/win32com/client/__init__.py +0 -717
  432. py2docfx/venv/venv1/Lib/site-packages/win32com/client/build.py +0 -771
  433. py2docfx/venv/venv1/Lib/site-packages/win32com/client/combrowse.py +0 -604
  434. py2docfx/venv/venv1/Lib/site-packages/win32com/client/connect.py +0 -48
  435. py2docfx/venv/venv1/Lib/site-packages/win32com/client/dynamic.py +0 -699
  436. py2docfx/venv/venv1/Lib/site-packages/win32com/client/gencache.py +0 -825
  437. py2docfx/venv/venv1/Lib/site-packages/win32com/client/genpy.py +0 -1350
  438. py2docfx/venv/venv1/Lib/site-packages/win32com/client/makepy.py +0 -453
  439. py2docfx/venv/venv1/Lib/site-packages/win32com/client/selecttlb.py +0 -182
  440. py2docfx/venv/venv1/Lib/site-packages/win32com/client/tlbrowse.py +0 -277
  441. py2docfx/venv/venv1/Lib/site-packages/win32com/client/util.py +0 -103
  442. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/__init__.py +0 -0
  443. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/connect.py +0 -96
  444. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/dump_clipboard.py +0 -74
  445. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/eventsApartmentThreaded.py +0 -98
  446. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/eventsFreeThreaded.py +0 -92
  447. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/excelAddin.py +0 -169
  448. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/excelRTDServer.py +0 -434
  449. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/iebutton.py +0 -214
  450. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/ietoolbar.py +0 -368
  451. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/outlookAddin.py +0 -135
  452. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/trybag.py +0 -78
  453. py2docfx/venv/venv1/Lib/site-packages/win32com/makegw/__init__.py +0 -1
  454. py2docfx/venv/venv1/Lib/site-packages/win32com/makegw/makegw.py +0 -618
  455. py2docfx/venv/venv1/Lib/site-packages/win32com/makegw/makegwenum.py +0 -331
  456. py2docfx/venv/venv1/Lib/site-packages/win32com/makegw/makegwparse.py +0 -1017
  457. py2docfx/venv/venv1/Lib/site-packages/win32com/olectl.py +0 -70
  458. py2docfx/venv/venv1/Lib/site-packages/win32com/server/__init__.py +0 -1
  459. py2docfx/venv/venv1/Lib/site-packages/win32com/server/connect.py +0 -85
  460. py2docfx/venv/venv1/Lib/site-packages/win32com/server/dispatcher.py +0 -239
  461. py2docfx/venv/venv1/Lib/site-packages/win32com/server/exception.py +0 -99
  462. py2docfx/venv/venv1/Lib/site-packages/win32com/server/factory.py +0 -26
  463. py2docfx/venv/venv1/Lib/site-packages/win32com/server/localserver.py +0 -53
  464. py2docfx/venv/venv1/Lib/site-packages/win32com/server/policy.py +0 -803
  465. py2docfx/venv/venv1/Lib/site-packages/win32com/server/register.py +0 -677
  466. py2docfx/venv/venv1/Lib/site-packages/win32com/server/util.py +0 -229
  467. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/PythonTools.py +0 -47
  468. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/__init__.py +0 -0
  469. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/dictionary.py +0 -133
  470. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/interp.py +0 -59
  471. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/perfmon.py +0 -36
  472. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/test_pycomtest.py +0 -181
  473. py2docfx/venv/venv1/Lib/site-packages/win32com/storagecon.py +0 -142
  474. py2docfx/venv/venv1/Lib/site-packages/win32com/test/GenTestScripts.py +0 -95
  475. py2docfx/venv/venv1/Lib/site-packages/win32com/test/__init__.py +0 -1
  476. py2docfx/venv/venv1/Lib/site-packages/win32com/test/daodump.py +0 -88
  477. py2docfx/venv/venv1/Lib/site-packages/win32com/test/errorSemantics.py +0 -243
  478. py2docfx/venv/venv1/Lib/site-packages/win32com/test/pippo_server.py +0 -96
  479. py2docfx/venv/venv1/Lib/site-packages/win32com/test/policySemantics.py +0 -115
  480. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testADOEvents.py +0 -100
  481. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testAXScript.py +0 -44
  482. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testAccess.py +0 -185
  483. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testArrays.py +0 -99
  484. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testClipboard.py +0 -169
  485. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testCollections.py +0 -159
  486. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testConversionErrors.py +0 -35
  487. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testDCOM.py +0 -50
  488. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testDates.py +0 -74
  489. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testDictionary.py +0 -101
  490. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testDynamic.py +0 -83
  491. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testExchange.py +0 -121
  492. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testExplorer.py +0 -139
  493. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testGIT.py +0 -142
  494. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testGatewayAddresses.py +0 -149
  495. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testIterators.py +0 -140
  496. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testMSOffice.py +0 -184
  497. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testMSOfficeEvents.py +0 -138
  498. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testMarshal.py +0 -160
  499. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testPersist.py +0 -227
  500. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testPippo.py +0 -80
  501. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testPyComTest.py +0 -918
  502. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testROT.py +0 -29
  503. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testServers.py +0 -51
  504. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testShell.py +0 -272
  505. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testStorage.py +0 -88
  506. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testStreams.py +0 -147
  507. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testWMI.py +0 -18
  508. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testall.py +0 -320
  509. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testmakepy.py +0 -54
  510. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testvb.py +0 -583
  511. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testvbscript_regexp.py +0 -40
  512. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testxslt.py +0 -34
  513. py2docfx/venv/venv1/Lib/site-packages/win32com/test/util.py +0 -262
  514. py2docfx/venv/venv1/Lib/site-packages/win32com/universal.py +0 -224
  515. py2docfx/venv/venv1/Lib/site-packages/win32com/util.py +0 -35
  516. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/__init__.py +0 -113
  517. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/adsicon.py +0 -340
  518. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/demos/objectPicker.py +0 -68
  519. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/demos/scp.py +0 -565
  520. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/demos/search.py +0 -151
  521. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/demos/test.py +0 -274
  522. py2docfx/venv/venv1/Lib/site-packages/win32comext/authorization/__init__.py +0 -6
  523. py2docfx/venv/venv1/Lib/site-packages/win32comext/authorization/demos/EditSecurity.py +0 -229
  524. py2docfx/venv/venv1/Lib/site-packages/win32comext/authorization/demos/EditServiceSecurity.py +0 -219
  525. py2docfx/venv/venv1/Lib/site-packages/win32comext/axcontrol/__init__.py +0 -4
  526. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/__init__.py +0 -4
  527. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/adb.py +0 -467
  528. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/codecontainer.py +0 -279
  529. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/contexts.py +0 -58
  530. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/debugger.py +0 -238
  531. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/documents.py +0 -135
  532. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/dump.py +0 -57
  533. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/expressions.py +0 -212
  534. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/gateways.py +0 -583
  535. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/stackframe.py +0 -178
  536. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/util.py +0 -98
  537. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/__init__.py +0 -4
  538. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/asputil.py +0 -13
  539. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/__init__.py +0 -1
  540. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/debug.py +0 -223
  541. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/error.py +0 -262
  542. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/framework.py +0 -1291
  543. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/pydumper.py +0 -78
  544. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/pyscript.py +0 -438
  545. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/pyscript_rexec.py +0 -54
  546. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/scriptdispatch.py +0 -103
  547. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/server/__init__.py +0 -0
  548. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/server/axsite.py +0 -145
  549. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/test/leakTest.py +0 -185
  550. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/test/testHost.py +0 -240
  551. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/test/testHost4Dbg.py +0 -83
  552. py2docfx/venv/venv1/Lib/site-packages/win32comext/bits/__init__.py +0 -6
  553. py2docfx/venv/venv1/Lib/site-packages/win32comext/bits/test/show_all_jobs.py +0 -48
  554. py2docfx/venv/venv1/Lib/site-packages/win32comext/bits/test/test_bits.py +0 -119
  555. py2docfx/venv/venv1/Lib/site-packages/win32comext/directsound/__init__.py +0 -4
  556. py2docfx/venv/venv1/Lib/site-packages/win32comext/directsound/test/__init__.py +0 -1
  557. py2docfx/venv/venv1/Lib/site-packages/win32comext/directsound/test/ds_record.py +0 -60
  558. py2docfx/venv/venv1/Lib/site-packages/win32comext/directsound/test/ds_test.py +0 -402
  559. py2docfx/venv/venv1/Lib/site-packages/win32comext/ifilter/__init__.py +0 -1
  560. py2docfx/venv/venv1/Lib/site-packages/win32comext/ifilter/demo/filterDemo.py +0 -300
  561. py2docfx/venv/venv1/Lib/site-packages/win32comext/ifilter/ifiltercon.py +0 -110
  562. py2docfx/venv/venv1/Lib/site-packages/win32comext/internet/__init__.py +0 -4
  563. py2docfx/venv/venv1/Lib/site-packages/win32comext/internet/inetcon.py +0 -261
  564. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/__init__.py +0 -21
  565. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/demos/mapisend.py +0 -98
  566. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/emsabtags.py +0 -875
  567. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/mapitags.py +0 -1023
  568. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/mapiutil.py +0 -211
  569. py2docfx/venv/venv1/Lib/site-packages/win32comext/propsys/__init__.py +0 -1
  570. py2docfx/venv/venv1/Lib/site-packages/win32comext/propsys/pscon.py +0 -838
  571. py2docfx/venv/venv1/Lib/site-packages/win32comext/propsys/test/testpropsys.py +0 -5
  572. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/__init__.py +0 -4
  573. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/IActiveDesktop.py +0 -83
  574. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/IFileOperationProgressSink.py +0 -179
  575. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/IShellLinkDataList.py +0 -67
  576. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/ITransferAdviseSink.py +0 -93
  577. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/IUniformResourceLocator.py +0 -56
  578. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/browse_for_folder.py +0 -45
  579. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/create_link.py +0 -73
  580. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/dump_link.py +0 -58
  581. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/explorer_browser.py +0 -143
  582. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/column_provider.py +0 -125
  583. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/context_menu.py +0 -122
  584. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/copy_hook.py +0 -84
  585. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/empty_volume_cache.py +0 -188
  586. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/folder_view.py +0 -866
  587. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/icon_handler.py +0 -81
  588. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/shell_view.py +0 -971
  589. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/shellexecuteex.py +0 -19
  590. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/viewstate.py +0 -68
  591. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/walk_shell_folders.py +0 -24
  592. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/shellcon.py +0 -1615
  593. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/test/testSHFileOperation.py +0 -75
  594. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/test/testShellFolder.py +0 -21
  595. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/test/testShellItem.py +0 -69
  596. py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/__init__.py +0 -6
  597. py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_addtask.py +0 -66
  598. py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_addtask_1.py +0 -68
  599. py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_addtask_2.py +0 -49
  600. py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_localsystem.py +0 -3
  601. py2docfx/venv/venv1/Scripts/pywin32_postinstall.py +0 -733
  602. py2docfx/venv/venv1/Scripts/pywin32_testall.py +0 -120
  603. {py2docfx-0.1.15rc2025477.dist-info → py2docfx-0.1.16.dev2051338.dist-info}/WHEEL +0 -0
  604. {py2docfx-0.1.15rc2025477.dist-info → py2docfx-0.1.16.dev2051338.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)