py2docfx 0.1.15rc2025477__py3-none-any.whl → 0.1.16__py3-none-any.whl

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