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