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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (597) hide show
  1. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_core_metadata.py +21 -5
  2. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +2 -0
  3. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/ccompiler.py +5 -2
  4. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/__init__.py +27 -8
  5. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build.py +1 -6
  6. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build_clib.py +1 -9
  7. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build_ext.py +1 -8
  8. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/check.py +1 -1
  9. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/config.py +0 -2
  10. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/install.py +8 -17
  11. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compat/numpy.py +2 -0
  12. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/base.py +8 -5
  13. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/msvc.py +1 -1
  14. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +15 -1
  15. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/dist.py +2 -1
  16. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/sysconfig.py +0 -10
  17. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/tests/test_build_ext.py +60 -5
  18. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/unixccompiler.py +6 -0
  19. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/util.py +7 -6
  20. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_normalization.py +29 -0
  21. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/__init__.py +1 -1
  22. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/_bdist_wheel.py +613 -0
  23. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/_setuptools_logging.py +2 -2
  24. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/bdist_wheel.py +25 -594
  25. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/cli/__init__.py +6 -6
  26. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/cli/convert.py +282 -223
  27. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/macosx_libfile.py +22 -9
  28. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/metadata.py +16 -13
  29. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/util.py +0 -9
  30. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/wheel/wheelfile.py +40 -9
  31. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_wheel.py +6 -2
  32. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +48 -11
  33. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/_validate_pyproject/extra_validations.py +31 -1
  34. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py +222 -129
  35. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/_validate_pyproject/formats.py +30 -3
  36. py2docfx/venv/basevenv/Lib/site-packages/setuptools/dist.py +115 -9
  37. py2docfx/venv/basevenv/Lib/site-packages/setuptools/msvc.py +12 -3
  38. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +246 -13
  39. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +93 -8
  40. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_meta.py +17 -4
  41. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_core_metadata.py +45 -0
  42. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_egg_info.py +24 -4
  43. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_sdist.py +13 -1
  44. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/__init__.py +1 -1
  45. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/any_pb2.py +4 -4
  46. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/api_pb2.py +4 -4
  47. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/compiler/plugin_pb2.py +4 -4
  48. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor_database.py +22 -4
  49. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor_pb2.py +82 -35
  50. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/duration_pb2.py +4 -4
  51. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/empty_pb2.py +4 -4
  52. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/field_mask_pb2.py +4 -4
  53. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/builder.py +4 -3
  54. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/containers.py +13 -0
  55. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/decoder.py +62 -115
  56. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/python_edition_defaults.py +1 -1
  57. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/python_message.py +15 -18
  58. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/testing_refleaks.py +4 -1
  59. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/type_checkers.py +5 -0
  60. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/well_known_types.py +3 -3
  61. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/json_format.py +25 -9
  62. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/message.py +26 -0
  63. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/message_factory.py +0 -63
  64. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/proto.py +38 -1
  65. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/proto_text.py +129 -0
  66. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/reflection.py +0 -49
  67. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/runtime_version.py +3 -3
  68. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/source_context_pb2.py +4 -4
  69. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/struct_pb2.py +4 -4
  70. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/symbol_database.py +0 -18
  71. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/text_format.py +8 -3
  72. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/timestamp_pb2.py +4 -4
  73. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/type_pb2.py +4 -4
  74. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/unknown_fields.py +3 -4
  75. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/wrappers_pb2.py +4 -4
  76. py2docfx/venv/venv1/Lib/site-packages/msal/__init__.py +1 -1
  77. py2docfx/venv/venv1/Lib/site-packages/msal/application.py +51 -17
  78. py2docfx/venv/venv1/Lib/site-packages/msal/broker.py +18 -4
  79. py2docfx/venv/venv1/Lib/site-packages/msal/cloudshell.py +5 -1
  80. py2docfx/venv/venv1/Lib/site-packages/msal/managed_identity.py +5 -4
  81. py2docfx/venv/venv1/Lib/site-packages/msal/sku.py +6 -0
  82. py2docfx/venv/venv1/Lib/site-packages/msal/token_cache.py +31 -10
  83. py2docfx/venv/venv1/Lib/site-packages/msal_extensions/__init__.py +2 -3
  84. py2docfx/venv/venv1/Lib/site-packages/msal_extensions/cache_lock.py +4 -1
  85. py2docfx/venv/venv1/Lib/site-packages/msal_extensions/filelock.py +62 -0
  86. py2docfx/venv/venv1/Lib/site-packages/msal_extensions/libsecret.py +1 -1
  87. py2docfx/venv/venv1/Lib/site-packages/msal_extensions/token_cache.py +7 -1
  88. py2docfx/venv/venv1/Lib/site-packages/setuptools/_core_metadata.py +21 -5
  89. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +2 -0
  90. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/ccompiler.py +5 -2
  91. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/__init__.py +27 -8
  92. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build.py +1 -6
  93. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build_clib.py +1 -9
  94. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build_ext.py +1 -8
  95. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/check.py +1 -1
  96. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/config.py +0 -2
  97. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/install.py +8 -17
  98. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compat/numpy.py +2 -0
  99. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/base.py +8 -5
  100. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/msvc.py +1 -1
  101. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +15 -1
  102. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/dist.py +2 -1
  103. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/sysconfig.py +0 -10
  104. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/tests/test_build_ext.py +60 -5
  105. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/unixccompiler.py +6 -0
  106. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/util.py +7 -6
  107. py2docfx/venv/venv1/Lib/site-packages/setuptools/_normalization.py +29 -0
  108. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/__init__.py +1 -1
  109. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/_bdist_wheel.py +613 -0
  110. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/_setuptools_logging.py +2 -2
  111. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/bdist_wheel.py +25 -594
  112. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/cli/__init__.py +6 -6
  113. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/cli/convert.py +282 -223
  114. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/macosx_libfile.py +22 -9
  115. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/metadata.py +16 -13
  116. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/util.py +0 -9
  117. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/wheel/wheelfile.py +40 -9
  118. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_wheel.py +6 -2
  119. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +48 -11
  120. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/_validate_pyproject/extra_validations.py +31 -1
  121. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py +222 -129
  122. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/_validate_pyproject/formats.py +30 -3
  123. py2docfx/venv/venv1/Lib/site-packages/setuptools/dist.py +115 -9
  124. py2docfx/venv/venv1/Lib/site-packages/setuptools/msvc.py +12 -3
  125. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +246 -13
  126. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +93 -8
  127. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_meta.py +17 -4
  128. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_core_metadata.py +45 -0
  129. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_egg_info.py +24 -4
  130. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_sdist.py +13 -1
  131. {py2docfx-0.1.15.dev2025501.dist-info → py2docfx-0.1.15.dev2038808.dist-info}/METADATA +1 -1
  132. {py2docfx-0.1.15.dev2025501.dist-info → py2docfx-0.1.15.dev2038808.dist-info}/RECORD +134 -590
  133. py2docfx/venv/venv1/Lib/site-packages/adodbapi/__init__.py +0 -82
  134. py2docfx/venv/venv1/Lib/site-packages/adodbapi/ado_consts.py +0 -283
  135. py2docfx/venv/venv1/Lib/site-packages/adodbapi/adodbapi.py +0 -1153
  136. py2docfx/venv/venv1/Lib/site-packages/adodbapi/apibase.py +0 -723
  137. py2docfx/venv/venv1/Lib/site-packages/adodbapi/examples/db_print.py +0 -72
  138. py2docfx/venv/venv1/Lib/site-packages/adodbapi/examples/db_table_names.py +0 -21
  139. py2docfx/venv/venv1/Lib/site-packages/adodbapi/examples/xls_read.py +0 -41
  140. py2docfx/venv/venv1/Lib/site-packages/adodbapi/examples/xls_write.py +0 -41
  141. py2docfx/venv/venv1/Lib/site-packages/adodbapi/is64bit.py +0 -34
  142. py2docfx/venv/venv1/Lib/site-packages/adodbapi/process_connect_string.py +0 -137
  143. py2docfx/venv/venv1/Lib/site-packages/adodbapi/schema_table.py +0 -16
  144. py2docfx/venv/venv1/Lib/site-packages/adodbapi/setup.py +0 -68
  145. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/adodbapitest.py +0 -1547
  146. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/adodbapitestconfig.py +0 -184
  147. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/dbapi20.py +0 -879
  148. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/is64bit.py +0 -34
  149. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/setuptestframework.py +0 -98
  150. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/test_adodbapi_dbapi20.py +0 -195
  151. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/tryconnection.py +0 -30
  152. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/_parameterized.py +0 -420
  153. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/service.py +0 -213
  154. py2docfx/venv/venv1/Lib/site-packages/isapi/__init__.py +0 -39
  155. py2docfx/venv/venv1/Lib/site-packages/isapi/install.py +0 -809
  156. py2docfx/venv/venv1/Lib/site-packages/isapi/isapicon.py +0 -121
  157. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/advanced.py +0 -218
  158. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/redirector.py +0 -116
  159. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/redirector_asynch.py +0 -85
  160. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/redirector_with_filter.py +0 -162
  161. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/test.py +0 -195
  162. py2docfx/venv/venv1/Lib/site-packages/isapi/simple.py +0 -73
  163. py2docfx/venv/venv1/Lib/site-packages/isapi/test/extension_simple.py +0 -114
  164. py2docfx/venv/venv1/Lib/site-packages/isapi/threaded_extension.py +0 -191
  165. py2docfx/venv/venv1/Lib/site-packages/portalocker/__about__.py +0 -6
  166. py2docfx/venv/venv1/Lib/site-packages/portalocker/__init__.py +0 -79
  167. py2docfx/venv/venv1/Lib/site-packages/portalocker/__main__.py +0 -122
  168. py2docfx/venv/venv1/Lib/site-packages/portalocker/constants.py +0 -59
  169. py2docfx/venv/venv1/Lib/site-packages/portalocker/exceptions.py +0 -27
  170. py2docfx/venv/venv1/Lib/site-packages/portalocker/portalocker.py +0 -154
  171. py2docfx/venv/venv1/Lib/site-packages/portalocker/redis.py +0 -236
  172. py2docfx/venv/venv1/Lib/site-packages/portalocker/utils.py +0 -569
  173. py2docfx/venv/venv1/Lib/site-packages/pythoncom.py +0 -4
  174. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/basictimerapp.py +0 -258
  175. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/customprint.py +0 -183
  176. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/demoutils.py +0 -63
  177. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/dlgappdemo.py +0 -51
  178. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/dojobapp.py +0 -71
  179. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/helloapp.py +0 -53
  180. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/cmdserver.py +0 -113
  181. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/createwin.py +0 -114
  182. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/demoutils.py +0 -65
  183. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/dibdemo.py +0 -73
  184. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/dlgtest.py +0 -145
  185. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/dyndlg.py +0 -104
  186. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/fontdemo.py +0 -85
  187. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/guidemo.py +0 -53
  188. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/hiertest.py +0 -138
  189. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/menutest.py +0 -13
  190. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/objdoc.py +0 -57
  191. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/demoutils.py +0 -63
  192. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/flash.py +0 -95
  193. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/msoffice.py +0 -159
  194. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/ocxserialtest.py +0 -132
  195. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/ocxtest.py +0 -243
  196. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/webbrowser.py +0 -72
  197. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/openGLDemo.py +0 -415
  198. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/progressbar.py +0 -105
  199. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/sliderdemo.py +0 -76
  200. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/splittst.py +0 -79
  201. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/threadedgui.py +0 -189
  202. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/toolbar.py +0 -105
  203. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/__init__.py +0 -3
  204. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/__init__.py +0 -133
  205. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/configui.py +0 -34
  206. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/dbgcon.py +0 -31
  207. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/dbgpyapp.py +0 -48
  208. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/debugger.py +0 -1097
  209. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/fail.py +0 -54
  210. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/__init__.py +0 -0
  211. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/ideoptions.py +0 -136
  212. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/list.py +0 -146
  213. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/login.py +0 -155
  214. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/status.py +0 -242
  215. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/docking/DockingBar.py +0 -676
  216. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/docking/__init__.py +0 -0
  217. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/__init__.py +0 -0
  218. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/app.py +0 -411
  219. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/bitmap.py +0 -168
  220. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/cmdline.py +0 -54
  221. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/dbgcommands.py +0 -188
  222. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/dlgappcore.py +0 -76
  223. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/ModuleBrowser.py +0 -235
  224. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/__init__.py +0 -105
  225. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/color/__init__.py +0 -0
  226. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/color/coloreditor.py +0 -646
  227. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/configui.py +0 -299
  228. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/document.py +0 -379
  229. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/editor.py +0 -511
  230. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/frame.py +0 -74
  231. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/template.py +0 -59
  232. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/vss.py +0 -104
  233. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/help.py +0 -173
  234. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/interact.py +0 -995
  235. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/intpyapp.py +0 -552
  236. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/intpydde.py +0 -65
  237. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/scriptutils.py +0 -684
  238. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/sgrepmdi.py +0 -749
  239. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/startup.py +0 -70
  240. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/stdin.py +0 -172
  241. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/toolmenu.py +0 -279
  242. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/window.py +0 -14
  243. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/winout.py +0 -589
  244. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/AutoExpand.py +0 -95
  245. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/AutoIndent.py +0 -536
  246. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/CallTips.py +0 -216
  247. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/FormatParagraph.py +0 -166
  248. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/IdleHistory.py +0 -87
  249. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/PyParse.py +0 -585
  250. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/__init__.py +0 -1
  251. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/__init__.py +0 -0
  252. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/activex.py +0 -79
  253. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/afxres.py +0 -501
  254. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/dialog.py +0 -277
  255. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/docview.py +0 -151
  256. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/object.py +0 -66
  257. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/thread.py +0 -25
  258. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/window.py +0 -50
  259. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/IDLEenvironment.py +0 -593
  260. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/__init__.py +0 -1
  261. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/bindings.py +0 -180
  262. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/config.py +0 -363
  263. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/configui.py +0 -291
  264. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/control.py +0 -565
  265. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/document.py +0 -312
  266. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/find.py +0 -511
  267. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/formatter.py +0 -704
  268. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/keycodes.py +0 -190
  269. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/scintillacon.py +0 -3083
  270. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/view.py +0 -841
  271. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/TraceCollector.py +0 -79
  272. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/__init__.py +0 -0
  273. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/browseProjects.py +0 -323
  274. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/browser.py +0 -494
  275. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/hierlist.py +0 -353
  276. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/regedit.py +0 -382
  277. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/regpy.py +0 -80
  278. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/BackupRead_BackupWrite.py +0 -119
  279. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/BackupSeek_streamheaders.py +0 -137
  280. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/CopyFileEx.py +0 -57
  281. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/CreateFileTransacted_MiniVersion.py +0 -122
  282. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/EvtFormatMessage.py +0 -83
  283. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/EvtSubscribe_pull.py +0 -28
  284. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/EvtSubscribe_push.py +0 -32
  285. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/FileSecurityTest.py +0 -137
  286. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/GetSaveFileName.py +0 -43
  287. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/NetValidatePasswordPolicy.py +0 -127
  288. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/OpenEncryptedFileRaw.py +0 -66
  289. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/RegCreateKeyTransacted.py +0 -60
  290. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/RegRestoreKey.py +0 -71
  291. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/SystemParametersInfo.py +0 -210
  292. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/c_extension/setup.py +0 -26
  293. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/dde/ddeclient.py +0 -18
  294. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/dde/ddeserver.py +0 -42
  295. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/desktopmanager.py +0 -246
  296. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/eventLogDemo.py +0 -143
  297. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/getfilever.py +0 -33
  298. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/mmapfile_demo.py +0 -101
  299. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/pipes/cat.py +0 -17
  300. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/pipes/runproc.py +0 -114
  301. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/print_desktop.py +0 -113
  302. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/rastest.py +0 -166
  303. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/GetTokenInformation.py +0 -110
  304. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/account_rights.py +0 -49
  305. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/explicit_entries.py +0 -170
  306. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/get_policy_info.py +0 -39
  307. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/list_rights.py +0 -35
  308. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/localized_names.py +0 -70
  309. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/lsaregevent.py +0 -14
  310. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/lsastore.py +0 -12
  311. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/query_information.py +0 -25
  312. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/regsave_sa.py +0 -61
  313. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/regsecurity.py +0 -36
  314. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sa_inherit.py +0 -8
  315. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/security_enums.py +0 -336
  316. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/set_file_audit.py +0 -106
  317. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/set_file_owner.py +0 -73
  318. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/set_policy_info.py +0 -25
  319. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/setkernelobjectsecurity.py +0 -134
  320. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/setnamedsecurityinfo.py +0 -131
  321. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/setsecurityinfo.py +0 -131
  322. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/setuserobjectsecurity.py +0 -102
  323. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sspi/fetch_url.py +0 -158
  324. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sspi/simple_auth.py +0 -72
  325. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sspi/socket_server.py +0 -199
  326. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sspi/validate_password.py +0 -41
  327. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/service/nativePipeTestService.py +0 -63
  328. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/service/pipeTestService.py +0 -185
  329. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/service/pipeTestServiceClient.py +0 -158
  330. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/service/serviceEvents.py +0 -98
  331. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/timer_demo.py +0 -72
  332. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32clipboardDemo.py +0 -155
  333. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32clipboard_bitmapdemo.py +0 -117
  334. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32comport_demo.py +0 -174
  335. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32console_demo.py +0 -132
  336. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32cred_demo.py +0 -82
  337. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32fileDemo.py +0 -41
  338. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_demo.py +0 -177
  339. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_devicenotify.py +0 -106
  340. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_dialog.py +0 -445
  341. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_menu.py +0 -464
  342. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_taskbar.py +0 -136
  343. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32netdemo.py +0 -272
  344. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32rcparser_demo.py +0 -86
  345. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32servicedemo.py +0 -23
  346. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32ts_logoff_disconnected.py +0 -25
  347. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32wnet/testwnet.py +0 -123
  348. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32wnet/winnetwk.py +0 -100
  349. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/winprocess.py +0 -230
  350. py2docfx/venv/venv1/Lib/site-packages/win32/lib/_win32verstamp_pywin32ctypes.py +0 -164
  351. py2docfx/venv/venv1/Lib/site-packages/win32/lib/afxres.py +0 -8
  352. py2docfx/venv/venv1/Lib/site-packages/win32/lib/commctrl.py +0 -1551
  353. py2docfx/venv/venv1/Lib/site-packages/win32/lib/mmsystem.py +0 -956
  354. py2docfx/venv/venv1/Lib/site-packages/win32/lib/netbios.py +0 -293
  355. py2docfx/venv/venv1/Lib/site-packages/win32/lib/ntsecuritycon.py +0 -731
  356. py2docfx/venv/venv1/Lib/site-packages/win32/lib/pywin32_bootstrap.py +0 -21
  357. py2docfx/venv/venv1/Lib/site-packages/win32/lib/pywin32_testutil.py +0 -291
  358. py2docfx/venv/venv1/Lib/site-packages/win32/lib/pywintypes.py +0 -124
  359. py2docfx/venv/venv1/Lib/site-packages/win32/lib/rasutil.py +0 -40
  360. py2docfx/venv/venv1/Lib/site-packages/win32/lib/regcheck.py +0 -161
  361. py2docfx/venv/venv1/Lib/site-packages/win32/lib/regutil.py +0 -395
  362. py2docfx/venv/venv1/Lib/site-packages/win32/lib/sspi.py +0 -413
  363. py2docfx/venv/venv1/Lib/site-packages/win32/lib/sspicon.py +0 -477
  364. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win2kras.py +0 -14
  365. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32con.py +0 -5064
  366. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32cryptcon.py +0 -1922
  367. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32evtlogutil.py +0 -225
  368. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32gui_struct.py +0 -957
  369. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32inetcon.py +0 -1086
  370. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32netcon.py +0 -627
  371. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32pdhquery.py +0 -570
  372. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32pdhutil.py +0 -212
  373. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32rcparser.py +0 -674
  374. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32serviceutil.py +0 -1073
  375. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32timezone.py +0 -1201
  376. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32traceutil.py +0 -59
  377. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32verstamp.py +0 -235
  378. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winerror.py +0 -7362
  379. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winioctlcon.py +0 -1079
  380. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winnt.py +0 -1347
  381. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winperf.py +0 -236
  382. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winxptheme.py +0 -8
  383. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/ControlService.py +0 -594
  384. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/VersionStamp/BrandProject.py +0 -97
  385. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/VersionStamp/bulkstamp.py +0 -156
  386. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/VersionStamp/vssutil.py +0 -201
  387. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/backupEventLog.py +0 -46
  388. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/h2py.py +0 -194
  389. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/killProcName.py +0 -62
  390. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/pywin32_postinstall.py +0 -733
  391. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/pywin32_testall.py +0 -120
  392. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/rasutil.py +0 -98
  393. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/regsetup.py +0 -607
  394. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/setup_d.py +0 -111
  395. py2docfx/venv/venv1/Lib/site-packages/win32/test/handles.py +0 -175
  396. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_clipboard.py +0 -137
  397. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_exceptions.py +0 -213
  398. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_odbc.py +0 -264
  399. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_pywintypes.py +0 -111
  400. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_security.py +0 -166
  401. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_sspi.py +0 -229
  402. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32api.py +0 -273
  403. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32clipboard.py +0 -59
  404. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32cred.py +0 -91
  405. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32crypt.py +0 -144
  406. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32event.py +0 -119
  407. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32file.py +0 -1096
  408. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32gui.py +0 -227
  409. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32guistruct.py +0 -333
  410. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32inet.py +0 -108
  411. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32net.py +0 -23
  412. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32pipe.py +0 -148
  413. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32print.py +0 -24
  414. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32profile.py +0 -19
  415. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32rcparser.py +0 -70
  416. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32timezone.py +0 -16
  417. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32trace.py +0 -366
  418. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32ts.py +0 -19
  419. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32wnet.py +0 -174
  420. py2docfx/venv/venv1/Lib/site-packages/win32/test/testall.py +0 -223
  421. py2docfx/venv/venv1/Lib/site-packages/win32/winxpgui.py +0 -13
  422. py2docfx/venv/venv1/Lib/site-packages/win32com/__init__.py +0 -134
  423. py2docfx/venv/venv1/Lib/site-packages/win32com/client/CLSIDToClass.py +0 -60
  424. py2docfx/venv/venv1/Lib/site-packages/win32com/client/__init__.py +0 -717
  425. py2docfx/venv/venv1/Lib/site-packages/win32com/client/build.py +0 -771
  426. py2docfx/venv/venv1/Lib/site-packages/win32com/client/combrowse.py +0 -604
  427. py2docfx/venv/venv1/Lib/site-packages/win32com/client/connect.py +0 -48
  428. py2docfx/venv/venv1/Lib/site-packages/win32com/client/dynamic.py +0 -699
  429. py2docfx/venv/venv1/Lib/site-packages/win32com/client/gencache.py +0 -825
  430. py2docfx/venv/venv1/Lib/site-packages/win32com/client/genpy.py +0 -1350
  431. py2docfx/venv/venv1/Lib/site-packages/win32com/client/makepy.py +0 -453
  432. py2docfx/venv/venv1/Lib/site-packages/win32com/client/selecttlb.py +0 -182
  433. py2docfx/venv/venv1/Lib/site-packages/win32com/client/tlbrowse.py +0 -277
  434. py2docfx/venv/venv1/Lib/site-packages/win32com/client/util.py +0 -103
  435. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/__init__.py +0 -0
  436. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/connect.py +0 -96
  437. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/dump_clipboard.py +0 -74
  438. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/eventsApartmentThreaded.py +0 -98
  439. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/eventsFreeThreaded.py +0 -92
  440. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/excelAddin.py +0 -169
  441. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/excelRTDServer.py +0 -434
  442. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/iebutton.py +0 -214
  443. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/ietoolbar.py +0 -368
  444. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/outlookAddin.py +0 -135
  445. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/trybag.py +0 -78
  446. py2docfx/venv/venv1/Lib/site-packages/win32com/makegw/__init__.py +0 -1
  447. py2docfx/venv/venv1/Lib/site-packages/win32com/makegw/makegw.py +0 -618
  448. py2docfx/venv/venv1/Lib/site-packages/win32com/makegw/makegwenum.py +0 -331
  449. py2docfx/venv/venv1/Lib/site-packages/win32com/makegw/makegwparse.py +0 -1017
  450. py2docfx/venv/venv1/Lib/site-packages/win32com/olectl.py +0 -70
  451. py2docfx/venv/venv1/Lib/site-packages/win32com/server/__init__.py +0 -1
  452. py2docfx/venv/venv1/Lib/site-packages/win32com/server/connect.py +0 -85
  453. py2docfx/venv/venv1/Lib/site-packages/win32com/server/dispatcher.py +0 -239
  454. py2docfx/venv/venv1/Lib/site-packages/win32com/server/exception.py +0 -99
  455. py2docfx/venv/venv1/Lib/site-packages/win32com/server/factory.py +0 -26
  456. py2docfx/venv/venv1/Lib/site-packages/win32com/server/localserver.py +0 -53
  457. py2docfx/venv/venv1/Lib/site-packages/win32com/server/policy.py +0 -803
  458. py2docfx/venv/venv1/Lib/site-packages/win32com/server/register.py +0 -677
  459. py2docfx/venv/venv1/Lib/site-packages/win32com/server/util.py +0 -229
  460. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/PythonTools.py +0 -47
  461. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/__init__.py +0 -0
  462. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/dictionary.py +0 -133
  463. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/interp.py +0 -59
  464. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/perfmon.py +0 -36
  465. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/test_pycomtest.py +0 -181
  466. py2docfx/venv/venv1/Lib/site-packages/win32com/storagecon.py +0 -142
  467. py2docfx/venv/venv1/Lib/site-packages/win32com/test/GenTestScripts.py +0 -95
  468. py2docfx/venv/venv1/Lib/site-packages/win32com/test/__init__.py +0 -1
  469. py2docfx/venv/venv1/Lib/site-packages/win32com/test/daodump.py +0 -88
  470. py2docfx/venv/venv1/Lib/site-packages/win32com/test/errorSemantics.py +0 -243
  471. py2docfx/venv/venv1/Lib/site-packages/win32com/test/pippo_server.py +0 -96
  472. py2docfx/venv/venv1/Lib/site-packages/win32com/test/policySemantics.py +0 -115
  473. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testADOEvents.py +0 -100
  474. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testAXScript.py +0 -44
  475. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testAccess.py +0 -185
  476. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testArrays.py +0 -99
  477. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testClipboard.py +0 -169
  478. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testCollections.py +0 -159
  479. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testConversionErrors.py +0 -35
  480. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testDCOM.py +0 -50
  481. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testDates.py +0 -74
  482. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testDictionary.py +0 -101
  483. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testDynamic.py +0 -83
  484. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testExchange.py +0 -121
  485. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testExplorer.py +0 -139
  486. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testGIT.py +0 -142
  487. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testGatewayAddresses.py +0 -149
  488. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testIterators.py +0 -140
  489. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testMSOffice.py +0 -184
  490. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testMSOfficeEvents.py +0 -138
  491. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testMarshal.py +0 -160
  492. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testPersist.py +0 -227
  493. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testPippo.py +0 -80
  494. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testPyComTest.py +0 -918
  495. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testROT.py +0 -29
  496. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testServers.py +0 -51
  497. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testShell.py +0 -272
  498. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testStorage.py +0 -88
  499. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testStreams.py +0 -147
  500. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testWMI.py +0 -18
  501. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testall.py +0 -320
  502. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testmakepy.py +0 -54
  503. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testvb.py +0 -583
  504. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testvbscript_regexp.py +0 -40
  505. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testxslt.py +0 -34
  506. py2docfx/venv/venv1/Lib/site-packages/win32com/test/util.py +0 -262
  507. py2docfx/venv/venv1/Lib/site-packages/win32com/universal.py +0 -224
  508. py2docfx/venv/venv1/Lib/site-packages/win32com/util.py +0 -35
  509. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/__init__.py +0 -113
  510. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/adsicon.py +0 -340
  511. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/demos/objectPicker.py +0 -68
  512. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/demos/scp.py +0 -565
  513. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/demos/search.py +0 -151
  514. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/demos/test.py +0 -274
  515. py2docfx/venv/venv1/Lib/site-packages/win32comext/authorization/__init__.py +0 -6
  516. py2docfx/venv/venv1/Lib/site-packages/win32comext/authorization/demos/EditSecurity.py +0 -229
  517. py2docfx/venv/venv1/Lib/site-packages/win32comext/authorization/demos/EditServiceSecurity.py +0 -219
  518. py2docfx/venv/venv1/Lib/site-packages/win32comext/axcontrol/__init__.py +0 -4
  519. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/__init__.py +0 -4
  520. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/adb.py +0 -467
  521. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/codecontainer.py +0 -279
  522. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/contexts.py +0 -58
  523. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/debugger.py +0 -238
  524. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/documents.py +0 -135
  525. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/dump.py +0 -57
  526. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/expressions.py +0 -212
  527. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/gateways.py +0 -583
  528. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/stackframe.py +0 -178
  529. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/util.py +0 -98
  530. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/__init__.py +0 -4
  531. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/asputil.py +0 -13
  532. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/__init__.py +0 -1
  533. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/debug.py +0 -223
  534. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/error.py +0 -262
  535. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/framework.py +0 -1291
  536. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/pydumper.py +0 -78
  537. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/pyscript.py +0 -438
  538. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/pyscript_rexec.py +0 -54
  539. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/scriptdispatch.py +0 -103
  540. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/server/__init__.py +0 -0
  541. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/server/axsite.py +0 -145
  542. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/test/leakTest.py +0 -185
  543. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/test/testHost.py +0 -240
  544. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/test/testHost4Dbg.py +0 -83
  545. py2docfx/venv/venv1/Lib/site-packages/win32comext/bits/__init__.py +0 -6
  546. py2docfx/venv/venv1/Lib/site-packages/win32comext/bits/test/show_all_jobs.py +0 -48
  547. py2docfx/venv/venv1/Lib/site-packages/win32comext/bits/test/test_bits.py +0 -119
  548. py2docfx/venv/venv1/Lib/site-packages/win32comext/directsound/__init__.py +0 -4
  549. py2docfx/venv/venv1/Lib/site-packages/win32comext/directsound/test/__init__.py +0 -1
  550. py2docfx/venv/venv1/Lib/site-packages/win32comext/directsound/test/ds_record.py +0 -60
  551. py2docfx/venv/venv1/Lib/site-packages/win32comext/directsound/test/ds_test.py +0 -402
  552. py2docfx/venv/venv1/Lib/site-packages/win32comext/ifilter/__init__.py +0 -1
  553. py2docfx/venv/venv1/Lib/site-packages/win32comext/ifilter/demo/filterDemo.py +0 -300
  554. py2docfx/venv/venv1/Lib/site-packages/win32comext/ifilter/ifiltercon.py +0 -110
  555. py2docfx/venv/venv1/Lib/site-packages/win32comext/internet/__init__.py +0 -4
  556. py2docfx/venv/venv1/Lib/site-packages/win32comext/internet/inetcon.py +0 -261
  557. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/__init__.py +0 -21
  558. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/demos/mapisend.py +0 -98
  559. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/emsabtags.py +0 -875
  560. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/mapitags.py +0 -1023
  561. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/mapiutil.py +0 -211
  562. py2docfx/venv/venv1/Lib/site-packages/win32comext/propsys/__init__.py +0 -1
  563. py2docfx/venv/venv1/Lib/site-packages/win32comext/propsys/pscon.py +0 -838
  564. py2docfx/venv/venv1/Lib/site-packages/win32comext/propsys/test/testpropsys.py +0 -5
  565. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/__init__.py +0 -4
  566. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/IActiveDesktop.py +0 -83
  567. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/IFileOperationProgressSink.py +0 -179
  568. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/IShellLinkDataList.py +0 -67
  569. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/ITransferAdviseSink.py +0 -93
  570. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/IUniformResourceLocator.py +0 -56
  571. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/browse_for_folder.py +0 -45
  572. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/create_link.py +0 -73
  573. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/dump_link.py +0 -58
  574. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/explorer_browser.py +0 -143
  575. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/column_provider.py +0 -125
  576. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/context_menu.py +0 -122
  577. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/copy_hook.py +0 -84
  578. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/empty_volume_cache.py +0 -188
  579. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/folder_view.py +0 -866
  580. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/icon_handler.py +0 -81
  581. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/shell_view.py +0 -971
  582. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/shellexecuteex.py +0 -19
  583. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/viewstate.py +0 -68
  584. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/walk_shell_folders.py +0 -24
  585. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/shellcon.py +0 -1615
  586. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/test/testSHFileOperation.py +0 -75
  587. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/test/testShellFolder.py +0 -21
  588. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/test/testShellItem.py +0 -69
  589. py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/__init__.py +0 -6
  590. py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_addtask.py +0 -66
  591. py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_addtask_1.py +0 -68
  592. py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_addtask_2.py +0 -49
  593. py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_localsystem.py +0 -3
  594. py2docfx/venv/venv1/Scripts/pywin32_postinstall.py +0 -733
  595. py2docfx/venv/venv1/Scripts/pywin32_testall.py +0 -120
  596. {py2docfx-0.1.15.dev2025501.dist-info → py2docfx-0.1.15.dev2038808.dist-info}/WHEEL +0 -0
  597. {py2docfx-0.1.15.dev2025501.dist-info → py2docfx-0.1.15.dev2038808.dist-info}/top_level.txt +0 -0
@@ -1,1096 +0,0 @@
1
- import datetime
2
- import os
3
- import random
4
- import shutil
5
- import socket
6
- import tempfile
7
- import threading
8
- import time
9
- import unittest
10
-
11
- import ntsecuritycon
12
- import pywintypes
13
- import win32api
14
- import win32con
15
- import win32event
16
- import win32file
17
- import win32pipe
18
- import win32timezone
19
- import winerror
20
- from pywin32_testutil import TestSkipped, testmain
21
-
22
-
23
- class TestReadBuffer(unittest.TestCase):
24
- def testLen(self):
25
- buffer = win32file.AllocateReadBuffer(1)
26
- self.assertEqual(len(buffer), 1)
27
-
28
- def testSimpleIndex(self):
29
- buffer = win32file.AllocateReadBuffer(1)
30
- buffer[0] = 0xFF
31
- self.assertEqual(buffer[0], 0xFF)
32
-
33
- def testSimpleSlice(self):
34
- buffer = win32file.AllocateReadBuffer(2)
35
- val = b"\0\0"
36
- buffer[:2] = val
37
- self.assertEqual(buffer[0:2], val)
38
-
39
-
40
- class TestSimpleOps(unittest.TestCase):
41
- def testSimpleFiles(self):
42
- fd, filename = tempfile.mkstemp()
43
- os.close(fd)
44
- os.unlink(filename)
45
- handle = win32file.CreateFile(
46
- filename, win32file.GENERIC_WRITE, 0, None, win32con.CREATE_NEW, 0, None
47
- )
48
- test_data = b"Hello\0there"
49
- try:
50
- win32file.WriteFile(handle, test_data)
51
- handle.Close()
52
- # Try and open for read
53
- handle = win32file.CreateFile(
54
- filename,
55
- win32file.GENERIC_READ,
56
- 0,
57
- None,
58
- win32con.OPEN_EXISTING,
59
- 0,
60
- None,
61
- )
62
- rc, data = win32file.ReadFile(handle, 1024)
63
- self.assertEqual(data, test_data)
64
- finally:
65
- handle.Close()
66
- try:
67
- os.unlink(filename)
68
- except OSError:
69
- pass
70
-
71
- # A simple test using normal read/write operations.
72
- def testMoreFiles(self):
73
- # Create a file in the %TEMP% directory.
74
- testName = os.path.join(win32api.GetTempPath(), "win32filetest.dat")
75
- desiredAccess = win32file.GENERIC_READ | win32file.GENERIC_WRITE
76
- # Set a flag to delete the file automatically when it is closed.
77
- fileFlags = win32file.FILE_FLAG_DELETE_ON_CLOSE
78
- h = win32file.CreateFile(
79
- testName,
80
- desiredAccess,
81
- win32file.FILE_SHARE_READ,
82
- None,
83
- win32file.CREATE_ALWAYS,
84
- fileFlags,
85
- 0,
86
- )
87
-
88
- # Write a known number of bytes to the file.
89
- data = b"z" * 1025
90
-
91
- win32file.WriteFile(h, data)
92
-
93
- self.assertTrue(
94
- win32file.GetFileSize(h) == len(data),
95
- "WARNING: Written file does not have the same size as the length of the data in it!",
96
- )
97
-
98
- # Ensure we can read the data back.
99
- win32file.SetFilePointer(h, 0, win32file.FILE_BEGIN)
100
- hr, read_data = win32file.ReadFile(
101
- h, len(data) + 10
102
- ) # + 10 to get anything extra
103
- self.assertTrue(hr == 0, "Readfile returned %d" % hr)
104
-
105
- self.assertTrue(read_data == data, "Read data is not what we wrote!")
106
-
107
- # Now truncate the file at 1/2 its existing size.
108
- newSize = len(data) // 2
109
- win32file.SetFilePointer(h, newSize, win32file.FILE_BEGIN)
110
- win32file.SetEndOfFile(h)
111
- self.assertEqual(win32file.GetFileSize(h), newSize)
112
-
113
- # GetFileAttributesEx/GetFileAttributesExW tests.
114
- self.assertEqual(
115
- win32file.GetFileAttributesEx(testName),
116
- win32file.GetFileAttributesExW(testName),
117
- )
118
-
119
- attr, ct, at, wt, size = win32file.GetFileAttributesEx(testName)
120
- self.assertTrue(
121
- size == newSize,
122
- "Expected GetFileAttributesEx to return the same size as GetFileSize()",
123
- )
124
- self.assertTrue(
125
- attr == win32file.GetFileAttributes(testName),
126
- "Expected GetFileAttributesEx to return the same attributes as GetFileAttributes",
127
- )
128
-
129
- h = None # Close the file by removing the last reference to the handle!
130
-
131
- self.assertTrue(
132
- not os.path.isfile(testName), "After closing the file, it still exists!"
133
- )
134
-
135
- def testFilePointer(self):
136
- # via [ 979270 ] SetFilePointer fails with negative offset
137
-
138
- # Create a file in the %TEMP% directory.
139
- filename = os.path.join(win32api.GetTempPath(), "win32filetest.dat")
140
-
141
- f = win32file.CreateFile(
142
- filename,
143
- win32file.GENERIC_READ | win32file.GENERIC_WRITE,
144
- 0,
145
- None,
146
- win32file.CREATE_ALWAYS,
147
- win32file.FILE_ATTRIBUTE_NORMAL,
148
- 0,
149
- )
150
- try:
151
- # Write some data
152
- data = b"Some data"
153
- (res, written) = win32file.WriteFile(f, data)
154
-
155
- self.assertFalse(res)
156
- self.assertEqual(written, len(data))
157
-
158
- # Move at the beginning and read the data
159
- win32file.SetFilePointer(f, 0, win32file.FILE_BEGIN)
160
- (res, s) = win32file.ReadFile(f, len(data))
161
-
162
- self.assertFalse(res)
163
- self.assertEqual(s, data)
164
-
165
- # Move at the end and read the data
166
- win32file.SetFilePointer(f, -len(data), win32file.FILE_END)
167
- (res, s) = win32file.ReadFile(f, len(data))
168
-
169
- self.assertFalse(res)
170
- self.assertEqual(s, data)
171
- finally:
172
- f.Close()
173
- os.unlink(filename)
174
-
175
- def testFileTimesTimezones(self):
176
- filename = tempfile.mktemp("-testFileTimes")
177
- # now() is always returning a timestamp with microseconds but the
178
- # file APIs all have zero microseconds, so some comparisons fail.
179
- now_utc = win32timezone.utcnow().replace(microsecond=0)
180
- now_local = now_utc.astimezone(win32timezone.TimeZoneInfo.local())
181
- h = win32file.CreateFile(
182
- filename,
183
- win32file.GENERIC_READ | win32file.GENERIC_WRITE,
184
- 0,
185
- None,
186
- win32file.CREATE_ALWAYS,
187
- 0,
188
- 0,
189
- )
190
- try:
191
- win32file.SetFileTime(h, now_utc, now_utc, now_utc)
192
- ct, at, wt = win32file.GetFileTime(h)
193
- self.assertEqual(now_local, ct)
194
- self.assertEqual(now_local, at)
195
- self.assertEqual(now_local, wt)
196
- # and the reverse - set local, check against utc
197
- win32file.SetFileTime(h, now_local, now_local, now_local)
198
- ct, at, wt = win32file.GetFileTime(h)
199
- self.assertEqual(now_utc, ct)
200
- self.assertEqual(now_utc, at)
201
- self.assertEqual(now_utc, wt)
202
- finally:
203
- h.close()
204
- os.unlink(filename)
205
-
206
- def testFileTimes(self):
207
- from win32timezone import TimeZoneInfo
208
-
209
- # now() is always returning a timestamp with microseconds but the
210
- # file APIs all have zero microseconds, so some comparisons fail.
211
- now = datetime.datetime.now(tz=TimeZoneInfo.utc()).replace(microsecond=0)
212
- nowish = now + datetime.timedelta(seconds=1)
213
- later = now + datetime.timedelta(seconds=120)
214
-
215
- filename = tempfile.mktemp("-testFileTimes")
216
- # Windows docs the 'last time' isn't valid until the last write
217
- # handle is closed - so create the file, then re-open it to check.
218
- open(filename, "w").close()
219
- f = win32file.CreateFile(
220
- filename,
221
- win32file.GENERIC_READ | win32file.GENERIC_WRITE,
222
- 0,
223
- None,
224
- win32con.OPEN_EXISTING,
225
- 0,
226
- None,
227
- )
228
- try:
229
- ct, at, wt = win32file.GetFileTime(f)
230
- # NOTE (Avasam): I've seen the time be off from -0.003 to +1.11 seconds,
231
- # so the above comment about microseconds might be wrong.
232
- # Let's standardize ms and avoid random CI failures
233
- # https://github.com/mhammond/pywin32/issues/2203
234
- ct = ct.replace(microsecond=0)
235
- at = at.replace(microsecond=0)
236
- wt = wt.replace(microsecond=0)
237
- self.assertGreaterEqual(
238
- ct,
239
- now,
240
- f"File was created in the past - now={now}, created={ct}",
241
- )
242
- self.assertTrue(now <= ct <= nowish, (now, ct, nowish))
243
- self.assertGreaterEqual(
244
- wt,
245
- now,
246
- f"File was written-to in the past now={now}, written={wt}",
247
- )
248
- self.assertTrue(now <= wt <= nowish, (now, wt, nowish))
249
-
250
- # Now set the times.
251
- win32file.SetFileTime(f, later, later, later, UTCTimes=True)
252
- # Get them back.
253
- ct, at, wt = win32file.GetFileTime(f)
254
- # XXX - the builtin PyTime type appears to be out by a dst offset.
255
- # just ignore that type here...
256
- self.assertEqual(ct, later)
257
- self.assertEqual(at, later)
258
- self.assertEqual(wt, later)
259
-
260
- finally:
261
- f.Close()
262
- os.unlink(filename)
263
-
264
-
265
- class TestGetFileInfoByHandleEx(unittest.TestCase):
266
- __handle = __filename = None
267
-
268
- def setUp(self):
269
- fd, self.__filename = tempfile.mkstemp()
270
- os.close(fd)
271
-
272
- def tearDown(self):
273
- if self.__handle is not None:
274
- self.__handle.Close()
275
- if self.__filename is not None:
276
- try:
277
- os.unlink(self.__filename)
278
- except OSError:
279
- pass
280
- self.__handle = self.__filename = None
281
-
282
- def testFileBasicInfo(self):
283
- attr = win32file.GetFileAttributes(self.__filename)
284
- f = win32file.CreateFile(
285
- self.__filename,
286
- win32file.GENERIC_READ,
287
- 0,
288
- None,
289
- win32con.OPEN_EXISTING,
290
- 0,
291
- None,
292
- )
293
- self.__handle = f
294
- ct, at, wt = win32file.GetFileTime(f)
295
-
296
- # bug #752: this throws ERROR_BAD_LENGTH (24) in x86 binaries of build 221
297
- basic_info = win32file.GetFileInformationByHandleEx(f, win32file.FileBasicInfo)
298
-
299
- self.assertEqual(ct, basic_info["CreationTime"])
300
- self.assertEqual(at, basic_info["LastAccessTime"])
301
- self.assertEqual(wt, basic_info["LastWriteTime"])
302
- self.assertEqual(attr, basic_info["FileAttributes"])
303
-
304
-
305
- class TestOverlapped(unittest.TestCase):
306
- def testSimpleOverlapped(self):
307
- # Create a file in the %TEMP% directory.
308
- import win32event
309
-
310
- testName = os.path.join(win32api.GetTempPath(), "win32filetest.dat")
311
- desiredAccess = win32file.GENERIC_WRITE
312
- overlapped = pywintypes.OVERLAPPED()
313
- evt = win32event.CreateEvent(None, 0, 0, None)
314
- overlapped.hEvent = evt
315
- # Create the file and write shit-loads of data to it.
316
- h = win32file.CreateFile(
317
- testName, desiredAccess, 0, None, win32file.CREATE_ALWAYS, 0, 0
318
- )
319
- chunk_data = b"z" * 0x8000
320
- num_loops = 512
321
- expected_size = num_loops * len(chunk_data)
322
- for i in range(num_loops):
323
- win32file.WriteFile(h, chunk_data, overlapped)
324
- win32event.WaitForSingleObject(overlapped.hEvent, win32event.INFINITE)
325
- overlapped.Offset += len(chunk_data)
326
- h.Close()
327
- # Now read the data back overlapped
328
- overlapped = pywintypes.OVERLAPPED()
329
- evt = win32event.CreateEvent(None, 0, 0, None)
330
- overlapped.hEvent = evt
331
- desiredAccess = win32file.GENERIC_READ
332
- h = win32file.CreateFile(
333
- testName, desiredAccess, 0, None, win32file.OPEN_EXISTING, 0, 0
334
- )
335
- buffer = win32file.AllocateReadBuffer(0xFFFF)
336
- while 1:
337
- try:
338
- hr, data = win32file.ReadFile(h, buffer, overlapped)
339
- win32event.WaitForSingleObject(overlapped.hEvent, win32event.INFINITE)
340
- overlapped.Offset += len(data)
341
- if not data is buffer:
342
- self.fail(
343
- "Unexpected result from ReadFile - should be the same buffer we passed it"
344
- )
345
- except win32api.error:
346
- break
347
- h.Close()
348
-
349
- def testCompletionPortsMultiple(self):
350
- # Mainly checking that we can "associate" an existing handle. This
351
- # failed in build 203.
352
- ioport = win32file.CreateIoCompletionPort(
353
- win32file.INVALID_HANDLE_VALUE, 0, 0, 0
354
- )
355
- socks = []
356
- for PORT in range(9123, 9125):
357
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
358
- sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
359
- sock.bind(("", PORT))
360
- sock.listen(1)
361
- socks.append(sock)
362
- new = win32file.CreateIoCompletionPort(sock.fileno(), ioport, PORT, 0)
363
- self.assertIs(new, ioport)
364
- for s in socks:
365
- s.close()
366
- hv = int(ioport)
367
- ioport = new = None
368
- # The handle itself should be closed now (unless we leak references!)
369
- # Check that.
370
- try:
371
- win32file.CloseHandle(hv)
372
- raise AssertionError("Expected close to fail!")
373
- except win32file.error as details:
374
- self.assertEqual(details.winerror, winerror.ERROR_INVALID_HANDLE)
375
-
376
- def testCompletionPortsQueued(self):
377
- class Foo:
378
- pass
379
-
380
- io_req_port = win32file.CreateIoCompletionPort(-1, None, 0, 0)
381
- overlapped = pywintypes.OVERLAPPED()
382
- overlapped.object = Foo()
383
- win32file.PostQueuedCompletionStatus(io_req_port, 0, 99, overlapped)
384
- errCode, bytes, key, overlapped = win32file.GetQueuedCompletionStatus(
385
- io_req_port, win32event.INFINITE
386
- )
387
- self.assertEqual(errCode, 0)
388
- self.assertTrue(isinstance(overlapped.object, Foo))
389
-
390
- def _IOCPServerThread(self, handle, port, drop_overlapped_reference):
391
- overlapped = pywintypes.OVERLAPPED()
392
- win32pipe.ConnectNamedPipe(handle, overlapped)
393
- if drop_overlapped_reference:
394
- # Be naughty - the overlapped object is now dead, but
395
- # GetQueuedCompletionStatus will still find it. Our check of
396
- # reference counting should catch that error.
397
- overlapped = None
398
- # even if we fail, be sure to close the handle; prevents hangs
399
- # on Vista 64...
400
- try:
401
- self.assertRaises(
402
- RuntimeError, win32file.GetQueuedCompletionStatus, port, -1
403
- )
404
- finally:
405
- handle.Close()
406
- return
407
-
408
- result = win32file.GetQueuedCompletionStatus(port, -1)
409
- ol2 = result[-1]
410
- self.assertTrue(ol2 is overlapped)
411
- data = win32file.ReadFile(handle, 512)[1]
412
- win32file.WriteFile(handle, data)
413
-
414
- def testCompletionPortsNonQueued(self, test_overlapped_death=0):
415
- # In 204 we had a reference count bug when OVERLAPPED objects were
416
- # associated with a completion port other than via
417
- # PostQueuedCompletionStatus. This test is based on the reproduction
418
- # reported with that bug.
419
- # Create the pipe.
420
- BUFSIZE = 512
421
- pipe_name = r"\\.\pipe\pywin32_test_pipe"
422
- handle = win32pipe.CreateNamedPipe(
423
- pipe_name,
424
- win32pipe.PIPE_ACCESS_DUPLEX | win32file.FILE_FLAG_OVERLAPPED,
425
- win32pipe.PIPE_TYPE_MESSAGE
426
- | win32pipe.PIPE_READMODE_MESSAGE
427
- | win32pipe.PIPE_WAIT,
428
- 1,
429
- BUFSIZE,
430
- BUFSIZE,
431
- win32pipe.NMPWAIT_WAIT_FOREVER,
432
- None,
433
- )
434
- # Create an IOCP and associate it with the handle.
435
- port = win32file.CreateIoCompletionPort(-1, 0, 0, 0)
436
- win32file.CreateIoCompletionPort(handle, port, 1, 0)
437
-
438
- t = threading.Thread(
439
- target=self._IOCPServerThread, args=(handle, port, test_overlapped_death)
440
- )
441
- t.setDaemon(True) # avoid hanging entire test suite on failure.
442
- t.start()
443
- try:
444
- time.sleep(0.1) # let thread do its thing.
445
- try:
446
- win32pipe.CallNamedPipe(
447
- r"\\.\pipe\pywin32_test_pipe", b"Hello there", BUFSIZE, 0
448
- )
449
- except win32pipe.error:
450
- # Testing for overlapped death causes this
451
- if not test_overlapped_death:
452
- raise
453
- finally:
454
- if not test_overlapped_death:
455
- handle.Close()
456
- t.join(3)
457
- self.assertFalse(t.is_alive(), "thread didn't finish")
458
-
459
- def testCompletionPortsNonQueuedBadReference(self):
460
- self.testCompletionPortsNonQueued(True)
461
-
462
- def testHashable(self):
463
- overlapped = pywintypes.OVERLAPPED()
464
- d = {}
465
- d[overlapped] = "hello"
466
- self.assertEqual(d[overlapped], "hello")
467
-
468
- def testComparable(self):
469
- overlapped = pywintypes.OVERLAPPED()
470
- self.assertEqual(overlapped, overlapped)
471
- # ensure we explicitly test the operators.
472
- self.assertTrue(overlapped == overlapped)
473
- self.assertFalse(overlapped != overlapped)
474
-
475
- def testComparable2(self):
476
- # 2 overlapped objects compare equal if their contents are the same.
477
- overlapped1 = pywintypes.OVERLAPPED()
478
- overlapped2 = pywintypes.OVERLAPPED()
479
- self.assertEqual(overlapped1, overlapped2)
480
- # ensure we explicitly test the operators.
481
- self.assertTrue(overlapped1 == overlapped2)
482
- self.assertFalse(overlapped1 != overlapped2)
483
- # now change something in one of them - should no longer be equal.
484
- overlapped1.hEvent = 1
485
- self.assertNotEqual(overlapped1, overlapped2)
486
- # ensure we explicitly test the operators.
487
- self.assertFalse(overlapped1 == overlapped2)
488
- self.assertTrue(overlapped1 != overlapped2)
489
-
490
-
491
- class TestSocketExtensions(unittest.TestCase):
492
- def acceptWorker(self, port, running_event, stopped_event):
493
- listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
494
- listener.bind(("", port))
495
- listener.listen(200)
496
-
497
- # create accept socket
498
- accepter = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
499
- # An overlapped
500
- overlapped = pywintypes.OVERLAPPED()
501
- overlapped.hEvent = win32event.CreateEvent(None, 0, 0, None)
502
- # accept the connection.
503
- # We used to allow strings etc to be passed here, and they would be
504
- # modified! Obviously this is evil :)
505
- buffer = " " * 1024 # EVIL - SHOULD NOT BE ALLOWED.
506
- self.assertRaises(
507
- TypeError, win32file.AcceptEx, listener, accepter, buffer, overlapped
508
- )
509
-
510
- # This is the correct way to allocate the buffer...
511
- buffer = win32file.AllocateReadBuffer(1024)
512
- rc = win32file.AcceptEx(listener, accepter, buffer, overlapped)
513
- self.assertEqual(rc, winerror.ERROR_IO_PENDING)
514
- # Set the event to say we are all ready
515
- running_event.set()
516
- # and wait for the connection.
517
- rc = win32event.WaitForSingleObject(overlapped.hEvent, 2000)
518
- if rc == win32event.WAIT_TIMEOUT:
519
- self.fail("timed out waiting for a connection")
520
- nbytes = win32file.GetOverlappedResult(listener.fileno(), overlapped, False)
521
- # fam, loc, rem = win32file.GetAcceptExSockaddrs(accepter, buffer)
522
- accepter.send(buffer[:nbytes])
523
- # NOT set in a finally - this means *successfully* stopped!
524
- stopped_event.set()
525
-
526
- def testAcceptEx(self):
527
- port = 4680
528
- running = threading.Event()
529
- stopped = threading.Event()
530
- t = threading.Thread(target=self.acceptWorker, args=(port, running, stopped))
531
- t.start()
532
- running.wait(2)
533
- if not running.isSet():
534
- self.fail("AcceptEx Worker thread failed to start")
535
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
536
- s.connect(("127.0.0.1", port))
537
- win32file.WSASend(s, b"hello", None)
538
- overlapped = pywintypes.OVERLAPPED()
539
- overlapped.hEvent = win32event.CreateEvent(None, 0, 0, None)
540
- # Like above - WSARecv used to allow strings as the receive buffer!!
541
- buffer = " " * 10
542
- self.assertRaises(TypeError, win32file.WSARecv, s, buffer, overlapped)
543
- # This one should work :)
544
- buffer = win32file.AllocateReadBuffer(10)
545
- win32file.WSARecv(s, buffer, overlapped)
546
- nbytes = win32file.GetOverlappedResult(s.fileno(), overlapped, True)
547
- got = buffer[:nbytes]
548
- self.assertEqual(got, b"hello")
549
- # thread should have stopped
550
- stopped.wait(2)
551
- if not stopped.isSet():
552
- self.fail("AcceptEx Worker thread failed to successfully stop")
553
-
554
-
555
- class TestFindFiles(unittest.TestCase):
556
- def testIter(self):
557
- dir = os.path.join(os.getcwd(), "*")
558
- files = win32file.FindFilesW(dir)
559
- set1 = set()
560
- set1.update(files)
561
- set2 = set()
562
- for file in win32file.FindFilesIterator(dir):
563
- set2.add(file)
564
- self.assertGreater(len(set2), 5, "This directory has less than 5 files!?")
565
- self.assertEqual(set1, set2)
566
-
567
- def testBadDir(self):
568
- dir = os.path.join(os.getcwd(), "a dir that doesn't exist", "*")
569
- self.assertRaises(win32file.error, win32file.FindFilesIterator, dir)
570
-
571
- def testEmptySpec(self):
572
- spec = os.path.join(os.getcwd(), "*.foo_bar")
573
- num = 0
574
- for i in win32file.FindFilesIterator(spec):
575
- num += 1
576
- self.assertEqual(0, num)
577
-
578
- def testEmptyDir(self):
579
- test_path = os.path.join(win32api.GetTempPath(), "win32file_test_directory")
580
- try:
581
- # Note: previously used shutil.rmtree, but when looking for
582
- # reference count leaks, that function showed leaks! os.rmdir
583
- # doesn't have that problem.
584
- os.rmdir(test_path)
585
- except OSError:
586
- pass
587
- os.mkdir(test_path)
588
- try:
589
- num = 0
590
- for i in win32file.FindFilesIterator(os.path.join(test_path, "*")):
591
- num += 1
592
- # Expecting "." and ".." only
593
- self.assertEqual(2, num)
594
- finally:
595
- os.rmdir(test_path)
596
-
597
-
598
- class TestDirectoryChanges(unittest.TestCase):
599
- num_test_dirs = 1
600
-
601
- def setUp(self):
602
- self.watcher_threads = []
603
- self.watcher_thread_changes = []
604
- self.dir_names = []
605
- self.dir_handles = []
606
- for i in range(self.num_test_dirs):
607
- td = tempfile.mktemp("-test-directory-changes-%d" % i)
608
- os.mkdir(td)
609
- self.dir_names.append(td)
610
- hdir = win32file.CreateFile(
611
- td,
612
- ntsecuritycon.FILE_LIST_DIRECTORY,
613
- win32con.FILE_SHARE_READ,
614
- None, # security desc
615
- win32con.OPEN_EXISTING,
616
- win32con.FILE_FLAG_BACKUP_SEMANTICS | win32con.FILE_FLAG_OVERLAPPED,
617
- None,
618
- )
619
- self.dir_handles.append(hdir)
620
-
621
- changes = []
622
- t = threading.Thread(
623
- target=self._watcherThreadOverlapped, args=(td, hdir, changes)
624
- )
625
- t.start()
626
- self.watcher_threads.append(t)
627
- self.watcher_thread_changes.append(changes)
628
-
629
- def _watcherThread(self, dn, dh, changes):
630
- # A synchronous version:
631
- # XXX - not used - I was having a whole lot of problems trying to
632
- # get this to work. Specifically:
633
- # * ReadDirectoryChangesW without an OVERLAPPED blocks infinitely.
634
- # * If another thread attempts to close the handle while
635
- # ReadDirectoryChangesW is waiting on it, the ::CloseHandle() method
636
- # blocks (which has nothing to do with the GIL - it is correctly
637
- # managed)
638
- # Which ends up with no way to kill the thread!
639
- flags = win32con.FILE_NOTIFY_CHANGE_FILE_NAME
640
- while 1:
641
- try:
642
- print("waiting", dh)
643
- changes = win32file.ReadDirectoryChangesW(
644
- dh,
645
- 8192,
646
- False, # sub-tree
647
- flags,
648
- )
649
- print("got", changes)
650
- except:
651
- raise
652
- changes.extend(changes)
653
-
654
- def _watcherThreadOverlapped(self, dn, dh, changes):
655
- flags = win32con.FILE_NOTIFY_CHANGE_FILE_NAME
656
- buf = win32file.AllocateReadBuffer(8192)
657
- overlapped = pywintypes.OVERLAPPED()
658
- overlapped.hEvent = win32event.CreateEvent(None, 0, 0, None)
659
- while 1:
660
- win32file.ReadDirectoryChangesW(
661
- dh,
662
- buf,
663
- False, # sub-tree
664
- flags,
665
- overlapped,
666
- )
667
- # Wait for our event, or for 5 seconds.
668
- rc = win32event.WaitForSingleObject(overlapped.hEvent, 5000)
669
- if rc == win32event.WAIT_OBJECT_0:
670
- # got some data! Must use GetOverlappedResult to find out
671
- # how much is valid! 0 generally means the handle has
672
- # been closed. Blocking is OK here, as the event has
673
- # already been set.
674
- nbytes = win32file.GetOverlappedResult(dh, overlapped, True)
675
- if nbytes:
676
- bits = win32file.FILE_NOTIFY_INFORMATION(buf, nbytes)
677
- changes.extend(bits)
678
- else:
679
- # This is "normal" exit - our 'tearDown' closes the
680
- # handle.
681
- # print("looks like dir handle was closed!")
682
- return
683
- else:
684
- print("ERROR: Watcher thread timed-out!")
685
- return # kill the thread!
686
-
687
- def tearDown(self):
688
- # be careful about raising errors at teardown!
689
- for h in self.dir_handles:
690
- # See comments in _watcherThread above - this appears to
691
- # deadlock if a synchronous ReadDirectoryChangesW is waiting...
692
- # (No such problems with an asynch ReadDirectoryChangesW)
693
- h.Close()
694
- for dn in self.dir_names:
695
- try:
696
- shutil.rmtree(dn)
697
- except OSError:
698
- print("FAILED to remove directory", dn)
699
-
700
- for t in self.watcher_threads:
701
- # closing dir handle should have killed threads!
702
- t.join(5)
703
- if t.is_alive():
704
- print("FAILED to wait for thread termination")
705
-
706
- def stablize(self):
707
- time.sleep(0.5)
708
-
709
- def testSimple(self):
710
- self.stablize()
711
- for dn in self.dir_names:
712
- fn = os.path.join(dn, "test_file")
713
- open(fn, "w").close()
714
-
715
- self.stablize()
716
- changes = self.watcher_thread_changes[0]
717
- self.assertEqual(changes, [(1, "test_file")])
718
-
719
- def testSmall(self):
720
- self.stablize()
721
- for dn in self.dir_names:
722
- fn = os.path.join(dn, "x")
723
- open(fn, "w").close()
724
-
725
- self.stablize()
726
- changes = self.watcher_thread_changes[0]
727
- self.assertEqual(changes, [(1, "x")])
728
-
729
-
730
- class TestEncrypt(unittest.TestCase):
731
- def testEncrypt(self):
732
- fname = tempfile.mktemp("win32file_test")
733
- f = open(fname, "wb")
734
- f.write(b"hello")
735
- f.close()
736
- f = None
737
- try:
738
- try:
739
- win32file.EncryptFile(fname)
740
- except win32file.error as details:
741
- if details.winerror != winerror.ERROR_ACCESS_DENIED:
742
- raise
743
- print("It appears this is not NTFS - can't encrypt/decrypt")
744
- win32file.DecryptFile(fname)
745
- finally:
746
- if f is not None:
747
- f.close()
748
- os.unlink(fname)
749
-
750
-
751
- class TestConnect(unittest.TestCase):
752
- def connect_thread_runner(self, expect_payload, giveup_event):
753
- # As Windows 2000 doesn't do ConnectEx, we need to use a non-blocking
754
- # accept, as our test connection may never come. May as well use
755
- # AcceptEx for this...
756
- listener = socket.socket()
757
- self.addr = ("localhost", random.randint(10000, 64000))
758
- listener.bind(self.addr)
759
- listener.listen(1)
760
-
761
- # create accept socket
762
- accepter = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
763
- # An overlapped
764
- overlapped = pywintypes.OVERLAPPED()
765
- overlapped.hEvent = win32event.CreateEvent(None, 0, 0, None)
766
- # accept the connection.
767
- if expect_payload:
768
- buf_size = 1024
769
- else:
770
- # when we don't expect data we must be careful to only pass the
771
- # exact number of bytes for the endpoint data...
772
- buf_size = win32file.CalculateSocketEndPointSize(listener)
773
-
774
- buffer = win32file.AllocateReadBuffer(buf_size)
775
- win32file.AcceptEx(listener, accepter, buffer, overlapped)
776
- # wait for the connection or our test to fail.
777
- events = giveup_event, overlapped.hEvent
778
- rc = win32event.WaitForMultipleObjects(events, False, 2000)
779
- if rc == win32event.WAIT_TIMEOUT:
780
- self.fail("timed out waiting for a connection")
781
- if rc == win32event.WAIT_OBJECT_0:
782
- # Our main thread running the test failed and will never connect.
783
- return
784
- # must be a connection.
785
- nbytes = win32file.GetOverlappedResult(listener.fileno(), overlapped, False)
786
- if expect_payload:
787
- self.request = buffer[:nbytes]
788
- accepter.send(b"some expected response")
789
-
790
- def test_connect_with_payload(self):
791
- giveup_event = win32event.CreateEvent(None, 0, 0, None)
792
- t = threading.Thread(
793
- target=self.connect_thread_runner, args=(True, giveup_event)
794
- )
795
- t.start()
796
- time.sleep(0.1)
797
- s2 = socket.socket()
798
- ol = pywintypes.OVERLAPPED()
799
- s2.bind(("0.0.0.0", 0)) # connectex requires the socket be bound beforehand
800
- try:
801
- win32file.ConnectEx(s2, self.addr, ol, b"some expected request")
802
- except win32file.error as exc:
803
- win32event.SetEvent(giveup_event)
804
- if exc.winerror == 10022: # WSAEINVAL
805
- raise TestSkipped("ConnectEx is not available on this platform")
806
- raise # some error error we don't expect.
807
- # We occasionally see ERROR_CONNECTION_REFUSED in automation
808
- try:
809
- win32file.GetOverlappedResult(s2.fileno(), ol, 1)
810
- except win32file.error as exc:
811
- win32event.SetEvent(giveup_event)
812
- if exc.winerror == winerror.ERROR_CONNECTION_REFUSED:
813
- raise TestSkipped("Assuming ERROR_CONNECTION_REFUSED is transient")
814
- raise
815
- ol = pywintypes.OVERLAPPED()
816
- buff = win32file.AllocateReadBuffer(1024)
817
- win32file.WSARecv(s2, buff, ol, 0)
818
- length = win32file.GetOverlappedResult(s2.fileno(), ol, 1)
819
- self.response = buff[:length]
820
- self.assertEqual(self.response, b"some expected response")
821
- self.assertEqual(self.request, b"some expected request")
822
- t.join(5)
823
- self.assertFalse(t.is_alive(), "worker thread didn't terminate")
824
-
825
- def test_connect_without_payload(self):
826
- giveup_event = win32event.CreateEvent(None, 0, 0, None)
827
- t = threading.Thread(
828
- target=self.connect_thread_runner, args=(False, giveup_event)
829
- )
830
- t.start()
831
- time.sleep(0.1)
832
- s2 = socket.socket()
833
- ol = pywintypes.OVERLAPPED()
834
- s2.bind(("0.0.0.0", 0)) # connectex requires the socket be bound beforehand
835
- try:
836
- win32file.ConnectEx(s2, self.addr, ol)
837
- except win32file.error as exc:
838
- win32event.SetEvent(giveup_event)
839
- if exc.winerror == 10022: # WSAEINVAL
840
- raise TestSkipped("ConnectEx is not available on this platform")
841
- raise # some error error we don't expect.
842
- # We occasionally see ERROR_CONNECTION_REFUSED in automation
843
- try:
844
- win32file.GetOverlappedResult(s2.fileno(), ol, 1)
845
- except win32file.error as exc:
846
- win32event.SetEvent(giveup_event)
847
- if exc.winerror == winerror.ERROR_CONNECTION_REFUSED:
848
- raise TestSkipped("Assuming ERROR_CONNECTION_REFUSED is transient")
849
- raise
850
-
851
- ol = pywintypes.OVERLAPPED()
852
- buff = win32file.AllocateReadBuffer(1024)
853
- win32file.WSARecv(s2, buff, ol, 0)
854
- length = win32file.GetOverlappedResult(s2.fileno(), ol, 1)
855
- self.response = buff[:length]
856
- self.assertEqual(self.response, b"some expected response")
857
- t.join(5)
858
- self.assertFalse(t.is_alive(), "worker thread didn't terminate")
859
-
860
-
861
- class TestTransmit(unittest.TestCase):
862
- def test_transmit(self):
863
- import binascii
864
-
865
- bytes = os.urandom(1024 * 1024)
866
- val = binascii.hexlify(bytes)
867
- val_length = len(val)
868
- f = tempfile.TemporaryFile()
869
- f.write(val)
870
-
871
- def runner():
872
- s1 = socket.socket()
873
- # binding fails occasionally on github CI with:
874
- # OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
875
- # which probably just means the random port is already in use, so
876
- # let that happen a few times.
877
- for i in range(5):
878
- self.addr = ("localhost", random.randint(10000, 64000))
879
- try:
880
- s1.bind(self.addr)
881
- break
882
- except OSError as exc:
883
- if exc.winerror != 10013:
884
- raise
885
- print("Failed to use port", self.addr, "trying another random one")
886
- else:
887
- raise AssertionError("Failed to find an available port to bind to.")
888
- s1.listen(1)
889
- cli, addr = s1.accept()
890
- buf = 1
891
- self.request = []
892
- while buf:
893
- buf = cli.recv(1024 * 100)
894
- self.request.append(buf)
895
-
896
- th = threading.Thread(target=runner)
897
- th.start()
898
- time.sleep(0.5)
899
- s2 = socket.socket()
900
- s2.connect(self.addr)
901
-
902
- length = 0
903
- aaa = b"[AAA]"
904
- bbb = b"[BBB]"
905
- ccc = b"[CCC]"
906
- ddd = b"[DDD]"
907
- empty = b""
908
- ol = pywintypes.OVERLAPPED()
909
- f.seek(0)
910
- win32file.TransmitFile(
911
- s2, win32file._get_osfhandle(f.fileno()), val_length, 0, ol, 0
912
- )
913
- length += win32file.GetOverlappedResult(s2.fileno(), ol, 1)
914
-
915
- ol = pywintypes.OVERLAPPED()
916
- f.seek(0)
917
- win32file.TransmitFile(
918
- s2, win32file._get_osfhandle(f.fileno()), val_length, 0, ol, 0, aaa, bbb
919
- )
920
- length += win32file.GetOverlappedResult(s2.fileno(), ol, 1)
921
-
922
- ol = pywintypes.OVERLAPPED()
923
- f.seek(0)
924
- win32file.TransmitFile(
925
- s2, win32file._get_osfhandle(f.fileno()), val_length, 0, ol, 0, empty, empty
926
- )
927
- length += win32file.GetOverlappedResult(s2.fileno(), ol, 1)
928
-
929
- ol = pywintypes.OVERLAPPED()
930
- f.seek(0)
931
- win32file.TransmitFile(
932
- s2, win32file._get_osfhandle(f.fileno()), val_length, 0, ol, 0, None, ccc
933
- )
934
- length += win32file.GetOverlappedResult(s2.fileno(), ol, 1)
935
-
936
- ol = pywintypes.OVERLAPPED()
937
- f.seek(0)
938
- win32file.TransmitFile(
939
- s2, win32file._get_osfhandle(f.fileno()), val_length, 0, ol, 0, ddd
940
- )
941
- length += win32file.GetOverlappedResult(s2.fileno(), ol, 1)
942
-
943
- s2.close()
944
- th.join()
945
- buf = b"".join(self.request)
946
- self.assertEqual(length, len(buf))
947
- expected = val + aaa + val + bbb + val + val + ccc + ddd + val
948
- self.assertEqual(type(expected), type(buf))
949
- self.assertEqual(expected, buf)
950
-
951
-
952
- class TestWSAEnumNetworkEvents(unittest.TestCase):
953
- def test_basics(self):
954
- s = socket.socket()
955
- e = win32event.CreateEvent(None, 1, 0, None)
956
- win32file.WSAEventSelect(s, e, 0)
957
- self.assertEqual(win32file.WSAEnumNetworkEvents(s), {})
958
- self.assertEqual(win32file.WSAEnumNetworkEvents(s, e), {})
959
- self.assertRaises(TypeError, win32file.WSAEnumNetworkEvents, s, e, 3)
960
- self.assertRaises(TypeError, win32file.WSAEnumNetworkEvents, s, "spam")
961
- self.assertRaises(TypeError, win32file.WSAEnumNetworkEvents, "spam", e)
962
- self.assertRaises(TypeError, win32file.WSAEnumNetworkEvents, "spam")
963
- f = open("NUL")
964
- h = win32file._get_osfhandle(f.fileno())
965
- self.assertRaises(win32file.error, win32file.WSAEnumNetworkEvents, h)
966
- self.assertRaises(win32file.error, win32file.WSAEnumNetworkEvents, s, h)
967
- try:
968
- win32file.WSAEnumNetworkEvents(h)
969
- except win32file.error as e:
970
- self.assertEqual(e.winerror, win32file.WSAENOTSOCK)
971
- try:
972
- win32file.WSAEnumNetworkEvents(s, h)
973
- except win32file.error as e:
974
- # According to the docs it would seem reasonable that
975
- # this would fail with WSAEINVAL, but it doesn't.
976
- self.assertEqual(e.winerror, win32file.WSAENOTSOCK)
977
-
978
- def test_functional(self):
979
- # This is not really a unit test, but it does exercise the code
980
- # quite well and can serve as an example of WSAEventSelect and
981
- # WSAEnumNetworkEvents usage.
982
- port = socket.socket()
983
- port.setblocking(0)
984
- port_event = win32event.CreateEvent(None, 0, 0, None)
985
- win32file.WSAEventSelect(
986
- port, port_event, win32file.FD_ACCEPT | win32file.FD_CLOSE
987
- )
988
- port.bind(("127.0.0.1", 0))
989
- port.listen(10)
990
-
991
- client = socket.socket()
992
- client.setblocking(0)
993
- client_event = win32event.CreateEvent(None, 0, 0, None)
994
- win32file.WSAEventSelect(
995
- client,
996
- client_event,
997
- win32file.FD_CONNECT
998
- | win32file.FD_READ
999
- | win32file.FD_WRITE
1000
- | win32file.FD_CLOSE,
1001
- )
1002
- err = client.connect_ex(port.getsockname())
1003
- self.assertEqual(err, win32file.WSAEWOULDBLOCK)
1004
-
1005
- res = win32event.WaitForSingleObject(port_event, 1000)
1006
- self.assertEqual(res, win32event.WAIT_OBJECT_0)
1007
- events = win32file.WSAEnumNetworkEvents(port, port_event)
1008
- self.assertEqual(events, {win32file.FD_ACCEPT: 0})
1009
-
1010
- server, addr = port.accept()
1011
- server.setblocking(0)
1012
- server_event = win32event.CreateEvent(None, 1, 0, None)
1013
- win32file.WSAEventSelect(
1014
- server,
1015
- server_event,
1016
- win32file.FD_READ | win32file.FD_WRITE | win32file.FD_CLOSE,
1017
- )
1018
- res = win32event.WaitForSingleObject(server_event, 1000)
1019
- self.assertEqual(res, win32event.WAIT_OBJECT_0)
1020
- events = win32file.WSAEnumNetworkEvents(server, server_event)
1021
- self.assertEqual(events, {win32file.FD_WRITE: 0})
1022
-
1023
- res = win32event.WaitForSingleObject(client_event, 1000)
1024
- self.assertEqual(res, win32event.WAIT_OBJECT_0)
1025
- events = win32file.WSAEnumNetworkEvents(client, client_event)
1026
- self.assertEqual(events, {win32file.FD_CONNECT: 0, win32file.FD_WRITE: 0})
1027
- sent = 0
1028
- data = b"x" * 16 * 1024
1029
- while sent < 16 * 1024 * 1024:
1030
- try:
1031
- sent += client.send(data)
1032
- except OSError as e:
1033
- if e.args[0] == win32file.WSAEINTR:
1034
- continue
1035
- elif e.args[0] in (win32file.WSAEWOULDBLOCK, win32file.WSAENOBUFS):
1036
- break
1037
- else:
1038
- raise
1039
- else:
1040
- self.fail("could not find socket buffer limit")
1041
-
1042
- events = win32file.WSAEnumNetworkEvents(client)
1043
- self.assertEqual(events, {})
1044
-
1045
- res = win32event.WaitForSingleObject(server_event, 1000)
1046
- self.assertEqual(res, win32event.WAIT_OBJECT_0)
1047
- events = win32file.WSAEnumNetworkEvents(server, server_event)
1048
- self.assertEqual(events, {win32file.FD_READ: 0})
1049
-
1050
- received = 0
1051
- while received < sent:
1052
- try:
1053
- received += len(server.recv(16 * 1024))
1054
- except OSError as e:
1055
- if e.args[0] in [win32file.WSAEINTR, win32file.WSAEWOULDBLOCK]:
1056
- continue
1057
- else:
1058
- raise
1059
-
1060
- self.assertEqual(received, sent)
1061
- events = win32file.WSAEnumNetworkEvents(server)
1062
- self.assertEqual(events, {})
1063
-
1064
- res = win32event.WaitForSingleObject(client_event, 1000)
1065
- self.assertEqual(res, win32event.WAIT_OBJECT_0)
1066
- events = win32file.WSAEnumNetworkEvents(client, client_event)
1067
- self.assertEqual(events, {win32file.FD_WRITE: 0})
1068
-
1069
- client.shutdown(socket.SHUT_WR)
1070
- res = win32event.WaitForSingleObject(server_event, 1000)
1071
- self.assertEqual(res, win32event.WAIT_OBJECT_0)
1072
- # strange timing issues...
1073
- for i in range(5):
1074
- events = win32file.WSAEnumNetworkEvents(server, server_event)
1075
- if events:
1076
- break
1077
- win32api.Sleep(100)
1078
- else:
1079
- raise AssertionError("failed to get events")
1080
- self.assertEqual(events, {win32file.FD_CLOSE: 0})
1081
- events = win32file.WSAEnumNetworkEvents(client)
1082
- self.assertEqual(events, {})
1083
-
1084
- server.close()
1085
- res = win32event.WaitForSingleObject(client_event, 1000)
1086
- self.assertEqual(res, win32event.WAIT_OBJECT_0)
1087
- events = win32file.WSAEnumNetworkEvents(client, client_event)
1088
- self.assertEqual(events, {win32file.FD_CLOSE: 0})
1089
-
1090
- client.close()
1091
- events = win32file.WSAEnumNetworkEvents(port)
1092
- self.assertEqual(events, {})
1093
-
1094
-
1095
- if __name__ == "__main__":
1096
- testmain()