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