Upload folder using huggingface_hub
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +200 -0
- .hfignore +3 -0
- .venv/.gitignore +2 -0
- .venv/bin/Activate.ps1 +248 -0
- .venv/bin/activate +76 -0
- .venv/bin/activate.csh +27 -0
- .venv/bin/activate.fish +69 -0
- .venv/bin/datasets-cli +7 -0
- .venv/bin/f2py +7 -0
- .venv/bin/get_gprof +75 -0
- .venv/bin/get_objgraph +54 -0
- .venv/bin/hf +7 -0
- .venv/bin/httpx +7 -0
- .venv/bin/jsonschema +7 -0
- .venv/bin/normalizer +7 -0
- .venv/bin/numpy-config +7 -0
- .venv/bin/pip +7 -0
- .venv/bin/pip3 +7 -0
- .venv/bin/pip3.13 +7 -0
- .venv/bin/python +0 -0
- .venv/bin/python3 +0 -0
- .venv/bin/python3.13 +0 -0
- .venv/bin/tiny-agents +7 -0
- .venv/bin/tqdm +7 -0
- .venv/bin/undill +22 -0
- .venv/lib/python3.13/site-packages/__pycache__/six.cpython-313.pyc +0 -0
- .venv/lib/python3.13/site-packages/__pycache__/typing_extensions.cpython-313.pyc +3 -0
- .venv/lib/python3.13/site-packages/_multiprocess/__init__.py +8 -0
- .venv/lib/python3.13/site-packages/_multiprocess/__pycache__/__init__.cpython-313.pyc +0 -0
- .venv/lib/python3.13/site-packages/_yaml/__init__.py +33 -0
- .venv/lib/python3.13/site-packages/_yaml/__pycache__/__init__.cpython-313.pyc +0 -0
- .venv/lib/python3.13/site-packages/aiohappyeyeballs-2.6.1.dist-info/INSTALLER +1 -0
- .venv/lib/python3.13/site-packages/aiohappyeyeballs-2.6.1.dist-info/LICENSE +279 -0
- .venv/lib/python3.13/site-packages/aiohappyeyeballs-2.6.1.dist-info/METADATA +123 -0
- .venv/lib/python3.13/site-packages/aiohappyeyeballs-2.6.1.dist-info/RECORD +16 -0
- .venv/lib/python3.13/site-packages/aiohappyeyeballs-2.6.1.dist-info/WHEEL +4 -0
- .venv/lib/python3.13/site-packages/aiohappyeyeballs/__init__.py +14 -0
- .venv/lib/python3.13/site-packages/aiohappyeyeballs/__pycache__/__init__.cpython-313.pyc +0 -0
- .venv/lib/python3.13/site-packages/aiohappyeyeballs/__pycache__/_staggered.cpython-313.pyc +0 -0
- .venv/lib/python3.13/site-packages/aiohappyeyeballs/__pycache__/impl.cpython-313.pyc +0 -0
- .venv/lib/python3.13/site-packages/aiohappyeyeballs/__pycache__/types.cpython-313.pyc +0 -0
- .venv/lib/python3.13/site-packages/aiohappyeyeballs/__pycache__/utils.cpython-313.pyc +0 -0
- .venv/lib/python3.13/site-packages/aiohappyeyeballs/_staggered.py +207 -0
- .venv/lib/python3.13/site-packages/aiohappyeyeballs/impl.py +259 -0
- .venv/lib/python3.13/site-packages/aiohappyeyeballs/py.typed +0 -0
- .venv/lib/python3.13/site-packages/aiohappyeyeballs/types.py +17 -0
- .venv/lib/python3.13/site-packages/aiohappyeyeballs/utils.py +97 -0
- .venv/lib/python3.13/site-packages/aiohttp-3.13.3.dist-info/INSTALLER +1 -0
- .venv/lib/python3.13/site-packages/aiohttp-3.13.3.dist-info/METADATA +262 -0
- .venv/lib/python3.13/site-packages/aiohttp-3.13.3.dist-info/RECORD +138 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,203 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
.venv/lib/python3.13/site-packages/__pycache__/typing_extensions.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
.venv/lib/python3.13/site-packages/aiohttp/_http_parser.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
.venv/lib/python3.13/site-packages/aiohttp/_http_writer.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
.venv/lib/python3.13/site-packages/aiohttp/_websocket/mask.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
.venv/lib/python3.13/site-packages/aiohttp/_websocket/reader_c.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
.venv/lib/python3.13/site-packages/anyio/_backends/__pycache__/_asyncio.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 42 |
+
.venv/lib/python3.13/site-packages/attr/__pycache__/_make.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 43 |
+
.venv/lib/python3.13/site-packages/charset_normalizer/md__mypyc.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 44 |
+
.venv/lib/python3.13/site-packages/click/__pycache__/core.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 45 |
+
.venv/lib/python3.13/site-packages/datasets/__pycache__/arrow_dataset.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
.venv/lib/python3.13/site-packages/datasets/__pycache__/builder.bak.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 47 |
+
.venv/lib/python3.13/site-packages/datasets/__pycache__/builder.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 48 |
+
.venv/lib/python3.13/site-packages/datasets/__pycache__/dataset_dict.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 49 |
+
.venv/lib/python3.13/site-packages/datasets/__pycache__/iterable_dataset.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 50 |
+
.venv/lib/python3.13/site-packages/datasets/__pycache__/load.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 51 |
+
.venv/lib/python3.13/site-packages/datasets/__pycache__/table.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 52 |
+
.venv/lib/python3.13/site-packages/datasets/features/__pycache__/features.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 53 |
+
.venv/lib/python3.13/site-packages/dill/__pycache__/_dill.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 54 |
+
.venv/lib/python3.13/site-packages/frozenlist/_frozenlist.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 55 |
+
.venv/lib/python3.13/site-packages/hf_xet/hf_xet.abi3.so filter=lfs diff=lfs merge=lfs -text
|
| 56 |
+
.venv/lib/python3.13/site-packages/huggingface_hub/__pycache__/hf_api.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 57 |
+
.venv/lib/python3.13/site-packages/huggingface_hub/inference/__pycache__/_client.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 58 |
+
.venv/lib/python3.13/site-packages/huggingface_hub/inference/_generated/__pycache__/_async_client.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 59 |
+
.venv/lib/python3.13/site-packages/idna/__pycache__/idnadata.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 60 |
+
.venv/lib/python3.13/site-packages/idna/__pycache__/uts46data.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 61 |
+
.venv/lib/python3.13/site-packages/jsonschema/tests/__pycache__/test_validators.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 62 |
+
.venv/lib/python3.13/site-packages/multidict/_multidict.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 63 |
+
.venv/lib/python3.13/site-packages/multiprocess/tests/__pycache__/__init__.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 64 |
+
.venv/lib/python3.13/site-packages/numpy/_core/__pycache__/_add_newdocs.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 65 |
+
.venv/lib/python3.13/site-packages/numpy/_core/__pycache__/fromnumeric.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 66 |
+
.venv/lib/python3.13/site-packages/numpy/_core/_multiarray_tests.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 67 |
+
.venv/lib/python3.13/site-packages/numpy/_core/_multiarray_umath.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 68 |
+
.venv/lib/python3.13/site-packages/numpy/_core/_simd.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 69 |
+
.venv/lib/python3.13/site-packages/numpy/_core/tests/__pycache__/test_datetime.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 70 |
+
.venv/lib/python3.13/site-packages/numpy/_core/tests/__pycache__/test_dtype.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 71 |
+
.venv/lib/python3.13/site-packages/numpy/_core/tests/__pycache__/test_indexing.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 72 |
+
.venv/lib/python3.13/site-packages/numpy/_core/tests/__pycache__/test_multiarray.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 73 |
+
.venv/lib/python3.13/site-packages/numpy/_core/tests/__pycache__/test_nditer.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 74 |
+
.venv/lib/python3.13/site-packages/numpy/_core/tests/__pycache__/test_numeric.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 75 |
+
.venv/lib/python3.13/site-packages/numpy/_core/tests/__pycache__/test_regression.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 76 |
+
.venv/lib/python3.13/site-packages/numpy/_core/tests/__pycache__/test_ufunc.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 77 |
+
.venv/lib/python3.13/site-packages/numpy/_core/tests/__pycache__/test_umath.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 78 |
+
.venv/lib/python3.13/site-packages/numpy/f2py/__pycache__/crackfortran.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 79 |
+
.venv/lib/python3.13/site-packages/numpy/fft/_pocketfft_umath.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 80 |
+
.venv/lib/python3.13/site-packages/numpy/lib/__pycache__/_function_base_impl.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 81 |
+
.venv/lib/python3.13/site-packages/numpy/lib/tests/__pycache__/test_function_base.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 82 |
+
.venv/lib/python3.13/site-packages/numpy/lib/tests/__pycache__/test_io.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 83 |
+
.venv/lib/python3.13/site-packages/numpy/linalg/__pycache__/_linalg.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 84 |
+
.venv/lib/python3.13/site-packages/numpy/linalg/_umath_linalg.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 85 |
+
.venv/lib/python3.13/site-packages/numpy/linalg/tests/__pycache__/test_linalg.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 86 |
+
.venv/lib/python3.13/site-packages/numpy/ma/__pycache__/core.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 87 |
+
.venv/lib/python3.13/site-packages/numpy/ma/tests/__pycache__/test_core.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 88 |
+
.venv/lib/python3.13/site-packages/numpy/ma/tests/__pycache__/test_extras.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 89 |
+
.venv/lib/python3.13/site-packages/numpy/random/_bounded_integers.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 90 |
+
.venv/lib/python3.13/site-packages/numpy/random/_common.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 91 |
+
.venv/lib/python3.13/site-packages/numpy/random/_generator.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 92 |
+
.venv/lib/python3.13/site-packages/numpy/random/_mt19937.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 93 |
+
.venv/lib/python3.13/site-packages/numpy/random/_pcg64.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 94 |
+
.venv/lib/python3.13/site-packages/numpy/random/_philox.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 95 |
+
.venv/lib/python3.13/site-packages/numpy/random/bit_generator.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 96 |
+
.venv/lib/python3.13/site-packages/numpy/random/mtrand.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 97 |
+
.venv/lib/python3.13/site-packages/numpy/random/tests/__pycache__/test_generator_mt19937.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 98 |
+
.venv/lib/python3.13/site-packages/numpy/random/tests/__pycache__/test_random.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 99 |
+
.venv/lib/python3.13/site-packages/numpy/random/tests/__pycache__/test_randomstate.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 100 |
+
.venv/lib/python3.13/site-packages/numpy/testing/_private/__pycache__/utils.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 101 |
+
.venv/lib/python3.13/site-packages/numpy/testing/tests/__pycache__/test_utils.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 102 |
+
.venv/lib/python3.13/site-packages/numpy.libs/libgfortran-040039e1-0352e75f.so.5.0.0 filter=lfs diff=lfs merge=lfs -text
|
| 103 |
+
.venv/lib/python3.13/site-packages/numpy.libs/libquadmath-96973f99-934c22de.so.0.0.0 filter=lfs diff=lfs merge=lfs -text
|
| 104 |
+
.venv/lib/python3.13/site-packages/numpy.libs/libscipy_openblas64_-fdde5778.so filter=lfs diff=lfs merge=lfs -text
|
| 105 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/algos.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 106 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/arrays.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 107 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/groupby.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 108 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/hashing.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 109 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/hashtable.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 110 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/index.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 111 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/internals.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 112 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/interval.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 113 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/join.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 114 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/lib.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 115 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/missing.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 116 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/ops.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 117 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/parsers.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 118 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/reshape.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 119 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/sas.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 120 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/sparse.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 121 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/testing.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 122 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/tslib.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 123 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/tslibs/conversion.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 124 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/tslibs/dtypes.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 125 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/tslibs/fields.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 126 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/tslibs/nattype.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 127 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/tslibs/np_datetime.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 128 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/tslibs/offsets.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 129 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/tslibs/parsing.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 130 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/tslibs/period.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 131 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/tslibs/strptime.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 132 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/tslibs/timedeltas.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 133 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/tslibs/timestamps.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 134 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/tslibs/timezones.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 135 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/tslibs/tzconversion.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 136 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/tslibs/vectorized.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 137 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/window/aggregations.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 138 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/window/indexers.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 139 |
+
.venv/lib/python3.13/site-packages/pandas/_libs/writers.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 140 |
+
.venv/lib/python3.13/site-packages/pandas/core/__pycache__/frame.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 141 |
+
.venv/lib/python3.13/site-packages/pandas/core/__pycache__/generic.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 142 |
+
.venv/lib/python3.13/site-packages/pandas/core/__pycache__/indexing.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 143 |
+
.venv/lib/python3.13/site-packages/pandas/core/__pycache__/series.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 144 |
+
.venv/lib/python3.13/site-packages/pandas/core/arrays/__pycache__/categorical.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 145 |
+
.venv/lib/python3.13/site-packages/pandas/core/arrays/arrow/__pycache__/array.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 146 |
+
.venv/lib/python3.13/site-packages/pandas/core/groupby/__pycache__/groupby.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 147 |
+
.venv/lib/python3.13/site-packages/pandas/core/indexes/__pycache__/base.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 148 |
+
.venv/lib/python3.13/site-packages/pandas/core/indexes/__pycache__/multi.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 149 |
+
.venv/lib/python3.13/site-packages/pandas/core/reshape/__pycache__/merge.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 150 |
+
.venv/lib/python3.13/site-packages/pandas/core/strings/__pycache__/accessor.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 151 |
+
.venv/lib/python3.13/site-packages/pandas/io/__pycache__/pytables.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 152 |
+
.venv/lib/python3.13/site-packages/pandas/io/__pycache__/sql.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 153 |
+
.venv/lib/python3.13/site-packages/pandas/io/__pycache__/stata.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 154 |
+
.venv/lib/python3.13/site-packages/pandas/io/formats/__pycache__/style.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 155 |
+
.venv/lib/python3.13/site-packages/pandas/tests/__pycache__/test_algos.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 156 |
+
.venv/lib/python3.13/site-packages/pandas/tests/arithmetic/__pycache__/test_datetime64.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 157 |
+
.venv/lib/python3.13/site-packages/pandas/tests/arithmetic/__pycache__/test_timedelta64.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 158 |
+
.venv/lib/python3.13/site-packages/pandas/tests/computation/__pycache__/test_eval.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 159 |
+
.venv/lib/python3.13/site-packages/pandas/tests/copy_view/__pycache__/test_methods.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 160 |
+
.venv/lib/python3.13/site-packages/pandas/tests/dtypes/__pycache__/test_inference.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 161 |
+
.venv/lib/python3.13/site-packages/pandas/tests/extension/__pycache__/test_arrow.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 162 |
+
.venv/lib/python3.13/site-packages/pandas/tests/frame/__pycache__/test_arithmetic.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 163 |
+
.venv/lib/python3.13/site-packages/pandas/tests/frame/__pycache__/test_constructors.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 164 |
+
.venv/lib/python3.13/site-packages/pandas/tests/frame/__pycache__/test_reductions.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 165 |
+
.venv/lib/python3.13/site-packages/pandas/tests/frame/__pycache__/test_stack_unstack.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 166 |
+
.venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/__pycache__/test_indexing.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 167 |
+
.venv/lib/python3.13/site-packages/pandas/tests/groupby/__pycache__/test_groupby.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 168 |
+
.venv/lib/python3.13/site-packages/pandas/tests/indexing/__pycache__/test_loc.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 169 |
+
.venv/lib/python3.13/site-packages/pandas/tests/io/__pycache__/test_sql.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 170 |
+
.venv/lib/python3.13/site-packages/pandas/tests/io/__pycache__/test_stata.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 171 |
+
.venv/lib/python3.13/site-packages/pandas/tests/io/formats/__pycache__/test_format.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 172 |
+
.venv/lib/python3.13/site-packages/pandas/tests/io/json/__pycache__/test_pandas.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 173 |
+
.venv/lib/python3.13/site-packages/pandas/tests/plotting/__pycache__/test_datetimelike.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 174 |
+
.venv/lib/python3.13/site-packages/pandas/tests/plotting/frame/__pycache__/test_frame.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 175 |
+
.venv/lib/python3.13/site-packages/pandas/tests/resample/__pycache__/test_datetime_index.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 176 |
+
.venv/lib/python3.13/site-packages/pandas/tests/reshape/__pycache__/test_pivot.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 177 |
+
.venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/__pycache__/test_merge.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 178 |
+
.venv/lib/python3.13/site-packages/pandas/tests/series/__pycache__/test_constructors.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 179 |
+
.venv/lib/python3.13/site-packages/pandas/tests/tools/__pycache__/test_to_datetime.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 180 |
+
.venv/lib/python3.13/site-packages/pip/_vendor/distlib/t64-arm.exe filter=lfs diff=lfs merge=lfs -text
|
| 181 |
+
.venv/lib/python3.13/site-packages/pip/_vendor/distlib/t64.exe filter=lfs diff=lfs merge=lfs -text
|
| 182 |
+
.venv/lib/python3.13/site-packages/pip/_vendor/distlib/w64-arm.exe filter=lfs diff=lfs merge=lfs -text
|
| 183 |
+
.venv/lib/python3.13/site-packages/pip/_vendor/distlib/w64.exe filter=lfs diff=lfs merge=lfs -text
|
| 184 |
+
.venv/lib/python3.13/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 185 |
+
.venv/lib/python3.13/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 186 |
+
.venv/lib/python3.13/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 187 |
+
.venv/lib/python3.13/site-packages/pip/_vendor/rich/__pycache__/console.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 188 |
+
.venv/lib/python3.13/site-packages/propcache/_helpers_c.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 189 |
+
.venv/lib/python3.13/site-packages/pyarrow/_acero.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 190 |
+
.venv/lib/python3.13/site-packages/pyarrow/_azurefs.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 191 |
+
.venv/lib/python3.13/site-packages/pyarrow/_compute.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 192 |
+
.venv/lib/python3.13/site-packages/pyarrow/_csv.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 193 |
+
.venv/lib/python3.13/site-packages/pyarrow/_dataset.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 194 |
+
.venv/lib/python3.13/site-packages/pyarrow/_dataset_parquet.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 195 |
+
.venv/lib/python3.13/site-packages/pyarrow/_dataset_parquet_encryption.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 196 |
+
.venv/lib/python3.13/site-packages/pyarrow/_feather.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 197 |
+
.venv/lib/python3.13/site-packages/pyarrow/_flight.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 198 |
+
.venv/lib/python3.13/site-packages/pyarrow/_fs.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 199 |
+
.venv/lib/python3.13/site-packages/pyarrow/_gcsfs.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 200 |
+
.venv/lib/python3.13/site-packages/pyarrow/_hdfs.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 201 |
+
.venv/lib/python3.13/site-packages/pyarrow/_json.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 202 |
+
.venv/lib/python3.13/site-packages/pyarrow/_orc.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 203 |
+
.venv/lib/python3.13/site-packages/pyarrow/_parquet.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 204 |
+
.venv/lib/python3.13/site-packages/pyarrow/_parquet_encryption.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 205 |
+
.venv/lib/python3.13/site-packages/pyarrow/_s3fs.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 206 |
+
.venv/lib/python3.13/site-packages/pyarrow/_substrait.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 207 |
+
.venv/lib/python3.13/site-packages/pyarrow/lib.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 208 |
+
.venv/lib/python3.13/site-packages/pyarrow/libarrow.so.2200 filter=lfs diff=lfs merge=lfs -text
|
| 209 |
+
.venv/lib/python3.13/site-packages/pyarrow/libarrow_acero.so.2200 filter=lfs diff=lfs merge=lfs -text
|
| 210 |
+
.venv/lib/python3.13/site-packages/pyarrow/libarrow_compute.so.2200 filter=lfs diff=lfs merge=lfs -text
|
| 211 |
+
.venv/lib/python3.13/site-packages/pyarrow/libarrow_dataset.so.2200 filter=lfs diff=lfs merge=lfs -text
|
| 212 |
+
.venv/lib/python3.13/site-packages/pyarrow/libarrow_flight.so.2200 filter=lfs diff=lfs merge=lfs -text
|
| 213 |
+
.venv/lib/python3.13/site-packages/pyarrow/libarrow_python.so filter=lfs diff=lfs merge=lfs -text
|
| 214 |
+
.venv/lib/python3.13/site-packages/pyarrow/libarrow_python.so.2200 filter=lfs diff=lfs merge=lfs -text
|
| 215 |
+
.venv/lib/python3.13/site-packages/pyarrow/libarrow_python.so.2200.0.0 filter=lfs diff=lfs merge=lfs -text
|
| 216 |
+
.venv/lib/python3.13/site-packages/pyarrow/libarrow_python_flight.so filter=lfs diff=lfs merge=lfs -text
|
| 217 |
+
.venv/lib/python3.13/site-packages/pyarrow/libarrow_python_flight.so.2200 filter=lfs diff=lfs merge=lfs -text
|
| 218 |
+
.venv/lib/python3.13/site-packages/pyarrow/libarrow_python_flight.so.2200.0.0 filter=lfs diff=lfs merge=lfs -text
|
| 219 |
+
.venv/lib/python3.13/site-packages/pyarrow/libarrow_substrait.so.2200 filter=lfs diff=lfs merge=lfs -text
|
| 220 |
+
.venv/lib/python3.13/site-packages/pyarrow/libparquet.so.2200 filter=lfs diff=lfs merge=lfs -text
|
| 221 |
+
.venv/lib/python3.13/site-packages/pyarrow/tests/__pycache__/test_array.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 222 |
+
.venv/lib/python3.13/site-packages/pyarrow/tests/__pycache__/test_compute.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 223 |
+
.venv/lib/python3.13/site-packages/pyarrow/tests/__pycache__/test_convert_builtin.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 224 |
+
.venv/lib/python3.13/site-packages/pyarrow/tests/__pycache__/test_csv.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 225 |
+
.venv/lib/python3.13/site-packages/pyarrow/tests/__pycache__/test_dataset.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 226 |
+
.venv/lib/python3.13/site-packages/pyarrow/tests/__pycache__/test_extension_type.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 227 |
+
.venv/lib/python3.13/site-packages/pyarrow/tests/__pycache__/test_flight.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 228 |
+
.venv/lib/python3.13/site-packages/pyarrow/tests/__pycache__/test_fs.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 229 |
+
.venv/lib/python3.13/site-packages/pyarrow/tests/__pycache__/test_io.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 230 |
+
.venv/lib/python3.13/site-packages/pyarrow/tests/__pycache__/test_pandas.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 231 |
+
.venv/lib/python3.13/site-packages/pyarrow/tests/__pycache__/test_table.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
|
| 232 |
+
.venv/lib/python3.13/site-packages/rpds/rpds.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 233 |
+
.venv/lib/python3.13/site-packages/xxhash/_xxhash.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 234 |
+
.venv/lib/python3.13/site-packages/yaml/_yaml.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 235 |
+
.venv/lib/python3.13/site-packages/yarl/_quoting_c.cpython-313-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
.hfignore
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
.venv/
|
| 2 |
+
__pycache__/
|
| 3 |
+
*.pyc
|
.venv/.gitignore
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Created by venv; see https://docs.python.org/3/library/venv.html
|
| 2 |
+
*
|
.venv/bin/Activate.ps1
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<#
|
| 2 |
+
.Synopsis
|
| 3 |
+
Activate a Python virtual environment for the current PowerShell session.
|
| 4 |
+
|
| 5 |
+
.Description
|
| 6 |
+
Pushes the python executable for a virtual environment to the front of the
|
| 7 |
+
$Env:PATH environment variable and sets the prompt to signify that you are
|
| 8 |
+
in a Python virtual environment. Makes use of the command line switches as
|
| 9 |
+
well as the `pyvenv.cfg` file values present in the virtual environment.
|
| 10 |
+
|
| 11 |
+
.Parameter VenvDir
|
| 12 |
+
Path to the directory that contains the virtual environment to activate. The
|
| 13 |
+
default value for this is the parent of the directory that the Activate.ps1
|
| 14 |
+
script is located within.
|
| 15 |
+
|
| 16 |
+
.Parameter Prompt
|
| 17 |
+
The prompt prefix to display when this virtual environment is activated. By
|
| 18 |
+
default, this prompt is the name of the virtual environment folder (VenvDir)
|
| 19 |
+
surrounded by parentheses and followed by a single space (ie. '(.venv) ').
|
| 20 |
+
|
| 21 |
+
.Example
|
| 22 |
+
Activate.ps1
|
| 23 |
+
Activates the Python virtual environment that contains the Activate.ps1 script.
|
| 24 |
+
|
| 25 |
+
.Example
|
| 26 |
+
Activate.ps1 -Verbose
|
| 27 |
+
Activates the Python virtual environment that contains the Activate.ps1 script,
|
| 28 |
+
and shows extra information about the activation as it executes.
|
| 29 |
+
|
| 30 |
+
.Example
|
| 31 |
+
Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
|
| 32 |
+
Activates the Python virtual environment located in the specified location.
|
| 33 |
+
|
| 34 |
+
.Example
|
| 35 |
+
Activate.ps1 -Prompt "MyPython"
|
| 36 |
+
Activates the Python virtual environment that contains the Activate.ps1 script,
|
| 37 |
+
and prefixes the current prompt with the specified string (surrounded in
|
| 38 |
+
parentheses) while the virtual environment is active.
|
| 39 |
+
|
| 40 |
+
.Notes
|
| 41 |
+
On Windows, it may be required to enable this Activate.ps1 script by setting the
|
| 42 |
+
execution policy for the user. You can do this by issuing the following PowerShell
|
| 43 |
+
command:
|
| 44 |
+
|
| 45 |
+
PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
| 46 |
+
|
| 47 |
+
For more information on Execution Policies:
|
| 48 |
+
https://go.microsoft.com/fwlink/?LinkID=135170
|
| 49 |
+
|
| 50 |
+
#>
|
| 51 |
+
Param(
|
| 52 |
+
[Parameter(Mandatory = $false)]
|
| 53 |
+
[String]
|
| 54 |
+
$VenvDir,
|
| 55 |
+
[Parameter(Mandatory = $false)]
|
| 56 |
+
[String]
|
| 57 |
+
$Prompt
|
| 58 |
+
)
|
| 59 |
+
|
| 60 |
+
<# Function declarations --------------------------------------------------- #>
|
| 61 |
+
|
| 62 |
+
<#
|
| 63 |
+
.Synopsis
|
| 64 |
+
Remove all shell session elements added by the Activate script, including the
|
| 65 |
+
addition of the virtual environment's Python executable from the beginning of
|
| 66 |
+
the PATH variable.
|
| 67 |
+
|
| 68 |
+
.Parameter NonDestructive
|
| 69 |
+
If present, do not remove this function from the global namespace for the
|
| 70 |
+
session.
|
| 71 |
+
|
| 72 |
+
#>
|
| 73 |
+
function global:deactivate ([switch]$NonDestructive) {
|
| 74 |
+
# Revert to original values
|
| 75 |
+
|
| 76 |
+
# The prior prompt:
|
| 77 |
+
if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
|
| 78 |
+
Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
|
| 79 |
+
Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
# The prior PYTHONHOME:
|
| 83 |
+
if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
|
| 84 |
+
Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
|
| 85 |
+
Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
# The prior PATH:
|
| 89 |
+
if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
|
| 90 |
+
Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
|
| 91 |
+
Remove-Item -Path Env:_OLD_VIRTUAL_PATH
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
# Just remove the VIRTUAL_ENV altogether:
|
| 95 |
+
if (Test-Path -Path Env:VIRTUAL_ENV) {
|
| 96 |
+
Remove-Item -Path env:VIRTUAL_ENV
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
# Just remove VIRTUAL_ENV_PROMPT altogether.
|
| 100 |
+
if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) {
|
| 101 |
+
Remove-Item -Path env:VIRTUAL_ENV_PROMPT
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
# Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
|
| 105 |
+
if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
|
| 106 |
+
Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
# Leave deactivate function in the global namespace if requested:
|
| 110 |
+
if (-not $NonDestructive) {
|
| 111 |
+
Remove-Item -Path function:deactivate
|
| 112 |
+
}
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
<#
|
| 116 |
+
.Description
|
| 117 |
+
Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
|
| 118 |
+
given folder, and returns them in a map.
|
| 119 |
+
|
| 120 |
+
For each line in the pyvenv.cfg file, if that line can be parsed into exactly
|
| 121 |
+
two strings separated by `=` (with any amount of whitespace surrounding the =)
|
| 122 |
+
then it is considered a `key = value` line. The left hand string is the key,
|
| 123 |
+
the right hand is the value.
|
| 124 |
+
|
| 125 |
+
If the value starts with a `'` or a `"` then the first and last character is
|
| 126 |
+
stripped from the value before being captured.
|
| 127 |
+
|
| 128 |
+
.Parameter ConfigDir
|
| 129 |
+
Path to the directory that contains the `pyvenv.cfg` file.
|
| 130 |
+
#>
|
| 131 |
+
function Get-PyVenvConfig(
|
| 132 |
+
[String]
|
| 133 |
+
$ConfigDir
|
| 134 |
+
) {
|
| 135 |
+
Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
|
| 136 |
+
|
| 137 |
+
# Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
|
| 138 |
+
$pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
|
| 139 |
+
|
| 140 |
+
# An empty map will be returned if no config file is found.
|
| 141 |
+
$pyvenvConfig = @{ }
|
| 142 |
+
|
| 143 |
+
if ($pyvenvConfigPath) {
|
| 144 |
+
|
| 145 |
+
Write-Verbose "File exists, parse `key = value` lines"
|
| 146 |
+
$pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
|
| 147 |
+
|
| 148 |
+
$pyvenvConfigContent | ForEach-Object {
|
| 149 |
+
$keyval = $PSItem -split "\s*=\s*", 2
|
| 150 |
+
if ($keyval[0] -and $keyval[1]) {
|
| 151 |
+
$val = $keyval[1]
|
| 152 |
+
|
| 153 |
+
# Remove extraneous quotations around a string value.
|
| 154 |
+
if ("'""".Contains($val.Substring(0, 1))) {
|
| 155 |
+
$val = $val.Substring(1, $val.Length - 2)
|
| 156 |
+
}
|
| 157 |
+
|
| 158 |
+
$pyvenvConfig[$keyval[0]] = $val
|
| 159 |
+
Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
|
| 160 |
+
}
|
| 161 |
+
}
|
| 162 |
+
}
|
| 163 |
+
return $pyvenvConfig
|
| 164 |
+
}
|
| 165 |
+
|
| 166 |
+
|
| 167 |
+
<# Begin Activate script --------------------------------------------------- #>
|
| 168 |
+
|
| 169 |
+
# Determine the containing directory of this script
|
| 170 |
+
$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
|
| 171 |
+
$VenvExecDir = Get-Item -Path $VenvExecPath
|
| 172 |
+
|
| 173 |
+
Write-Verbose "Activation script is located in path: '$VenvExecPath'"
|
| 174 |
+
Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
|
| 175 |
+
Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
|
| 176 |
+
|
| 177 |
+
# Set values required in priority: CmdLine, ConfigFile, Default
|
| 178 |
+
# First, get the location of the virtual environment, it might not be
|
| 179 |
+
# VenvExecDir if specified on the command line.
|
| 180 |
+
if ($VenvDir) {
|
| 181 |
+
Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
|
| 182 |
+
}
|
| 183 |
+
else {
|
| 184 |
+
Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
|
| 185 |
+
$VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
|
| 186 |
+
Write-Verbose "VenvDir=$VenvDir"
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
# Next, read the `pyvenv.cfg` file to determine any required value such
|
| 190 |
+
# as `prompt`.
|
| 191 |
+
$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
|
| 192 |
+
|
| 193 |
+
# Next, set the prompt from the command line, or the config file, or
|
| 194 |
+
# just use the name of the virtual environment folder.
|
| 195 |
+
if ($Prompt) {
|
| 196 |
+
Write-Verbose "Prompt specified as argument, using '$Prompt'"
|
| 197 |
+
}
|
| 198 |
+
else {
|
| 199 |
+
Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
|
| 200 |
+
if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
|
| 201 |
+
Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
|
| 202 |
+
$Prompt = $pyvenvCfg['prompt'];
|
| 203 |
+
}
|
| 204 |
+
else {
|
| 205 |
+
Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)"
|
| 206 |
+
Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
|
| 207 |
+
$Prompt = Split-Path -Path $venvDir -Leaf
|
| 208 |
+
}
|
| 209 |
+
}
|
| 210 |
+
|
| 211 |
+
Write-Verbose "Prompt = '$Prompt'"
|
| 212 |
+
Write-Verbose "VenvDir='$VenvDir'"
|
| 213 |
+
|
| 214 |
+
# Deactivate any currently active virtual environment, but leave the
|
| 215 |
+
# deactivate function in place.
|
| 216 |
+
deactivate -nondestructive
|
| 217 |
+
|
| 218 |
+
# Now set the environment variable VIRTUAL_ENV, used by many tools to determine
|
| 219 |
+
# that there is an activated venv.
|
| 220 |
+
$env:VIRTUAL_ENV = $VenvDir
|
| 221 |
+
|
| 222 |
+
$env:VIRTUAL_ENV_PROMPT = $Prompt
|
| 223 |
+
|
| 224 |
+
if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
|
| 225 |
+
|
| 226 |
+
Write-Verbose "Setting prompt to '$Prompt'"
|
| 227 |
+
|
| 228 |
+
# Set the prompt to include the env name
|
| 229 |
+
# Make sure _OLD_VIRTUAL_PROMPT is global
|
| 230 |
+
function global:_OLD_VIRTUAL_PROMPT { "" }
|
| 231 |
+
Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
|
| 232 |
+
New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
|
| 233 |
+
|
| 234 |
+
function global:prompt {
|
| 235 |
+
Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
|
| 236 |
+
_OLD_VIRTUAL_PROMPT
|
| 237 |
+
}
|
| 238 |
+
}
|
| 239 |
+
|
| 240 |
+
# Clear PYTHONHOME
|
| 241 |
+
if (Test-Path -Path Env:PYTHONHOME) {
|
| 242 |
+
Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
|
| 243 |
+
Remove-Item -Path Env:PYTHONHOME
|
| 244 |
+
}
|
| 245 |
+
|
| 246 |
+
# Add the venv to the PATH
|
| 247 |
+
Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
|
| 248 |
+
$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"
|
.venv/bin/activate
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file must be used with "source bin/activate" *from bash*
|
| 2 |
+
# You cannot run it directly
|
| 3 |
+
|
| 4 |
+
deactivate () {
|
| 5 |
+
# reset old environment variables
|
| 6 |
+
if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
|
| 7 |
+
PATH="${_OLD_VIRTUAL_PATH:-}"
|
| 8 |
+
export PATH
|
| 9 |
+
unset _OLD_VIRTUAL_PATH
|
| 10 |
+
fi
|
| 11 |
+
if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
|
| 12 |
+
PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
|
| 13 |
+
export PYTHONHOME
|
| 14 |
+
unset _OLD_VIRTUAL_PYTHONHOME
|
| 15 |
+
fi
|
| 16 |
+
|
| 17 |
+
# Call hash to forget past locations. Without forgetting
|
| 18 |
+
# past locations the $PATH changes we made may not be respected.
|
| 19 |
+
# See "man bash" for more details. hash is usually a builtin of your shell
|
| 20 |
+
hash -r 2> /dev/null
|
| 21 |
+
|
| 22 |
+
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
|
| 23 |
+
PS1="${_OLD_VIRTUAL_PS1:-}"
|
| 24 |
+
export PS1
|
| 25 |
+
unset _OLD_VIRTUAL_PS1
|
| 26 |
+
fi
|
| 27 |
+
|
| 28 |
+
unset VIRTUAL_ENV
|
| 29 |
+
unset VIRTUAL_ENV_PROMPT
|
| 30 |
+
if [ ! "${1:-}" = "nondestructive" ] ; then
|
| 31 |
+
# Self destruct!
|
| 32 |
+
unset -f deactivate
|
| 33 |
+
fi
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
# unset irrelevant variables
|
| 37 |
+
deactivate nondestructive
|
| 38 |
+
|
| 39 |
+
# on Windows, a path can contain colons and backslashes and has to be converted:
|
| 40 |
+
case "$(uname)" in
|
| 41 |
+
CYGWIN*|MSYS*|MINGW*)
|
| 42 |
+
# transform D:\path\to\venv to /d/path/to/venv on MSYS and MINGW
|
| 43 |
+
# and to /cygdrive/d/path/to/venv on Cygwin
|
| 44 |
+
VIRTUAL_ENV=$(cygpath /home/user/projects/prolewiki/dataset/.venv)
|
| 45 |
+
export VIRTUAL_ENV
|
| 46 |
+
;;
|
| 47 |
+
*)
|
| 48 |
+
# use the path as-is
|
| 49 |
+
export VIRTUAL_ENV=/home/user/projects/prolewiki/dataset/.venv
|
| 50 |
+
;;
|
| 51 |
+
esac
|
| 52 |
+
|
| 53 |
+
_OLD_VIRTUAL_PATH="$PATH"
|
| 54 |
+
PATH="$VIRTUAL_ENV/"bin":$PATH"
|
| 55 |
+
export PATH
|
| 56 |
+
|
| 57 |
+
VIRTUAL_ENV_PROMPT=.venv
|
| 58 |
+
export VIRTUAL_ENV_PROMPT
|
| 59 |
+
|
| 60 |
+
# unset PYTHONHOME if set
|
| 61 |
+
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
|
| 62 |
+
# could use `if (set -u; : $PYTHONHOME) ;` in bash
|
| 63 |
+
if [ -n "${PYTHONHOME:-}" ] ; then
|
| 64 |
+
_OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
|
| 65 |
+
unset PYTHONHOME
|
| 66 |
+
fi
|
| 67 |
+
|
| 68 |
+
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
|
| 69 |
+
_OLD_VIRTUAL_PS1="${PS1:-}"
|
| 70 |
+
PS1="(".venv") ${PS1:-}"
|
| 71 |
+
export PS1
|
| 72 |
+
fi
|
| 73 |
+
|
| 74 |
+
# Call hash to forget past commands. Without forgetting
|
| 75 |
+
# past commands the $PATH changes we made may not be respected
|
| 76 |
+
hash -r 2> /dev/null
|
.venv/bin/activate.csh
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file must be used with "source bin/activate.csh" *from csh*.
|
| 2 |
+
# You cannot run it directly.
|
| 3 |
+
|
| 4 |
+
# Created by Davide Di Blasi <davidedb@gmail.com>.
|
| 5 |
+
# Ported to Python 3.3 venv by Andrew Svetlov <andrew.svetlov@gmail.com>
|
| 6 |
+
|
| 7 |
+
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate'
|
| 8 |
+
|
| 9 |
+
# Unset irrelevant variables.
|
| 10 |
+
deactivate nondestructive
|
| 11 |
+
|
| 12 |
+
setenv VIRTUAL_ENV /home/user/projects/prolewiki/dataset/.venv
|
| 13 |
+
|
| 14 |
+
set _OLD_VIRTUAL_PATH="$PATH"
|
| 15 |
+
setenv PATH "$VIRTUAL_ENV/"bin":$PATH"
|
| 16 |
+
setenv VIRTUAL_ENV_PROMPT .venv
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
set _OLD_VIRTUAL_PROMPT="$prompt"
|
| 20 |
+
|
| 21 |
+
if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
|
| 22 |
+
set prompt = "(".venv") $prompt:q"
|
| 23 |
+
endif
|
| 24 |
+
|
| 25 |
+
alias pydoc python -m pydoc
|
| 26 |
+
|
| 27 |
+
rehash
|
.venv/bin/activate.fish
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file must be used with "source <venv>/bin/activate.fish" *from fish*
|
| 2 |
+
# (https://fishshell.com/). You cannot run it directly.
|
| 3 |
+
|
| 4 |
+
function deactivate -d "Exit virtual environment and return to normal shell environment"
|
| 5 |
+
# reset old environment variables
|
| 6 |
+
if test -n "$_OLD_VIRTUAL_PATH"
|
| 7 |
+
set -gx PATH $_OLD_VIRTUAL_PATH
|
| 8 |
+
set -e _OLD_VIRTUAL_PATH
|
| 9 |
+
end
|
| 10 |
+
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
|
| 11 |
+
set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
|
| 12 |
+
set -e _OLD_VIRTUAL_PYTHONHOME
|
| 13 |
+
end
|
| 14 |
+
|
| 15 |
+
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
|
| 16 |
+
set -e _OLD_FISH_PROMPT_OVERRIDE
|
| 17 |
+
# prevents error when using nested fish instances (Issue #93858)
|
| 18 |
+
if functions -q _old_fish_prompt
|
| 19 |
+
functions -e fish_prompt
|
| 20 |
+
functions -c _old_fish_prompt fish_prompt
|
| 21 |
+
functions -e _old_fish_prompt
|
| 22 |
+
end
|
| 23 |
+
end
|
| 24 |
+
|
| 25 |
+
set -e VIRTUAL_ENV
|
| 26 |
+
set -e VIRTUAL_ENV_PROMPT
|
| 27 |
+
if test "$argv[1]" != "nondestructive"
|
| 28 |
+
# Self-destruct!
|
| 29 |
+
functions -e deactivate
|
| 30 |
+
end
|
| 31 |
+
end
|
| 32 |
+
|
| 33 |
+
# Unset irrelevant variables.
|
| 34 |
+
deactivate nondestructive
|
| 35 |
+
|
| 36 |
+
set -gx VIRTUAL_ENV /home/user/projects/prolewiki/dataset/.venv
|
| 37 |
+
|
| 38 |
+
set -gx _OLD_VIRTUAL_PATH $PATH
|
| 39 |
+
set -gx PATH "$VIRTUAL_ENV/"bin $PATH
|
| 40 |
+
set -gx VIRTUAL_ENV_PROMPT .venv
|
| 41 |
+
|
| 42 |
+
# Unset PYTHONHOME if set.
|
| 43 |
+
if set -q PYTHONHOME
|
| 44 |
+
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
|
| 45 |
+
set -e PYTHONHOME
|
| 46 |
+
end
|
| 47 |
+
|
| 48 |
+
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
|
| 49 |
+
# fish uses a function instead of an env var to generate the prompt.
|
| 50 |
+
|
| 51 |
+
# Save the current fish_prompt function as the function _old_fish_prompt.
|
| 52 |
+
functions -c fish_prompt _old_fish_prompt
|
| 53 |
+
|
| 54 |
+
# With the original prompt function renamed, we can override with our own.
|
| 55 |
+
function fish_prompt
|
| 56 |
+
# Save the return status of the last command.
|
| 57 |
+
set -l old_status $status
|
| 58 |
+
|
| 59 |
+
# Output the venv prompt; color taken from the blue of the Python logo.
|
| 60 |
+
printf "%s(%s)%s " (set_color 4B8BBE) .venv (set_color normal)
|
| 61 |
+
|
| 62 |
+
# Restore the return status of the previous command.
|
| 63 |
+
echo "exit $old_status" | .
|
| 64 |
+
# Output the original/"old" prompt.
|
| 65 |
+
_old_fish_prompt
|
| 66 |
+
end
|
| 67 |
+
|
| 68 |
+
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
|
| 69 |
+
end
|
.venv/bin/datasets-cli
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/user/projects/prolewiki/dataset/.venv/bin/python
|
| 2 |
+
import sys
|
| 3 |
+
from datasets.commands.datasets_cli import main
|
| 4 |
+
if __name__ == '__main__':
|
| 5 |
+
if sys.argv[0].endswith('.exe'):
|
| 6 |
+
sys.argv[0] = sys.argv[0][:-4]
|
| 7 |
+
sys.exit(main())
|
.venv/bin/f2py
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/user/projects/prolewiki/dataset/.venv/bin/python
|
| 2 |
+
import sys
|
| 3 |
+
from numpy.f2py.f2py2e import main
|
| 4 |
+
if __name__ == '__main__':
|
| 5 |
+
if sys.argv[0].endswith('.exe'):
|
| 6 |
+
sys.argv[0] = sys.argv[0][:-4]
|
| 7 |
+
sys.exit(main())
|
.venv/bin/get_gprof
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/user/projects/prolewiki/dataset/.venv/bin/python
|
| 2 |
+
#
|
| 3 |
+
# Author: Mike McKerns (mmckerns @caltech and @uqfoundation)
|
| 4 |
+
# Copyright (c) 2008-2016 California Institute of Technology.
|
| 5 |
+
# Copyright (c) 2016-2024 The Uncertainty Quantification Foundation.
|
| 6 |
+
# License: 3-clause BSD. The full license text is available at:
|
| 7 |
+
# - https://github.com/uqfoundation/dill/blob/master/LICENSE
|
| 8 |
+
'''
|
| 9 |
+
build profile graph for the given instance
|
| 10 |
+
|
| 11 |
+
running:
|
| 12 |
+
$ get_gprof <args> <instance>
|
| 13 |
+
|
| 14 |
+
executes:
|
| 15 |
+
gprof2dot -f pstats <args> <type>.prof | dot -Tpng -o <type>.call.png
|
| 16 |
+
|
| 17 |
+
where:
|
| 18 |
+
<args> are arguments for gprof2dot, such as "-n 5 -e 5"
|
| 19 |
+
<instance> is code to create the instance to profile
|
| 20 |
+
<type> is the class of the instance (i.e. type(instance))
|
| 21 |
+
|
| 22 |
+
For example:
|
| 23 |
+
$ get_gprof -n 5 -e 1 "import numpy; numpy.array([1,2])"
|
| 24 |
+
|
| 25 |
+
will create 'ndarray.call.png' with the profile graph for numpy.array([1,2]),
|
| 26 |
+
where '-n 5' eliminates nodes below 5% threshold, similarly '-e 1' eliminates
|
| 27 |
+
edges below 1% threshold
|
| 28 |
+
'''
|
| 29 |
+
|
| 30 |
+
if __name__ == "__main__":
|
| 31 |
+
import sys
|
| 32 |
+
if len(sys.argv) < 2:
|
| 33 |
+
print ("Please provide an object instance (e.g. 'import math; math.pi')")
|
| 34 |
+
sys.exit()
|
| 35 |
+
# grab args for gprof2dot
|
| 36 |
+
args = sys.argv[1:-1]
|
| 37 |
+
args = ' '.join(args)
|
| 38 |
+
# last arg builds the object
|
| 39 |
+
obj = sys.argv[-1]
|
| 40 |
+
obj = obj.split(';')
|
| 41 |
+
# multi-line prep for generating an instance
|
| 42 |
+
for line in obj[:-1]:
|
| 43 |
+
exec(line)
|
| 44 |
+
# one-line generation of an instance
|
| 45 |
+
try:
|
| 46 |
+
obj = eval(obj[-1])
|
| 47 |
+
except Exception:
|
| 48 |
+
print ("Error processing object instance")
|
| 49 |
+
sys.exit()
|
| 50 |
+
|
| 51 |
+
# get object 'name'
|
| 52 |
+
objtype = type(obj)
|
| 53 |
+
name = getattr(objtype, '__name__', getattr(objtype, '__class__', objtype))
|
| 54 |
+
|
| 55 |
+
# profile dumping an object
|
| 56 |
+
import dill
|
| 57 |
+
import os
|
| 58 |
+
import cProfile
|
| 59 |
+
#name = os.path.splitext(os.path.basename(__file__))[0]
|
| 60 |
+
cProfile.run("dill.dumps(obj)", filename="%s.prof" % name)
|
| 61 |
+
msg = "gprof2dot -f pstats %s %s.prof | dot -Tpng -o %s.call.png" % (args, name, name)
|
| 62 |
+
try:
|
| 63 |
+
res = os.system(msg)
|
| 64 |
+
except Exception:
|
| 65 |
+
print ("Please verify install of 'gprof2dot' to view profile graphs")
|
| 66 |
+
if res:
|
| 67 |
+
print ("Please verify install of 'gprof2dot' to view profile graphs")
|
| 68 |
+
|
| 69 |
+
# get stats
|
| 70 |
+
f_prof = "%s.prof" % name
|
| 71 |
+
import pstats
|
| 72 |
+
stats = pstats.Stats(f_prof, stream=sys.stdout)
|
| 73 |
+
stats.strip_dirs().sort_stats('cumtime')
|
| 74 |
+
stats.print_stats(20) #XXX: save to file instead of print top 20?
|
| 75 |
+
os.remove(f_prof)
|
.venv/bin/get_objgraph
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/user/projects/prolewiki/dataset/.venv/bin/python
|
| 2 |
+
#
|
| 3 |
+
# Author: Mike McKerns (mmckerns @caltech and @uqfoundation)
|
| 4 |
+
# Copyright (c) 2008-2016 California Institute of Technology.
|
| 5 |
+
# Copyright (c) 2016-2024 The Uncertainty Quantification Foundation.
|
| 6 |
+
# License: 3-clause BSD. The full license text is available at:
|
| 7 |
+
# - https://github.com/uqfoundation/dill/blob/master/LICENSE
|
| 8 |
+
"""
|
| 9 |
+
display the reference paths for objects in ``dill.types`` or a .pkl file
|
| 10 |
+
|
| 11 |
+
Notes:
|
| 12 |
+
the generated image is useful in showing the pointer references in
|
| 13 |
+
objects that are or can be pickled. Any object in ``dill.objects``
|
| 14 |
+
listed in ``dill.load_types(picklable=True, unpicklable=True)`` works.
|
| 15 |
+
|
| 16 |
+
Examples::
|
| 17 |
+
|
| 18 |
+
$ get_objgraph ArrayType
|
| 19 |
+
Image generated as ArrayType.png
|
| 20 |
+
"""
|
| 21 |
+
|
| 22 |
+
import dill as pickle
|
| 23 |
+
#pickle.debug.trace(True)
|
| 24 |
+
#import pickle
|
| 25 |
+
|
| 26 |
+
# get all objects for testing
|
| 27 |
+
from dill import load_types
|
| 28 |
+
load_types(pickleable=True,unpickleable=True)
|
| 29 |
+
from dill import objects
|
| 30 |
+
|
| 31 |
+
if __name__ == "__main__":
|
| 32 |
+
import sys
|
| 33 |
+
if len(sys.argv) != 2:
|
| 34 |
+
print ("Please provide exactly one file or type name (e.g. 'IntType')")
|
| 35 |
+
msg = "\n"
|
| 36 |
+
for objtype in list(objects.keys())[:40]:
|
| 37 |
+
msg += objtype + ', '
|
| 38 |
+
print (msg + "...")
|
| 39 |
+
else:
|
| 40 |
+
objtype = str(sys.argv[-1])
|
| 41 |
+
try:
|
| 42 |
+
obj = objects[objtype]
|
| 43 |
+
except KeyError:
|
| 44 |
+
obj = pickle.load(open(objtype,'rb'))
|
| 45 |
+
import os
|
| 46 |
+
objtype = os.path.splitext(objtype)[0]
|
| 47 |
+
try:
|
| 48 |
+
import objgraph
|
| 49 |
+
objgraph.show_refs(obj, filename=objtype+'.png')
|
| 50 |
+
except ImportError:
|
| 51 |
+
print ("Please install 'objgraph' to view object graphs")
|
| 52 |
+
|
| 53 |
+
|
| 54 |
+
# EOF
|
.venv/bin/hf
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/user/projects/prolewiki/dataset/.venv/bin/python
|
| 2 |
+
import sys
|
| 3 |
+
from huggingface_hub.cli.hf import main
|
| 4 |
+
if __name__ == '__main__':
|
| 5 |
+
if sys.argv[0].endswith('.exe'):
|
| 6 |
+
sys.argv[0] = sys.argv[0][:-4]
|
| 7 |
+
sys.exit(main())
|
.venv/bin/httpx
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/user/projects/prolewiki/dataset/.venv/bin/python
|
| 2 |
+
import sys
|
| 3 |
+
from httpx import main
|
| 4 |
+
if __name__ == '__main__':
|
| 5 |
+
if sys.argv[0].endswith('.exe'):
|
| 6 |
+
sys.argv[0] = sys.argv[0][:-4]
|
| 7 |
+
sys.exit(main())
|
.venv/bin/jsonschema
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/user/projects/prolewiki/dataset/.venv/bin/python
|
| 2 |
+
import sys
|
| 3 |
+
from jsonschema.cli import main
|
| 4 |
+
if __name__ == '__main__':
|
| 5 |
+
if sys.argv[0].endswith('.exe'):
|
| 6 |
+
sys.argv[0] = sys.argv[0][:-4]
|
| 7 |
+
sys.exit(main())
|
.venv/bin/normalizer
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/user/projects/prolewiki/dataset/.venv/bin/python
|
| 2 |
+
import sys
|
| 3 |
+
from charset_normalizer.cli import cli_detect
|
| 4 |
+
if __name__ == '__main__':
|
| 5 |
+
if sys.argv[0].endswith('.exe'):
|
| 6 |
+
sys.argv[0] = sys.argv[0][:-4]
|
| 7 |
+
sys.exit(cli_detect())
|
.venv/bin/numpy-config
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/user/projects/prolewiki/dataset/.venv/bin/python
|
| 2 |
+
import sys
|
| 3 |
+
from numpy._configtool import main
|
| 4 |
+
if __name__ == '__main__':
|
| 5 |
+
if sys.argv[0].endswith('.exe'):
|
| 6 |
+
sys.argv[0] = sys.argv[0][:-4]
|
| 7 |
+
sys.exit(main())
|
.venv/bin/pip
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/user/projects/prolewiki/dataset/.venv/bin/python
|
| 2 |
+
import sys
|
| 3 |
+
from pip._internal.cli.main import main
|
| 4 |
+
if __name__ == '__main__':
|
| 5 |
+
if sys.argv[0].endswith('.exe'):
|
| 6 |
+
sys.argv[0] = sys.argv[0][:-4]
|
| 7 |
+
sys.exit(main())
|
.venv/bin/pip3
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/user/projects/prolewiki/dataset/.venv/bin/python
|
| 2 |
+
import sys
|
| 3 |
+
from pip._internal.cli.main import main
|
| 4 |
+
if __name__ == '__main__':
|
| 5 |
+
if sys.argv[0].endswith('.exe'):
|
| 6 |
+
sys.argv[0] = sys.argv[0][:-4]
|
| 7 |
+
sys.exit(main())
|
.venv/bin/pip3.13
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/user/projects/prolewiki/dataset/.venv/bin/python
|
| 2 |
+
import sys
|
| 3 |
+
from pip._internal.cli.main import main
|
| 4 |
+
if __name__ == '__main__':
|
| 5 |
+
if sys.argv[0].endswith('.exe'):
|
| 6 |
+
sys.argv[0] = sys.argv[0][:-4]
|
| 7 |
+
sys.exit(main())
|
.venv/bin/python
ADDED
|
Binary file (17.6 kB). View file
|
|
|
.venv/bin/python3
ADDED
|
Binary file (17.6 kB). View file
|
|
|
.venv/bin/python3.13
ADDED
|
Binary file (17.6 kB). View file
|
|
|
.venv/bin/tiny-agents
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/user/projects/prolewiki/dataset/.venv/bin/python
|
| 2 |
+
import sys
|
| 3 |
+
from huggingface_hub.inference._mcp.cli import app
|
| 4 |
+
if __name__ == '__main__':
|
| 5 |
+
if sys.argv[0].endswith('.exe'):
|
| 6 |
+
sys.argv[0] = sys.argv[0][:-4]
|
| 7 |
+
sys.exit(app())
|
.venv/bin/tqdm
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/user/projects/prolewiki/dataset/.venv/bin/python
|
| 2 |
+
import sys
|
| 3 |
+
from tqdm.cli import main
|
| 4 |
+
if __name__ == '__main__':
|
| 5 |
+
if sys.argv[0].endswith('.exe'):
|
| 6 |
+
sys.argv[0] = sys.argv[0][:-4]
|
| 7 |
+
sys.exit(main())
|
.venv/bin/undill
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/user/projects/prolewiki/dataset/.venv/bin/python
|
| 2 |
+
#
|
| 3 |
+
# Author: Mike McKerns (mmckerns @caltech and @uqfoundation)
|
| 4 |
+
# Copyright (c) 2008-2016 California Institute of Technology.
|
| 5 |
+
# Copyright (c) 2016-2024 The Uncertainty Quantification Foundation.
|
| 6 |
+
# License: 3-clause BSD. The full license text is available at:
|
| 7 |
+
# - https://github.com/uqfoundation/dill/blob/master/LICENSE
|
| 8 |
+
"""
|
| 9 |
+
unpickle the contents of a pickled object file
|
| 10 |
+
|
| 11 |
+
Examples::
|
| 12 |
+
|
| 13 |
+
$ undill hello.pkl
|
| 14 |
+
['hello', 'world']
|
| 15 |
+
"""
|
| 16 |
+
|
| 17 |
+
if __name__ == '__main__':
|
| 18 |
+
import sys
|
| 19 |
+
import dill
|
| 20 |
+
for file in sys.argv[1:]:
|
| 21 |
+
print (dill.load(open(file,'rb')))
|
| 22 |
+
|
.venv/lib/python3.13/site-packages/__pycache__/six.cpython-313.pyc
ADDED
|
Binary file (42.1 kB). View file
|
|
|
.venv/lib/python3.13/site-packages/__pycache__/typing_extensions.cpython-313.pyc
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:1bf8bc2199815186e21063d9bb55ef32859e360b1a671e986bcf1c9a743fc16f
|
| 3 |
+
size 162874
|
.venv/lib/python3.13/site-packages/_multiprocess/__init__.py
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python
|
| 2 |
+
#
|
| 3 |
+
# Author: Mike McKerns (mmckerns @caltech and @uqfoundation)
|
| 4 |
+
# Copyright (c) 2022-2024 The Uncertainty Quantification Foundation.
|
| 5 |
+
# License: 3-clause BSD. The full license text is available at:
|
| 6 |
+
# - https://github.com/uqfoundation/multiprocess/blob/master/LICENSE
|
| 7 |
+
|
| 8 |
+
from _multiprocessing import *
|
.venv/lib/python3.13/site-packages/_multiprocess/__pycache__/__init__.cpython-313.pyc
ADDED
|
Binary file (235 Bytes). View file
|
|
|
.venv/lib/python3.13/site-packages/_yaml/__init__.py
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This is a stub package designed to roughly emulate the _yaml
|
| 2 |
+
# extension module, which previously existed as a standalone module
|
| 3 |
+
# and has been moved into the `yaml` package namespace.
|
| 4 |
+
# It does not perfectly mimic its old counterpart, but should get
|
| 5 |
+
# close enough for anyone who's relying on it even when they shouldn't.
|
| 6 |
+
import yaml
|
| 7 |
+
|
| 8 |
+
# in some circumstances, the yaml module we imoprted may be from a different version, so we need
|
| 9 |
+
# to tread carefully when poking at it here (it may not have the attributes we expect)
|
| 10 |
+
if not getattr(yaml, '__with_libyaml__', False):
|
| 11 |
+
from sys import version_info
|
| 12 |
+
|
| 13 |
+
exc = ModuleNotFoundError if version_info >= (3, 6) else ImportError
|
| 14 |
+
raise exc("No module named '_yaml'")
|
| 15 |
+
else:
|
| 16 |
+
from yaml._yaml import *
|
| 17 |
+
import warnings
|
| 18 |
+
warnings.warn(
|
| 19 |
+
'The _yaml extension module is now located at yaml._yaml'
|
| 20 |
+
' and its location is subject to change. To use the'
|
| 21 |
+
' LibYAML-based parser and emitter, import from `yaml`:'
|
| 22 |
+
' `from yaml import CLoader as Loader, CDumper as Dumper`.',
|
| 23 |
+
DeprecationWarning
|
| 24 |
+
)
|
| 25 |
+
del warnings
|
| 26 |
+
# Don't `del yaml` here because yaml is actually an existing
|
| 27 |
+
# namespace member of _yaml.
|
| 28 |
+
|
| 29 |
+
__name__ = '_yaml'
|
| 30 |
+
# If the module is top-level (i.e. not a part of any specific package)
|
| 31 |
+
# then the attribute should be set to ''.
|
| 32 |
+
# https://docs.python.org/3.8/library/types.html
|
| 33 |
+
__package__ = ''
|
.venv/lib/python3.13/site-packages/_yaml/__pycache__/__init__.cpython-313.pyc
ADDED
|
Binary file (882 Bytes). View file
|
|
|
.venv/lib/python3.13/site-packages/aiohappyeyeballs-2.6.1.dist-info/INSTALLER
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
pip
|
.venv/lib/python3.13/site-packages/aiohappyeyeballs-2.6.1.dist-info/LICENSE
ADDED
|
@@ -0,0 +1,279 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
A. HISTORY OF THE SOFTWARE
|
| 2 |
+
==========================
|
| 3 |
+
|
| 4 |
+
Python was created in the early 1990s by Guido van Rossum at Stichting
|
| 5 |
+
Mathematisch Centrum (CWI, see https://www.cwi.nl) in the Netherlands
|
| 6 |
+
as a successor of a language called ABC. Guido remains Python's
|
| 7 |
+
principal author, although it includes many contributions from others.
|
| 8 |
+
|
| 9 |
+
In 1995, Guido continued his work on Python at the Corporation for
|
| 10 |
+
National Research Initiatives (CNRI, see https://www.cnri.reston.va.us)
|
| 11 |
+
in Reston, Virginia where he released several versions of the
|
| 12 |
+
software.
|
| 13 |
+
|
| 14 |
+
In May 2000, Guido and the Python core development team moved to
|
| 15 |
+
BeOpen.com to form the BeOpen PythonLabs team. In October of the same
|
| 16 |
+
year, the PythonLabs team moved to Digital Creations, which became
|
| 17 |
+
Zope Corporation. In 2001, the Python Software Foundation (PSF, see
|
| 18 |
+
https://www.python.org/psf/) was formed, a non-profit organization
|
| 19 |
+
created specifically to own Python-related Intellectual Property.
|
| 20 |
+
Zope Corporation was a sponsoring member of the PSF.
|
| 21 |
+
|
| 22 |
+
All Python releases are Open Source (see https://opensource.org for
|
| 23 |
+
the Open Source Definition). Historically, most, but not all, Python
|
| 24 |
+
releases have also been GPL-compatible; the table below summarizes
|
| 25 |
+
the various releases.
|
| 26 |
+
|
| 27 |
+
Release Derived Year Owner GPL-
|
| 28 |
+
from compatible? (1)
|
| 29 |
+
|
| 30 |
+
0.9.0 thru 1.2 1991-1995 CWI yes
|
| 31 |
+
1.3 thru 1.5.2 1.2 1995-1999 CNRI yes
|
| 32 |
+
1.6 1.5.2 2000 CNRI no
|
| 33 |
+
2.0 1.6 2000 BeOpen.com no
|
| 34 |
+
1.6.1 1.6 2001 CNRI yes (2)
|
| 35 |
+
2.1 2.0+1.6.1 2001 PSF no
|
| 36 |
+
2.0.1 2.0+1.6.1 2001 PSF yes
|
| 37 |
+
2.1.1 2.1+2.0.1 2001 PSF yes
|
| 38 |
+
2.1.2 2.1.1 2002 PSF yes
|
| 39 |
+
2.1.3 2.1.2 2002 PSF yes
|
| 40 |
+
2.2 and above 2.1.1 2001-now PSF yes
|
| 41 |
+
|
| 42 |
+
Footnotes:
|
| 43 |
+
|
| 44 |
+
(1) GPL-compatible doesn't mean that we're distributing Python under
|
| 45 |
+
the GPL. All Python licenses, unlike the GPL, let you distribute
|
| 46 |
+
a modified version without making your changes open source. The
|
| 47 |
+
GPL-compatible licenses make it possible to combine Python with
|
| 48 |
+
other software that is released under the GPL; the others don't.
|
| 49 |
+
|
| 50 |
+
(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
|
| 51 |
+
because its license has a choice of law clause. According to
|
| 52 |
+
CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
|
| 53 |
+
is "not incompatible" with the GPL.
|
| 54 |
+
|
| 55 |
+
Thanks to the many outside volunteers who have worked under Guido's
|
| 56 |
+
direction to make these releases possible.
|
| 57 |
+
|
| 58 |
+
|
| 59 |
+
B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
|
| 60 |
+
===============================================================
|
| 61 |
+
|
| 62 |
+
Python software and documentation are licensed under the
|
| 63 |
+
Python Software Foundation License Version 2.
|
| 64 |
+
|
| 65 |
+
Starting with Python 3.8.6, examples, recipes, and other code in
|
| 66 |
+
the documentation are dual licensed under the PSF License Version 2
|
| 67 |
+
and the Zero-Clause BSD license.
|
| 68 |
+
|
| 69 |
+
Some software incorporated into Python is under different licenses.
|
| 70 |
+
The licenses are listed with code falling under that license.
|
| 71 |
+
|
| 72 |
+
|
| 73 |
+
PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
|
| 74 |
+
--------------------------------------------
|
| 75 |
+
|
| 76 |
+
1. This LICENSE AGREEMENT is between the Python Software Foundation
|
| 77 |
+
("PSF"), and the Individual or Organization ("Licensee") accessing and
|
| 78 |
+
otherwise using this software ("Python") in source or binary form and
|
| 79 |
+
its associated documentation.
|
| 80 |
+
|
| 81 |
+
2. Subject to the terms and conditions of this License Agreement, PSF hereby
|
| 82 |
+
grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
|
| 83 |
+
analyze, test, perform and/or display publicly, prepare derivative works,
|
| 84 |
+
distribute, and otherwise use Python alone or in any derivative version,
|
| 85 |
+
provided, however, that PSF's License Agreement and PSF's notice of copyright,
|
| 86 |
+
i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
| 87 |
+
2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Python Software Foundation;
|
| 88 |
+
All Rights Reserved" are retained in Python alone or in any derivative version
|
| 89 |
+
prepared by Licensee.
|
| 90 |
+
|
| 91 |
+
3. In the event Licensee prepares a derivative work that is based on
|
| 92 |
+
or incorporates Python or any part thereof, and wants to make
|
| 93 |
+
the derivative work available to others as provided herein, then
|
| 94 |
+
Licensee hereby agrees to include in any such work a brief summary of
|
| 95 |
+
the changes made to Python.
|
| 96 |
+
|
| 97 |
+
4. PSF is making Python available to Licensee on an "AS IS"
|
| 98 |
+
basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
| 99 |
+
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
|
| 100 |
+
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
| 101 |
+
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
|
| 102 |
+
INFRINGE ANY THIRD PARTY RIGHTS.
|
| 103 |
+
|
| 104 |
+
5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
|
| 105 |
+
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
| 106 |
+
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
|
| 107 |
+
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
| 108 |
+
|
| 109 |
+
6. This License Agreement will automatically terminate upon a material
|
| 110 |
+
breach of its terms and conditions.
|
| 111 |
+
|
| 112 |
+
7. Nothing in this License Agreement shall be deemed to create any
|
| 113 |
+
relationship of agency, partnership, or joint venture between PSF and
|
| 114 |
+
Licensee. This License Agreement does not grant permission to use PSF
|
| 115 |
+
trademarks or trade name in a trademark sense to endorse or promote
|
| 116 |
+
products or services of Licensee, or any third party.
|
| 117 |
+
|
| 118 |
+
8. By copying, installing or otherwise using Python, Licensee
|
| 119 |
+
agrees to be bound by the terms and conditions of this License
|
| 120 |
+
Agreement.
|
| 121 |
+
|
| 122 |
+
|
| 123 |
+
BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
|
| 124 |
+
-------------------------------------------
|
| 125 |
+
|
| 126 |
+
BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
|
| 127 |
+
|
| 128 |
+
1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
|
| 129 |
+
office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
|
| 130 |
+
Individual or Organization ("Licensee") accessing and otherwise using
|
| 131 |
+
this software in source or binary form and its associated
|
| 132 |
+
documentation ("the Software").
|
| 133 |
+
|
| 134 |
+
2. Subject to the terms and conditions of this BeOpen Python License
|
| 135 |
+
Agreement, BeOpen hereby grants Licensee a non-exclusive,
|
| 136 |
+
royalty-free, world-wide license to reproduce, analyze, test, perform
|
| 137 |
+
and/or display publicly, prepare derivative works, distribute, and
|
| 138 |
+
otherwise use the Software alone or in any derivative version,
|
| 139 |
+
provided, however, that the BeOpen Python License is retained in the
|
| 140 |
+
Software, alone or in any derivative version prepared by Licensee.
|
| 141 |
+
|
| 142 |
+
3. BeOpen is making the Software available to Licensee on an "AS IS"
|
| 143 |
+
basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
| 144 |
+
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
|
| 145 |
+
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
| 146 |
+
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
|
| 147 |
+
INFRINGE ANY THIRD PARTY RIGHTS.
|
| 148 |
+
|
| 149 |
+
4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
|
| 150 |
+
SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
|
| 151 |
+
AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
|
| 152 |
+
DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
| 153 |
+
|
| 154 |
+
5. This License Agreement will automatically terminate upon a material
|
| 155 |
+
breach of its terms and conditions.
|
| 156 |
+
|
| 157 |
+
6. This License Agreement shall be governed by and interpreted in all
|
| 158 |
+
respects by the law of the State of California, excluding conflict of
|
| 159 |
+
law provisions. Nothing in this License Agreement shall be deemed to
|
| 160 |
+
create any relationship of agency, partnership, or joint venture
|
| 161 |
+
between BeOpen and Licensee. This License Agreement does not grant
|
| 162 |
+
permission to use BeOpen trademarks or trade names in a trademark
|
| 163 |
+
sense to endorse or promote products or services of Licensee, or any
|
| 164 |
+
third party. As an exception, the "BeOpen Python" logos available at
|
| 165 |
+
http://www.pythonlabs.com/logos.html may be used according to the
|
| 166 |
+
permissions granted on that web page.
|
| 167 |
+
|
| 168 |
+
7. By copying, installing or otherwise using the software, Licensee
|
| 169 |
+
agrees to be bound by the terms and conditions of this License
|
| 170 |
+
Agreement.
|
| 171 |
+
|
| 172 |
+
|
| 173 |
+
CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
|
| 174 |
+
---------------------------------------
|
| 175 |
+
|
| 176 |
+
1. This LICENSE AGREEMENT is between the Corporation for National
|
| 177 |
+
Research Initiatives, having an office at 1895 Preston White Drive,
|
| 178 |
+
Reston, VA 20191 ("CNRI"), and the Individual or Organization
|
| 179 |
+
("Licensee") accessing and otherwise using Python 1.6.1 software in
|
| 180 |
+
source or binary form and its associated documentation.
|
| 181 |
+
|
| 182 |
+
2. Subject to the terms and conditions of this License Agreement, CNRI
|
| 183 |
+
hereby grants Licensee a nonexclusive, royalty-free, world-wide
|
| 184 |
+
license to reproduce, analyze, test, perform and/or display publicly,
|
| 185 |
+
prepare derivative works, distribute, and otherwise use Python 1.6.1
|
| 186 |
+
alone or in any derivative version, provided, however, that CNRI's
|
| 187 |
+
License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
|
| 188 |
+
1995-2001 Corporation for National Research Initiatives; All Rights
|
| 189 |
+
Reserved" are retained in Python 1.6.1 alone or in any derivative
|
| 190 |
+
version prepared by Licensee. Alternately, in lieu of CNRI's License
|
| 191 |
+
Agreement, Licensee may substitute the following text (omitting the
|
| 192 |
+
quotes): "Python 1.6.1 is made available subject to the terms and
|
| 193 |
+
conditions in CNRI's License Agreement. This Agreement together with
|
| 194 |
+
Python 1.6.1 may be located on the internet using the following
|
| 195 |
+
unique, persistent identifier (known as a handle): 1895.22/1013. This
|
| 196 |
+
Agreement may also be obtained from a proxy server on the internet
|
| 197 |
+
using the following URL: http://hdl.handle.net/1895.22/1013".
|
| 198 |
+
|
| 199 |
+
3. In the event Licensee prepares a derivative work that is based on
|
| 200 |
+
or incorporates Python 1.6.1 or any part thereof, and wants to make
|
| 201 |
+
the derivative work available to others as provided herein, then
|
| 202 |
+
Licensee hereby agrees to include in any such work a brief summary of
|
| 203 |
+
the changes made to Python 1.6.1.
|
| 204 |
+
|
| 205 |
+
4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
|
| 206 |
+
basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
| 207 |
+
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
|
| 208 |
+
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
| 209 |
+
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
|
| 210 |
+
INFRINGE ANY THIRD PARTY RIGHTS.
|
| 211 |
+
|
| 212 |
+
5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
|
| 213 |
+
1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
| 214 |
+
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
|
| 215 |
+
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
| 216 |
+
|
| 217 |
+
6. This License Agreement will automatically terminate upon a material
|
| 218 |
+
breach of its terms and conditions.
|
| 219 |
+
|
| 220 |
+
7. This License Agreement shall be governed by the federal
|
| 221 |
+
intellectual property law of the United States, including without
|
| 222 |
+
limitation the federal copyright law, and, to the extent such
|
| 223 |
+
U.S. federal law does not apply, by the law of the Commonwealth of
|
| 224 |
+
Virginia, excluding Virginia's conflict of law provisions.
|
| 225 |
+
Notwithstanding the foregoing, with regard to derivative works based
|
| 226 |
+
on Python 1.6.1 that incorporate non-separable material that was
|
| 227 |
+
previously distributed under the GNU General Public License (GPL), the
|
| 228 |
+
law of the Commonwealth of Virginia shall govern this License
|
| 229 |
+
Agreement only as to issues arising under or with respect to
|
| 230 |
+
Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
|
| 231 |
+
License Agreement shall be deemed to create any relationship of
|
| 232 |
+
agency, partnership, or joint venture between CNRI and Licensee. This
|
| 233 |
+
License Agreement does not grant permission to use CNRI trademarks or
|
| 234 |
+
trade name in a trademark sense to endorse or promote products or
|
| 235 |
+
services of Licensee, or any third party.
|
| 236 |
+
|
| 237 |
+
8. By clicking on the "ACCEPT" button where indicated, or by copying,
|
| 238 |
+
installing or otherwise using Python 1.6.1, Licensee agrees to be
|
| 239 |
+
bound by the terms and conditions of this License Agreement.
|
| 240 |
+
|
| 241 |
+
ACCEPT
|
| 242 |
+
|
| 243 |
+
|
| 244 |
+
CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
|
| 245 |
+
--------------------------------------------------
|
| 246 |
+
|
| 247 |
+
Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
|
| 248 |
+
The Netherlands. All rights reserved.
|
| 249 |
+
|
| 250 |
+
Permission to use, copy, modify, and distribute this software and its
|
| 251 |
+
documentation for any purpose and without fee is hereby granted,
|
| 252 |
+
provided that the above copyright notice appear in all copies and that
|
| 253 |
+
both that copyright notice and this permission notice appear in
|
| 254 |
+
supporting documentation, and that the name of Stichting Mathematisch
|
| 255 |
+
Centrum or CWI not be used in advertising or publicity pertaining to
|
| 256 |
+
distribution of the software without specific, written prior
|
| 257 |
+
permission.
|
| 258 |
+
|
| 259 |
+
STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
| 260 |
+
THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
| 261 |
+
FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
|
| 262 |
+
FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
| 263 |
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
| 264 |
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
| 265 |
+
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
| 266 |
+
|
| 267 |
+
ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION
|
| 268 |
+
----------------------------------------------------------------------
|
| 269 |
+
|
| 270 |
+
Permission to use, copy, modify, and/or distribute this software for any
|
| 271 |
+
purpose with or without fee is hereby granted.
|
| 272 |
+
|
| 273 |
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
| 274 |
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
| 275 |
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
| 276 |
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
| 277 |
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
| 278 |
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
| 279 |
+
PERFORMANCE OF THIS SOFTWARE.
|
.venv/lib/python3.13/site-packages/aiohappyeyeballs-2.6.1.dist-info/METADATA
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Metadata-Version: 2.3
|
| 2 |
+
Name: aiohappyeyeballs
|
| 3 |
+
Version: 2.6.1
|
| 4 |
+
Summary: Happy Eyeballs for asyncio
|
| 5 |
+
License: PSF-2.0
|
| 6 |
+
Author: J. Nick Koston
|
| 7 |
+
Author-email: nick@koston.org
|
| 8 |
+
Requires-Python: >=3.9
|
| 9 |
+
Classifier: Development Status :: 5 - Production/Stable
|
| 10 |
+
Classifier: Intended Audience :: Developers
|
| 11 |
+
Classifier: Natural Language :: English
|
| 12 |
+
Classifier: Operating System :: OS Independent
|
| 13 |
+
Classifier: Topic :: Software Development :: Libraries
|
| 14 |
+
Classifier: Programming Language :: Python :: 3
|
| 15 |
+
Classifier: Programming Language :: Python :: 3.9
|
| 16 |
+
Classifier: Programming Language :: Python :: 3.10
|
| 17 |
+
Classifier: Programming Language :: Python :: 3.11
|
| 18 |
+
Classifier: Programming Language :: Python :: 3.12
|
| 19 |
+
Classifier: Programming Language :: Python :: 3.13
|
| 20 |
+
Classifier: License :: OSI Approved :: Python Software Foundation License
|
| 21 |
+
Project-URL: Bug Tracker, https://github.com/aio-libs/aiohappyeyeballs/issues
|
| 22 |
+
Project-URL: Changelog, https://github.com/aio-libs/aiohappyeyeballs/blob/main/CHANGELOG.md
|
| 23 |
+
Project-URL: Documentation, https://aiohappyeyeballs.readthedocs.io
|
| 24 |
+
Project-URL: Repository, https://github.com/aio-libs/aiohappyeyeballs
|
| 25 |
+
Description-Content-Type: text/markdown
|
| 26 |
+
|
| 27 |
+
# aiohappyeyeballs
|
| 28 |
+
|
| 29 |
+
<p align="center">
|
| 30 |
+
<a href="https://github.com/aio-libs/aiohappyeyeballs/actions/workflows/ci.yml?query=branch%3Amain">
|
| 31 |
+
<img src="https://img.shields.io/github/actions/workflow/status/aio-libs/aiohappyeyeballs/ci-cd.yml?branch=main&label=CI&logo=github&style=flat-square" alt="CI Status" >
|
| 32 |
+
</a>
|
| 33 |
+
<a href="https://aiohappyeyeballs.readthedocs.io">
|
| 34 |
+
<img src="https://img.shields.io/readthedocs/aiohappyeyeballs.svg?logo=read-the-docs&logoColor=fff&style=flat-square" alt="Documentation Status">
|
| 35 |
+
</a>
|
| 36 |
+
<a href="https://codecov.io/gh/aio-libs/aiohappyeyeballs">
|
| 37 |
+
<img src="https://img.shields.io/codecov/c/github/aio-libs/aiohappyeyeballs.svg?logo=codecov&logoColor=fff&style=flat-square" alt="Test coverage percentage">
|
| 38 |
+
</a>
|
| 39 |
+
</p>
|
| 40 |
+
<p align="center">
|
| 41 |
+
<a href="https://python-poetry.org/">
|
| 42 |
+
<img src="https://img.shields.io/badge/packaging-poetry-299bd7?style=flat-square&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAASCAYAAABrXO8xAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJJSURBVHgBfZLPa1NBEMe/s7tNXoxW1KJQKaUHkXhQvHgW6UHQQ09CBS/6V3hKc/AP8CqCrUcpmop3Cx48eDB4yEECjVQrlZb80CRN8t6OM/teagVxYZi38+Yz853dJbzoMV3MM8cJUcLMSUKIE8AzQ2PieZzFxEJOHMOgMQQ+dUgSAckNXhapU/NMhDSWLs1B24A8sO1xrN4NECkcAC9ASkiIJc6k5TRiUDPhnyMMdhKc+Zx19l6SgyeW76BEONY9exVQMzKExGKwwPsCzza7KGSSWRWEQhyEaDXp6ZHEr416ygbiKYOd7TEWvvcQIeusHYMJGhTwF9y7sGnSwaWyFAiyoxzqW0PM/RjghPxF2pWReAowTEXnDh0xgcLs8l2YQmOrj3N7ByiqEoH0cARs4u78WgAVkoEDIDoOi3AkcLOHU60RIg5wC4ZuTC7FaHKQm8Hq1fQuSOBvX/sodmNJSB5geaF5CPIkUeecdMxieoRO5jz9bheL6/tXjrwCyX/UYBUcjCaWHljx1xiX6z9xEjkYAzbGVnB8pvLmyXm9ep+W8CmsSHQQY77Zx1zboxAV0w7ybMhQmfqdmmw3nEp1I0Z+FGO6M8LZdoyZnuzzBdjISicKRnpxzI9fPb+0oYXsNdyi+d3h9bm9MWYHFtPeIZfLwzmFDKy1ai3p+PDls1Llz4yyFpferxjnyjJDSEy9CaCx5m2cJPerq6Xm34eTrZt3PqxYO1XOwDYZrFlH1fWnpU38Y9HRze3lj0vOujZcXKuuXm3jP+s3KbZVra7y2EAAAAAASUVORK5CYII=" alt="Poetry">
|
| 43 |
+
</a>
|
| 44 |
+
<a href="https://github.com/astral-sh/ruff">
|
| 45 |
+
<img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff">
|
| 46 |
+
</a>
|
| 47 |
+
<a href="https://github.com/pre-commit/pre-commit">
|
| 48 |
+
<img src="https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white&style=flat-square" alt="pre-commit">
|
| 49 |
+
</a>
|
| 50 |
+
</p>
|
| 51 |
+
<p align="center">
|
| 52 |
+
<a href="https://pypi.org/project/aiohappyeyeballs/">
|
| 53 |
+
<img src="https://img.shields.io/pypi/v/aiohappyeyeballs.svg?logo=python&logoColor=fff&style=flat-square" alt="PyPI Version">
|
| 54 |
+
</a>
|
| 55 |
+
<img src="https://img.shields.io/pypi/pyversions/aiohappyeyeballs.svg?style=flat-square&logo=python&logoColor=fff" alt="Supported Python versions">
|
| 56 |
+
<img src="https://img.shields.io/pypi/l/aiohappyeyeballs.svg?style=flat-square" alt="License">
|
| 57 |
+
</p>
|
| 58 |
+
|
| 59 |
+
---
|
| 60 |
+
|
| 61 |
+
**Documentation**: <a href="https://aiohappyeyeballs.readthedocs.io" target="_blank">https://aiohappyeyeballs.readthedocs.io </a>
|
| 62 |
+
|
| 63 |
+
**Source Code**: <a href="https://github.com/aio-libs/aiohappyeyeballs" target="_blank">https://github.com/aio-libs/aiohappyeyeballs </a>
|
| 64 |
+
|
| 65 |
+
---
|
| 66 |
+
|
| 67 |
+
[Happy Eyeballs](https://en.wikipedia.org/wiki/Happy_Eyeballs)
|
| 68 |
+
([RFC 8305](https://www.rfc-editor.org/rfc/rfc8305.html))
|
| 69 |
+
|
| 70 |
+
## Use case
|
| 71 |
+
|
| 72 |
+
This library exists to allow connecting with
|
| 73 |
+
[Happy Eyeballs](https://en.wikipedia.org/wiki/Happy_Eyeballs)
|
| 74 |
+
([RFC 8305](https://www.rfc-editor.org/rfc/rfc8305.html))
|
| 75 |
+
when you
|
| 76 |
+
already have a list of addrinfo and not a DNS name.
|
| 77 |
+
|
| 78 |
+
The stdlib version of `loop.create_connection()`
|
| 79 |
+
will only work when you pass in an unresolved name which
|
| 80 |
+
is not a good fit when using DNS caching or resolving
|
| 81 |
+
names via another method such as `zeroconf`.
|
| 82 |
+
|
| 83 |
+
## Installation
|
| 84 |
+
|
| 85 |
+
Install this via pip (or your favourite package manager):
|
| 86 |
+
|
| 87 |
+
`pip install aiohappyeyeballs`
|
| 88 |
+
|
| 89 |
+
## License
|
| 90 |
+
|
| 91 |
+
[aiohappyeyeballs is licensed under the same terms as cpython itself.](https://github.com/python/cpython/blob/main/LICENSE)
|
| 92 |
+
|
| 93 |
+
## Example usage
|
| 94 |
+
|
| 95 |
+
```python
|
| 96 |
+
|
| 97 |
+
addr_infos = await loop.getaddrinfo("example.org", 80)
|
| 98 |
+
|
| 99 |
+
socket = await start_connection(addr_infos)
|
| 100 |
+
socket = await start_connection(addr_infos, local_addr_infos=local_addr_infos, happy_eyeballs_delay=0.2)
|
| 101 |
+
|
| 102 |
+
transport, protocol = await loop.create_connection(
|
| 103 |
+
MyProtocol, sock=socket, ...)
|
| 104 |
+
|
| 105 |
+
# Remove the first address for each family from addr_info
|
| 106 |
+
pop_addr_infos_interleave(addr_info, 1)
|
| 107 |
+
|
| 108 |
+
# Remove all matching address from addr_info
|
| 109 |
+
remove_addr_infos(addr_info, "dead::beef::")
|
| 110 |
+
|
| 111 |
+
# Convert a local_addr to local_addr_infos
|
| 112 |
+
local_addr_infos = addr_to_addr_infos(("127.0.0.1",0))
|
| 113 |
+
```
|
| 114 |
+
|
| 115 |
+
## Credits
|
| 116 |
+
|
| 117 |
+
This package contains code from cpython and is licensed under the same terms as cpython itself.
|
| 118 |
+
|
| 119 |
+
This package was created with
|
| 120 |
+
[Copier](https://copier.readthedocs.io/) and the
|
| 121 |
+
[browniebroke/pypackage-template](https://github.com/browniebroke/pypackage-template)
|
| 122 |
+
project template.
|
| 123 |
+
|
.venv/lib/python3.13/site-packages/aiohappyeyeballs-2.6.1.dist-info/RECORD
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
aiohappyeyeballs-2.6.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
| 2 |
+
aiohappyeyeballs-2.6.1.dist-info/LICENSE,sha256=Oy-B_iHRgcSZxZolbI4ZaEVdZonSaaqFNzv7avQdo78,13936
|
| 3 |
+
aiohappyeyeballs-2.6.1.dist-info/METADATA,sha256=NSXlhJwAfi380eEjAo7BQ4P_TVal9xi0qkyZWibMsVM,5915
|
| 4 |
+
aiohappyeyeballs-2.6.1.dist-info/RECORD,,
|
| 5 |
+
aiohappyeyeballs-2.6.1.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
|
| 6 |
+
aiohappyeyeballs/__init__.py,sha256=x7kktHEtaD9quBcWDJPuLeKyjuVAI-Jj14S9B_5hcTs,361
|
| 7 |
+
aiohappyeyeballs/__pycache__/__init__.cpython-313.pyc,,
|
| 8 |
+
aiohappyeyeballs/__pycache__/_staggered.cpython-313.pyc,,
|
| 9 |
+
aiohappyeyeballs/__pycache__/impl.cpython-313.pyc,,
|
| 10 |
+
aiohappyeyeballs/__pycache__/types.cpython-313.pyc,,
|
| 11 |
+
aiohappyeyeballs/__pycache__/utils.cpython-313.pyc,,
|
| 12 |
+
aiohappyeyeballs/_staggered.py,sha256=edfVowFx-P-ywJjIEF3MdPtEMVODujV6CeMYr65otac,6900
|
| 13 |
+
aiohappyeyeballs/impl.py,sha256=Dlcm2mTJ28ucrGnxkb_fo9CZzLAkOOBizOt7dreBbXE,9681
|
| 14 |
+
aiohappyeyeballs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
| 15 |
+
aiohappyeyeballs/types.py,sha256=YZJIAnyoV4Dz0WFtlaf_OyE4EW7Xus1z7aIfNI6tDDQ,425
|
| 16 |
+
aiohappyeyeballs/utils.py,sha256=on9GxIR0LhEfZu8P6Twi9hepX9zDanuZM20MWsb3xlQ,3028
|
.venv/lib/python3.13/site-packages/aiohappyeyeballs-2.6.1.dist-info/WHEEL
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Wheel-Version: 1.0
|
| 2 |
+
Generator: poetry-core 2.1.1
|
| 3 |
+
Root-Is-Purelib: true
|
| 4 |
+
Tag: py3-none-any
|
.venv/lib/python3.13/site-packages/aiohappyeyeballs/__init__.py
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__version__ = "2.6.1"
|
| 2 |
+
|
| 3 |
+
from .impl import start_connection
|
| 4 |
+
from .types import AddrInfoType, SocketFactoryType
|
| 5 |
+
from .utils import addr_to_addr_infos, pop_addr_infos_interleave, remove_addr_infos
|
| 6 |
+
|
| 7 |
+
__all__ = (
|
| 8 |
+
"AddrInfoType",
|
| 9 |
+
"SocketFactoryType",
|
| 10 |
+
"addr_to_addr_infos",
|
| 11 |
+
"pop_addr_infos_interleave",
|
| 12 |
+
"remove_addr_infos",
|
| 13 |
+
"start_connection",
|
| 14 |
+
)
|
.venv/lib/python3.13/site-packages/aiohappyeyeballs/__pycache__/__init__.cpython-313.pyc
ADDED
|
Binary file (514 Bytes). View file
|
|
|
.venv/lib/python3.13/site-packages/aiohappyeyeballs/__pycache__/_staggered.cpython-313.pyc
ADDED
|
Binary file (8.02 kB). View file
|
|
|
.venv/lib/python3.13/site-packages/aiohappyeyeballs/__pycache__/impl.cpython-313.pyc
ADDED
|
Binary file (10.1 kB). View file
|
|
|
.venv/lib/python3.13/site-packages/aiohappyeyeballs/__pycache__/types.cpython-313.pyc
ADDED
|
Binary file (610 Bytes). View file
|
|
|
.venv/lib/python3.13/site-packages/aiohappyeyeballs/__pycache__/utils.cpython-313.pyc
ADDED
|
Binary file (3.72 kB). View file
|
|
|
.venv/lib/python3.13/site-packages/aiohappyeyeballs/_staggered.py
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import asyncio
|
| 2 |
+
import contextlib
|
| 3 |
+
|
| 4 |
+
# PY3.9: Import Callable from typing until we drop Python 3.9 support
|
| 5 |
+
# https://github.com/python/cpython/issues/87131
|
| 6 |
+
from typing import (
|
| 7 |
+
TYPE_CHECKING,
|
| 8 |
+
Any,
|
| 9 |
+
Awaitable,
|
| 10 |
+
Callable,
|
| 11 |
+
Iterable,
|
| 12 |
+
List,
|
| 13 |
+
Optional,
|
| 14 |
+
Set,
|
| 15 |
+
Tuple,
|
| 16 |
+
TypeVar,
|
| 17 |
+
Union,
|
| 18 |
+
)
|
| 19 |
+
|
| 20 |
+
_T = TypeVar("_T")
|
| 21 |
+
|
| 22 |
+
RE_RAISE_EXCEPTIONS = (SystemExit, KeyboardInterrupt)
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
def _set_result(wait_next: "asyncio.Future[None]") -> None:
|
| 26 |
+
"""Set the result of a future if it is not already done."""
|
| 27 |
+
if not wait_next.done():
|
| 28 |
+
wait_next.set_result(None)
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
async def _wait_one(
|
| 32 |
+
futures: "Iterable[asyncio.Future[Any]]",
|
| 33 |
+
loop: asyncio.AbstractEventLoop,
|
| 34 |
+
) -> _T:
|
| 35 |
+
"""Wait for the first future to complete."""
|
| 36 |
+
wait_next = loop.create_future()
|
| 37 |
+
|
| 38 |
+
def _on_completion(fut: "asyncio.Future[Any]") -> None:
|
| 39 |
+
if not wait_next.done():
|
| 40 |
+
wait_next.set_result(fut)
|
| 41 |
+
|
| 42 |
+
for f in futures:
|
| 43 |
+
f.add_done_callback(_on_completion)
|
| 44 |
+
|
| 45 |
+
try:
|
| 46 |
+
return await wait_next
|
| 47 |
+
finally:
|
| 48 |
+
for f in futures:
|
| 49 |
+
f.remove_done_callback(_on_completion)
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
async def staggered_race(
|
| 53 |
+
coro_fns: Iterable[Callable[[], Awaitable[_T]]],
|
| 54 |
+
delay: Optional[float],
|
| 55 |
+
*,
|
| 56 |
+
loop: Optional[asyncio.AbstractEventLoop] = None,
|
| 57 |
+
) -> Tuple[Optional[_T], Optional[int], List[Optional[BaseException]]]:
|
| 58 |
+
"""
|
| 59 |
+
Run coroutines with staggered start times and take the first to finish.
|
| 60 |
+
|
| 61 |
+
This method takes an iterable of coroutine functions. The first one is
|
| 62 |
+
started immediately. From then on, whenever the immediately preceding one
|
| 63 |
+
fails (raises an exception), or when *delay* seconds has passed, the next
|
| 64 |
+
coroutine is started. This continues until one of the coroutines complete
|
| 65 |
+
successfully, in which case all others are cancelled, or until all
|
| 66 |
+
coroutines fail.
|
| 67 |
+
|
| 68 |
+
The coroutines provided should be well-behaved in the following way:
|
| 69 |
+
|
| 70 |
+
* They should only ``return`` if completed successfully.
|
| 71 |
+
|
| 72 |
+
* They should always raise an exception if they did not complete
|
| 73 |
+
successfully. In particular, if they handle cancellation, they should
|
| 74 |
+
probably reraise, like this::
|
| 75 |
+
|
| 76 |
+
try:
|
| 77 |
+
# do work
|
| 78 |
+
except asyncio.CancelledError:
|
| 79 |
+
# undo partially completed work
|
| 80 |
+
raise
|
| 81 |
+
|
| 82 |
+
Args:
|
| 83 |
+
----
|
| 84 |
+
coro_fns: an iterable of coroutine functions, i.e. callables that
|
| 85 |
+
return a coroutine object when called. Use ``functools.partial`` or
|
| 86 |
+
lambdas to pass arguments.
|
| 87 |
+
|
| 88 |
+
delay: amount of time, in seconds, between starting coroutines. If
|
| 89 |
+
``None``, the coroutines will run sequentially.
|
| 90 |
+
|
| 91 |
+
loop: the event loop to use. If ``None``, the running loop is used.
|
| 92 |
+
|
| 93 |
+
Returns:
|
| 94 |
+
-------
|
| 95 |
+
tuple *(winner_result, winner_index, exceptions)* where
|
| 96 |
+
|
| 97 |
+
- *winner_result*: the result of the winning coroutine, or ``None``
|
| 98 |
+
if no coroutines won.
|
| 99 |
+
|
| 100 |
+
- *winner_index*: the index of the winning coroutine in
|
| 101 |
+
``coro_fns``, or ``None`` if no coroutines won. If the winning
|
| 102 |
+
coroutine may return None on success, *winner_index* can be used
|
| 103 |
+
to definitively determine whether any coroutine won.
|
| 104 |
+
|
| 105 |
+
- *exceptions*: list of exceptions returned by the coroutines.
|
| 106 |
+
``len(exceptions)`` is equal to the number of coroutines actually
|
| 107 |
+
started, and the order is the same as in ``coro_fns``. The winning
|
| 108 |
+
coroutine's entry is ``None``.
|
| 109 |
+
|
| 110 |
+
"""
|
| 111 |
+
loop = loop or asyncio.get_running_loop()
|
| 112 |
+
exceptions: List[Optional[BaseException]] = []
|
| 113 |
+
tasks: Set[asyncio.Task[Optional[Tuple[_T, int]]]] = set()
|
| 114 |
+
|
| 115 |
+
async def run_one_coro(
|
| 116 |
+
coro_fn: Callable[[], Awaitable[_T]],
|
| 117 |
+
this_index: int,
|
| 118 |
+
start_next: "asyncio.Future[None]",
|
| 119 |
+
) -> Optional[Tuple[_T, int]]:
|
| 120 |
+
"""
|
| 121 |
+
Run a single coroutine.
|
| 122 |
+
|
| 123 |
+
If the coroutine fails, set the exception in the exceptions list and
|
| 124 |
+
start the next coroutine by setting the result of the start_next.
|
| 125 |
+
|
| 126 |
+
If the coroutine succeeds, return the result and the index of the
|
| 127 |
+
coroutine in the coro_fns list.
|
| 128 |
+
|
| 129 |
+
If SystemExit or KeyboardInterrupt is raised, re-raise it.
|
| 130 |
+
"""
|
| 131 |
+
try:
|
| 132 |
+
result = await coro_fn()
|
| 133 |
+
except RE_RAISE_EXCEPTIONS:
|
| 134 |
+
raise
|
| 135 |
+
except BaseException as e:
|
| 136 |
+
exceptions[this_index] = e
|
| 137 |
+
_set_result(start_next) # Kickstart the next coroutine
|
| 138 |
+
return None
|
| 139 |
+
|
| 140 |
+
return result, this_index
|
| 141 |
+
|
| 142 |
+
start_next_timer: Optional[asyncio.TimerHandle] = None
|
| 143 |
+
start_next: Optional[asyncio.Future[None]]
|
| 144 |
+
task: asyncio.Task[Optional[Tuple[_T, int]]]
|
| 145 |
+
done: Union[asyncio.Future[None], asyncio.Task[Optional[Tuple[_T, int]]]]
|
| 146 |
+
coro_iter = iter(coro_fns)
|
| 147 |
+
this_index = -1
|
| 148 |
+
try:
|
| 149 |
+
while True:
|
| 150 |
+
if coro_fn := next(coro_iter, None):
|
| 151 |
+
this_index += 1
|
| 152 |
+
exceptions.append(None)
|
| 153 |
+
start_next = loop.create_future()
|
| 154 |
+
task = loop.create_task(run_one_coro(coro_fn, this_index, start_next))
|
| 155 |
+
tasks.add(task)
|
| 156 |
+
start_next_timer = (
|
| 157 |
+
loop.call_later(delay, _set_result, start_next) if delay else None
|
| 158 |
+
)
|
| 159 |
+
elif not tasks:
|
| 160 |
+
# We exhausted the coro_fns list and no tasks are running
|
| 161 |
+
# so we have no winner and all coroutines failed.
|
| 162 |
+
break
|
| 163 |
+
|
| 164 |
+
while tasks or start_next:
|
| 165 |
+
done = await _wait_one(
|
| 166 |
+
(*tasks, start_next) if start_next else tasks, loop
|
| 167 |
+
)
|
| 168 |
+
if done is start_next:
|
| 169 |
+
# The current task has failed or the timer has expired
|
| 170 |
+
# so we need to start the next task.
|
| 171 |
+
start_next = None
|
| 172 |
+
if start_next_timer:
|
| 173 |
+
start_next_timer.cancel()
|
| 174 |
+
start_next_timer = None
|
| 175 |
+
|
| 176 |
+
# Break out of the task waiting loop to start the next
|
| 177 |
+
# task.
|
| 178 |
+
break
|
| 179 |
+
|
| 180 |
+
if TYPE_CHECKING:
|
| 181 |
+
assert isinstance(done, asyncio.Task)
|
| 182 |
+
|
| 183 |
+
tasks.remove(done)
|
| 184 |
+
if winner := done.result():
|
| 185 |
+
return *winner, exceptions
|
| 186 |
+
finally:
|
| 187 |
+
# We either have:
|
| 188 |
+
# - a winner
|
| 189 |
+
# - all tasks failed
|
| 190 |
+
# - a KeyboardInterrupt or SystemExit.
|
| 191 |
+
|
| 192 |
+
#
|
| 193 |
+
# If the timer is still running, cancel it.
|
| 194 |
+
#
|
| 195 |
+
if start_next_timer:
|
| 196 |
+
start_next_timer.cancel()
|
| 197 |
+
|
| 198 |
+
#
|
| 199 |
+
# If there are any tasks left, cancel them and than
|
| 200 |
+
# wait them so they fill the exceptions list.
|
| 201 |
+
#
|
| 202 |
+
for task in tasks:
|
| 203 |
+
task.cancel()
|
| 204 |
+
with contextlib.suppress(asyncio.CancelledError):
|
| 205 |
+
await task
|
| 206 |
+
|
| 207 |
+
return None, None, exceptions
|
.venv/lib/python3.13/site-packages/aiohappyeyeballs/impl.py
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Base implementation."""
|
| 2 |
+
|
| 3 |
+
import asyncio
|
| 4 |
+
import collections
|
| 5 |
+
import contextlib
|
| 6 |
+
import functools
|
| 7 |
+
import itertools
|
| 8 |
+
import socket
|
| 9 |
+
from typing import List, Optional, Sequence, Set, Union
|
| 10 |
+
|
| 11 |
+
from . import _staggered
|
| 12 |
+
from .types import AddrInfoType, SocketFactoryType
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
async def start_connection(
|
| 16 |
+
addr_infos: Sequence[AddrInfoType],
|
| 17 |
+
*,
|
| 18 |
+
local_addr_infos: Optional[Sequence[AddrInfoType]] = None,
|
| 19 |
+
happy_eyeballs_delay: Optional[float] = None,
|
| 20 |
+
interleave: Optional[int] = None,
|
| 21 |
+
loop: Optional[asyncio.AbstractEventLoop] = None,
|
| 22 |
+
socket_factory: Optional[SocketFactoryType] = None,
|
| 23 |
+
) -> socket.socket:
|
| 24 |
+
"""
|
| 25 |
+
Connect to a TCP server.
|
| 26 |
+
|
| 27 |
+
Create a socket connection to a specified destination. The
|
| 28 |
+
destination is specified as a list of AddrInfoType tuples as
|
| 29 |
+
returned from getaddrinfo().
|
| 30 |
+
|
| 31 |
+
The arguments are, in order:
|
| 32 |
+
|
| 33 |
+
* ``family``: the address family, e.g. ``socket.AF_INET`` or
|
| 34 |
+
``socket.AF_INET6``.
|
| 35 |
+
* ``type``: the socket type, e.g. ``socket.SOCK_STREAM`` or
|
| 36 |
+
``socket.SOCK_DGRAM``.
|
| 37 |
+
* ``proto``: the protocol, e.g. ``socket.IPPROTO_TCP`` or
|
| 38 |
+
``socket.IPPROTO_UDP``.
|
| 39 |
+
* ``canonname``: the canonical name of the address, e.g.
|
| 40 |
+
``"www.python.org"``.
|
| 41 |
+
* ``sockaddr``: the socket address
|
| 42 |
+
|
| 43 |
+
This method is a coroutine which will try to establish the connection
|
| 44 |
+
in the background. When successful, the coroutine returns a
|
| 45 |
+
socket.
|
| 46 |
+
|
| 47 |
+
The expected use case is to use this method in conjunction with
|
| 48 |
+
loop.create_connection() to establish a connection to a server::
|
| 49 |
+
|
| 50 |
+
socket = await start_connection(addr_infos)
|
| 51 |
+
transport, protocol = await loop.create_connection(
|
| 52 |
+
MyProtocol, sock=socket, ...)
|
| 53 |
+
"""
|
| 54 |
+
if not (current_loop := loop):
|
| 55 |
+
current_loop = asyncio.get_running_loop()
|
| 56 |
+
|
| 57 |
+
single_addr_info = len(addr_infos) == 1
|
| 58 |
+
|
| 59 |
+
if happy_eyeballs_delay is not None and interleave is None:
|
| 60 |
+
# If using happy eyeballs, default to interleave addresses by family
|
| 61 |
+
interleave = 1
|
| 62 |
+
|
| 63 |
+
if interleave and not single_addr_info:
|
| 64 |
+
addr_infos = _interleave_addrinfos(addr_infos, interleave)
|
| 65 |
+
|
| 66 |
+
sock: Optional[socket.socket] = None
|
| 67 |
+
# uvloop can raise RuntimeError instead of OSError
|
| 68 |
+
exceptions: List[List[Union[OSError, RuntimeError]]] = []
|
| 69 |
+
if happy_eyeballs_delay is None or single_addr_info:
|
| 70 |
+
# not using happy eyeballs
|
| 71 |
+
for addrinfo in addr_infos:
|
| 72 |
+
try:
|
| 73 |
+
sock = await _connect_sock(
|
| 74 |
+
current_loop,
|
| 75 |
+
exceptions,
|
| 76 |
+
addrinfo,
|
| 77 |
+
local_addr_infos,
|
| 78 |
+
None,
|
| 79 |
+
socket_factory,
|
| 80 |
+
)
|
| 81 |
+
break
|
| 82 |
+
except (RuntimeError, OSError):
|
| 83 |
+
continue
|
| 84 |
+
else: # using happy eyeballs
|
| 85 |
+
open_sockets: Set[socket.socket] = set()
|
| 86 |
+
try:
|
| 87 |
+
sock, _, _ = await _staggered.staggered_race(
|
| 88 |
+
(
|
| 89 |
+
functools.partial(
|
| 90 |
+
_connect_sock,
|
| 91 |
+
current_loop,
|
| 92 |
+
exceptions,
|
| 93 |
+
addrinfo,
|
| 94 |
+
local_addr_infos,
|
| 95 |
+
open_sockets,
|
| 96 |
+
socket_factory,
|
| 97 |
+
)
|
| 98 |
+
for addrinfo in addr_infos
|
| 99 |
+
),
|
| 100 |
+
happy_eyeballs_delay,
|
| 101 |
+
)
|
| 102 |
+
finally:
|
| 103 |
+
# If we have a winner, staggered_race will
|
| 104 |
+
# cancel the other tasks, however there is a
|
| 105 |
+
# small race window where any of the other tasks
|
| 106 |
+
# can be done before they are cancelled which
|
| 107 |
+
# will leave the socket open. To avoid this problem
|
| 108 |
+
# we pass a set to _connect_sock to keep track of
|
| 109 |
+
# the open sockets and close them here if there
|
| 110 |
+
# are any "runner up" sockets.
|
| 111 |
+
for s in open_sockets:
|
| 112 |
+
if s is not sock:
|
| 113 |
+
with contextlib.suppress(OSError):
|
| 114 |
+
s.close()
|
| 115 |
+
open_sockets = None # type: ignore[assignment]
|
| 116 |
+
|
| 117 |
+
if sock is None:
|
| 118 |
+
all_exceptions = [exc for sub in exceptions for exc in sub]
|
| 119 |
+
try:
|
| 120 |
+
first_exception = all_exceptions[0]
|
| 121 |
+
if len(all_exceptions) == 1:
|
| 122 |
+
raise first_exception
|
| 123 |
+
else:
|
| 124 |
+
# If they all have the same str(), raise one.
|
| 125 |
+
model = str(first_exception)
|
| 126 |
+
if all(str(exc) == model for exc in all_exceptions):
|
| 127 |
+
raise first_exception
|
| 128 |
+
# Raise a combined exception so the user can see all
|
| 129 |
+
# the various error messages.
|
| 130 |
+
msg = "Multiple exceptions: {}".format(
|
| 131 |
+
", ".join(str(exc) for exc in all_exceptions)
|
| 132 |
+
)
|
| 133 |
+
# If the errno is the same for all exceptions, raise
|
| 134 |
+
# an OSError with that errno.
|
| 135 |
+
if isinstance(first_exception, OSError):
|
| 136 |
+
first_errno = first_exception.errno
|
| 137 |
+
if all(
|
| 138 |
+
isinstance(exc, OSError) and exc.errno == first_errno
|
| 139 |
+
for exc in all_exceptions
|
| 140 |
+
):
|
| 141 |
+
raise OSError(first_errno, msg)
|
| 142 |
+
elif isinstance(first_exception, RuntimeError) and all(
|
| 143 |
+
isinstance(exc, RuntimeError) for exc in all_exceptions
|
| 144 |
+
):
|
| 145 |
+
raise RuntimeError(msg)
|
| 146 |
+
# We have a mix of OSError and RuntimeError
|
| 147 |
+
# so we have to pick which one to raise.
|
| 148 |
+
# and we raise OSError for compatibility
|
| 149 |
+
raise OSError(msg)
|
| 150 |
+
finally:
|
| 151 |
+
all_exceptions = None # type: ignore[assignment]
|
| 152 |
+
exceptions = None # type: ignore[assignment]
|
| 153 |
+
|
| 154 |
+
return sock
|
| 155 |
+
|
| 156 |
+
|
| 157 |
+
async def _connect_sock(
|
| 158 |
+
loop: asyncio.AbstractEventLoop,
|
| 159 |
+
exceptions: List[List[Union[OSError, RuntimeError]]],
|
| 160 |
+
addr_info: AddrInfoType,
|
| 161 |
+
local_addr_infos: Optional[Sequence[AddrInfoType]] = None,
|
| 162 |
+
open_sockets: Optional[Set[socket.socket]] = None,
|
| 163 |
+
socket_factory: Optional[SocketFactoryType] = None,
|
| 164 |
+
) -> socket.socket:
|
| 165 |
+
"""
|
| 166 |
+
Create, bind and connect one socket.
|
| 167 |
+
|
| 168 |
+
If open_sockets is passed, add the socket to the set of open sockets.
|
| 169 |
+
Any failure caught here will remove the socket from the set and close it.
|
| 170 |
+
|
| 171 |
+
Callers can use this set to close any sockets that are not the winner
|
| 172 |
+
of all staggered tasks in the result there are runner up sockets aka
|
| 173 |
+
multiple winners.
|
| 174 |
+
"""
|
| 175 |
+
my_exceptions: List[Union[OSError, RuntimeError]] = []
|
| 176 |
+
exceptions.append(my_exceptions)
|
| 177 |
+
family, type_, proto, _, address = addr_info
|
| 178 |
+
sock = None
|
| 179 |
+
try:
|
| 180 |
+
if socket_factory is not None:
|
| 181 |
+
sock = socket_factory(addr_info)
|
| 182 |
+
else:
|
| 183 |
+
sock = socket.socket(family=family, type=type_, proto=proto)
|
| 184 |
+
if open_sockets is not None:
|
| 185 |
+
open_sockets.add(sock)
|
| 186 |
+
sock.setblocking(False)
|
| 187 |
+
if local_addr_infos is not None:
|
| 188 |
+
for lfamily, _, _, _, laddr in local_addr_infos:
|
| 189 |
+
# skip local addresses of different family
|
| 190 |
+
if lfamily != family:
|
| 191 |
+
continue
|
| 192 |
+
try:
|
| 193 |
+
sock.bind(laddr)
|
| 194 |
+
break
|
| 195 |
+
except OSError as exc:
|
| 196 |
+
msg = (
|
| 197 |
+
f"error while attempting to bind on "
|
| 198 |
+
f"address {laddr!r}: "
|
| 199 |
+
f"{(exc.strerror or '').lower()}"
|
| 200 |
+
)
|
| 201 |
+
exc = OSError(exc.errno, msg)
|
| 202 |
+
my_exceptions.append(exc)
|
| 203 |
+
else: # all bind attempts failed
|
| 204 |
+
if my_exceptions:
|
| 205 |
+
raise my_exceptions.pop()
|
| 206 |
+
else:
|
| 207 |
+
raise OSError(f"no matching local address with {family=} found")
|
| 208 |
+
await loop.sock_connect(sock, address)
|
| 209 |
+
return sock
|
| 210 |
+
except (RuntimeError, OSError) as exc:
|
| 211 |
+
my_exceptions.append(exc)
|
| 212 |
+
if sock is not None:
|
| 213 |
+
if open_sockets is not None:
|
| 214 |
+
open_sockets.remove(sock)
|
| 215 |
+
try:
|
| 216 |
+
sock.close()
|
| 217 |
+
except OSError as e:
|
| 218 |
+
my_exceptions.append(e)
|
| 219 |
+
raise
|
| 220 |
+
raise
|
| 221 |
+
except:
|
| 222 |
+
if sock is not None:
|
| 223 |
+
if open_sockets is not None:
|
| 224 |
+
open_sockets.remove(sock)
|
| 225 |
+
try:
|
| 226 |
+
sock.close()
|
| 227 |
+
except OSError as e:
|
| 228 |
+
my_exceptions.append(e)
|
| 229 |
+
raise
|
| 230 |
+
raise
|
| 231 |
+
finally:
|
| 232 |
+
exceptions = my_exceptions = None # type: ignore[assignment]
|
| 233 |
+
|
| 234 |
+
|
| 235 |
+
def _interleave_addrinfos(
|
| 236 |
+
addrinfos: Sequence[AddrInfoType], first_address_family_count: int = 1
|
| 237 |
+
) -> List[AddrInfoType]:
|
| 238 |
+
"""Interleave list of addrinfo tuples by family."""
|
| 239 |
+
# Group addresses by family
|
| 240 |
+
addrinfos_by_family: collections.OrderedDict[int, List[AddrInfoType]] = (
|
| 241 |
+
collections.OrderedDict()
|
| 242 |
+
)
|
| 243 |
+
for addr in addrinfos:
|
| 244 |
+
family = addr[0]
|
| 245 |
+
if family not in addrinfos_by_family:
|
| 246 |
+
addrinfos_by_family[family] = []
|
| 247 |
+
addrinfos_by_family[family].append(addr)
|
| 248 |
+
addrinfos_lists = list(addrinfos_by_family.values())
|
| 249 |
+
|
| 250 |
+
reordered: List[AddrInfoType] = []
|
| 251 |
+
if first_address_family_count > 1:
|
| 252 |
+
reordered.extend(addrinfos_lists[0][: first_address_family_count - 1])
|
| 253 |
+
del addrinfos_lists[0][: first_address_family_count - 1]
|
| 254 |
+
reordered.extend(
|
| 255 |
+
a
|
| 256 |
+
for a in itertools.chain.from_iterable(itertools.zip_longest(*addrinfos_lists))
|
| 257 |
+
if a is not None
|
| 258 |
+
)
|
| 259 |
+
return reordered
|
.venv/lib/python3.13/site-packages/aiohappyeyeballs/py.typed
ADDED
|
File without changes
|
.venv/lib/python3.13/site-packages/aiohappyeyeballs/types.py
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Types for aiohappyeyeballs."""
|
| 2 |
+
|
| 3 |
+
import socket
|
| 4 |
+
|
| 5 |
+
# PY3.9: Import Callable from typing until we drop Python 3.9 support
|
| 6 |
+
# https://github.com/python/cpython/issues/87131
|
| 7 |
+
from typing import Callable, Tuple, Union
|
| 8 |
+
|
| 9 |
+
AddrInfoType = Tuple[
|
| 10 |
+
Union[int, socket.AddressFamily],
|
| 11 |
+
Union[int, socket.SocketKind],
|
| 12 |
+
int,
|
| 13 |
+
str,
|
| 14 |
+
Tuple, # type: ignore[type-arg]
|
| 15 |
+
]
|
| 16 |
+
|
| 17 |
+
SocketFactoryType = Callable[[AddrInfoType], socket.socket]
|
.venv/lib/python3.13/site-packages/aiohappyeyeballs/utils.py
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Utility functions for aiohappyeyeballs."""
|
| 2 |
+
|
| 3 |
+
import ipaddress
|
| 4 |
+
import socket
|
| 5 |
+
from typing import Dict, List, Optional, Tuple, Union
|
| 6 |
+
|
| 7 |
+
from .types import AddrInfoType
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def addr_to_addr_infos(
|
| 11 |
+
addr: Optional[
|
| 12 |
+
Union[Tuple[str, int, int, int], Tuple[str, int, int], Tuple[str, int]]
|
| 13 |
+
],
|
| 14 |
+
) -> Optional[List[AddrInfoType]]:
|
| 15 |
+
"""Convert an address tuple to a list of addr_info tuples."""
|
| 16 |
+
if addr is None:
|
| 17 |
+
return None
|
| 18 |
+
host = addr[0]
|
| 19 |
+
port = addr[1]
|
| 20 |
+
is_ipv6 = ":" in host
|
| 21 |
+
if is_ipv6:
|
| 22 |
+
flowinfo = 0
|
| 23 |
+
scopeid = 0
|
| 24 |
+
addr_len = len(addr)
|
| 25 |
+
if addr_len >= 4:
|
| 26 |
+
scopeid = addr[3] # type: ignore[misc]
|
| 27 |
+
if addr_len >= 3:
|
| 28 |
+
flowinfo = addr[2] # type: ignore[misc]
|
| 29 |
+
addr = (host, port, flowinfo, scopeid)
|
| 30 |
+
family = socket.AF_INET6
|
| 31 |
+
else:
|
| 32 |
+
addr = (host, port)
|
| 33 |
+
family = socket.AF_INET
|
| 34 |
+
return [(family, socket.SOCK_STREAM, socket.IPPROTO_TCP, "", addr)]
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
def pop_addr_infos_interleave(
|
| 38 |
+
addr_infos: List[AddrInfoType], interleave: Optional[int] = None
|
| 39 |
+
) -> None:
|
| 40 |
+
"""
|
| 41 |
+
Pop addr_info from the list of addr_infos by family up to interleave times.
|
| 42 |
+
|
| 43 |
+
The interleave parameter is used to know how many addr_infos for
|
| 44 |
+
each family should be popped of the top of the list.
|
| 45 |
+
"""
|
| 46 |
+
seen: Dict[int, int] = {}
|
| 47 |
+
if interleave is None:
|
| 48 |
+
interleave = 1
|
| 49 |
+
to_remove: List[AddrInfoType] = []
|
| 50 |
+
for addr_info in addr_infos:
|
| 51 |
+
family = addr_info[0]
|
| 52 |
+
if family not in seen:
|
| 53 |
+
seen[family] = 0
|
| 54 |
+
if seen[family] < interleave:
|
| 55 |
+
to_remove.append(addr_info)
|
| 56 |
+
seen[family] += 1
|
| 57 |
+
for addr_info in to_remove:
|
| 58 |
+
addr_infos.remove(addr_info)
|
| 59 |
+
|
| 60 |
+
|
| 61 |
+
def _addr_tuple_to_ip_address(
|
| 62 |
+
addr: Union[Tuple[str, int], Tuple[str, int, int, int]],
|
| 63 |
+
) -> Union[
|
| 64 |
+
Tuple[ipaddress.IPv4Address, int], Tuple[ipaddress.IPv6Address, int, int, int]
|
| 65 |
+
]:
|
| 66 |
+
"""Convert an address tuple to an IPv4Address."""
|
| 67 |
+
return (ipaddress.ip_address(addr[0]), *addr[1:])
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
def remove_addr_infos(
|
| 71 |
+
addr_infos: List[AddrInfoType],
|
| 72 |
+
addr: Union[Tuple[str, int], Tuple[str, int, int, int]],
|
| 73 |
+
) -> None:
|
| 74 |
+
"""
|
| 75 |
+
Remove an address from the list of addr_infos.
|
| 76 |
+
|
| 77 |
+
The addr value is typically the return value of
|
| 78 |
+
sock.getpeername().
|
| 79 |
+
"""
|
| 80 |
+
bad_addrs_infos: List[AddrInfoType] = []
|
| 81 |
+
for addr_info in addr_infos:
|
| 82 |
+
if addr_info[-1] == addr:
|
| 83 |
+
bad_addrs_infos.append(addr_info)
|
| 84 |
+
if bad_addrs_infos:
|
| 85 |
+
for bad_addr_info in bad_addrs_infos:
|
| 86 |
+
addr_infos.remove(bad_addr_info)
|
| 87 |
+
return
|
| 88 |
+
# Slow path in case addr is formatted differently
|
| 89 |
+
match_addr = _addr_tuple_to_ip_address(addr)
|
| 90 |
+
for addr_info in addr_infos:
|
| 91 |
+
if match_addr == _addr_tuple_to_ip_address(addr_info[-1]):
|
| 92 |
+
bad_addrs_infos.append(addr_info)
|
| 93 |
+
if bad_addrs_infos:
|
| 94 |
+
for bad_addr_info in bad_addrs_infos:
|
| 95 |
+
addr_infos.remove(bad_addr_info)
|
| 96 |
+
return
|
| 97 |
+
raise ValueError(f"Address {addr} not found in addr_infos")
|
.venv/lib/python3.13/site-packages/aiohttp-3.13.3.dist-info/INSTALLER
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
pip
|
.venv/lib/python3.13/site-packages/aiohttp-3.13.3.dist-info/METADATA
ADDED
|
@@ -0,0 +1,262 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Metadata-Version: 2.4
|
| 2 |
+
Name: aiohttp
|
| 3 |
+
Version: 3.13.3
|
| 4 |
+
Summary: Async http client/server framework (asyncio)
|
| 5 |
+
Maintainer-email: aiohttp team <team@aiohttp.org>
|
| 6 |
+
License: Apache-2.0 AND MIT
|
| 7 |
+
Project-URL: Homepage, https://github.com/aio-libs/aiohttp
|
| 8 |
+
Project-URL: Chat: Matrix, https://matrix.to/#/#aio-libs:matrix.org
|
| 9 |
+
Project-URL: Chat: Matrix Space, https://matrix.to/#/#aio-libs-space:matrix.org
|
| 10 |
+
Project-URL: CI: GitHub Actions, https://github.com/aio-libs/aiohttp/actions?query=workflow%3ACI
|
| 11 |
+
Project-URL: Coverage: codecov, https://codecov.io/github/aio-libs/aiohttp
|
| 12 |
+
Project-URL: Docs: Changelog, https://docs.aiohttp.org/en/stable/changes.html
|
| 13 |
+
Project-URL: Docs: RTD, https://docs.aiohttp.org
|
| 14 |
+
Project-URL: GitHub: issues, https://github.com/aio-libs/aiohttp/issues
|
| 15 |
+
Project-URL: GitHub: repo, https://github.com/aio-libs/aiohttp
|
| 16 |
+
Classifier: Development Status :: 5 - Production/Stable
|
| 17 |
+
Classifier: Framework :: AsyncIO
|
| 18 |
+
Classifier: Intended Audience :: Developers
|
| 19 |
+
Classifier: Operating System :: POSIX
|
| 20 |
+
Classifier: Operating System :: MacOS :: MacOS X
|
| 21 |
+
Classifier: Operating System :: Microsoft :: Windows
|
| 22 |
+
Classifier: Programming Language :: Python
|
| 23 |
+
Classifier: Programming Language :: Python :: 3
|
| 24 |
+
Classifier: Programming Language :: Python :: 3.9
|
| 25 |
+
Classifier: Programming Language :: Python :: 3.10
|
| 26 |
+
Classifier: Programming Language :: Python :: 3.11
|
| 27 |
+
Classifier: Programming Language :: Python :: 3.12
|
| 28 |
+
Classifier: Programming Language :: Python :: 3.13
|
| 29 |
+
Classifier: Programming Language :: Python :: 3.14
|
| 30 |
+
Classifier: Topic :: Internet :: WWW/HTTP
|
| 31 |
+
Requires-Python: >=3.9
|
| 32 |
+
Description-Content-Type: text/x-rst
|
| 33 |
+
License-File: LICENSE.txt
|
| 34 |
+
License-File: vendor/llhttp/LICENSE
|
| 35 |
+
Requires-Dist: aiohappyeyeballs>=2.5.0
|
| 36 |
+
Requires-Dist: aiosignal>=1.4.0
|
| 37 |
+
Requires-Dist: async-timeout<6.0,>=4.0; python_version < "3.11"
|
| 38 |
+
Requires-Dist: attrs>=17.3.0
|
| 39 |
+
Requires-Dist: frozenlist>=1.1.1
|
| 40 |
+
Requires-Dist: multidict<7.0,>=4.5
|
| 41 |
+
Requires-Dist: propcache>=0.2.0
|
| 42 |
+
Requires-Dist: yarl<2.0,>=1.17.0
|
| 43 |
+
Provides-Extra: speedups
|
| 44 |
+
Requires-Dist: aiodns>=3.3.0; extra == "speedups"
|
| 45 |
+
Requires-Dist: Brotli>=1.2; platform_python_implementation == "CPython" and extra == "speedups"
|
| 46 |
+
Requires-Dist: brotlicffi>=1.2; platform_python_implementation != "CPython" and extra == "speedups"
|
| 47 |
+
Requires-Dist: backports.zstd; (platform_python_implementation == "CPython" and python_version < "3.14") and extra == "speedups"
|
| 48 |
+
Dynamic: license-file
|
| 49 |
+
|
| 50 |
+
==================================
|
| 51 |
+
Async http client/server framework
|
| 52 |
+
==================================
|
| 53 |
+
|
| 54 |
+
.. image:: https://raw.githubusercontent.com/aio-libs/aiohttp/master/docs/aiohttp-plain.svg
|
| 55 |
+
:height: 64px
|
| 56 |
+
:width: 64px
|
| 57 |
+
:alt: aiohttp logo
|
| 58 |
+
|
| 59 |
+
|
|
| 60 |
+
|
| 61 |
+
.. image:: https://github.com/aio-libs/aiohttp/workflows/CI/badge.svg
|
| 62 |
+
:target: https://github.com/aio-libs/aiohttp/actions?query=workflow%3ACI
|
| 63 |
+
:alt: GitHub Actions status for master branch
|
| 64 |
+
|
| 65 |
+
.. image:: https://codecov.io/gh/aio-libs/aiohttp/branch/master/graph/badge.svg
|
| 66 |
+
:target: https://codecov.io/gh/aio-libs/aiohttp
|
| 67 |
+
:alt: codecov.io status for master branch
|
| 68 |
+
|
| 69 |
+
.. image:: https://badge.fury.io/py/aiohttp.svg
|
| 70 |
+
:target: https://pypi.org/project/aiohttp
|
| 71 |
+
:alt: Latest PyPI package version
|
| 72 |
+
|
| 73 |
+
.. image:: https://img.shields.io/pypi/dm/aiohttp
|
| 74 |
+
:target: https://pypistats.org/packages/aiohttp
|
| 75 |
+
:alt: Downloads count
|
| 76 |
+
|
| 77 |
+
.. image:: https://readthedocs.org/projects/aiohttp/badge/?version=latest
|
| 78 |
+
:target: https://docs.aiohttp.org/
|
| 79 |
+
:alt: Latest Read The Docs
|
| 80 |
+
|
| 81 |
+
.. image:: https://img.shields.io/endpoint?url=https://codspeed.io/badge.json
|
| 82 |
+
:target: https://codspeed.io/aio-libs/aiohttp
|
| 83 |
+
:alt: Codspeed.io status for aiohttp
|
| 84 |
+
|
| 85 |
+
|
| 86 |
+
Key Features
|
| 87 |
+
============
|
| 88 |
+
|
| 89 |
+
- Supports both client and server side of HTTP protocol.
|
| 90 |
+
- Supports both client and server Web-Sockets out-of-the-box and avoids
|
| 91 |
+
Callback Hell.
|
| 92 |
+
- Provides Web-server with middleware and pluggable routing.
|
| 93 |
+
|
| 94 |
+
|
| 95 |
+
Getting started
|
| 96 |
+
===============
|
| 97 |
+
|
| 98 |
+
Client
|
| 99 |
+
------
|
| 100 |
+
|
| 101 |
+
To get something from the web:
|
| 102 |
+
|
| 103 |
+
.. code-block:: python
|
| 104 |
+
|
| 105 |
+
import aiohttp
|
| 106 |
+
import asyncio
|
| 107 |
+
|
| 108 |
+
async def main():
|
| 109 |
+
|
| 110 |
+
async with aiohttp.ClientSession() as session:
|
| 111 |
+
async with session.get('http://python.org') as response:
|
| 112 |
+
|
| 113 |
+
print("Status:", response.status)
|
| 114 |
+
print("Content-type:", response.headers['content-type'])
|
| 115 |
+
|
| 116 |
+
html = await response.text()
|
| 117 |
+
print("Body:", html[:15], "...")
|
| 118 |
+
|
| 119 |
+
asyncio.run(main())
|
| 120 |
+
|
| 121 |
+
This prints:
|
| 122 |
+
|
| 123 |
+
.. code-block::
|
| 124 |
+
|
| 125 |
+
Status: 200
|
| 126 |
+
Content-type: text/html; charset=utf-8
|
| 127 |
+
Body: <!doctype html> ...
|
| 128 |
+
|
| 129 |
+
Coming from `requests <https://requests.readthedocs.io/>`_ ? Read `why we need so many lines <https://aiohttp.readthedocs.io/en/latest/http_request_lifecycle.html>`_.
|
| 130 |
+
|
| 131 |
+
Server
|
| 132 |
+
------
|
| 133 |
+
|
| 134 |
+
An example using a simple server:
|
| 135 |
+
|
| 136 |
+
.. code-block:: python
|
| 137 |
+
|
| 138 |
+
# examples/server_simple.py
|
| 139 |
+
from aiohttp import web
|
| 140 |
+
|
| 141 |
+
async def handle(request):
|
| 142 |
+
name = request.match_info.get('name', "Anonymous")
|
| 143 |
+
text = "Hello, " + name
|
| 144 |
+
return web.Response(text=text)
|
| 145 |
+
|
| 146 |
+
async def wshandle(request):
|
| 147 |
+
ws = web.WebSocketResponse()
|
| 148 |
+
await ws.prepare(request)
|
| 149 |
+
|
| 150 |
+
async for msg in ws:
|
| 151 |
+
if msg.type == web.WSMsgType.text:
|
| 152 |
+
await ws.send_str("Hello, {}".format(msg.data))
|
| 153 |
+
elif msg.type == web.WSMsgType.binary:
|
| 154 |
+
await ws.send_bytes(msg.data)
|
| 155 |
+
elif msg.type == web.WSMsgType.close:
|
| 156 |
+
break
|
| 157 |
+
|
| 158 |
+
return ws
|
| 159 |
+
|
| 160 |
+
|
| 161 |
+
app = web.Application()
|
| 162 |
+
app.add_routes([web.get('/', handle),
|
| 163 |
+
web.get('/echo', wshandle),
|
| 164 |
+
web.get('/{name}', handle)])
|
| 165 |
+
|
| 166 |
+
if __name__ == '__main__':
|
| 167 |
+
web.run_app(app)
|
| 168 |
+
|
| 169 |
+
|
| 170 |
+
Documentation
|
| 171 |
+
=============
|
| 172 |
+
|
| 173 |
+
https://aiohttp.readthedocs.io/
|
| 174 |
+
|
| 175 |
+
|
| 176 |
+
Demos
|
| 177 |
+
=====
|
| 178 |
+
|
| 179 |
+
https://github.com/aio-libs/aiohttp-demos
|
| 180 |
+
|
| 181 |
+
|
| 182 |
+
External links
|
| 183 |
+
==============
|
| 184 |
+
|
| 185 |
+
* `Third party libraries
|
| 186 |
+
<http://aiohttp.readthedocs.io/en/latest/third_party.html>`_
|
| 187 |
+
* `Built with aiohttp
|
| 188 |
+
<http://aiohttp.readthedocs.io/en/latest/built_with.html>`_
|
| 189 |
+
* `Powered by aiohttp
|
| 190 |
+
<http://aiohttp.readthedocs.io/en/latest/powered_by.html>`_
|
| 191 |
+
|
| 192 |
+
Feel free to make a Pull Request for adding your link to these pages!
|
| 193 |
+
|
| 194 |
+
|
| 195 |
+
Communication channels
|
| 196 |
+
======================
|
| 197 |
+
|
| 198 |
+
*aio-libs Discussions*: https://github.com/aio-libs/aiohttp/discussions
|
| 199 |
+
|
| 200 |
+
*Matrix*: `#aio-libs:matrix.org <https://matrix.to/#/#aio-libs:matrix.org>`_
|
| 201 |
+
|
| 202 |
+
We support `Stack Overflow
|
| 203 |
+
<https://stackoverflow.com/questions/tagged/aiohttp>`_.
|
| 204 |
+
Please add *aiohttp* tag to your question there.
|
| 205 |
+
|
| 206 |
+
Requirements
|
| 207 |
+
============
|
| 208 |
+
|
| 209 |
+
- attrs_
|
| 210 |
+
- multidict_
|
| 211 |
+
- yarl_
|
| 212 |
+
- frozenlist_
|
| 213 |
+
|
| 214 |
+
Optionally you may install the aiodns_ library (highly recommended for sake of speed).
|
| 215 |
+
|
| 216 |
+
.. _aiodns: https://pypi.python.org/pypi/aiodns
|
| 217 |
+
.. _attrs: https://github.com/python-attrs/attrs
|
| 218 |
+
.. _multidict: https://pypi.python.org/pypi/multidict
|
| 219 |
+
.. _frozenlist: https://pypi.org/project/frozenlist/
|
| 220 |
+
.. _yarl: https://pypi.python.org/pypi/yarl
|
| 221 |
+
.. _async-timeout: https://pypi.python.org/pypi/async_timeout
|
| 222 |
+
|
| 223 |
+
License
|
| 224 |
+
=======
|
| 225 |
+
|
| 226 |
+
``aiohttp`` is offered under the Apache 2 license.
|
| 227 |
+
|
| 228 |
+
|
| 229 |
+
Keepsafe
|
| 230 |
+
========
|
| 231 |
+
|
| 232 |
+
The aiohttp community would like to thank Keepsafe
|
| 233 |
+
(https://www.getkeepsafe.com) for its support in the early days of
|
| 234 |
+
the project.
|
| 235 |
+
|
| 236 |
+
|
| 237 |
+
Source code
|
| 238 |
+
===========
|
| 239 |
+
|
| 240 |
+
The latest developer version is available in a GitHub repository:
|
| 241 |
+
https://github.com/aio-libs/aiohttp
|
| 242 |
+
|
| 243 |
+
Benchmarks
|
| 244 |
+
==========
|
| 245 |
+
|
| 246 |
+
If you are interested in efficiency, the AsyncIO community maintains a
|
| 247 |
+
list of benchmarks on the official wiki:
|
| 248 |
+
https://github.com/python/asyncio/wiki/Benchmarks
|
| 249 |
+
|
| 250 |
+
--------
|
| 251 |
+
|
| 252 |
+
.. image:: https://img.shields.io/matrix/aio-libs:matrix.org?label=Discuss%20on%20Matrix%20at%20%23aio-libs%3Amatrix.org&logo=matrix&server_fqdn=matrix.org&style=flat
|
| 253 |
+
:target: https://matrix.to/#/%23aio-libs:matrix.org
|
| 254 |
+
:alt: Matrix Room — #aio-libs:matrix.org
|
| 255 |
+
|
| 256 |
+
.. image:: https://img.shields.io/matrix/aio-libs-space:matrix.org?label=Discuss%20on%20Matrix%20at%20%23aio-libs-space%3Amatrix.org&logo=matrix&server_fqdn=matrix.org&style=flat
|
| 257 |
+
:target: https://matrix.to/#/%23aio-libs-space:matrix.org
|
| 258 |
+
:alt: Matrix Space — #aio-libs-space:matrix.org
|
| 259 |
+
|
| 260 |
+
.. image:: https://insights.linuxfoundation.org/api/badge/health-score?project=aiohttp
|
| 261 |
+
:target: https://insights.linuxfoundation.org/project/aiohttp
|
| 262 |
+
:alt: LFX Health Score
|
.venv/lib/python3.13/site-packages/aiohttp-3.13.3.dist-info/RECORD
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
aiohttp-3.13.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
| 2 |
+
aiohttp-3.13.3.dist-info/METADATA,sha256=CQROZCStho-eb7xiFIuAzj30JuupEU_jHpYDFiG_HhM,8145
|
| 3 |
+
aiohttp-3.13.3.dist-info/RECORD,,
|
| 4 |
+
aiohttp-3.13.3.dist-info/WHEEL,sha256=2iHh9e2o6T3nHtu_NVT7Cs7pebIqF94rZK8zrQfgoJI,190
|
| 5 |
+
aiohttp-3.13.3.dist-info/licenses/LICENSE.txt,sha256=n4DQ2311WpQdtFchcsJw7L2PCCuiFd3QlZhZQu2Uqes,588
|
| 6 |
+
aiohttp-3.13.3.dist-info/licenses/vendor/llhttp/LICENSE,sha256=68qFTgE0zSVtZzYnwgSZ9CV363S6zwi58ltianPJEnc,1105
|
| 7 |
+
aiohttp-3.13.3.dist-info/top_level.txt,sha256=iv-JIaacmTl-hSho3QmphcKnbRRYx1st47yjz_178Ro,8
|
| 8 |
+
aiohttp/.hash/_cparser.pxd.hash,sha256=pjs-sEXNw_eijXGAedwG-BHnlFp8B7sOCgUagIWaU2A,121
|
| 9 |
+
aiohttp/.hash/_find_header.pxd.hash,sha256=_mbpD6vM-CVCKq3ulUvsOAz5Wdo88wrDzfpOsMQaMNA,125
|
| 10 |
+
aiohttp/.hash/_http_parser.pyx.hash,sha256=RKkD9x-EhXksvXrpCaTNWYtffb52urLvuTnxbTN2Lmw,125
|
| 11 |
+
aiohttp/.hash/_http_writer.pyx.hash,sha256=9txOh7t7c3y-vLmiuEY5dltmXvEo0CYyU4U853yyv9E,125
|
| 12 |
+
aiohttp/.hash/hdrs.py.hash,sha256=v6IaKbsxjsdQxBzhb5AjP0x_9G3rUe84D7avf7AI4cs,116
|
| 13 |
+
aiohttp/__init__.py,sha256=QWssFaD-DaFFcwP36lLUQzRmlSZ5KxivJBU-yg5C1wg,8302
|
| 14 |
+
aiohttp/__pycache__/__init__.cpython-313.pyc,,
|
| 15 |
+
aiohttp/__pycache__/_cookie_helpers.cpython-313.pyc,,
|
| 16 |
+
aiohttp/__pycache__/abc.cpython-313.pyc,,
|
| 17 |
+
aiohttp/__pycache__/base_protocol.cpython-313.pyc,,
|
| 18 |
+
aiohttp/__pycache__/client.cpython-313.pyc,,
|
| 19 |
+
aiohttp/__pycache__/client_exceptions.cpython-313.pyc,,
|
| 20 |
+
aiohttp/__pycache__/client_middleware_digest_auth.cpython-313.pyc,,
|
| 21 |
+
aiohttp/__pycache__/client_middlewares.cpython-313.pyc,,
|
| 22 |
+
aiohttp/__pycache__/client_proto.cpython-313.pyc,,
|
| 23 |
+
aiohttp/__pycache__/client_reqrep.cpython-313.pyc,,
|
| 24 |
+
aiohttp/__pycache__/client_ws.cpython-313.pyc,,
|
| 25 |
+
aiohttp/__pycache__/compression_utils.cpython-313.pyc,,
|
| 26 |
+
aiohttp/__pycache__/connector.cpython-313.pyc,,
|
| 27 |
+
aiohttp/__pycache__/cookiejar.cpython-313.pyc,,
|
| 28 |
+
aiohttp/__pycache__/formdata.cpython-313.pyc,,
|
| 29 |
+
aiohttp/__pycache__/hdrs.cpython-313.pyc,,
|
| 30 |
+
aiohttp/__pycache__/helpers.cpython-313.pyc,,
|
| 31 |
+
aiohttp/__pycache__/http.cpython-313.pyc,,
|
| 32 |
+
aiohttp/__pycache__/http_exceptions.cpython-313.pyc,,
|
| 33 |
+
aiohttp/__pycache__/http_parser.cpython-313.pyc,,
|
| 34 |
+
aiohttp/__pycache__/http_websocket.cpython-313.pyc,,
|
| 35 |
+
aiohttp/__pycache__/http_writer.cpython-313.pyc,,
|
| 36 |
+
aiohttp/__pycache__/log.cpython-313.pyc,,
|
| 37 |
+
aiohttp/__pycache__/multipart.cpython-313.pyc,,
|
| 38 |
+
aiohttp/__pycache__/payload.cpython-313.pyc,,
|
| 39 |
+
aiohttp/__pycache__/payload_streamer.cpython-313.pyc,,
|
| 40 |
+
aiohttp/__pycache__/pytest_plugin.cpython-313.pyc,,
|
| 41 |
+
aiohttp/__pycache__/resolver.cpython-313.pyc,,
|
| 42 |
+
aiohttp/__pycache__/streams.cpython-313.pyc,,
|
| 43 |
+
aiohttp/__pycache__/tcp_helpers.cpython-313.pyc,,
|
| 44 |
+
aiohttp/__pycache__/test_utils.cpython-313.pyc,,
|
| 45 |
+
aiohttp/__pycache__/tracing.cpython-313.pyc,,
|
| 46 |
+
aiohttp/__pycache__/typedefs.cpython-313.pyc,,
|
| 47 |
+
aiohttp/__pycache__/web.cpython-313.pyc,,
|
| 48 |
+
aiohttp/__pycache__/web_app.cpython-313.pyc,,
|
| 49 |
+
aiohttp/__pycache__/web_exceptions.cpython-313.pyc,,
|
| 50 |
+
aiohttp/__pycache__/web_fileresponse.cpython-313.pyc,,
|
| 51 |
+
aiohttp/__pycache__/web_log.cpython-313.pyc,,
|
| 52 |
+
aiohttp/__pycache__/web_middlewares.cpython-313.pyc,,
|
| 53 |
+
aiohttp/__pycache__/web_protocol.cpython-313.pyc,,
|
| 54 |
+
aiohttp/__pycache__/web_request.cpython-313.pyc,,
|
| 55 |
+
aiohttp/__pycache__/web_response.cpython-313.pyc,,
|
| 56 |
+
aiohttp/__pycache__/web_routedef.cpython-313.pyc,,
|
| 57 |
+
aiohttp/__pycache__/web_runner.cpython-313.pyc,,
|
| 58 |
+
aiohttp/__pycache__/web_server.cpython-313.pyc,,
|
| 59 |
+
aiohttp/__pycache__/web_urldispatcher.cpython-313.pyc,,
|
| 60 |
+
aiohttp/__pycache__/web_ws.cpython-313.pyc,,
|
| 61 |
+
aiohttp/__pycache__/worker.cpython-313.pyc,,
|
| 62 |
+
aiohttp/_cookie_helpers.py,sha256=_p7y-B8OCAk7FLjByiuwFIpDLGuNoJn3_vixzymAFnE,13659
|
| 63 |
+
aiohttp/_cparser.pxd,sha256=UnbUYCHg4NdXfgyRVYAMv2KTLWClB4P-xCrvtj_r7ew,4295
|
| 64 |
+
aiohttp/_find_header.pxd,sha256=0GfwFCPN2zxEKTO1_MA5sYq2UfzsG8kcV3aTqvwlz3g,68
|
| 65 |
+
aiohttp/_headers.pxi,sha256=n701k28dVPjwRnx5j6LpJhLTfj7dqu2vJt7f0O60Oyg,2007
|
| 66 |
+
aiohttp/_http_parser.cpython-313-x86_64-linux-gnu.so,sha256=160haCVT52vor9LgBg6usUfWpdlyARNZ3uP3Ug2mPcE,2817968
|
| 67 |
+
aiohttp/_http_parser.pyx,sha256=-YI8YIY4uKd_7Bwr0o3FwEPwjHdexZ5-Ji3XS067c4Q,28261
|
| 68 |
+
aiohttp/_http_writer.cpython-313-x86_64-linux-gnu.so,sha256=hza1GeOo_l51LoJEYq0SSCHlASBp7kQ-HfhVDwwiabM,539824
|
| 69 |
+
aiohttp/_http_writer.pyx,sha256=VlFEBM6HoVv8a0AAJtc6JwFlsv2-cDE8-gB94p3dfhQ,4664
|
| 70 |
+
aiohttp/_websocket/.hash/mask.pxd.hash,sha256=Y0zBddk_ck3pi9-BFzMcpkcvCKvwvZ4GTtZFb9u1nxQ,128
|
| 71 |
+
aiohttp/_websocket/.hash/mask.pyx.hash,sha256=90owpXYM8_kIma4KUcOxhWSk-Uv4NVMBoCYeFM1B3d0,128
|
| 72 |
+
aiohttp/_websocket/.hash/reader_c.pxd.hash,sha256=5xf3oobk6vx4xbJm-xtZ1_QufB8fYFtLQV2MNdqUc1w,132
|
| 73 |
+
aiohttp/_websocket/__init__.py,sha256=Mar3R9_vBN_Ea4lsW7iTAVXD7OKswKPGqF5xgSyt77k,44
|
| 74 |
+
aiohttp/_websocket/__pycache__/__init__.cpython-313.pyc,,
|
| 75 |
+
aiohttp/_websocket/__pycache__/helpers.cpython-313.pyc,,
|
| 76 |
+
aiohttp/_websocket/__pycache__/models.cpython-313.pyc,,
|
| 77 |
+
aiohttp/_websocket/__pycache__/reader.cpython-313.pyc,,
|
| 78 |
+
aiohttp/_websocket/__pycache__/reader_c.cpython-313.pyc,,
|
| 79 |
+
aiohttp/_websocket/__pycache__/reader_py.cpython-313.pyc,,
|
| 80 |
+
aiohttp/_websocket/__pycache__/writer.cpython-313.pyc,,
|
| 81 |
+
aiohttp/_websocket/helpers.py,sha256=P-XLv8IUaihKzDenVUqfKU5DJbWE5HvG8uhvUZK8Ic4,5038
|
| 82 |
+
aiohttp/_websocket/mask.cpython-313-x86_64-linux-gnu.so,sha256=e2EZncw1YnRuIQn9O_-eZSosdge6iwqG18ckdeqdx1k,246592
|
| 83 |
+
aiohttp/_websocket/mask.pxd,sha256=sBmZ1Amym9kW4Ge8lj1fLZ7mPPya4LzLdpkQExQXv5M,112
|
| 84 |
+
aiohttp/_websocket/mask.pyx,sha256=BHjOtV0O0w7xp9p0LNADRJvGmgfPn9sGeJvSs0fL__4,1397
|
| 85 |
+
aiohttp/_websocket/models.py,sha256=XAzjs_8JYszWXIgZ6R3ZRrF-tX9Q_6LiD49WRYojopM,2121
|
| 86 |
+
aiohttp/_websocket/reader.py,sha256=eC4qS0c5sOeQ2ebAHLaBpIaTVFaSKX79pY2xvh3Pqyw,1030
|
| 87 |
+
aiohttp/_websocket/reader_c.cpython-313-x86_64-linux-gnu.so,sha256=kqy_NigBXCVD411HOUdmBkvEWvdl2IcYG4gC24uil8g,1821608
|
| 88 |
+
aiohttp/_websocket/reader_c.pxd,sha256=nl_njtDrzlQU0rjgGGjZDB-swguE0tX_bCPobkShVa4,2625
|
| 89 |
+
aiohttp/_websocket/reader_c.py,sha256=V5YtZ2gj2BjE2Q-W9sR_MdAl1VAm1pB7ZjozVJcOpbg,18868
|
| 90 |
+
aiohttp/_websocket/reader_py.py,sha256=V5YtZ2gj2BjE2Q-W9sR_MdAl1VAm1pB7ZjozVJcOpbg,18868
|
| 91 |
+
aiohttp/_websocket/writer.py,sha256=2OvSktPmNh_g20h1cXJt2Xu8u6IvswnPjdur7OwBbJk,11261
|
| 92 |
+
aiohttp/abc.py,sha256=M66F4S6m00bIEn7y4ha_XLTMDmVQ9dPihfOVB0pGfOo,7149
|
| 93 |
+
aiohttp/base_protocol.py,sha256=Tp8cxUPQvv9kUPk3w6lAzk6d2MAzV3scwI_3Go3C47c,3025
|
| 94 |
+
aiohttp/client.py,sha256=fOQfwcIUL1NGAVRV4DDj6-wipBzeD8KZpmzhO-LLKp4,58357
|
| 95 |
+
aiohttp/client_exceptions.py,sha256=uyKbxI2peZhKl7lELBMx3UeusNkfpemPWpGFq0r6JeM,11367
|
| 96 |
+
aiohttp/client_middleware_digest_auth.py,sha256=G5JM9YtzL9AWklz6NP28xEOBeAvrAZgDzU657JqO4qs,17627
|
| 97 |
+
aiohttp/client_middlewares.py,sha256=kP5N9CMzQPMGPIEydeVUiLUTLsw8Vl8Gr4qAWYdu3vM,1918
|
| 98 |
+
aiohttp/client_proto.py,sha256=56_WtLStZGBFPYKzgEgY6v24JkhV1y6JEmmuxeJT2So,12110
|
| 99 |
+
aiohttp/client_reqrep.py,sha256=eEREDrZ0M8ZFTt1wjHduR-P8_sm40K65gNz-iMGYask,53391
|
| 100 |
+
aiohttp/client_ws.py,sha256=1CIjIXwyzOMIYw6AjUES4-qUwbyVHW1seJKQfg_Rta8,15109
|
| 101 |
+
aiohttp/compression_utils.py,sha256=hJ2LXhN2OWukFHm5b78TJFGKcAiL2kthi9Sf5PRYO-U,11738
|
| 102 |
+
aiohttp/connector.py,sha256=vT22BNuCDtbadE1Uq7HC7zpOWCHMxI4n3PtCz7zZZkw,69004
|
| 103 |
+
aiohttp/cookiejar.py,sha256=e28ZMQwJ5P0vbPX1OX4Se7-k3zeGvocFEqzGhwpG53k,18922
|
| 104 |
+
aiohttp/formdata.py,sha256=xqYMbUo1qoLYPuzY92XeR4pyEe-w-DNcToARDF3GUhA,6384
|
| 105 |
+
aiohttp/hdrs.py,sha256=2rj5MyA-6yRdYPhW5UKkW4iNWhEAlGIOSBH5D4FmKNE,5111
|
| 106 |
+
aiohttp/helpers.py,sha256=Q1307PCEnWz4RP8crUw8dk58c0YF2Ei3JywkKfRxz5E,30629
|
| 107 |
+
aiohttp/http.py,sha256=8o8j8xH70OWjnfTWA9V44NR785QPxEPrUtzMXiAVpwc,1842
|
| 108 |
+
aiohttp/http_exceptions.py,sha256=BjIxD4LtrQgytqoR5lOI9zAttNmSygRgksUsMRy7sss,3069
|
| 109 |
+
aiohttp/http_parser.py,sha256=z6djZDOUs7hdPzplTEsAVyz0of-rQAwT7xz8OpXhnuY,38177
|
| 110 |
+
aiohttp/http_websocket.py,sha256=8VXFKw6KQUEmPg48GtRMB37v0gTK7A0inoxXuDxMZEc,842
|
| 111 |
+
aiohttp/http_writer.py,sha256=fbRtKPYSqRbtAdr_gqpjF2-4sI1ESL8dPDF-xY_mAMY,12446
|
| 112 |
+
aiohttp/log.py,sha256=BbNKx9e3VMIm0xYjZI0IcBBoS7wjdeIeSaiJE7-qK2g,325
|
| 113 |
+
aiohttp/multipart.py,sha256=326npYdWxYI3raoRfmpBeUV_ef3-LRn8sV9WqcIOoPk,40482
|
| 114 |
+
aiohttp/payload.py,sha256=O6nsYNULL7AeM2cyJ6TYX73ncVnL5xJwt5AegxwMKqw,40874
|
| 115 |
+
aiohttp/payload_streamer.py,sha256=ZzEYyfzcjGWkVkK3XR2pBthSCSIykYvY3Wr5cGQ2eTc,2211
|
| 116 |
+
aiohttp/py.typed,sha256=sow9soTwP9T_gEAQSVh7Gb8855h04Nwmhs2We-JRgZM,7
|
| 117 |
+
aiohttp/pytest_plugin.py,sha256=z4XwqmsKdyJCKxbGiA5kFf90zcedvomqk4RqjZbhKNk,12901
|
| 118 |
+
aiohttp/resolver.py,sha256=gsrfUpFf8iHlcHfJvY-1fiBHW3PRvRVNb5lNZBg3zlY,10031
|
| 119 |
+
aiohttp/streams.py,sha256=rlwL7ek6CkMMYil_e_EokWv26uHmtzi3lKqlnLNrXCc,23666
|
| 120 |
+
aiohttp/tcp_helpers.py,sha256=BSadqVWaBpMFDRWnhaaR941N9MiDZ7bdTrxgCb0CW-M,961
|
| 121 |
+
aiohttp/test_utils.py,sha256=ZJSzZWjC76KSbtwddTKcP6vHpUl_ozfAf3F93ewmHRU,23016
|
| 122 |
+
aiohttp/tracing.py,sha256=-6aaW6l0J9uJD45LzR4cijYH0j62pt0U_nn_aVzFku4,14558
|
| 123 |
+
aiohttp/typedefs.py,sha256=wUlqwe9Mw9W8jT3HsYJcYk00qP3EMPz3nTkYXmeNN48,1657
|
| 124 |
+
aiohttp/web.py,sha256=JzSNmejg5G6YeFAnkIgZfytqbU86sNu844yYKmoUpqs,17852
|
| 125 |
+
aiohttp/web_app.py,sha256=lGU_aAMN-h3wy-LTTHi6SeKH8ydt1G51BXcCspgD5ZA,19452
|
| 126 |
+
aiohttp/web_exceptions.py,sha256=7nIuiwhZ39vJJ9KrWqArA5QcWbUdqkz2CLwEpJapeN8,10360
|
| 127 |
+
aiohttp/web_fileresponse.py,sha256=Xzau8EMrWNrFg3u46h4UEteg93G4zYq94CU6vy0HiqE,16362
|
| 128 |
+
aiohttp/web_log.py,sha256=rX5D7xLOX2B6BMdiZ-chme_KfJfW5IXEoFwLfkfkajs,7865
|
| 129 |
+
aiohttp/web_middlewares.py,sha256=sFI0AgeNjdyAjuz92QtMIpngmJSOxrqe2Jfbs4BNUu0,4165
|
| 130 |
+
aiohttp/web_protocol.py,sha256=6s9dMzmaqW77bzM1T111uGNSLFo6gNmfDg7XzYnA8xk,27010
|
| 131 |
+
aiohttp/web_request.py,sha256=KqrOp6AeWB5e6tKrG55Lo7Zbwq49DxdrKniuW2t2u04,29849
|
| 132 |
+
aiohttp/web_response.py,sha256=PKcziNU4LmftXqKVvoRMrAbOeVClpSN-iznHsiWezmU,29341
|
| 133 |
+
aiohttp/web_routedef.py,sha256=VT1GAx6BrawoDh5RwBwBu5wSABSqgWwAe74AUCyZAEo,6110
|
| 134 |
+
aiohttp/web_runner.py,sha256=v1G1nKiOOQgFnTSR4IMc6I9ReEFDMaHtMLvO_roDM-A,11786
|
| 135 |
+
aiohttp/web_server.py,sha256=-9WDKUAiR9ll-rSdwXSqG6YjaoW79d1R4y0BGSqgUMA,2888
|
| 136 |
+
aiohttp/web_urldispatcher.py,sha256=JM-TlriKCNbTLNL43Ra9sdZ0zChxZmIEYQM6ZpbyjI4,44290
|
| 137 |
+
aiohttp/web_ws.py,sha256=lItgmyatkXh0M6EY7JoZnSZkUl6R0wv8B88X4ILqQbU,22739
|
| 138 |
+
aiohttp/worker.py,sha256=zT0iWN5Xze194bO6_VjHou0x7lR_k0MviN6Kadnk22g,8152
|