py2docfx 0.1.16rc2051518__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.
- py2docfx/docfx_yaml/miss_reference.py +1 -1
- py2docfx/docfx_yaml/parameter_utils.py +58 -6
- py2docfx/docfx_yaml/tests/roots/test-translator-typing/code_with_typing.py +14 -0
- py2docfx/docfx_yaml/tests/roots/test-translator-typing/conf.py +18 -0
- py2docfx/docfx_yaml/tests/test_translator_typing.py +39 -0
- py2docfx/docfx_yaml/utils.py +2 -2
- py2docfx/venv/basevenv/Lib/site-packages/babel/py.typed +1 -0
- py2docfx/venv/basevenv/Lib/site-packages/certifi/__init__.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/certifi/core.py +1 -32
- py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/cli/__main__.py +62 -2
- py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/constant.py +17 -0
- py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/legacy.py +1 -3
- py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/md.py +19 -14
- py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/utils.py +6 -0
- py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/version.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/markupsafe/_speedups.pyi +1 -0
- py2docfx/venv/basevenv/Lib/site-packages/markupsafe/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/packaging/__init__.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/packaging/_elffile.py +1 -2
- py2docfx/venv/basevenv/Lib/site-packages/packaging/_manylinux.py +1 -2
- py2docfx/venv/basevenv/Lib/site-packages/packaging/_parser.py +1 -2
- py2docfx/venv/basevenv/Lib/site-packages/packaging/_tokenizer.py +5 -4
- py2docfx/venv/basevenv/Lib/site-packages/packaging/licenses/__init__.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/packaging/markers.py +53 -22
- py2docfx/venv/basevenv/Lib/site-packages/packaging/metadata.py +1 -2
- py2docfx/venv/basevenv/Lib/site-packages/packaging/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/packaging/specifiers.py +1 -2
- py2docfx/venv/basevenv/Lib/site-packages/packaging/tags.py +39 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/cachecontrol/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/certifi/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/chardet/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/distro/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/idna/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/packaging/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/platformdirs/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/pyparsing/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/resolvelib/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/rich/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/tenacity/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/tomli/py.typed +1 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/truststore/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/py.typed +4 -0
- py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/__init__.py +6 -7
- py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pygments/__init__.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/pygments/lexers/_sql_builtins.py +106 -0
- py2docfx/venv/basevenv/Lib/site-packages/pygments/lexers/scripting.py +5 -3
- py2docfx/venv/basevenv/Lib/site-packages/pygments/lexers/sql.py +24 -118
- py2docfx/venv/basevenv/Lib/site-packages/requests/__version__.py +2 -2
- py2docfx/venv/basevenv/Lib/site-packages/requests/compat.py +12 -0
- py2docfx/venv/basevenv/Lib/site-packages/requests/models.py +3 -1
- py2docfx/venv/basevenv/Lib/site-packages/requests/utils.py +6 -16
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/__init__.py +0 -38
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_discovery.py +33 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/config.py +0 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_unix.py +63 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +5 -6
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_entry_points.py +4 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_normalization.py +0 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_path.py +12 -3
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_reqs.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_scripts.py +361 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_shutil.py +6 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_metadata/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/inflect/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/jaraco/collections/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/jaraco/functools/__init__.pyi +125 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/jaraco/functools/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.pyi +2 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/more_itertools/more.pyi +709 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/more_itertools/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.pyi +136 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/platformdirs/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/tomli/py.typed +1 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/typeguard/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/build_meta.py +25 -37
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_egg.py +9 -11
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_wheel.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build_ext.py +29 -28
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/develop.py +39 -179
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/easy_install.py +17 -2352
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/editable_wheel.py +14 -31
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/egg_info.py +0 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install.py +3 -55
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install_scripts.py +5 -11
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/sdist.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/compat/py310.py +11 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/dist.py +10 -12
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/installer.py +34 -29
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/contexts.py +0 -14
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/fixtures.py +235 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/integration/test_pbr.py +20 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_meta.py +0 -24
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_develop.py +1 -64
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist.py +2 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist_info.py +0 -63
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_editable_install.py +15 -41
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_egg_info.py +3 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_scripts.py +12 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_wheel.py +12 -36
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +3 -4
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/wheel.py +49 -24
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/__init__.py +6 -0
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/arabic_stemmer.py +798 -797
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/armenian_stemmer.py +212 -213
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/basestemmer.py +20 -54
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/basque_stemmer.py +202 -228
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/catalan_stemmer.py +370 -375
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/danish_stemmer.py +63 -61
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/dutch_porter_stemmer.py +466 -0
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/dutch_stemmer.py +1217 -343
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/english_stemmer.py +295 -264
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/esperanto_stemmer.py +588 -0
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/estonian_stemmer.py +850 -0
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/finnish_stemmer.py +144 -143
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/french_stemmer.py +308 -246
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/german_stemmer.py +224 -167
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/greek_stemmer.py +1314 -1313
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/hindi_stemmer.py +39 -38
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/hungarian_stemmer.py +231 -256
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/indonesian_stemmer.py +61 -64
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/irish_stemmer.py +101 -106
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/italian_stemmer.py +272 -272
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/lithuanian_stemmer.py +233 -240
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/nepali_stemmer.py +108 -134
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/norwegian_stemmer.py +108 -63
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/porter_stemmer.py +101 -108
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/portuguese_stemmer.py +241 -250
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/romanian_stemmer.py +332 -296
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/russian_stemmer.py +178 -179
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/serbian_stemmer.py +2331 -2332
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/spanish_stemmer.py +254 -259
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/swedish_stemmer.py +143 -70
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/tamil_stemmer.py +638 -1491
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/turkish_stemmer.py +326 -292
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/yiddish_stemmer.py +245 -246
- py2docfx/venv/basevenv/Lib/site-packages/sphinx/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/sphinxcontrib/applehelp/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/sphinxcontrib/htmlhelp/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/sphinxcontrib/qthelp/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/sphinxcontrib/serializinghtml/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/_version.py +9 -4
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/connection.py +87 -38
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/contrib/emscripten/fetch.py +20 -0
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/contrib/emscripten/response.py +8 -16
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/contrib/pyopenssl.py +10 -0
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/exceptions.py +12 -4
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/http2/connection.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/poolmanager.py +17 -1
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/py.typed +2 -0
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/response.py +53 -24
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/util/request.py +12 -4
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/util/ssl_.py +22 -2
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/util/ssl_match_hostname.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/wheel/__init__.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/wheel/__main__.py +7 -5
- py2docfx/venv/{venv1/Lib/site-packages/wheel/cli → basevenv/Lib/site-packages/wheel/_commands}/__init__.py +3 -5
- py2docfx/venv/{venv1/Lib/site-packages/wheel/cli → basevenv/Lib/site-packages/wheel/_commands}/convert.py +14 -9
- py2docfx/venv/{venv1/Lib/site-packages/wheel/cli → basevenv/Lib/site-packages/wheel/_commands}/pack.py +1 -2
- py2docfx/venv/basevenv/Lib/site-packages/wheel/{cli → _commands}/tags.py +4 -3
- py2docfx/venv/basevenv/Lib/site-packages/wheel/_metadata.py +184 -0
- py2docfx/venv/basevenv/Lib/site-packages/wheel/bdist_wheel.py +12 -23
- py2docfx/venv/basevenv/Lib/site-packages/wheel/macosx_libfile.py +4 -0
- py2docfx/venv/basevenv/Lib/site-packages/wheel/metadata.py +17 -183
- py2docfx/venv/basevenv/Lib/site-packages/wheel/wheelfile.py +30 -16
- py2docfx/venv/venv1/Lib/site-packages/azure/core/_version.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/credentials.py +5 -4
- py2docfx/venv/venv1/Lib/site-packages/azure/core/instrumentation.py +67 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/_base.py +3 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/_base_async.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/_tools.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_authentication.py +4 -4
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_authentication_async.py +1 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_distributed_tracing.py +152 -29
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_redirect.py +3 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_redirect_async.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_retry.py +3 -10
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_retry_async.py +3 -8
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_universal.py +2 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_aiohttp.py +1 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_base_async.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_requests_asyncio.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/polling/base_polling.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/azure/core/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_aiohttp.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_http_response_impl_async.py +3 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_requests_asyncio.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_rest_py3.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/settings.py +27 -21
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/__init__.py +3 -7
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/_abstract_span.py +2 -35
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/_models.py +71 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/common.py +12 -4
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/decorator.py +66 -13
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/decorator_async.py +62 -23
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/ext/opencensus_span/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/opentelemetry.py +256 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_connection_string_parser.py +1 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_messaging_shared.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_pipeline_transport_rest_shared.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_pipeline_transport_rest_shared_async.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_utils.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_constants.py +1 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/default.py +23 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/environment.py +12 -16
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/service_fabric.py +22 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/user_password.py +10 -6
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/vscode.py +13 -4
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/auth_code_redirect_handler.py +3 -5
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/msal_client.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_persistent_cache.py +3 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_version.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azd_cli.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azure_cli.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azure_powershell.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/chained.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/default.py +22 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/environment.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/service_fabric.py +17 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/vscode.py +4 -4
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/certifi/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/certifi/core.py +1 -32
- py2docfx/venv/venv1/Lib/site-packages/certifi/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/cli/__main__.py +62 -2
- py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/constant.py +17 -0
- py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/legacy.py +1 -3
- py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/md.py +19 -14
- py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/utils.py +6 -0
- py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/version.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/__about__.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/cryptography/__init__.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/cryptography/fernet.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/_oid.py +35 -2
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/backends/openssl/backend.py +33 -10
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi +37 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/_openssl.pyi +8 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/asn1.pyi +7 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/exceptions.pyi +17 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi +117 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/__init__.pyi +75 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/aead.pyi +107 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi +38 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi +18 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/dh.pyi +51 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/dsa.pyi +41 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/ec.pyi +52 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi +13 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi +13 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/hashes.pyi +28 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi +22 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi +49 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/keys.pyi +34 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi +15 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi +55 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/x25519.pyi +13 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/x448.pyi +13 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/pkcs12.pyi +52 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/pkcs7.pyi +50 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/test_support.pyi +23 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi +313 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/openssl/_conditional.py +9 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/openssl/binding.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/decrepit/ciphers/algorithms.py +5 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/_cipheralgorithm.py +4 -2
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/_serialization.py +1 -2
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/dh.py +12 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py +16 -3
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/ec.py +47 -3
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/ed25519.py +16 -3
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py +16 -3
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py +14 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py +14 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/x448.py +14 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/ciphers/algorithms.py +6 -6
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/ciphers/base.py +5 -4
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/ciphers/modes.py +18 -18
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/hashes.py +5 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py +5 -4
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py +4 -4
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.py +7 -4
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/padding.py +7 -121
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/serialization/__init__.py +2 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/serialization/pkcs12.py +21 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/serialization/pkcs7.py +48 -6
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/serialization/ssh.py +68 -18
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/twofactor/hotp.py +3 -2
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/twofactor/totp.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/utils.py +15 -3
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/__init__.py +3 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/base.py +39 -6
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/extensions.py +100 -49
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/name.py +27 -15
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/ocsp.py +60 -25
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/oid.py +2 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/verification.py +6 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/annotations_pb2.pyi +24 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/auth_pb2.pyi +120 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/backend_pb2.pyi +102 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/billing_pb2.pyi +50 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/client_pb2.pyi +405 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/config_change_pb2.pyi +65 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/consumer_pb2.pyi +62 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/context_pb2.pyi +60 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/control_pb2.pyi +43 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/distribution_pb2.pyi +144 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/documentation_pb2.pyi +86 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/endpoint_pb2.pyi +41 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/error_reason_pb2.pyi +90 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/field_behavior_pb2.pyi +45 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/field_info_pb2.pyi +60 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/http_pb2.pyi +94 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/httpbody_pb2.pyi +41 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/label_pb2.pyi +47 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/launch_stage_pb2.pyi +40 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/log_pb2.pyi +47 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/logging_pb2.pyi +57 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/metric_pb2.pyi +186 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/monitored_resource_pb2.pyi +104 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/monitoring_pb2.pyi +57 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/policy_pb2.pyi +57 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/quota_pb2.pyi +116 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/resource_pb2.pyi +93 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/routing_pb2.pyi +49 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/service_pb2.pyi +170 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/source_info_pb2.pyi +34 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/system_parameter_pb2.pyi +60 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/usage_pb2.pyi +55 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/visibility_pb2.pyi +56 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/bidi.py +17 -4
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/client_info.py +6 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/gapic_v1/client_info.py +1 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/py.typed +2 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/retry/retry_base.py +13 -4
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/retry/retry_streaming.py +7 -6
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/retry/retry_streaming_async.py +8 -5
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/retry/retry_unary.py +7 -6
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/retry/retry_unary_async.py +7 -6
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/version.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/auth/_default.py +2 -36
- py2docfx/venv/venv1/Lib/site-packages/google/auth/_helpers.py +240 -0
- py2docfx/venv/venv1/Lib/site-packages/google/auth/aio/_helpers.py +62 -0
- py2docfx/venv/venv1/Lib/site-packages/google/auth/aio/transport/aiohttp.py +6 -0
- py2docfx/venv/venv1/Lib/site-packages/google/auth/compute_engine/_metadata.py +5 -1
- py2docfx/venv/venv1/Lib/site-packages/google/auth/compute_engine/credentials.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/google/auth/identity_pool.py +91 -2
- py2docfx/venv/venv1/Lib/site-packages/google/auth/impersonated_credentials.py +75 -0
- py2docfx/venv/venv1/Lib/site-packages/google/auth/py.typed +2 -0
- py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/__init__.py +1 -0
- py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/_aiohttp_requests.py +8 -1
- py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/_http_client.py +3 -1
- py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/requests.py +4 -1
- py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/urllib3.py +15 -5
- py2docfx/venv/venv1/Lib/site-packages/google/auth/version.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/cloud/extended_operations_pb2.pyi +45 -0
- py2docfx/venv/venv1/Lib/site-packages/google/cloud/location/locations_pb2.pyi +96 -0
- py2docfx/venv/venv1/Lib/site-packages/google/gapic/metadata/gapic_metadata_pb2.pyi +118 -0
- py2docfx/venv/venv1/Lib/site-packages/google/logging/type/http_request_pb2.pyi +91 -0
- py2docfx/venv/venv1/Lib/site-packages/google/logging/type/log_severity_pb2.pyi +42 -0
- py2docfx/venv/venv1/Lib/site-packages/google/longrunning/operations_proto_pb2.pyi +126 -0
- py2docfx/venv/venv1/Lib/site-packages/google/oauth2/id_token.py +12 -0
- py2docfx/venv/venv1/Lib/site-packages/google/oauth2/py.typed +2 -0
- py2docfx/venv/venv1/Lib/site-packages/google/oauth2/webauthn_types.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/any.py +15 -1
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/any_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/api_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/compiler/plugin_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor.py +15 -2
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor_pb2.py +258 -113
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor_pool.py +22 -8
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/duration_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/empty_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/field_mask_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/decoder.py +106 -23
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/field_mask.py +3 -1
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/python_edition_defaults.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/python_message.py +21 -18
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/testing_refleaks.py +8 -2
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/well_known_types.py +60 -43
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/json_format.py +4 -5
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/message_factory.py +16 -0
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/runtime_version.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/source_context_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/struct_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/text_format.py +11 -7
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/timestamp_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/type_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/wrappers_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/rpc/code_pb2.pyi +58 -0
- py2docfx/venv/venv1/Lib/site-packages/google/rpc/context/attribute_context_pb2.pyi +309 -0
- py2docfx/venv/venv1/Lib/site-packages/google/rpc/context/audit_context_pb2.pyi +51 -0
- py2docfx/venv/venv1/Lib/site-packages/google/rpc/error_details_pb2.py +29 -23
- py2docfx/venv/venv1/Lib/site-packages/google/rpc/error_details_pb2.pyi +246 -0
- py2docfx/venv/venv1/Lib/site-packages/google/rpc/http_pb2.pyi +71 -0
- py2docfx/venv/venv1/Lib/site-packages/google/rpc/status_pb2.pyi +41 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/calendar_period_pb2.pyi +40 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/color_pb2.pyi +42 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/date_pb2.pyi +36 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/datetime_pb2.pyi +77 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/dayofweek_pb2.pyi +40 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/decimal_pb2.pyi +27 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/expr_pb2.pyi +39 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/fraction_pb2.pyi +31 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/interval_pb2.pyi +36 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/latlng_pb2.pyi +31 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/localized_text_pb2.pyi +31 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/money_pb2.pyi +36 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/month_pb2.pyi +50 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/phone_number_pb2.pyi +48 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/postal_address_pb2.pyi +74 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/quaternion_pb2.pyi +39 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/timeofday_pb2.pyi +39 -0
- py2docfx/venv/venv1/Lib/site-packages/idna/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/jwt/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/msal/application.py +1 -0
- py2docfx/venv/venv1/Lib/site-packages/msal/individual_cache.py +9 -5
- py2docfx/venv/venv1/Lib/site-packages/msal/managed_identity.py +4 -5
- py2docfx/venv/venv1/Lib/site-packages/msal/sku.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/msal/throttled_http_client.py +58 -30
- py2docfx/venv/venv1/Lib/site-packages/opencensus/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/__init__.py +138 -138
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/exporter.py +93 -93
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/processor.py +63 -63
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/protocol.py +206 -206
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/storage.py +205 -205
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/transport.py +355 -355
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/utils.py +79 -79
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/version.py +15 -15
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/log_exporter/__init__.py +314 -314
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/__init__.py +190 -190
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/standard_metrics/__init__.py +62 -62
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/standard_metrics/cpu.py +50 -50
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/standard_metrics/http_requests.py +176 -176
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/standard_metrics/memory.py +42 -42
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/standard_metrics/process.py +87 -87
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/statsbeat/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/statsbeat/state.py +50 -50
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/statsbeat/statsbeat.py +100 -100
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/statsbeat/statsbeat_metrics.py +480 -480
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/trace_exporter/__init__.py +236 -236
- py2docfx/venv/venv1/Lib/site-packages/packaging/__init__.py +15 -0
- py2docfx/venv/{basevenv/Lib/site-packages/wheel/vendored → venv1/Lib/site-packages}/packaging/_elffile.py +10 -9
- py2docfx/venv/venv1/Lib/site-packages/{wheel/vendored/packaging → packaging}/_manylinux.py +13 -11
- py2docfx/venv/{basevenv/Lib/site-packages/wheel/vendored → venv1/Lib/site-packages}/packaging/_musllinux.py +5 -3
- py2docfx/venv/venv1/Lib/site-packages/{wheel/vendored/packaging → packaging}/_parser.py +12 -15
- py2docfx/venv/venv1/Lib/site-packages/{wheel/vendored/packaging → packaging}/_tokenizer.py +15 -12
- py2docfx/venv/venv1/Lib/site-packages/packaging/licenses/__init__.py +145 -0
- py2docfx/venv/venv1/Lib/site-packages/packaging/licenses/_spdx.py +759 -0
- py2docfx/venv/venv1/Lib/site-packages/{wheel/vendored/packaging → packaging}/markers.py +148 -39
- py2docfx/venv/venv1/Lib/site-packages/packaging/metadata.py +862 -0
- py2docfx/venv/venv1/Lib/site-packages/packaging/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/{wheel/vendored/packaging → packaging}/requirements.py +5 -4
- py2docfx/venv/venv1/Lib/site-packages/{wheel/vendored/packaging → packaging}/specifiers.py +41 -33
- py2docfx/venv/{basevenv/Lib/site-packages/wheel/vendored → venv1/Lib/site-packages}/packaging/tags.py +135 -50
- py2docfx/venv/venv1/Lib/site-packages/{wheel/vendored/packaging → packaging}/utils.py +39 -48
- py2docfx/venv/{basevenv/Lib/site-packages/wheel/vendored → venv1/Lib/site-packages}/packaging/version.py +53 -32
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/cachecontrol/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/certifi/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/chardet/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/distro/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/idna/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/packaging/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/platformdirs/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/pyparsing/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/resolvelib/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/rich/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/tenacity/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/tomli/py.typed +1 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/truststore/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/py.typed +4 -0
- py2docfx/venv/venv1/Lib/site-packages/pkg_resources/__init__.py +6 -7
- py2docfx/venv/venv1/Lib/site-packages/pkg_resources/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/requests/__version__.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/requests/compat.py +12 -0
- py2docfx/venv/venv1/Lib/site-packages/requests/models.py +3 -1
- py2docfx/venv/venv1/Lib/site-packages/requests/utils.py +6 -16
- py2docfx/venv/venv1/Lib/site-packages/rsa/__init__.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/rsa/asn1.py +52 -52
- py2docfx/venv/venv1/Lib/site-packages/rsa/cli.py +321 -321
- py2docfx/venv/venv1/Lib/site-packages/rsa/common.py +184 -184
- py2docfx/venv/venv1/Lib/site-packages/rsa/core.py +53 -53
- py2docfx/venv/venv1/Lib/site-packages/rsa/key.py +858 -858
- py2docfx/venv/venv1/Lib/site-packages/rsa/parallel.py +96 -96
- py2docfx/venv/venv1/Lib/site-packages/rsa/pem.py +134 -134
- py2docfx/venv/venv1/Lib/site-packages/rsa/pkcs1.py +485 -485
- py2docfx/venv/venv1/Lib/site-packages/rsa/pkcs1_v2.py +100 -100
- py2docfx/venv/venv1/Lib/site-packages/rsa/prime.py +198 -198
- py2docfx/venv/venv1/Lib/site-packages/rsa/py.typed +1 -0
- py2docfx/venv/venv1/Lib/site-packages/rsa/randnum.py +95 -95
- py2docfx/venv/venv1/Lib/site-packages/rsa/transform.py +72 -72
- py2docfx/venv/venv1/Lib/site-packages/rsa/util.py +97 -97
- py2docfx/venv/venv1/Lib/site-packages/setuptools/__init__.py +0 -38
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_discovery.py +33 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/config.py +0 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_unix.py +63 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +5 -6
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_entry_points.py +4 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_normalization.py +0 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_path.py +12 -3
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_reqs.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_scripts.py +361 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_shutil.py +6 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_metadata/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/inflect/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/jaraco/collections/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/jaraco/functools/__init__.pyi +125 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/jaraco/functools/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.pyi +2 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/more_itertools/more.pyi +709 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/more_itertools/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.pyi +136 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/platformdirs/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/tomli/py.typed +1 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/typeguard/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/build_meta.py +25 -37
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_egg.py +9 -11
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_wheel.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_ext.py +29 -28
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/develop.py +39 -179
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/easy_install.py +17 -2352
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/editable_wheel.py +14 -31
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/egg_info.py +0 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install.py +3 -55
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install_scripts.py +5 -11
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/sdist.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/compat/py310.py +11 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/dist.py +10 -12
- py2docfx/venv/venv1/Lib/site-packages/setuptools/installer.py +34 -29
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/contexts.py +0 -14
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/fixtures.py +235 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/integration/test_pbr.py +20 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_meta.py +0 -24
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_develop.py +1 -64
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist_info.py +0 -63
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_editable_install.py +15 -41
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_egg_info.py +3 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_scripts.py +12 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_wheel.py +12 -36
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +3 -4
- py2docfx/venv/venv1/Lib/site-packages/setuptools/wheel.py +49 -24
- py2docfx/venv/venv1/Lib/site-packages/typing_extensions.py +380 -708
- py2docfx/venv/venv1/Lib/site-packages/urllib3/_version.py +9 -4
- py2docfx/venv/venv1/Lib/site-packages/urllib3/connection.py +87 -38
- py2docfx/venv/venv1/Lib/site-packages/urllib3/contrib/emscripten/fetch.py +20 -0
- py2docfx/venv/venv1/Lib/site-packages/urllib3/contrib/emscripten/response.py +8 -16
- py2docfx/venv/venv1/Lib/site-packages/urllib3/contrib/pyopenssl.py +10 -0
- py2docfx/venv/venv1/Lib/site-packages/urllib3/exceptions.py +12 -4
- py2docfx/venv/venv1/Lib/site-packages/urllib3/http2/connection.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/urllib3/poolmanager.py +17 -1
- py2docfx/venv/venv1/Lib/site-packages/urllib3/py.typed +2 -0
- py2docfx/venv/venv1/Lib/site-packages/urllib3/response.py +53 -24
- py2docfx/venv/venv1/Lib/site-packages/urllib3/util/request.py +12 -4
- py2docfx/venv/venv1/Lib/site-packages/urllib3/util/ssl_.py +22 -2
- py2docfx/venv/venv1/Lib/site-packages/urllib3/util/ssl_match_hostname.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/wheel/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/wheel/__main__.py +7 -5
- py2docfx/venv/{basevenv/Lib/site-packages/wheel/cli → venv1/Lib/site-packages/wheel/_commands}/__init__.py +3 -5
- py2docfx/venv/{basevenv/Lib/site-packages/wheel/cli → venv1/Lib/site-packages/wheel/_commands}/convert.py +14 -9
- py2docfx/venv/{basevenv/Lib/site-packages/wheel/cli → venv1/Lib/site-packages/wheel/_commands}/pack.py +1 -2
- py2docfx/venv/venv1/Lib/site-packages/wheel/{cli → _commands}/tags.py +4 -3
- py2docfx/venv/venv1/Lib/site-packages/wheel/_metadata.py +184 -0
- py2docfx/venv/venv1/Lib/site-packages/wheel/bdist_wheel.py +12 -23
- py2docfx/venv/venv1/Lib/site-packages/wheel/macosx_libfile.py +4 -0
- py2docfx/venv/venv1/Lib/site-packages/wheel/metadata.py +17 -183
- py2docfx/venv/venv1/Lib/site-packages/wheel/wheelfile.py +30 -16
- {py2docfx-0.1.16rc2051518.dist-info → py2docfx-0.1.17.dist-info}/METADATA +2 -3
- {py2docfx-0.1.16rc2051518.dist-info → py2docfx-0.1.17.dist-info}/RECORD +588 -427
- {py2docfx-0.1.16rc2051518.dist-info → py2docfx-0.1.17.dist-info}/WHEEL +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/package_index.py +0 -1137
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/sandbox.py +0 -536
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/server.py +0 -86
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_easy_install.py +0 -1476
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_packageindex.py +0 -267
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_sandbox.py +0 -134
- py2docfx/venv/basevenv/Lib/site-packages/wheel/_bdist_wheel.py +0 -613
- py2docfx/venv/basevenv/Lib/site-packages/wheel/_setuptools_logging.py +0 -26
- py2docfx/venv/basevenv/Lib/site-packages/wheel/util.py +0 -17
- py2docfx/venv/basevenv/Lib/site-packages/wheel/vendored/packaging/_manylinux.py +0 -260
- py2docfx/venv/basevenv/Lib/site-packages/wheel/vendored/packaging/_parser.py +0 -356
- py2docfx/venv/basevenv/Lib/site-packages/wheel/vendored/packaging/_tokenizer.py +0 -192
- py2docfx/venv/basevenv/Lib/site-packages/wheel/vendored/packaging/markers.py +0 -253
- py2docfx/venv/basevenv/Lib/site-packages/wheel/vendored/packaging/requirements.py +0 -90
- py2docfx/venv/basevenv/Lib/site-packages/wheel/vendored/packaging/specifiers.py +0 -1011
- py2docfx/venv/basevenv/Lib/site-packages/wheel/vendored/packaging/utils.py +0 -172
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/application.py +0 -119
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/application.py +0 -121
- py2docfx/venv/venv1/Lib/site-packages/setuptools/package_index.py +0 -1137
- py2docfx/venv/venv1/Lib/site-packages/setuptools/sandbox.py +0 -536
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/server.py +0 -86
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_easy_install.py +0 -1476
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_packageindex.py +0 -267
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_sandbox.py +0 -134
- py2docfx/venv/venv1/Lib/site-packages/wheel/_bdist_wheel.py +0 -613
- py2docfx/venv/venv1/Lib/site-packages/wheel/_setuptools_logging.py +0 -26
- py2docfx/venv/venv1/Lib/site-packages/wheel/util.py +0 -17
- py2docfx/venv/venv1/Lib/site-packages/wheel/vendored/packaging/_elffile.py +0 -108
- py2docfx/venv/venv1/Lib/site-packages/wheel/vendored/packaging/_musllinux.py +0 -83
- py2docfx/venv/venv1/Lib/site-packages/wheel/vendored/packaging/_structures.py +0 -61
- py2docfx/venv/venv1/Lib/site-packages/wheel/vendored/packaging/tags.py +0 -571
- py2docfx/venv/venv1/Lib/site-packages/wheel/vendored/packaging/version.py +0 -561
- /py2docfx/venv/basevenv/Lib/site-packages/{wheel/vendored/__init__.py → certifi/py.typed} +0 -0
- /py2docfx/venv/basevenv/Lib/site-packages/{wheel/vendored/packaging/__init__.py → charset_normalizer/py.typed} +0 -0
- /py2docfx/venv/{venv1/Lib/site-packages/wheel/vendored/__init__.py → basevenv/Lib/site-packages/idna/py.typed} +0 -0
- /py2docfx/venv/{venv1/Lib/site-packages/wheel/vendored/packaging/__init__.py → basevenv/Lib/site-packages/jinja2/py.typed} +0 -0
- /py2docfx/venv/basevenv/Lib/site-packages/wheel/{cli → _commands}/unpack.py +0 -0
- /py2docfx/venv/{basevenv/Lib/site-packages/wheel/vendored → venv1/Lib/site-packages}/packaging/_structures.py +0 -0
- /py2docfx/venv/venv1/Lib/site-packages/wheel/{cli → _commands}/unpack.py +0 -0
- {py2docfx-0.1.16rc2051518.dist-info → py2docfx-0.1.17.dist-info}/top_level.txt +0 -0
@@ -1,355 +1,355 @@
|
|
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 json
|
16
|
-
import logging
|
17
|
-
import threading
|
18
|
-
import time
|
19
|
-
|
20
|
-
import requests
|
21
|
-
from azure.core.exceptions import ClientAuthenticationError
|
22
|
-
from azure.identity._exceptions import CredentialUnavailableError
|
23
|
-
|
24
|
-
from opencensus.ext.azure.statsbeat import state
|
25
|
-
|
26
|
-
try:
|
27
|
-
from urllib.parse import urlparse
|
28
|
-
except ImportError:
|
29
|
-
from urlparse import urlparse
|
30
|
-
|
31
|
-
|
32
|
-
logger = logging.getLogger(__name__)
|
33
|
-
|
34
|
-
|
35
|
-
_MAX_CONSECUTIVE_REDIRECTS = 10
|
36
|
-
_MONITOR_OAUTH_SCOPE = "https://monitor.azure.com//.default"
|
37
|
-
_requests_lock = threading.Lock()
|
38
|
-
_requests_map = {}
|
39
|
-
_REACHED_INGESTION_STATUS_CODES = (200, 206, 402, 408, 429, 439, 500)
|
40
|
-
REDIRECT_STATUS_CODES = (307, 308)
|
41
|
-
RETRYABLE_STATUS_CODES = (
|
42
|
-
401, # Unauthorized
|
43
|
-
403, # Forbidden
|
44
|
-
408, # Request Timeout
|
45
|
-
429, # Too Many Requests - retry after
|
46
|
-
500, # Internal server error
|
47
|
-
502, # Bad Gateway
|
48
|
-
503, # Service unavailable
|
49
|
-
504, # Gateway timeout
|
50
|
-
)
|
51
|
-
THROTTLE_STATUS_CODES = (
|
52
|
-
402, # Quota, too Many Requests over extended time
|
53
|
-
439, # Quota, too Many Requests over extended time (legacy)
|
54
|
-
)
|
55
|
-
|
56
|
-
|
57
|
-
class TransportStatusCode:
|
58
|
-
SUCCESS = 0
|
59
|
-
RETRY = 1
|
60
|
-
DROP = 2
|
61
|
-
STATSBEAT_SHUTDOWN = 3
|
62
|
-
|
63
|
-
|
64
|
-
class TransportMixin(object):
|
65
|
-
|
66
|
-
# check to see whether its the case of stats collection
|
67
|
-
def _check_stats_collection(self):
|
68
|
-
return state.is_statsbeat_enabled() and \
|
69
|
-
not state.get_statsbeat_shutdown() and \
|
70
|
-
not self._is_stats_exporter()
|
71
|
-
|
72
|
-
# check if the current exporter is a statsbeat metric exporter
|
73
|
-
# only applies to metrics exporter
|
74
|
-
def _is_stats_exporter(self):
|
75
|
-
return hasattr(self, '_is_stats') and self._is_stats
|
76
|
-
|
77
|
-
def _transmit_from_storage(self):
|
78
|
-
if self.storage:
|
79
|
-
for blob in self.storage.gets():
|
80
|
-
# give a few more seconds for blob lease operation
|
81
|
-
# to reduce the chance of race (for perf consideration)
|
82
|
-
if blob.lease(self.options.timeout + 5):
|
83
|
-
envelopes = blob.get()
|
84
|
-
result = self._transmit(envelopes)
|
85
|
-
if result is TransportStatusCode.RETRY:
|
86
|
-
blob.lease(result)
|
87
|
-
else:
|
88
|
-
blob.delete()
|
89
|
-
|
90
|
-
def _transmit(self, envelopes):
|
91
|
-
"""
|
92
|
-
Transmit the data envelopes to the ingestion service.
|
93
|
-
Return a negative value for partial success or non-retryable failure.
|
94
|
-
Return 0 if all envelopes have been successfully ingested.
|
95
|
-
Return the next retry time in seconds for retryable failure.
|
96
|
-
This function should never throw exception.
|
97
|
-
"""
|
98
|
-
if not envelopes:
|
99
|
-
return 0
|
100
|
-
status = None
|
101
|
-
exception = None
|
102
|
-
try:
|
103
|
-
start_time = time.time()
|
104
|
-
headers = {
|
105
|
-
'Accept': 'application/json',
|
106
|
-
'Content-Type': 'application/json; charset=utf-8',
|
107
|
-
}
|
108
|
-
endpoint = self.options.endpoint
|
109
|
-
if self.options.credential:
|
110
|
-
token = self.options.credential.get_token(_MONITOR_OAUTH_SCOPE)
|
111
|
-
headers["Authorization"] = "Bearer {}".format(token.token)
|
112
|
-
endpoint += '/v2.1/track'
|
113
|
-
proxies = json.loads(self.options.proxies)
|
114
|
-
allow_redirects = len(proxies) != 0
|
115
|
-
|
116
|
-
response = requests.post(
|
117
|
-
url=endpoint,
|
118
|
-
data=json.dumps(envelopes, default=str),
|
119
|
-
headers=headers,
|
120
|
-
timeout=self.options.timeout,
|
121
|
-
proxies=proxies,
|
122
|
-
allow_redirects=allow_redirects,
|
123
|
-
)
|
124
|
-
except requests.Timeout as ex:
|
125
|
-
if not self._is_stats_exporter():
|
126
|
-
logger.warning(
|
127
|
-
'Request time out. Ingestion may be backed up. Retrying.')
|
128
|
-
status = TransportStatusCode.RETRY
|
129
|
-
exception = ex
|
130
|
-
except requests.RequestException as ex:
|
131
|
-
if not self._is_stats_exporter():
|
132
|
-
logger.warning(
|
133
|
-
'Retrying due to transient client side error %s.', ex)
|
134
|
-
status = TransportStatusCode.RETRY
|
135
|
-
exception = ex
|
136
|
-
except CredentialUnavailableError as ex:
|
137
|
-
if not self._is_stats_exporter():
|
138
|
-
logger.warning('Credential error. %s. Dropping telemetry.', ex)
|
139
|
-
status = TransportStatusCode.DROP
|
140
|
-
exception = ex
|
141
|
-
except ClientAuthenticationError as ex:
|
142
|
-
if not self._is_stats_exporter():
|
143
|
-
logger.warning('Authentication error %s', ex)
|
144
|
-
status = TransportStatusCode.RETRY
|
145
|
-
exception = ex
|
146
|
-
except Exception as ex:
|
147
|
-
if not self._is_stats_exporter():
|
148
|
-
logger.warning(
|
149
|
-
'Error when sending request %s. Dropping telemetry.', ex)
|
150
|
-
status = TransportStatusCode.DROP
|
151
|
-
exception = ex
|
152
|
-
finally:
|
153
|
-
if self._check_stats_collection():
|
154
|
-
_update_requests_map('count')
|
155
|
-
end_time = time.time()
|
156
|
-
if self._check_stats_collection():
|
157
|
-
_update_requests_map('duration', value=end_time-start_time)
|
158
|
-
|
159
|
-
if status is not None and exception is not None:
|
160
|
-
if self._check_stats_collection():
|
161
|
-
_update_requests_map('exception', value=exception.__class__.__name__) # noqa: E501
|
162
|
-
return status
|
163
|
-
if self._is_stats_exporter() and \
|
164
|
-
not state.get_statsbeat_shutdown() and \
|
165
|
-
not state.get_statsbeat_initial_success():
|
166
|
-
# If ingestion threshold during statsbeat initialization is
|
167
|
-
# reached, return back code to shut it down
|
168
|
-
if _statsbeat_failure_reached_threshold():
|
169
|
-
return TransportStatusCode.STATSBEAT_SHUTDOWN
|
170
|
-
|
171
|
-
text = 'N/A'
|
172
|
-
status_code = 0
|
173
|
-
try:
|
174
|
-
text = response.text
|
175
|
-
status_code = response.status_code
|
176
|
-
except Exception as ex:
|
177
|
-
if not self._is_stats_exporter():
|
178
|
-
logger.warning('Error while reading response body %s.', ex)
|
179
|
-
if self._check_stats_collection():
|
180
|
-
_update_requests_map('exception', value=ex.__class__.__name__)
|
181
|
-
return TransportStatusCode.DROP
|
182
|
-
|
183
|
-
if self._is_stats_exporter() and \
|
184
|
-
not state.get_statsbeat_shutdown() and \
|
185
|
-
not state.get_statsbeat_initial_success():
|
186
|
-
# If statsbeat exporter, record initialization as success if
|
187
|
-
# appropriate status code is returned
|
188
|
-
if _reached_ingestion_status_code(status_code):
|
189
|
-
state.set_statsbeat_initial_success(True)
|
190
|
-
elif _statsbeat_failure_reached_threshold():
|
191
|
-
# If ingestion threshold during statsbeat initialization is
|
192
|
-
# reached, return back code to shut it down
|
193
|
-
return TransportStatusCode.STATSBEAT_SHUTDOWN
|
194
|
-
|
195
|
-
if status_code == 200: # Success
|
196
|
-
self._consecutive_redirects = 0
|
197
|
-
if self._check_stats_collection():
|
198
|
-
_update_requests_map('success')
|
199
|
-
return TransportStatusCode.SUCCESS
|
200
|
-
elif status_code == 206: # Partial Content
|
201
|
-
data = None
|
202
|
-
try:
|
203
|
-
data = json.loads(text)
|
204
|
-
except Exception as ex:
|
205
|
-
if not self._is_stats_exporter():
|
206
|
-
logger.warning('Error while reading response body %s for partial content.', ex) # noqa: E501
|
207
|
-
if self._check_stats_collection():
|
208
|
-
_update_requests_map('exception', value=ex.__class__.__name__) # noqa: E501
|
209
|
-
return TransportStatusCode.DROP
|
210
|
-
if data:
|
211
|
-
try:
|
212
|
-
resend_envelopes = []
|
213
|
-
for error in data['errors']:
|
214
|
-
if _status_code_is_retryable(error['statusCode']):
|
215
|
-
resend_envelopes.append(envelopes[error['index']])
|
216
|
-
else:
|
217
|
-
if not self._is_stats_exporter():
|
218
|
-
logger.error(
|
219
|
-
'Data drop %s: %s %s.',
|
220
|
-
error['statusCode'],
|
221
|
-
error['message'],
|
222
|
-
envelopes[error['index']],
|
223
|
-
)
|
224
|
-
if self.storage and resend_envelopes:
|
225
|
-
self.storage.put(resend_envelopes)
|
226
|
-
except Exception as ex:
|
227
|
-
if not self._is_stats_exporter():
|
228
|
-
logger.error(
|
229
|
-
'Error while processing %s: %s %s.',
|
230
|
-
status_code,
|
231
|
-
text,
|
232
|
-
ex,
|
233
|
-
)
|
234
|
-
if self._check_stats_collection():
|
235
|
-
_update_requests_map('exception', value=ex.__class__.__name__) # noqa: E501
|
236
|
-
return TransportStatusCode.DROP
|
237
|
-
# cannot parse response body, fallback to retry
|
238
|
-
elif _status_code_is_redirect(status_code): # Redirect
|
239
|
-
# for statsbeat, these are not tracked as success nor failures
|
240
|
-
self._consecutive_redirects += 1
|
241
|
-
if self._consecutive_redirects < _MAX_CONSECUTIVE_REDIRECTS:
|
242
|
-
if response.headers:
|
243
|
-
location = response.headers.get("location")
|
244
|
-
if location:
|
245
|
-
url = urlparse(location)
|
246
|
-
if url.scheme and url.netloc:
|
247
|
-
# Change the host to the new redirected host
|
248
|
-
self.options.endpoint = "{}://{}".format(url.scheme, url.netloc) # noqa: E501
|
249
|
-
# Attempt to export again
|
250
|
-
return self._transmit(envelopes)
|
251
|
-
if not self._is_stats_exporter():
|
252
|
-
logger.error(
|
253
|
-
"Error parsing redirect information."
|
254
|
-
)
|
255
|
-
else:
|
256
|
-
if not self._is_stats_exporter():
|
257
|
-
logger.error(
|
258
|
-
"Error sending telemetry because of circular redirects." # noqa: E501
|
259
|
-
" Please check the integrity of your connection string." # noqa: E501
|
260
|
-
)
|
261
|
-
# If redirect but did not return, exception occured
|
262
|
-
if self._check_stats_collection():
|
263
|
-
_update_requests_map('exception', value="Circular Redirect")
|
264
|
-
return TransportStatusCode.DROP
|
265
|
-
elif _status_code_is_throttle(status_code): # Throttle
|
266
|
-
if self._check_stats_collection():
|
267
|
-
# 402: Monthly Quota Exceeded (new SDK)
|
268
|
-
# 439: Monthly Quota Exceeded (old SDK) <- Currently OC SDK
|
269
|
-
_update_requests_map('throttle', value=status_code)
|
270
|
-
if not self._is_stats_exporter():
|
271
|
-
logger.warning(
|
272
|
-
'Telemetry was throttled %s: %s.',
|
273
|
-
status_code,
|
274
|
-
text,
|
275
|
-
)
|
276
|
-
return TransportStatusCode.DROP
|
277
|
-
elif _status_code_is_retryable(status_code): # Retry
|
278
|
-
if not self._is_stats_exporter():
|
279
|
-
if status_code == 401: # Authentication error
|
280
|
-
logger.warning(
|
281
|
-
'Authentication error %s: %s. Retrying.',
|
282
|
-
status_code,
|
283
|
-
text,
|
284
|
-
)
|
285
|
-
elif status_code == 403:
|
286
|
-
# Forbidden error
|
287
|
-
# Can occur when v2 endpoint is used while AI resource is configured # noqa: E501
|
288
|
-
# with disableLocalAuth
|
289
|
-
logger.warning(
|
290
|
-
'Forbidden error %s: %s. Retrying.',
|
291
|
-
status_code,
|
292
|
-
text,
|
293
|
-
)
|
294
|
-
else:
|
295
|
-
logger.warning(
|
296
|
-
'Transient server side error %s: %s. Retrying.',
|
297
|
-
status_code,
|
298
|
-
text,
|
299
|
-
)
|
300
|
-
if self._check_stats_collection():
|
301
|
-
_update_requests_map('retry', value=status_code)
|
302
|
-
return TransportStatusCode.RETRY
|
303
|
-
else:
|
304
|
-
# 400 and 404 will be tracked as failure count
|
305
|
-
# 400 - Invalid - The server cannot or will not process the request due to the invalid telemetry (invalid data, iKey) # noqa: E501
|
306
|
-
# 404 - Ingestion is allowed only from stamp specific endpoint - must update connection string # noqa: E501
|
307
|
-
if self._check_stats_collection():
|
308
|
-
_update_requests_map('failure', value=status_code)
|
309
|
-
# Other, server side error (non-retryable)
|
310
|
-
if not self._is_stats_exporter():
|
311
|
-
logger.error(
|
312
|
-
'Non-retryable server side error %s: %s.',
|
313
|
-
status_code,
|
314
|
-
text,
|
315
|
-
)
|
316
|
-
return TransportStatusCode.DROP
|
317
|
-
|
318
|
-
|
319
|
-
def _status_code_is_redirect(status_code):
|
320
|
-
return status_code in REDIRECT_STATUS_CODES
|
321
|
-
|
322
|
-
|
323
|
-
def _status_code_is_throttle(status_code):
|
324
|
-
return status_code in THROTTLE_STATUS_CODES
|
325
|
-
|
326
|
-
|
327
|
-
def _status_code_is_retryable(status_code):
|
328
|
-
return status_code in RETRYABLE_STATUS_CODES
|
329
|
-
|
330
|
-
|
331
|
-
def _reached_ingestion_status_code(status_code):
|
332
|
-
return status_code in _REACHED_INGESTION_STATUS_CODES
|
333
|
-
|
334
|
-
|
335
|
-
def _statsbeat_failure_reached_threshold():
|
336
|
-
# increment failure counter for sending statsbeat if in initialization
|
337
|
-
state.increment_statsbeat_initial_failure_count()
|
338
|
-
return state.get_statsbeat_initial_failure_count() >= 3
|
339
|
-
|
340
|
-
|
341
|
-
def _update_requests_map(type_name, value=None):
|
342
|
-
# value is either None, duration, status_code or exc_name
|
343
|
-
with _requests_lock:
|
344
|
-
if type_name == "success" or type_name == "count": # success, count
|
345
|
-
_requests_map[type_name] = _requests_map.get(type_name, 0) + 1
|
346
|
-
elif type_name == "duration": # value will be duration
|
347
|
-
_requests_map[type_name] = _requests_map.get(type_name, 0) + value # noqa: E501
|
348
|
-
else: # exception, failure, retry, throttle
|
349
|
-
# value will be a key (status_code/exc_name)
|
350
|
-
prev = 0
|
351
|
-
if _requests_map.get(type_name):
|
352
|
-
prev = _requests_map.get(type_name).get(value, 0)
|
353
|
-
else:
|
354
|
-
_requests_map[type_name] = {}
|
355
|
-
_requests_map[type_name][value] = prev + 1
|
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 json
|
16
|
+
import logging
|
17
|
+
import threading
|
18
|
+
import time
|
19
|
+
|
20
|
+
import requests
|
21
|
+
from azure.core.exceptions import ClientAuthenticationError
|
22
|
+
from azure.identity._exceptions import CredentialUnavailableError
|
23
|
+
|
24
|
+
from opencensus.ext.azure.statsbeat import state
|
25
|
+
|
26
|
+
try:
|
27
|
+
from urllib.parse import urlparse
|
28
|
+
except ImportError:
|
29
|
+
from urlparse import urlparse
|
30
|
+
|
31
|
+
|
32
|
+
logger = logging.getLogger(__name__)
|
33
|
+
|
34
|
+
|
35
|
+
_MAX_CONSECUTIVE_REDIRECTS = 10
|
36
|
+
_MONITOR_OAUTH_SCOPE = "https://monitor.azure.com//.default"
|
37
|
+
_requests_lock = threading.Lock()
|
38
|
+
_requests_map = {}
|
39
|
+
_REACHED_INGESTION_STATUS_CODES = (200, 206, 402, 408, 429, 439, 500)
|
40
|
+
REDIRECT_STATUS_CODES = (307, 308)
|
41
|
+
RETRYABLE_STATUS_CODES = (
|
42
|
+
401, # Unauthorized
|
43
|
+
403, # Forbidden
|
44
|
+
408, # Request Timeout
|
45
|
+
429, # Too Many Requests - retry after
|
46
|
+
500, # Internal server error
|
47
|
+
502, # Bad Gateway
|
48
|
+
503, # Service unavailable
|
49
|
+
504, # Gateway timeout
|
50
|
+
)
|
51
|
+
THROTTLE_STATUS_CODES = (
|
52
|
+
402, # Quota, too Many Requests over extended time
|
53
|
+
439, # Quota, too Many Requests over extended time (legacy)
|
54
|
+
)
|
55
|
+
|
56
|
+
|
57
|
+
class TransportStatusCode:
|
58
|
+
SUCCESS = 0
|
59
|
+
RETRY = 1
|
60
|
+
DROP = 2
|
61
|
+
STATSBEAT_SHUTDOWN = 3
|
62
|
+
|
63
|
+
|
64
|
+
class TransportMixin(object):
|
65
|
+
|
66
|
+
# check to see whether its the case of stats collection
|
67
|
+
def _check_stats_collection(self):
|
68
|
+
return state.is_statsbeat_enabled() and \
|
69
|
+
not state.get_statsbeat_shutdown() and \
|
70
|
+
not self._is_stats_exporter()
|
71
|
+
|
72
|
+
# check if the current exporter is a statsbeat metric exporter
|
73
|
+
# only applies to metrics exporter
|
74
|
+
def _is_stats_exporter(self):
|
75
|
+
return hasattr(self, '_is_stats') and self._is_stats
|
76
|
+
|
77
|
+
def _transmit_from_storage(self):
|
78
|
+
if self.storage:
|
79
|
+
for blob in self.storage.gets():
|
80
|
+
# give a few more seconds for blob lease operation
|
81
|
+
# to reduce the chance of race (for perf consideration)
|
82
|
+
if blob.lease(self.options.timeout + 5):
|
83
|
+
envelopes = blob.get()
|
84
|
+
result = self._transmit(envelopes)
|
85
|
+
if result is TransportStatusCode.RETRY:
|
86
|
+
blob.lease(result)
|
87
|
+
else:
|
88
|
+
blob.delete()
|
89
|
+
|
90
|
+
def _transmit(self, envelopes):
|
91
|
+
"""
|
92
|
+
Transmit the data envelopes to the ingestion service.
|
93
|
+
Return a negative value for partial success or non-retryable failure.
|
94
|
+
Return 0 if all envelopes have been successfully ingested.
|
95
|
+
Return the next retry time in seconds for retryable failure.
|
96
|
+
This function should never throw exception.
|
97
|
+
"""
|
98
|
+
if not envelopes:
|
99
|
+
return 0
|
100
|
+
status = None
|
101
|
+
exception = None
|
102
|
+
try:
|
103
|
+
start_time = time.time()
|
104
|
+
headers = {
|
105
|
+
'Accept': 'application/json',
|
106
|
+
'Content-Type': 'application/json; charset=utf-8',
|
107
|
+
}
|
108
|
+
endpoint = self.options.endpoint
|
109
|
+
if self.options.credential:
|
110
|
+
token = self.options.credential.get_token(_MONITOR_OAUTH_SCOPE)
|
111
|
+
headers["Authorization"] = "Bearer {}".format(token.token)
|
112
|
+
endpoint += '/v2.1/track'
|
113
|
+
proxies = json.loads(self.options.proxies)
|
114
|
+
allow_redirects = len(proxies) != 0
|
115
|
+
|
116
|
+
response = requests.post(
|
117
|
+
url=endpoint,
|
118
|
+
data=json.dumps(envelopes, default=str),
|
119
|
+
headers=headers,
|
120
|
+
timeout=self.options.timeout,
|
121
|
+
proxies=proxies,
|
122
|
+
allow_redirects=allow_redirects,
|
123
|
+
)
|
124
|
+
except requests.Timeout as ex:
|
125
|
+
if not self._is_stats_exporter():
|
126
|
+
logger.warning(
|
127
|
+
'Request time out. Ingestion may be backed up. Retrying.')
|
128
|
+
status = TransportStatusCode.RETRY
|
129
|
+
exception = ex
|
130
|
+
except requests.RequestException as ex:
|
131
|
+
if not self._is_stats_exporter():
|
132
|
+
logger.warning(
|
133
|
+
'Retrying due to transient client side error %s.', ex)
|
134
|
+
status = TransportStatusCode.RETRY
|
135
|
+
exception = ex
|
136
|
+
except CredentialUnavailableError as ex:
|
137
|
+
if not self._is_stats_exporter():
|
138
|
+
logger.warning('Credential error. %s. Dropping telemetry.', ex)
|
139
|
+
status = TransportStatusCode.DROP
|
140
|
+
exception = ex
|
141
|
+
except ClientAuthenticationError as ex:
|
142
|
+
if not self._is_stats_exporter():
|
143
|
+
logger.warning('Authentication error %s', ex)
|
144
|
+
status = TransportStatusCode.RETRY
|
145
|
+
exception = ex
|
146
|
+
except Exception as ex:
|
147
|
+
if not self._is_stats_exporter():
|
148
|
+
logger.warning(
|
149
|
+
'Error when sending request %s. Dropping telemetry.', ex)
|
150
|
+
status = TransportStatusCode.DROP
|
151
|
+
exception = ex
|
152
|
+
finally:
|
153
|
+
if self._check_stats_collection():
|
154
|
+
_update_requests_map('count')
|
155
|
+
end_time = time.time()
|
156
|
+
if self._check_stats_collection():
|
157
|
+
_update_requests_map('duration', value=end_time-start_time)
|
158
|
+
|
159
|
+
if status is not None and exception is not None:
|
160
|
+
if self._check_stats_collection():
|
161
|
+
_update_requests_map('exception', value=exception.__class__.__name__) # noqa: E501
|
162
|
+
return status
|
163
|
+
if self._is_stats_exporter() and \
|
164
|
+
not state.get_statsbeat_shutdown() and \
|
165
|
+
not state.get_statsbeat_initial_success():
|
166
|
+
# If ingestion threshold during statsbeat initialization is
|
167
|
+
# reached, return back code to shut it down
|
168
|
+
if _statsbeat_failure_reached_threshold():
|
169
|
+
return TransportStatusCode.STATSBEAT_SHUTDOWN
|
170
|
+
|
171
|
+
text = 'N/A'
|
172
|
+
status_code = 0
|
173
|
+
try:
|
174
|
+
text = response.text
|
175
|
+
status_code = response.status_code
|
176
|
+
except Exception as ex:
|
177
|
+
if not self._is_stats_exporter():
|
178
|
+
logger.warning('Error while reading response body %s.', ex)
|
179
|
+
if self._check_stats_collection():
|
180
|
+
_update_requests_map('exception', value=ex.__class__.__name__)
|
181
|
+
return TransportStatusCode.DROP
|
182
|
+
|
183
|
+
if self._is_stats_exporter() and \
|
184
|
+
not state.get_statsbeat_shutdown() and \
|
185
|
+
not state.get_statsbeat_initial_success():
|
186
|
+
# If statsbeat exporter, record initialization as success if
|
187
|
+
# appropriate status code is returned
|
188
|
+
if _reached_ingestion_status_code(status_code):
|
189
|
+
state.set_statsbeat_initial_success(True)
|
190
|
+
elif _statsbeat_failure_reached_threshold():
|
191
|
+
# If ingestion threshold during statsbeat initialization is
|
192
|
+
# reached, return back code to shut it down
|
193
|
+
return TransportStatusCode.STATSBEAT_SHUTDOWN
|
194
|
+
|
195
|
+
if status_code == 200: # Success
|
196
|
+
self._consecutive_redirects = 0
|
197
|
+
if self._check_stats_collection():
|
198
|
+
_update_requests_map('success')
|
199
|
+
return TransportStatusCode.SUCCESS
|
200
|
+
elif status_code == 206: # Partial Content
|
201
|
+
data = None
|
202
|
+
try:
|
203
|
+
data = json.loads(text)
|
204
|
+
except Exception as ex:
|
205
|
+
if not self._is_stats_exporter():
|
206
|
+
logger.warning('Error while reading response body %s for partial content.', ex) # noqa: E501
|
207
|
+
if self._check_stats_collection():
|
208
|
+
_update_requests_map('exception', value=ex.__class__.__name__) # noqa: E501
|
209
|
+
return TransportStatusCode.DROP
|
210
|
+
if data:
|
211
|
+
try:
|
212
|
+
resend_envelopes = []
|
213
|
+
for error in data['errors']:
|
214
|
+
if _status_code_is_retryable(error['statusCode']):
|
215
|
+
resend_envelopes.append(envelopes[error['index']])
|
216
|
+
else:
|
217
|
+
if not self._is_stats_exporter():
|
218
|
+
logger.error(
|
219
|
+
'Data drop %s: %s %s.',
|
220
|
+
error['statusCode'],
|
221
|
+
error['message'],
|
222
|
+
envelopes[error['index']],
|
223
|
+
)
|
224
|
+
if self.storage and resend_envelopes:
|
225
|
+
self.storage.put(resend_envelopes)
|
226
|
+
except Exception as ex:
|
227
|
+
if not self._is_stats_exporter():
|
228
|
+
logger.error(
|
229
|
+
'Error while processing %s: %s %s.',
|
230
|
+
status_code,
|
231
|
+
text,
|
232
|
+
ex,
|
233
|
+
)
|
234
|
+
if self._check_stats_collection():
|
235
|
+
_update_requests_map('exception', value=ex.__class__.__name__) # noqa: E501
|
236
|
+
return TransportStatusCode.DROP
|
237
|
+
# cannot parse response body, fallback to retry
|
238
|
+
elif _status_code_is_redirect(status_code): # Redirect
|
239
|
+
# for statsbeat, these are not tracked as success nor failures
|
240
|
+
self._consecutive_redirects += 1
|
241
|
+
if self._consecutive_redirects < _MAX_CONSECUTIVE_REDIRECTS:
|
242
|
+
if response.headers:
|
243
|
+
location = response.headers.get("location")
|
244
|
+
if location:
|
245
|
+
url = urlparse(location)
|
246
|
+
if url.scheme and url.netloc:
|
247
|
+
# Change the host to the new redirected host
|
248
|
+
self.options.endpoint = "{}://{}".format(url.scheme, url.netloc) # noqa: E501
|
249
|
+
# Attempt to export again
|
250
|
+
return self._transmit(envelopes)
|
251
|
+
if not self._is_stats_exporter():
|
252
|
+
logger.error(
|
253
|
+
"Error parsing redirect information."
|
254
|
+
)
|
255
|
+
else:
|
256
|
+
if not self._is_stats_exporter():
|
257
|
+
logger.error(
|
258
|
+
"Error sending telemetry because of circular redirects." # noqa: E501
|
259
|
+
" Please check the integrity of your connection string." # noqa: E501
|
260
|
+
)
|
261
|
+
# If redirect but did not return, exception occured
|
262
|
+
if self._check_stats_collection():
|
263
|
+
_update_requests_map('exception', value="Circular Redirect")
|
264
|
+
return TransportStatusCode.DROP
|
265
|
+
elif _status_code_is_throttle(status_code): # Throttle
|
266
|
+
if self._check_stats_collection():
|
267
|
+
# 402: Monthly Quota Exceeded (new SDK)
|
268
|
+
# 439: Monthly Quota Exceeded (old SDK) <- Currently OC SDK
|
269
|
+
_update_requests_map('throttle', value=status_code)
|
270
|
+
if not self._is_stats_exporter():
|
271
|
+
logger.warning(
|
272
|
+
'Telemetry was throttled %s: %s.',
|
273
|
+
status_code,
|
274
|
+
text,
|
275
|
+
)
|
276
|
+
return TransportStatusCode.DROP
|
277
|
+
elif _status_code_is_retryable(status_code): # Retry
|
278
|
+
if not self._is_stats_exporter():
|
279
|
+
if status_code == 401: # Authentication error
|
280
|
+
logger.warning(
|
281
|
+
'Authentication error %s: %s. Retrying.',
|
282
|
+
status_code,
|
283
|
+
text,
|
284
|
+
)
|
285
|
+
elif status_code == 403:
|
286
|
+
# Forbidden error
|
287
|
+
# Can occur when v2 endpoint is used while AI resource is configured # noqa: E501
|
288
|
+
# with disableLocalAuth
|
289
|
+
logger.warning(
|
290
|
+
'Forbidden error %s: %s. Retrying.',
|
291
|
+
status_code,
|
292
|
+
text,
|
293
|
+
)
|
294
|
+
else:
|
295
|
+
logger.warning(
|
296
|
+
'Transient server side error %s: %s. Retrying.',
|
297
|
+
status_code,
|
298
|
+
text,
|
299
|
+
)
|
300
|
+
if self._check_stats_collection():
|
301
|
+
_update_requests_map('retry', value=status_code)
|
302
|
+
return TransportStatusCode.RETRY
|
303
|
+
else:
|
304
|
+
# 400 and 404 will be tracked as failure count
|
305
|
+
# 400 - Invalid - The server cannot or will not process the request due to the invalid telemetry (invalid data, iKey) # noqa: E501
|
306
|
+
# 404 - Ingestion is allowed only from stamp specific endpoint - must update connection string # noqa: E501
|
307
|
+
if self._check_stats_collection():
|
308
|
+
_update_requests_map('failure', value=status_code)
|
309
|
+
# Other, server side error (non-retryable)
|
310
|
+
if not self._is_stats_exporter():
|
311
|
+
logger.error(
|
312
|
+
'Non-retryable server side error %s: %s.',
|
313
|
+
status_code,
|
314
|
+
text,
|
315
|
+
)
|
316
|
+
return TransportStatusCode.DROP
|
317
|
+
|
318
|
+
|
319
|
+
def _status_code_is_redirect(status_code):
|
320
|
+
return status_code in REDIRECT_STATUS_CODES
|
321
|
+
|
322
|
+
|
323
|
+
def _status_code_is_throttle(status_code):
|
324
|
+
return status_code in THROTTLE_STATUS_CODES
|
325
|
+
|
326
|
+
|
327
|
+
def _status_code_is_retryable(status_code):
|
328
|
+
return status_code in RETRYABLE_STATUS_CODES
|
329
|
+
|
330
|
+
|
331
|
+
def _reached_ingestion_status_code(status_code):
|
332
|
+
return status_code in _REACHED_INGESTION_STATUS_CODES
|
333
|
+
|
334
|
+
|
335
|
+
def _statsbeat_failure_reached_threshold():
|
336
|
+
# increment failure counter for sending statsbeat if in initialization
|
337
|
+
state.increment_statsbeat_initial_failure_count()
|
338
|
+
return state.get_statsbeat_initial_failure_count() >= 3
|
339
|
+
|
340
|
+
|
341
|
+
def _update_requests_map(type_name, value=None):
|
342
|
+
# value is either None, duration, status_code or exc_name
|
343
|
+
with _requests_lock:
|
344
|
+
if type_name == "success" or type_name == "count": # success, count
|
345
|
+
_requests_map[type_name] = _requests_map.get(type_name, 0) + 1
|
346
|
+
elif type_name == "duration": # value will be duration
|
347
|
+
_requests_map[type_name] = _requests_map.get(type_name, 0) + value # noqa: E501
|
348
|
+
else: # exception, failure, retry, throttle
|
349
|
+
# value will be a key (status_code/exc_name)
|
350
|
+
prev = 0
|
351
|
+
if _requests_map.get(type_name):
|
352
|
+
prev = _requests_map.get(type_name).get(value, 0)
|
353
|
+
else:
|
354
|
+
_requests_map[type_name] = {}
|
355
|
+
_requests_map[type_name][value] = prev + 1
|