py2docfx 0.1.16.dev2064350__py3-none-any.whl → 0.1.17__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 (388) hide show
  1. py2docfx/convert_prepare/environment.py +1 -3
  2. py2docfx/convert_prepare/get_source.py +1 -6
  3. py2docfx/convert_prepare/package_info.py +1 -1
  4. py2docfx/docfx_yaml/miss_reference.py +1 -1
  5. py2docfx/docfx_yaml/parameter_utils.py +58 -6
  6. py2docfx/docfx_yaml/tests/roots/test-translator-typing/code_with_typing.py +14 -0
  7. py2docfx/docfx_yaml/tests/roots/test-translator-typing/conf.py +18 -0
  8. py2docfx/docfx_yaml/tests/test_translator_typing.py +39 -0
  9. py2docfx/docfx_yaml/utils.py +2 -2
  10. py2docfx/venv/basevenv/Lib/site-packages/certifi/__init__.py +1 -1
  11. py2docfx/venv/basevenv/Lib/site-packages/certifi/core.py +1 -32
  12. py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/cli/__main__.py +62 -2
  13. py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/constant.py +17 -0
  14. py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/legacy.py +1 -3
  15. py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/md.py +19 -14
  16. py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/utils.py +6 -0
  17. py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/version.py +1 -1
  18. py2docfx/venv/basevenv/Lib/site-packages/packaging/__init__.py +1 -1
  19. py2docfx/venv/basevenv/Lib/site-packages/packaging/_elffile.py +1 -2
  20. py2docfx/venv/basevenv/Lib/site-packages/packaging/_manylinux.py +1 -2
  21. py2docfx/venv/basevenv/Lib/site-packages/packaging/_parser.py +1 -2
  22. py2docfx/venv/basevenv/Lib/site-packages/packaging/_tokenizer.py +5 -4
  23. py2docfx/venv/basevenv/Lib/site-packages/packaging/licenses/__init__.py +1 -1
  24. py2docfx/venv/basevenv/Lib/site-packages/packaging/markers.py +53 -22
  25. py2docfx/venv/basevenv/Lib/site-packages/packaging/metadata.py +1 -2
  26. py2docfx/venv/basevenv/Lib/site-packages/packaging/specifiers.py +1 -2
  27. py2docfx/venv/basevenv/Lib/site-packages/packaging/tags.py +39 -0
  28. py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/__init__.py +6 -7
  29. py2docfx/venv/basevenv/Lib/site-packages/pygments/__init__.py +1 -1
  30. py2docfx/venv/basevenv/Lib/site-packages/pygments/lexers/_sql_builtins.py +106 -0
  31. py2docfx/venv/basevenv/Lib/site-packages/pygments/lexers/scripting.py +5 -3
  32. py2docfx/venv/basevenv/Lib/site-packages/pygments/lexers/sql.py +24 -118
  33. py2docfx/venv/basevenv/Lib/site-packages/requests/__version__.py +2 -2
  34. py2docfx/venv/basevenv/Lib/site-packages/requests/compat.py +12 -0
  35. py2docfx/venv/basevenv/Lib/site-packages/requests/models.py +3 -1
  36. py2docfx/venv/basevenv/Lib/site-packages/requests/utils.py +6 -16
  37. py2docfx/venv/basevenv/Lib/site-packages/setuptools/__init__.py +0 -38
  38. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_discovery.py +33 -0
  39. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +1 -1
  40. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/config.py +0 -2
  41. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_unix.py +63 -0
  42. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +5 -6
  43. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_entry_points.py +4 -0
  44. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_normalization.py +0 -2
  45. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_path.py +12 -3
  46. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_reqs.py +1 -1
  47. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_scripts.py +361 -0
  48. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_shutil.py +6 -0
  49. py2docfx/venv/basevenv/Lib/site-packages/setuptools/build_meta.py +25 -37
  50. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_egg.py +9 -11
  51. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_wheel.py +1 -1
  52. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build_ext.py +29 -28
  53. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/develop.py +39 -179
  54. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/easy_install.py +17 -2352
  55. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/editable_wheel.py +14 -31
  56. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/egg_info.py +0 -2
  57. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install.py +3 -55
  58. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install_scripts.py +5 -11
  59. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/sdist.py +1 -1
  60. py2docfx/venv/basevenv/Lib/site-packages/setuptools/compat/py310.py +11 -0
  61. py2docfx/venv/basevenv/Lib/site-packages/setuptools/dist.py +10 -12
  62. py2docfx/venv/basevenv/Lib/site-packages/setuptools/installer.py +34 -29
  63. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/contexts.py +0 -14
  64. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/fixtures.py +235 -0
  65. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/integration/test_pbr.py +20 -0
  66. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_meta.py +0 -24
  67. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_develop.py +1 -64
  68. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist.py +2 -2
  69. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist_info.py +0 -63
  70. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_editable_install.py +15 -41
  71. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_egg_info.py +3 -2
  72. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_scripts.py +12 -0
  73. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_wheel.py +12 -36
  74. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +3 -4
  75. py2docfx/venv/basevenv/Lib/site-packages/setuptools/wheel.py +49 -24
  76. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/__init__.py +6 -0
  77. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/arabic_stemmer.py +798 -797
  78. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/armenian_stemmer.py +212 -213
  79. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/basestemmer.py +20 -54
  80. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/basque_stemmer.py +202 -228
  81. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/catalan_stemmer.py +370 -375
  82. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/danish_stemmer.py +63 -61
  83. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/dutch_porter_stemmer.py +466 -0
  84. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/dutch_stemmer.py +1217 -343
  85. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/english_stemmer.py +295 -264
  86. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/esperanto_stemmer.py +588 -0
  87. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/estonian_stemmer.py +850 -0
  88. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/finnish_stemmer.py +144 -143
  89. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/french_stemmer.py +308 -246
  90. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/german_stemmer.py +224 -167
  91. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/greek_stemmer.py +1314 -1313
  92. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/hindi_stemmer.py +39 -38
  93. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/hungarian_stemmer.py +231 -256
  94. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/indonesian_stemmer.py +61 -64
  95. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/irish_stemmer.py +101 -106
  96. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/italian_stemmer.py +272 -272
  97. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/lithuanian_stemmer.py +233 -240
  98. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/nepali_stemmer.py +108 -134
  99. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/norwegian_stemmer.py +108 -63
  100. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/porter_stemmer.py +101 -108
  101. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/portuguese_stemmer.py +241 -250
  102. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/romanian_stemmer.py +332 -296
  103. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/russian_stemmer.py +178 -179
  104. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/serbian_stemmer.py +2331 -2332
  105. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/spanish_stemmer.py +254 -259
  106. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/swedish_stemmer.py +143 -70
  107. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/tamil_stemmer.py +638 -1491
  108. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/turkish_stemmer.py +326 -292
  109. py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/yiddish_stemmer.py +245 -246
  110. py2docfx/venv/basevenv/Lib/site-packages/urllib3/_version.py +2 -2
  111. py2docfx/venv/basevenv/Lib/site-packages/urllib3/connection.py +87 -38
  112. py2docfx/venv/basevenv/Lib/site-packages/urllib3/contrib/emscripten/fetch.py +20 -0
  113. py2docfx/venv/basevenv/Lib/site-packages/urllib3/poolmanager.py +17 -1
  114. py2docfx/venv/basevenv/Lib/site-packages/urllib3/response.py +53 -24
  115. py2docfx/venv/basevenv/Lib/site-packages/urllib3/util/request.py +12 -4
  116. py2docfx/venv/basevenv/Lib/site-packages/urllib3/util/ssl_.py +1 -1
  117. py2docfx/venv/venv1/Lib/site-packages/azure/core/_version.py +1 -1
  118. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/_base_async.py +1 -1
  119. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_aiohttp.py +1 -1
  120. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_base_async.py +2 -1
  121. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_requests_asyncio.py +1 -1
  122. py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_aiohttp.py +2 -2
  123. py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_requests_asyncio.py +1 -1
  124. py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/opentelemetry.py +13 -1
  125. py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_pipeline_transport_rest_shared_async.py +2 -1
  126. py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_utils.py +1 -1
  127. py2docfx/venv/venv1/Lib/site-packages/azure/identity/_constants.py +1 -0
  128. py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/default.py +23 -2
  129. py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/environment.py +12 -16
  130. py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/service_fabric.py +22 -1
  131. py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/user_password.py +10 -6
  132. py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/vscode.py +13 -4
  133. py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/auth_code_redirect_handler.py +3 -5
  134. py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/msal_client.py +2 -1
  135. py2docfx/venv/venv1/Lib/site-packages/azure/identity/_persistent_cache.py +3 -2
  136. py2docfx/venv/venv1/Lib/site-packages/azure/identity/_version.py +1 -1
  137. py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azd_cli.py +1 -1
  138. py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azure_cli.py +1 -1
  139. py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azure_powershell.py +1 -1
  140. py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/chained.py +1 -1
  141. py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/default.py +22 -2
  142. py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/environment.py +2 -2
  143. py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/service_fabric.py +17 -1
  144. py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/vscode.py +4 -4
  145. py2docfx/venv/venv1/Lib/site-packages/certifi/__init__.py +1 -1
  146. py2docfx/venv/venv1/Lib/site-packages/certifi/core.py +1 -32
  147. py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/cli/__main__.py +62 -2
  148. py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/constant.py +17 -0
  149. py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/legacy.py +1 -3
  150. py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/md.py +19 -14
  151. py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/utils.py +6 -0
  152. py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/version.py +1 -1
  153. py2docfx/venv/venv1/Lib/site-packages/cryptography/__about__.py +2 -2
  154. py2docfx/venv/venv1/Lib/site-packages/cryptography/__init__.py +2 -2
  155. py2docfx/venv/venv1/Lib/site-packages/cryptography/fernet.py +2 -1
  156. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/_oid.py +35 -2
  157. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/backends/openssl/backend.py +33 -10
  158. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi +14 -5
  159. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi +2 -2
  160. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/__init__.pyi +3 -0
  161. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/aead.pyi +49 -45
  162. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi +2 -2
  163. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi +2 -1
  164. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi +2 -1
  165. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/hashes.pyi +10 -1
  166. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi +3 -2
  167. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi +8 -2
  168. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/keys.pyi +3 -2
  169. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi +6 -4
  170. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/x25519.pyi +2 -1
  171. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/x448.pyi +2 -1
  172. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/pkcs12.pyi +9 -3
  173. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/pkcs7.pyi +7 -6
  174. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/test_support.pyi +2 -1
  175. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi +79 -12
  176. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/openssl/_conditional.py +9 -1
  177. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/openssl/binding.py +2 -1
  178. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/decrepit/ciphers/algorithms.py +5 -0
  179. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/_cipheralgorithm.py +4 -2
  180. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/_serialization.py +1 -2
  181. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/dh.py +12 -0
  182. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py +16 -3
  183. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/ec.py +47 -3
  184. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/ed25519.py +16 -3
  185. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py +16 -3
  186. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py +14 -0
  187. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py +14 -1
  188. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/x448.py +14 -1
  189. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/ciphers/algorithms.py +6 -6
  190. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/ciphers/base.py +5 -4
  191. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/ciphers/modes.py +18 -18
  192. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/hashes.py +5 -1
  193. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py +5 -4
  194. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py +4 -4
  195. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.py +7 -4
  196. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py +1 -1
  197. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py +1 -1
  198. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/padding.py +7 -121
  199. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/serialization/__init__.py +2 -0
  200. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/serialization/pkcs12.py +21 -1
  201. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/serialization/pkcs7.py +48 -6
  202. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/serialization/ssh.py +68 -18
  203. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/twofactor/hotp.py +3 -2
  204. py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/twofactor/totp.py +2 -1
  205. py2docfx/venv/venv1/Lib/site-packages/cryptography/utils.py +15 -3
  206. py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/__init__.py +3 -0
  207. py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/base.py +39 -6
  208. py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/extensions.py +100 -49
  209. py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/name.py +27 -15
  210. py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/ocsp.py +60 -25
  211. py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/oid.py +2 -0
  212. py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/verification.py +6 -0
  213. py2docfx/venv/venv1/Lib/site-packages/google/api_core/bidi.py +17 -4
  214. py2docfx/venv/venv1/Lib/site-packages/google/api_core/client_info.py +6 -0
  215. py2docfx/venv/venv1/Lib/site-packages/google/api_core/gapic_v1/client_info.py +1 -0
  216. py2docfx/venv/venv1/Lib/site-packages/google/api_core/retry/retry_base.py +13 -4
  217. py2docfx/venv/venv1/Lib/site-packages/google/api_core/retry/retry_streaming.py +7 -6
  218. py2docfx/venv/venv1/Lib/site-packages/google/api_core/retry/retry_streaming_async.py +8 -5
  219. py2docfx/venv/venv1/Lib/site-packages/google/api_core/retry/retry_unary.py +7 -6
  220. py2docfx/venv/venv1/Lib/site-packages/google/api_core/retry/retry_unary_async.py +7 -6
  221. py2docfx/venv/venv1/Lib/site-packages/google/api_core/version.py +1 -1
  222. py2docfx/venv/venv1/Lib/site-packages/google/auth/_default.py +2 -36
  223. py2docfx/venv/venv1/Lib/site-packages/google/auth/_helpers.py +240 -0
  224. py2docfx/venv/venv1/Lib/site-packages/google/auth/aio/_helpers.py +62 -0
  225. py2docfx/venv/venv1/Lib/site-packages/google/auth/aio/transport/aiohttp.py +6 -0
  226. py2docfx/venv/venv1/Lib/site-packages/google/auth/compute_engine/_metadata.py +5 -1
  227. py2docfx/venv/venv1/Lib/site-packages/google/auth/compute_engine/credentials.py +2 -1
  228. py2docfx/venv/venv1/Lib/site-packages/google/auth/identity_pool.py +91 -2
  229. py2docfx/venv/venv1/Lib/site-packages/google/auth/impersonated_credentials.py +75 -0
  230. py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/__init__.py +1 -0
  231. py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/_aiohttp_requests.py +8 -1
  232. py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/_http_client.py +3 -1
  233. py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/requests.py +4 -1
  234. py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/urllib3.py +15 -5
  235. py2docfx/venv/venv1/Lib/site-packages/google/auth/version.py +1 -1
  236. py2docfx/venv/venv1/Lib/site-packages/google/oauth2/id_token.py +12 -0
  237. py2docfx/venv/venv1/Lib/site-packages/google/oauth2/webauthn_types.py +1 -1
  238. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/__init__.py +1 -1
  239. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/any.py +15 -1
  240. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/any_pb2.py +3 -3
  241. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/api_pb2.py +3 -3
  242. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/compiler/plugin_pb2.py +3 -3
  243. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor.py +15 -2
  244. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor_pb2.py +258 -113
  245. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor_pool.py +22 -8
  246. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/duration_pb2.py +3 -3
  247. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/empty_pb2.py +3 -3
  248. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/field_mask_pb2.py +3 -3
  249. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/decoder.py +106 -23
  250. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/field_mask.py +3 -1
  251. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/python_edition_defaults.py +1 -1
  252. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/python_message.py +21 -18
  253. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/testing_refleaks.py +8 -2
  254. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/well_known_types.py +60 -43
  255. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/json_format.py +4 -5
  256. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/message_factory.py +16 -0
  257. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/runtime_version.py +2 -2
  258. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/source_context_pb2.py +3 -3
  259. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/struct_pb2.py +3 -3
  260. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/text_format.py +11 -7
  261. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/timestamp_pb2.py +3 -3
  262. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/type_pb2.py +3 -3
  263. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/wrappers_pb2.py +3 -3
  264. py2docfx/venv/venv1/Lib/site-packages/google/rpc/error_details_pb2.py +29 -23
  265. py2docfx/venv/venv1/Lib/site-packages/google/rpc/error_details_pb2.pyi +41 -2
  266. py2docfx/venv/venv1/Lib/site-packages/msal/application.py +1 -0
  267. py2docfx/venv/venv1/Lib/site-packages/msal/individual_cache.py +9 -5
  268. py2docfx/venv/venv1/Lib/site-packages/msal/managed_identity.py +4 -5
  269. py2docfx/venv/venv1/Lib/site-packages/msal/sku.py +1 -1
  270. py2docfx/venv/venv1/Lib/site-packages/msal/throttled_http_client.py +58 -30
  271. py2docfx/venv/venv1/Lib/site-packages/opencensus/__init__.py +1 -1
  272. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/__init__.py +1 -1
  273. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/__init__.py +1 -1
  274. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/__init__.py +138 -138
  275. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/exporter.py +93 -93
  276. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/processor.py +63 -63
  277. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/protocol.py +206 -206
  278. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/storage.py +205 -205
  279. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/transport.py +355 -355
  280. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/utils.py +79 -79
  281. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/version.py +15 -15
  282. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/log_exporter/__init__.py +314 -314
  283. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/__init__.py +190 -190
  284. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/standard_metrics/__init__.py +62 -62
  285. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/standard_metrics/cpu.py +50 -50
  286. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/standard_metrics/http_requests.py +176 -176
  287. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/standard_metrics/memory.py +42 -42
  288. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/standard_metrics/process.py +87 -87
  289. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/statsbeat/__init__.py +1 -1
  290. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/statsbeat/state.py +50 -50
  291. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/statsbeat/statsbeat.py +100 -100
  292. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/statsbeat/statsbeat_metrics.py +480 -480
  293. py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/trace_exporter/__init__.py +236 -236
  294. py2docfx/venv/venv1/Lib/site-packages/packaging/__init__.py +1 -1
  295. py2docfx/venv/venv1/Lib/site-packages/packaging/_elffile.py +1 -2
  296. py2docfx/venv/venv1/Lib/site-packages/packaging/_manylinux.py +1 -2
  297. py2docfx/venv/venv1/Lib/site-packages/packaging/_parser.py +1 -2
  298. py2docfx/venv/venv1/Lib/site-packages/packaging/_tokenizer.py +5 -4
  299. py2docfx/venv/venv1/Lib/site-packages/packaging/licenses/__init__.py +1 -1
  300. py2docfx/venv/venv1/Lib/site-packages/packaging/markers.py +53 -22
  301. py2docfx/venv/venv1/Lib/site-packages/packaging/metadata.py +1 -2
  302. py2docfx/venv/venv1/Lib/site-packages/packaging/specifiers.py +1 -2
  303. py2docfx/venv/venv1/Lib/site-packages/packaging/tags.py +39 -0
  304. py2docfx/venv/venv1/Lib/site-packages/pkg_resources/__init__.py +6 -7
  305. py2docfx/venv/venv1/Lib/site-packages/requests/__version__.py +2 -2
  306. py2docfx/venv/venv1/Lib/site-packages/requests/compat.py +12 -0
  307. py2docfx/venv/venv1/Lib/site-packages/requests/models.py +3 -1
  308. py2docfx/venv/venv1/Lib/site-packages/requests/utils.py +6 -16
  309. py2docfx/venv/venv1/Lib/site-packages/rsa/__init__.py +2 -2
  310. py2docfx/venv/venv1/Lib/site-packages/rsa/asn1.py +52 -52
  311. py2docfx/venv/venv1/Lib/site-packages/rsa/cli.py +321 -321
  312. py2docfx/venv/venv1/Lib/site-packages/rsa/common.py +184 -184
  313. py2docfx/venv/venv1/Lib/site-packages/rsa/core.py +53 -53
  314. py2docfx/venv/venv1/Lib/site-packages/rsa/key.py +858 -858
  315. py2docfx/venv/venv1/Lib/site-packages/rsa/parallel.py +96 -96
  316. py2docfx/venv/venv1/Lib/site-packages/rsa/pem.py +134 -134
  317. py2docfx/venv/venv1/Lib/site-packages/rsa/pkcs1.py +485 -485
  318. py2docfx/venv/venv1/Lib/site-packages/rsa/pkcs1_v2.py +100 -100
  319. py2docfx/venv/venv1/Lib/site-packages/rsa/prime.py +198 -198
  320. py2docfx/venv/venv1/Lib/site-packages/rsa/py.typed +1 -1
  321. py2docfx/venv/venv1/Lib/site-packages/rsa/randnum.py +95 -95
  322. py2docfx/venv/venv1/Lib/site-packages/rsa/transform.py +72 -72
  323. py2docfx/venv/venv1/Lib/site-packages/rsa/util.py +97 -97
  324. py2docfx/venv/venv1/Lib/site-packages/setuptools/__init__.py +0 -38
  325. py2docfx/venv/venv1/Lib/site-packages/setuptools/_discovery.py +33 -0
  326. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +1 -1
  327. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/config.py +0 -2
  328. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_unix.py +63 -0
  329. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +5 -6
  330. py2docfx/venv/venv1/Lib/site-packages/setuptools/_entry_points.py +4 -0
  331. py2docfx/venv/venv1/Lib/site-packages/setuptools/_normalization.py +0 -2
  332. py2docfx/venv/venv1/Lib/site-packages/setuptools/_path.py +12 -3
  333. py2docfx/venv/venv1/Lib/site-packages/setuptools/_reqs.py +1 -1
  334. py2docfx/venv/venv1/Lib/site-packages/setuptools/_scripts.py +361 -0
  335. py2docfx/venv/venv1/Lib/site-packages/setuptools/_shutil.py +6 -0
  336. py2docfx/venv/venv1/Lib/site-packages/setuptools/build_meta.py +25 -37
  337. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_egg.py +9 -11
  338. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_wheel.py +1 -1
  339. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_ext.py +29 -28
  340. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/develop.py +39 -179
  341. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/easy_install.py +17 -2352
  342. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/editable_wheel.py +14 -31
  343. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/egg_info.py +0 -2
  344. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install.py +3 -55
  345. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install_scripts.py +5 -11
  346. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/sdist.py +1 -1
  347. py2docfx/venv/venv1/Lib/site-packages/setuptools/compat/py310.py +11 -0
  348. py2docfx/venv/venv1/Lib/site-packages/setuptools/dist.py +10 -12
  349. py2docfx/venv/venv1/Lib/site-packages/setuptools/installer.py +34 -29
  350. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/contexts.py +0 -14
  351. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/fixtures.py +235 -0
  352. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/integration/test_pbr.py +20 -0
  353. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_meta.py +0 -24
  354. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_develop.py +1 -64
  355. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist.py +2 -2
  356. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist_info.py +0 -63
  357. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_editable_install.py +15 -41
  358. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_egg_info.py +3 -2
  359. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_scripts.py +12 -0
  360. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_wheel.py +12 -36
  361. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +3 -4
  362. py2docfx/venv/venv1/Lib/site-packages/setuptools/wheel.py +49 -24
  363. py2docfx/venv/venv1/Lib/site-packages/typing_extensions.py +357 -703
  364. py2docfx/venv/venv1/Lib/site-packages/urllib3/_version.py +2 -2
  365. py2docfx/venv/venv1/Lib/site-packages/urllib3/connection.py +87 -38
  366. py2docfx/venv/venv1/Lib/site-packages/urllib3/contrib/emscripten/fetch.py +20 -0
  367. py2docfx/venv/venv1/Lib/site-packages/urllib3/poolmanager.py +17 -1
  368. py2docfx/venv/venv1/Lib/site-packages/urllib3/response.py +53 -24
  369. py2docfx/venv/venv1/Lib/site-packages/urllib3/util/request.py +12 -4
  370. py2docfx/venv/venv1/Lib/site-packages/urllib3/util/ssl_.py +1 -1
  371. {py2docfx-0.1.16.dev2064350.dist-info → py2docfx-0.1.17.dist-info}/METADATA +1 -1
  372. {py2docfx-0.1.16.dev2064350.dist-info → py2docfx-0.1.17.dist-info}/RECORD +374 -372
  373. {py2docfx-0.1.16.dev2064350.dist-info → py2docfx-0.1.17.dist-info}/WHEEL +1 -1
  374. py2docfx/venv/basevenv/Lib/site-packages/setuptools/package_index.py +0 -1137
  375. py2docfx/venv/basevenv/Lib/site-packages/setuptools/sandbox.py +0 -536
  376. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/server.py +0 -86
  377. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_easy_install.py +0 -1476
  378. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_packageindex.py +0 -267
  379. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_sandbox.py +0 -134
  380. py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/application.py +0 -119
  381. py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/application.py +0 -121
  382. py2docfx/venv/venv1/Lib/site-packages/setuptools/package_index.py +0 -1137
  383. py2docfx/venv/venv1/Lib/site-packages/setuptools/sandbox.py +0 -536
  384. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/server.py +0 -86
  385. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_easy_install.py +0 -1476
  386. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_packageindex.py +0 -267
  387. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_sandbox.py +0 -134
  388. {py2docfx-0.1.16.dev2064350.dist-info → py2docfx-0.1.17.dist-info}/top_level.txt +0 -0
@@ -1,314 +1,314 @@
1
- # Copyright 2019, OpenCensus Authors
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- import logging
16
- import random
17
- import threading
18
- import time
19
- import traceback
20
-
21
- from opencensus.common.schedule import Queue, QueueEvent, QueueExitEvent
22
- from opencensus.ext.azure.common import Options, utils
23
- from opencensus.ext.azure.common.processor import ProcessorMixin
24
- from opencensus.ext.azure.common.protocol import (
25
- Data,
26
- Envelope,
27
- Event,
28
- ExceptionData,
29
- Message,
30
- )
31
- from opencensus.ext.azure.common.storage import LocalFileStorage
32
- from opencensus.ext.azure.common.transport import (
33
- TransportMixin,
34
- TransportStatusCode,
35
- )
36
- from opencensus.ext.azure.statsbeat import statsbeat
37
- from opencensus.trace import execution_context
38
-
39
- logger = logging.getLogger(__name__)
40
-
41
- __all__ = ['AzureEventHandler', 'AzureLogHandler']
42
-
43
-
44
- class BaseLogHandler(logging.Handler):
45
-
46
- def __init__(self, **options):
47
- super(BaseLogHandler, self).__init__()
48
- self.options = Options(**options)
49
- utils.validate_instrumentation_key(self.options.instrumentation_key)
50
- if not 0 <= self.options.logging_sampling_rate <= 1:
51
- raise ValueError('Sampling must be in the range: [0,1]')
52
- self.export_interval = self.options.export_interval
53
- self.max_batch_size = self.options.max_batch_size
54
- self.storage = None
55
- if self.options.enable_local_storage:
56
- self.storage = LocalFileStorage(
57
- path=self.options.storage_path,
58
- max_size=self.options.storage_max_size,
59
- maintenance_period=self.options.storage_maintenance_period,
60
- retention_period=self.options.storage_retention_period,
61
- source=self.__class__.__name__,
62
- )
63
- self._telemetry_processors = []
64
- self.addFilter(SamplingFilter(self.options.logging_sampling_rate))
65
- self._queue = Queue(capacity=self.options.queue_capacity)
66
- self._worker = Worker(self._queue, self)
67
- self._worker.start()
68
- # For redirects
69
- self._consecutive_redirects = 0 # To prevent circular redirects
70
-
71
- def _export(self, batch, event=None): # pragma: NO COVER
72
- try:
73
- if batch:
74
- envelopes = [self.log_record_to_envelope(x) for x in batch]
75
- envelopes = self.apply_telemetry_processors(envelopes)
76
- result = self._transmit(envelopes)
77
- # Only store files if local storage enabled
78
- if self.storage:
79
- if result is TransportStatusCode.RETRY:
80
- self.storage.put(
81
- envelopes,
82
- self.options.minimum_retry_interval,
83
- )
84
- if result is TransportStatusCode.SUCCESS:
85
- if len(batch) < self.options.max_batch_size:
86
- self._transmit_from_storage()
87
- if event:
88
- if isinstance(event, QueueExitEvent):
89
- # send files before exit
90
- self._transmit_from_storage()
91
- finally:
92
- if event:
93
- event.set()
94
-
95
- # Close is automatically called as part of logging shutdown
96
- def close(self, timeout=None):
97
- if not timeout and hasattr(self, "options"):
98
- timeout = self.options.grace_period
99
- if hasattr(self, "storage") and self.storage:
100
- self.storage.close()
101
- if hasattr(self, "_worker") and self._worker:
102
- self._worker.stop(timeout)
103
- super(BaseLogHandler, self).close()
104
-
105
- def createLock(self):
106
- self.lock = None
107
-
108
- def emit(self, record):
109
- self._queue.put(record, block=False)
110
-
111
- def log_record_to_envelope(self, record):
112
- raise NotImplementedError # pragma: NO COVER
113
-
114
- # Flush is automatically called as part of logging shutdown
115
- def flush(self, timeout=None):
116
- if not hasattr(self, "_queue") or self._queue.is_empty():
117
- return
118
-
119
- # We must check the worker thread is alive, because otherwise flush
120
- # is useless. Also, it would deadlock if no timeout is given, and the
121
- # queue isn't empty.
122
- # This is a very possible scenario during process termination, when
123
- # atexit first calls handler.close() and then logging.shutdown(),
124
- # that in turn calls handler.flush() without arguments.
125
- if not self._worker.is_alive():
126
- logger.warning("Can't flush %s, worker thread is dead. "
127
- "Any pending messages will be lost.", self)
128
- return
129
-
130
- self._queue.flush(timeout=timeout)
131
-
132
-
133
- class Worker(threading.Thread):
134
- daemon = True
135
-
136
- def __init__(self, src, dst):
137
- self._src = src
138
- self._dst = dst
139
- self._stopping = False
140
- super(Worker, self).__init__(
141
- name='{} Worker'.format(type(dst).__name__)
142
- )
143
-
144
- def run(self):
145
- # Indicate that this thread is an exporter thread.
146
- # Used to suppress tracking of requests in this thread
147
- execution_context.set_is_exporter(True)
148
- src = self._src
149
- dst = self._dst
150
- while True:
151
- batch = src.gets(dst.max_batch_size, dst.export_interval)
152
- if batch and isinstance(batch[-1], QueueEvent):
153
- try:
154
- dst._export(batch[:-1], event=batch[-1])
155
- except Exception:
156
- logger.exception('Unhandled exception from exporter.')
157
- if batch[-1] is src.EXIT_EVENT:
158
- break
159
- continue # pragma: NO COVER
160
- try:
161
- dst._export(batch)
162
- except Exception:
163
- logger.exception('Unhandled exception from exporter.')
164
-
165
- def stop(self, timeout=None): # pragma: NO COVER
166
- start_time = time.time()
167
- wait_time = timeout
168
- if self.is_alive() and not self._stopping:
169
- self._stopping = True
170
- self._src.put(self._src.EXIT_EVENT, block=True, timeout=wait_time)
171
- elapsed_time = time.time() - start_time
172
- wait_time = timeout and max(timeout - elapsed_time, 0)
173
- if self._src.EXIT_EVENT.wait(timeout=wait_time):
174
- return time.time() - start_time # time taken to stop
175
-
176
-
177
- class SamplingFilter(logging.Filter):
178
-
179
- def __init__(self, probability=1.0):
180
- super(SamplingFilter, self).__init__()
181
- self.probability = probability
182
-
183
- def filter(self, record):
184
- return random.random() < self.probability
185
-
186
-
187
- class AzureLogHandler(BaseLogHandler, TransportMixin, ProcessorMixin):
188
- """Handler for logging to Microsoft Azure Monitor."""
189
-
190
- def __init__(self, **options):
191
- super(AzureLogHandler, self).__init__(**options)
192
- # start statsbeat on exporter instantiation
193
- if self._check_stats_collection():
194
- statsbeat.collect_statsbeat_metrics(self.options)
195
-
196
- def log_record_to_envelope(self, record):
197
- envelope = create_envelope(self.options.instrumentation_key, record)
198
-
199
- properties = {
200
- 'process': record.processName,
201
- 'module': record.module,
202
- 'fileName': record.pathname,
203
- 'lineNumber': record.lineno,
204
- 'level': record.levelname,
205
- }
206
- if (hasattr(record, 'custom_dimensions') and
207
- isinstance(record.custom_dimensions, dict)):
208
- properties.update(record.custom_dimensions)
209
-
210
- if record.exc_info:
211
- exctype, _value, tb = record.exc_info
212
- callstack = []
213
- level = 0
214
- has_full_stack = False
215
- exc_type = "N/A"
216
- message = self.format(record)
217
- if tb is not None:
218
- has_full_stack = True
219
- for fileName, line, method, _text in traceback.extract_tb(tb):
220
- callstack.append({
221
- 'level': level,
222
- 'method': method,
223
- 'fileName': fileName,
224
- 'line': line,
225
- })
226
- level += 1
227
- callstack.reverse()
228
- elif record.message:
229
- message = record.message
230
-
231
- if exctype is not None:
232
- exc_type = exctype.__name__
233
-
234
- if not exc_type:
235
- exc_type = "Exception"
236
- if not message:
237
- message = "Exception"
238
-
239
- envelope.name = 'Microsoft.ApplicationInsights.Exception'
240
-
241
- data = ExceptionData(
242
- exceptions=[{
243
- 'id': 1,
244
- 'outerId': 0,
245
- 'typeName': exc_type,
246
- 'message': message,
247
- 'hasFullStack': has_full_stack,
248
- 'parsedStack': callstack,
249
- }],
250
- severityLevel=max(0, record.levelno - 1) // 10,
251
- properties=properties,
252
- )
253
- envelope.data = Data(baseData=data, baseType='ExceptionData')
254
- else:
255
- envelope.name = 'Microsoft.ApplicationInsights.Message'
256
- data = Message(
257
- message=self.format(record),
258
- severityLevel=max(0, record.levelno - 1) // 10,
259
- properties=properties,
260
- )
261
- envelope.data = Data(baseData=data, baseType='MessageData')
262
- return envelope
263
-
264
-
265
- class AzureEventHandler(TransportMixin, ProcessorMixin, BaseLogHandler):
266
- """Handler for sending custom events to Microsoft Azure Monitor."""
267
-
268
- def __init__(self, **options):
269
- super(AzureEventHandler, self).__init__(**options)
270
- # start statsbeat on exporter instantiation
271
- if self._check_stats_collection():
272
- statsbeat.collect_statsbeat_metrics(self.options)
273
-
274
- def log_record_to_envelope(self, record):
275
- envelope = create_envelope(self.options.instrumentation_key, record)
276
-
277
- properties = {}
278
- if (hasattr(record, 'custom_dimensions') and
279
- isinstance(record.custom_dimensions, dict)):
280
- properties.update(record.custom_dimensions)
281
-
282
- measurements = {}
283
- if (hasattr(record, 'custom_measurements') and
284
- isinstance(record.custom_measurements, dict)):
285
- measurements.update(record.custom_measurements)
286
-
287
- envelope.name = 'Microsoft.ApplicationInsights.Event'
288
- data = Event(
289
- name=self.format(record),
290
- properties=properties,
291
- measurements=measurements,
292
- )
293
- envelope.data = Data(baseData=data, baseType='EventData')
294
-
295
- return envelope
296
-
297
-
298
- def create_envelope(instrumentation_key, record):
299
- envelope = Envelope(
300
- iKey=instrumentation_key,
301
- tags=dict(utils.azure_monitor_context),
302
- time=utils.timestamp_to_iso_str(record.created),
303
- )
304
- envelope.tags['ai.operation.id'] = getattr(
305
- record,
306
- 'traceId',
307
- '00000000000000000000000000000000',
308
- )
309
- envelope.tags['ai.operation.parentId'] = '|{}.{}.'.format(
310
- envelope.tags['ai.operation.id'],
311
- getattr(record, 'spanId', '0000000000000000'),
312
- )
313
-
314
- return envelope
1
+ # Copyright 2019, OpenCensus Authors
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ import logging
16
+ import random
17
+ import threading
18
+ import time
19
+ import traceback
20
+
21
+ from opencensus.common.schedule import Queue, QueueEvent, QueueExitEvent
22
+ from opencensus.ext.azure.common import Options, utils
23
+ from opencensus.ext.azure.common.processor import ProcessorMixin
24
+ from opencensus.ext.azure.common.protocol import (
25
+ Data,
26
+ Envelope,
27
+ Event,
28
+ ExceptionData,
29
+ Message,
30
+ )
31
+ from opencensus.ext.azure.common.storage import LocalFileStorage
32
+ from opencensus.ext.azure.common.transport import (
33
+ TransportMixin,
34
+ TransportStatusCode,
35
+ )
36
+ from opencensus.ext.azure.statsbeat import statsbeat
37
+ from opencensus.trace import execution_context
38
+
39
+ logger = logging.getLogger(__name__)
40
+
41
+ __all__ = ['AzureEventHandler', 'AzureLogHandler']
42
+
43
+
44
+ class BaseLogHandler(logging.Handler):
45
+
46
+ def __init__(self, **options):
47
+ super(BaseLogHandler, self).__init__()
48
+ self.options = Options(**options)
49
+ utils.validate_instrumentation_key(self.options.instrumentation_key)
50
+ if not 0 <= self.options.logging_sampling_rate <= 1:
51
+ raise ValueError('Sampling must be in the range: [0,1]')
52
+ self.export_interval = self.options.export_interval
53
+ self.max_batch_size = self.options.max_batch_size
54
+ self.storage = None
55
+ if self.options.enable_local_storage:
56
+ self.storage = LocalFileStorage(
57
+ path=self.options.storage_path,
58
+ max_size=self.options.storage_max_size,
59
+ maintenance_period=self.options.storage_maintenance_period,
60
+ retention_period=self.options.storage_retention_period,
61
+ source=self.__class__.__name__,
62
+ )
63
+ self._telemetry_processors = []
64
+ self.addFilter(SamplingFilter(self.options.logging_sampling_rate))
65
+ self._queue = Queue(capacity=self.options.queue_capacity)
66
+ self._worker = Worker(self._queue, self)
67
+ self._worker.start()
68
+ # For redirects
69
+ self._consecutive_redirects = 0 # To prevent circular redirects
70
+
71
+ def _export(self, batch, event=None): # pragma: NO COVER
72
+ try:
73
+ if batch:
74
+ envelopes = [self.log_record_to_envelope(x) for x in batch]
75
+ envelopes = self.apply_telemetry_processors(envelopes)
76
+ result = self._transmit(envelopes)
77
+ # Only store files if local storage enabled
78
+ if self.storage:
79
+ if result is TransportStatusCode.RETRY:
80
+ self.storage.put(
81
+ envelopes,
82
+ self.options.minimum_retry_interval,
83
+ )
84
+ if result is TransportStatusCode.SUCCESS:
85
+ if len(batch) < self.options.max_batch_size:
86
+ self._transmit_from_storage()
87
+ if event:
88
+ if isinstance(event, QueueExitEvent):
89
+ # send files before exit
90
+ self._transmit_from_storage()
91
+ finally:
92
+ if event:
93
+ event.set()
94
+
95
+ # Close is automatically called as part of logging shutdown
96
+ def close(self, timeout=None):
97
+ if not timeout and hasattr(self, "options"):
98
+ timeout = self.options.grace_period
99
+ if hasattr(self, "storage") and self.storage:
100
+ self.storage.close()
101
+ if hasattr(self, "_worker") and self._worker:
102
+ self._worker.stop(timeout)
103
+ super(BaseLogHandler, self).close()
104
+
105
+ def createLock(self):
106
+ self.lock = None
107
+
108
+ def emit(self, record):
109
+ self._queue.put(record, block=False)
110
+
111
+ def log_record_to_envelope(self, record):
112
+ raise NotImplementedError # pragma: NO COVER
113
+
114
+ # Flush is automatically called as part of logging shutdown
115
+ def flush(self, timeout=None):
116
+ if not hasattr(self, "_queue") or self._queue.is_empty():
117
+ return
118
+
119
+ # We must check the worker thread is alive, because otherwise flush
120
+ # is useless. Also, it would deadlock if no timeout is given, and the
121
+ # queue isn't empty.
122
+ # This is a very possible scenario during process termination, when
123
+ # atexit first calls handler.close() and then logging.shutdown(),
124
+ # that in turn calls handler.flush() without arguments.
125
+ if not self._worker.is_alive():
126
+ logger.warning("Can't flush %s, worker thread is dead. "
127
+ "Any pending messages will be lost.", self)
128
+ return
129
+
130
+ self._queue.flush(timeout=timeout)
131
+
132
+
133
+ class Worker(threading.Thread):
134
+ daemon = True
135
+
136
+ def __init__(self, src, dst):
137
+ self._src = src
138
+ self._dst = dst
139
+ self._stopping = False
140
+ super(Worker, self).__init__(
141
+ name='{} Worker'.format(type(dst).__name__)
142
+ )
143
+
144
+ def run(self):
145
+ # Indicate that this thread is an exporter thread.
146
+ # Used to suppress tracking of requests in this thread
147
+ execution_context.set_is_exporter(True)
148
+ src = self._src
149
+ dst = self._dst
150
+ while True:
151
+ batch = src.gets(dst.max_batch_size, dst.export_interval)
152
+ if batch and isinstance(batch[-1], QueueEvent):
153
+ try:
154
+ dst._export(batch[:-1], event=batch[-1])
155
+ except Exception:
156
+ logger.exception('Unhandled exception from exporter.')
157
+ if batch[-1] is src.EXIT_EVENT:
158
+ break
159
+ continue # pragma: NO COVER
160
+ try:
161
+ dst._export(batch)
162
+ except Exception:
163
+ logger.exception('Unhandled exception from exporter.')
164
+
165
+ def stop(self, timeout=None): # pragma: NO COVER
166
+ start_time = time.time()
167
+ wait_time = timeout
168
+ if self.is_alive() and not self._stopping:
169
+ self._stopping = True
170
+ self._src.put(self._src.EXIT_EVENT, block=True, timeout=wait_time)
171
+ elapsed_time = time.time() - start_time
172
+ wait_time = timeout and max(timeout - elapsed_time, 0)
173
+ if self._src.EXIT_EVENT.wait(timeout=wait_time):
174
+ return time.time() - start_time # time taken to stop
175
+
176
+
177
+ class SamplingFilter(logging.Filter):
178
+
179
+ def __init__(self, probability=1.0):
180
+ super(SamplingFilter, self).__init__()
181
+ self.probability = probability
182
+
183
+ def filter(self, record):
184
+ return random.random() < self.probability
185
+
186
+
187
+ class AzureLogHandler(BaseLogHandler, TransportMixin, ProcessorMixin):
188
+ """Handler for logging to Microsoft Azure Monitor."""
189
+
190
+ def __init__(self, **options):
191
+ super(AzureLogHandler, self).__init__(**options)
192
+ # start statsbeat on exporter instantiation
193
+ if self._check_stats_collection():
194
+ statsbeat.collect_statsbeat_metrics(self.options)
195
+
196
+ def log_record_to_envelope(self, record):
197
+ envelope = create_envelope(self.options.instrumentation_key, record)
198
+
199
+ properties = {
200
+ 'process': record.processName,
201
+ 'module': record.module,
202
+ 'fileName': record.pathname,
203
+ 'lineNumber': record.lineno,
204
+ 'level': record.levelname,
205
+ }
206
+ if (hasattr(record, 'custom_dimensions') and
207
+ isinstance(record.custom_dimensions, dict)):
208
+ properties.update(record.custom_dimensions)
209
+
210
+ if record.exc_info:
211
+ exctype, _value, tb = record.exc_info
212
+ callstack = []
213
+ level = 0
214
+ has_full_stack = False
215
+ exc_type = "N/A"
216
+ message = self.format(record)
217
+ if tb is not None:
218
+ has_full_stack = True
219
+ for fileName, line, method, _text in traceback.extract_tb(tb):
220
+ callstack.append({
221
+ 'level': level,
222
+ 'method': method,
223
+ 'fileName': fileName,
224
+ 'line': line,
225
+ })
226
+ level += 1
227
+ callstack.reverse()
228
+ elif record.message:
229
+ message = record.message
230
+
231
+ if exctype is not None:
232
+ exc_type = exctype.__name__
233
+
234
+ if not exc_type:
235
+ exc_type = "Exception"
236
+ if not message:
237
+ message = "Exception"
238
+
239
+ envelope.name = 'Microsoft.ApplicationInsights.Exception'
240
+
241
+ data = ExceptionData(
242
+ exceptions=[{
243
+ 'id': 1,
244
+ 'outerId': 0,
245
+ 'typeName': exc_type,
246
+ 'message': message,
247
+ 'hasFullStack': has_full_stack,
248
+ 'parsedStack': callstack,
249
+ }],
250
+ severityLevel=max(0, record.levelno - 1) // 10,
251
+ properties=properties,
252
+ )
253
+ envelope.data = Data(baseData=data, baseType='ExceptionData')
254
+ else:
255
+ envelope.name = 'Microsoft.ApplicationInsights.Message'
256
+ data = Message(
257
+ message=self.format(record),
258
+ severityLevel=max(0, record.levelno - 1) // 10,
259
+ properties=properties,
260
+ )
261
+ envelope.data = Data(baseData=data, baseType='MessageData')
262
+ return envelope
263
+
264
+
265
+ class AzureEventHandler(TransportMixin, ProcessorMixin, BaseLogHandler):
266
+ """Handler for sending custom events to Microsoft Azure Monitor."""
267
+
268
+ def __init__(self, **options):
269
+ super(AzureEventHandler, self).__init__(**options)
270
+ # start statsbeat on exporter instantiation
271
+ if self._check_stats_collection():
272
+ statsbeat.collect_statsbeat_metrics(self.options)
273
+
274
+ def log_record_to_envelope(self, record):
275
+ envelope = create_envelope(self.options.instrumentation_key, record)
276
+
277
+ properties = {}
278
+ if (hasattr(record, 'custom_dimensions') and
279
+ isinstance(record.custom_dimensions, dict)):
280
+ properties.update(record.custom_dimensions)
281
+
282
+ measurements = {}
283
+ if (hasattr(record, 'custom_measurements') and
284
+ isinstance(record.custom_measurements, dict)):
285
+ measurements.update(record.custom_measurements)
286
+
287
+ envelope.name = 'Microsoft.ApplicationInsights.Event'
288
+ data = Event(
289
+ name=self.format(record),
290
+ properties=properties,
291
+ measurements=measurements,
292
+ )
293
+ envelope.data = Data(baseData=data, baseType='EventData')
294
+
295
+ return envelope
296
+
297
+
298
+ def create_envelope(instrumentation_key, record):
299
+ envelope = Envelope(
300
+ iKey=instrumentation_key,
301
+ tags=dict(utils.azure_monitor_context),
302
+ time=utils.timestamp_to_iso_str(record.created),
303
+ )
304
+ envelope.tags['ai.operation.id'] = getattr(
305
+ record,
306
+ 'traceId',
307
+ '00000000000000000000000000000000',
308
+ )
309
+ envelope.tags['ai.operation.parentId'] = '|{}.{}.'.format(
310
+ envelope.tags['ai.operation.id'],
311
+ getattr(record, 'spanId', '0000000000000000'),
312
+ )
313
+
314
+ return envelope