Upload 1377 files
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .gitattributes +27 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/INSTALLER +1 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/LICENSE +34 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/METADATA +47 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/RECORD +38 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/WHEEL +5 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/top_level.txt +1 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/INSTALLER +1 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/LICENSE +34 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/METADATA +55 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/RECORD +28 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/WHEEL +6 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/top_level.txt +1 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/INSTALLER +1 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/LICENSE.md +29 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/METADATA +141 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/RECORD +74 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/WHEEL +5 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/entry_points.txt +22 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/top_level.txt +1 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/INSTALLER +1 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/LICENSE.rst +28 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/METADATA +93 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/RECORD +14 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/WHEEL +5 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/top_level.txt +1 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/INSTALLER +1 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/LICENSE.md +31 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/METADATA +250 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/RECORD +22 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/WHEEL +4 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/INSTALLER +1 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/LICENSE +202 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/METADATA +134 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/RECORD +25 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/WHEEL +5 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/top_level.txt +1 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__init__.py +1015 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/__init__.cpython-37.pyc +0 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_adapters.cpython-37.pyc +0 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_collections.cpython-37.pyc +0 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_compat.cpython-37.pyc +0 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_functools.cpython-37.pyc +0 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_itertools.cpython-37.pyc +0 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_meta.cpython-37.pyc +0 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_py39compat.cpython-37.pyc +0 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_text.cpython-37.pyc +0 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/_adapters.py +90 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/_collections.py +30 -0
- protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/_compat.py +74 -0
.gitattributes
CHANGED
|
@@ -68,3 +68,30 @@ protege/deep-pantilt/venv/lib/python3.7/site-packages/h5py/h5t.cpython-37m-arm-l
|
|
| 68 |
protege/deep-pantilt/venv/lib/python3.7/site-packages/h5py/h5z.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 69 |
protege/deep-pantilt/venv/lib/python3.7/site-packages/h5py/utils.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 70 |
protege/deep-pantilt/venv/lib/python3.7/site-packages/idna/__pycache__/uts46data.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 68 |
protege/deep-pantilt/venv/lib/python3.7/site-packages/h5py/h5z.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 69 |
protege/deep-pantilt/venv/lib/python3.7/site-packages/h5py/utils.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 70 |
protege/deep-pantilt/venv/lib/python3.7/site-packages/idna/__pycache__/uts46data.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
|
| 71 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/__pycache__/_add_newdocs.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
|
| 72 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/__pycache__/fromnumeric.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
|
| 73 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/_multiarray_tests.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 74 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/_multiarray_umath.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 75 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/_rational_tests.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 76 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/_simd.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 77 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/_umath_tests.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 78 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/lib/libnpymath.a filter=lfs diff=lfs merge=lfs -text
|
| 79 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/tests/__pycache__/test_multiarray.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
|
| 80 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/tests/__pycache__/test_numeric.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
|
| 81 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/tests/__pycache__/test_umath.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
|
| 82 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/fft/_pocketfft_internal.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 83 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/lib/__pycache__/function_base.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
|
| 84 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/lib/tests/__pycache__/test_function_base.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
|
| 85 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/linalg/_umath_linalg.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 86 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/ma/__pycache__/core.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
|
| 87 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/ma/tests/__pycache__/test_core.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
|
| 88 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/_bounded_integers.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 89 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/_common.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 90 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/_generator.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 91 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/_mt19937.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 92 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/_pcg64.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 93 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/_philox.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 94 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/_sfc64.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 95 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/bit_generator.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
| 96 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/lib/libnpyrandom.a filter=lfs diff=lfs merge=lfs -text
|
| 97 |
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/mtrand.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/INSTALLER
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
pip
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/LICENSE
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
COPYRIGHT
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2016 - 2018, the respective contributors.
|
| 4 |
+
All rights reserved.
|
| 5 |
+
|
| 6 |
+
Each contributor holds copyright over their respective contributions.
|
| 7 |
+
The project versioning (Git) records all such contribution source information.
|
| 8 |
+
The initial code of this repository came from https://github.com/keras-team/keras
|
| 9 |
+
(the Keras repository), hence, for author information regarding commits
|
| 10 |
+
that occured earlier than the first commit in the present repository,
|
| 11 |
+
please see the original Keras repository.
|
| 12 |
+
|
| 13 |
+
LICENSE
|
| 14 |
+
|
| 15 |
+
The MIT License (MIT)
|
| 16 |
+
|
| 17 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 18 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 19 |
+
in the Software without restriction, including without limitation the rights
|
| 20 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 21 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 22 |
+
furnished to do so, subject to the following conditions:
|
| 23 |
+
|
| 24 |
+
The above copyright notice and this permission notice shall be included in all
|
| 25 |
+
copies or substantial portions of the Software.
|
| 26 |
+
|
| 27 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 28 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 29 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 30 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 31 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 32 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
| 33 |
+
SOFTWARE.
|
| 34 |
+
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/METADATA
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Metadata-Version: 2.1
|
| 2 |
+
Name: Keras-Applications
|
| 3 |
+
Version: 1.0.8
|
| 4 |
+
Summary: Reference implementations of popular deep learning models
|
| 5 |
+
Home-page: https://github.com/keras-team/keras-applications
|
| 6 |
+
Author: Keras Team
|
| 7 |
+
License: MIT
|
| 8 |
+
Download-URL: https://github.com/keras-team/keras-applications/tarball/1.0.8
|
| 9 |
+
Platform: UNKNOWN
|
| 10 |
+
Classifier: Development Status :: 5 - Production/Stable
|
| 11 |
+
Classifier: Intended Audience :: Developers
|
| 12 |
+
Classifier: Intended Audience :: Education
|
| 13 |
+
Classifier: Intended Audience :: Science/Research
|
| 14 |
+
Classifier: License :: OSI Approved :: MIT License
|
| 15 |
+
Classifier: Programming Language :: Python :: 2
|
| 16 |
+
Classifier: Programming Language :: Python :: 2.7
|
| 17 |
+
Classifier: Programming Language :: Python :: 3
|
| 18 |
+
Classifier: Programming Language :: Python :: 3.6
|
| 19 |
+
Classifier: Topic :: Software Development :: Libraries
|
| 20 |
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
| 21 |
+
Requires-Dist: numpy (>=1.9.1)
|
| 22 |
+
Requires-Dist: h5py
|
| 23 |
+
Provides-Extra: tests
|
| 24 |
+
Requires-Dist: pytest ; extra == 'tests'
|
| 25 |
+
Requires-Dist: pytest-pep8 ; extra == 'tests'
|
| 26 |
+
Requires-Dist: pytest-xdist ; extra == 'tests'
|
| 27 |
+
Requires-Dist: pytest-cov ; extra == 'tests'
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
Keras Applications is the `applications` module of
|
| 31 |
+
the Keras deep learning library.
|
| 32 |
+
It provides model definitions and pre-trained weights for a number
|
| 33 |
+
of popular archictures, such as VGG16, ResNet50, Xception, MobileNet, and more.
|
| 34 |
+
|
| 35 |
+
Read the documentation at: https://keras.io/applications/
|
| 36 |
+
|
| 37 |
+
Keras Applications may be imported directly
|
| 38 |
+
from an up-to-date installation of Keras:
|
| 39 |
+
|
| 40 |
+
```
|
| 41 |
+
from keras import applications
|
| 42 |
+
```
|
| 43 |
+
|
| 44 |
+
Keras Applications is compatible with Python 2.7-3.6
|
| 45 |
+
and is distributed under the MIT license.
|
| 46 |
+
|
| 47 |
+
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/RECORD
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Keras_Applications-1.0.8.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
| 2 |
+
Keras_Applications-1.0.8.dist-info/LICENSE,sha256=guRGHc6tA5MBFfRp_Uh9weYEIRGeNrJcW-cH8duggXA,1561
|
| 3 |
+
Keras_Applications-1.0.8.dist-info/METADATA,sha256=s9omNgtYIGJ5M8z0vH665uU301Ve6YciQrEnbTiMYeM,1653
|
| 4 |
+
Keras_Applications-1.0.8.dist-info/RECORD,,
|
| 5 |
+
Keras_Applications-1.0.8.dist-info/WHEEL,sha256=S8S5VL-stOTSZDYxHyf0KP7eds0J72qrK0Evu3TfyAY,92
|
| 6 |
+
Keras_Applications-1.0.8.dist-info/top_level.txt,sha256=hUSTdpVv_gPAVR-YJdoHymiZV9-yYzSNgBVBqLxs8KY,19
|
| 7 |
+
keras_applications/__init__.py,sha256=_YF1NYzx0ru-CEDeBTUB638f4jczfaE7IHma3-J4z-U,1846
|
| 8 |
+
keras_applications/__pycache__/__init__.cpython-37.pyc,,
|
| 9 |
+
keras_applications/__pycache__/densenet.cpython-37.pyc,,
|
| 10 |
+
keras_applications/__pycache__/imagenet_utils.cpython-37.pyc,,
|
| 11 |
+
keras_applications/__pycache__/inception_resnet_v2.cpython-37.pyc,,
|
| 12 |
+
keras_applications/__pycache__/inception_v3.cpython-37.pyc,,
|
| 13 |
+
keras_applications/__pycache__/mobilenet.cpython-37.pyc,,
|
| 14 |
+
keras_applications/__pycache__/mobilenet_v2.cpython-37.pyc,,
|
| 15 |
+
keras_applications/__pycache__/nasnet.cpython-37.pyc,,
|
| 16 |
+
keras_applications/__pycache__/resnet.cpython-37.pyc,,
|
| 17 |
+
keras_applications/__pycache__/resnet50.cpython-37.pyc,,
|
| 18 |
+
keras_applications/__pycache__/resnet_common.cpython-37.pyc,,
|
| 19 |
+
keras_applications/__pycache__/resnet_v2.cpython-37.pyc,,
|
| 20 |
+
keras_applications/__pycache__/resnext.cpython-37.pyc,,
|
| 21 |
+
keras_applications/__pycache__/vgg16.cpython-37.pyc,,
|
| 22 |
+
keras_applications/__pycache__/vgg19.cpython-37.pyc,,
|
| 23 |
+
keras_applications/__pycache__/xception.cpython-37.pyc,,
|
| 24 |
+
keras_applications/densenet.py,sha256=Faz3PV3w5Cs8wrDABbus8z1FtHM8JQ81ld0CB_vVrhw,13450
|
| 25 |
+
keras_applications/imagenet_utils.py,sha256=BpKk92IlJW5l0bSsvUbpJWhqCVeFNE17ajONJndoN-U,12634
|
| 26 |
+
keras_applications/inception_resnet_v2.py,sha256=EsaY3e27dNoV5A21SvgWLnMub09CEasBhu_1tZvhPu0,14743
|
| 27 |
+
keras_applications/inception_v3.py,sha256=a97swMXgNBRR9dh-F9EsiaIQthYeGwZqym4CvEJbKr8,14598
|
| 28 |
+
keras_applications/mobilenet.py,sha256=njtmkJLBn23lE2Mus3dvyezRxP8fQvqFW04AkU23nxs,18982
|
| 29 |
+
keras_applications/mobilenet_v2.py,sha256=O5yLDHxlwnvWetQBTDVB2FVHxIEQkgxcdQj68AYtSZw,20430
|
| 30 |
+
keras_applications/nasnet.py,sha256=7oxAwnn76Mw39iM7Wjgel6P_MOywm1lMLVSgf6EQPcA,29982
|
| 31 |
+
keras_applications/resnet.py,sha256=jA2PJQjrIA4iGqElSYLU83Xo54G1hrIaKLm_PIJALBU,1041
|
| 32 |
+
keras_applications/resnet50.py,sha256=YKpr42-zNGBuv3-oVfETvWg_EL8Non9KkS_eligGNsE,11888
|
| 33 |
+
keras_applications/resnet_common.py,sha256=zwr6-RNLoEOq2oWAMmvO8S8HECl9i3VWD7da3a_8amk,22244
|
| 34 |
+
keras_applications/resnet_v2.py,sha256=VOzQaOILuBL-Gm7TeK0p3mW88U22Rwf-WNGXX5U1xOg,1051
|
| 35 |
+
keras_applications/resnext.py,sha256=7WZLOrIXqd7__i0jDx8Zxk_FQnrdMYXxRonD2LneEaA,1020
|
| 36 |
+
keras_applications/vgg16.py,sha256=_pn9XkYGsNcCs73Tms6R5A0vdaT-TFzcJkTE5j8rekQ,8516
|
| 37 |
+
keras_applications/vgg19.py,sha256=U8b2ZydEnt_ZcSXkmF4jni0scNvvUg6RIJhUE1_BlDs,8997
|
| 38 |
+
keras_applications/xception.py,sha256=7Kj7Qg1fupJhat447h48-QtbyF5BKuJVvRszKLNVSoM,13557
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/WHEEL
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Wheel-Version: 1.0
|
| 2 |
+
Generator: bdist_wheel (0.33.4)
|
| 3 |
+
Root-Is-Purelib: true
|
| 4 |
+
Tag: py3-none-any
|
| 5 |
+
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/top_level.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
keras_applications
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/INSTALLER
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
pip
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/LICENSE
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
COPYRIGHT
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2015 - 2018, the respective contributors.
|
| 4 |
+
All rights reserved.
|
| 5 |
+
|
| 6 |
+
Each contributor holds copyright over their respective contributions.
|
| 7 |
+
The project versioning (Git) records all such contribution source information.
|
| 8 |
+
The initial code of this repository came from https://github.com/keras-team/keras
|
| 9 |
+
(the Keras repository), hence, for author information regarding commits
|
| 10 |
+
that occured earlier than the first commit in the present repository,
|
| 11 |
+
please see the original Keras repository.
|
| 12 |
+
|
| 13 |
+
LICENSE
|
| 14 |
+
|
| 15 |
+
The MIT License (MIT)
|
| 16 |
+
|
| 17 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 18 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 19 |
+
in the Software without restriction, including without limitation the rights
|
| 20 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 21 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 22 |
+
furnished to do so, subject to the following conditions:
|
| 23 |
+
|
| 24 |
+
The above copyright notice and this permission notice shall be included in all
|
| 25 |
+
copies or substantial portions of the Software.
|
| 26 |
+
|
| 27 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 28 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 29 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 30 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 31 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 32 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
| 33 |
+
SOFTWARE.
|
| 34 |
+
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/METADATA
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Metadata-Version: 2.1
|
| 2 |
+
Name: Keras-Preprocessing
|
| 3 |
+
Version: 1.1.2
|
| 4 |
+
Summary: Easy data preprocessing and data augmentation for deep learning models
|
| 5 |
+
Home-page: https://github.com/keras-team/keras-preprocessing
|
| 6 |
+
Author: Keras Team
|
| 7 |
+
License: MIT
|
| 8 |
+
Download-URL: https://github.com/keras-team/keras-preprocessing/tarball/1.1.2
|
| 9 |
+
Platform: UNKNOWN
|
| 10 |
+
Classifier: Development Status :: 5 - Production/Stable
|
| 11 |
+
Classifier: Intended Audience :: Developers
|
| 12 |
+
Classifier: Intended Audience :: Education
|
| 13 |
+
Classifier: Intended Audience :: Science/Research
|
| 14 |
+
Classifier: License :: OSI Approved :: MIT License
|
| 15 |
+
Classifier: Programming Language :: Python :: 2
|
| 16 |
+
Classifier: Programming Language :: Python :: 2.7
|
| 17 |
+
Classifier: Programming Language :: Python :: 3
|
| 18 |
+
Classifier: Programming Language :: Python :: 3.6
|
| 19 |
+
Classifier: Topic :: Software Development :: Libraries
|
| 20 |
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
| 21 |
+
Requires-Dist: numpy (>=1.9.1)
|
| 22 |
+
Requires-Dist: six (>=1.9.0)
|
| 23 |
+
Provides-Extra: image
|
| 24 |
+
Requires-Dist: scipy (>=0.14) ; extra == 'image'
|
| 25 |
+
Requires-Dist: Pillow (>=5.2.0) ; extra == 'image'
|
| 26 |
+
Provides-Extra: pep8
|
| 27 |
+
Requires-Dist: flake8 ; extra == 'pep8'
|
| 28 |
+
Provides-Extra: tests
|
| 29 |
+
Requires-Dist: pandas ; extra == 'tests'
|
| 30 |
+
Requires-Dist: Pillow ; extra == 'tests'
|
| 31 |
+
Requires-Dist: tensorflow ; extra == 'tests'
|
| 32 |
+
Requires-Dist: keras ; extra == 'tests'
|
| 33 |
+
Requires-Dist: pytest ; extra == 'tests'
|
| 34 |
+
Requires-Dist: pytest-xdist ; extra == 'tests'
|
| 35 |
+
Requires-Dist: pytest-cov ; extra == 'tests'
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
Keras Preprocessing is the data preprocessing
|
| 39 |
+
and data augmentation module of the Keras deep learning library.
|
| 40 |
+
It provides utilities for working with image data, text data,
|
| 41 |
+
and sequence data.
|
| 42 |
+
|
| 43 |
+
Read the documentation at: https://keras.io/
|
| 44 |
+
|
| 45 |
+
Keras Preprocessing may be imported directly
|
| 46 |
+
from an up-to-date installation of Keras:
|
| 47 |
+
|
| 48 |
+
```
|
| 49 |
+
from keras import preprocessing
|
| 50 |
+
```
|
| 51 |
+
|
| 52 |
+
Keras Preprocessing is compatible with Python 2.7-3.6
|
| 53 |
+
and is distributed under the MIT license.
|
| 54 |
+
|
| 55 |
+
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/RECORD
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Keras_Preprocessing-1.1.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
| 2 |
+
Keras_Preprocessing-1.1.2.dist-info/LICENSE,sha256=ff_bls58AOMbJAPPNGUWMB2qu2fePukw9p1eVaBbM5M,1561
|
| 3 |
+
Keras_Preprocessing-1.1.2.dist-info/METADATA,sha256=pchRUWBUcrcviQtXrkRJj5wBO-8VjpW4vT3EpRPjSGc,1933
|
| 4 |
+
Keras_Preprocessing-1.1.2.dist-info/RECORD,,
|
| 5 |
+
Keras_Preprocessing-1.1.2.dist-info/WHEEL,sha256=h_aVn5OB2IERUjMbi2pucmR_zzWJtk303YXvhh60NJ8,110
|
| 6 |
+
Keras_Preprocessing-1.1.2.dist-info/top_level.txt,sha256=4ddNBUmzGauezbV3Sbj_bahnkJddT5IHGBPkA_gHJrA,20
|
| 7 |
+
keras_preprocessing/__init__.py,sha256=ARLJa67_uDO6nBODBXYBG8aCODF11kyakAKC90AY2FA,1392
|
| 8 |
+
keras_preprocessing/__pycache__/__init__.cpython-37.pyc,,
|
| 9 |
+
keras_preprocessing/__pycache__/sequence.cpython-37.pyc,,
|
| 10 |
+
keras_preprocessing/__pycache__/text.cpython-37.pyc,,
|
| 11 |
+
keras_preprocessing/image/__init__.py,sha256=5GPhnkfsGALOpl3JoXyKxbQJwvm6s3dvmPaTqKrY3wo,414
|
| 12 |
+
keras_preprocessing/image/__pycache__/__init__.cpython-37.pyc,,
|
| 13 |
+
keras_preprocessing/image/__pycache__/affine_transformations.cpython-37.pyc,,
|
| 14 |
+
keras_preprocessing/image/__pycache__/dataframe_iterator.cpython-37.pyc,,
|
| 15 |
+
keras_preprocessing/image/__pycache__/directory_iterator.cpython-37.pyc,,
|
| 16 |
+
keras_preprocessing/image/__pycache__/image_data_generator.cpython-37.pyc,,
|
| 17 |
+
keras_preprocessing/image/__pycache__/iterator.cpython-37.pyc,,
|
| 18 |
+
keras_preprocessing/image/__pycache__/numpy_array_iterator.cpython-37.pyc,,
|
| 19 |
+
keras_preprocessing/image/__pycache__/utils.cpython-37.pyc,,
|
| 20 |
+
keras_preprocessing/image/affine_transformations.py,sha256=UqX5po2EkTrHNEaynMdCmY9bOT1DLz73zkFCZ-7q0u0,12248
|
| 21 |
+
keras_preprocessing/image/dataframe_iterator.py,sha256=pgLH9CnI9JF0cS-j2nreP8GxpPK7AV-W7lS_tiLQl3Q,14335
|
| 22 |
+
keras_preprocessing/image/directory_iterator.py,sha256=yZ6FMnznFLpKQ5sU-e5tdpnpUS8FCFQb_EJW6U1JtR8,7322
|
| 23 |
+
keras_preprocessing/image/image_data_generator.py,sha256=i-oTQhqzA1SrE8vj98VIZTM2wPckDiS23TwgjzuBk8s,43865
|
| 24 |
+
keras_preprocessing/image/iterator.py,sha256=mUTx-Bw-GKCAQzB_BB0f-GvLCV19y95-v7MU9dchWrA,11586
|
| 25 |
+
keras_preprocessing/image/numpy_array_iterator.py,sha256=kmEBv9-p4CplIPsp9-ZBSGL_2Y-Ha1kcFurIqepG3Dg,8081
|
| 26 |
+
keras_preprocessing/image/utils.py,sha256=r8m9enJQuvNnx02WNx5s8zU7XFpcdE8SF8Y0VFw4Eko,12375
|
| 27 |
+
keras_preprocessing/sequence.py,sha256=RjR0R0kVnEORm2ZRQ53O3wXzX8KNQYQfq743q-K0KUI,16775
|
| 28 |
+
keras_preprocessing/text.py,sha256=pOeK_IB0QslNkYO0G6XbEGokGcGlA9O1bP8v5azMkM4,19077
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/WHEEL
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Wheel-Version: 1.0
|
| 2 |
+
Generator: bdist_wheel (0.33.4)
|
| 3 |
+
Root-Is-Purelib: true
|
| 4 |
+
Tag: py2-none-any
|
| 5 |
+
Tag: py3-none-any
|
| 6 |
+
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/top_level.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
keras_preprocessing
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/INSTALLER
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
pip
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/LICENSE.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later)
|
| 2 |
+
Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
|
| 3 |
+
Copyright 2004 Manfred Stienstra (the original version)
|
| 4 |
+
|
| 5 |
+
All rights reserved.
|
| 6 |
+
|
| 7 |
+
Redistribution and use in source and binary forms, with or without
|
| 8 |
+
modification, are permitted provided that the following conditions are met:
|
| 9 |
+
|
| 10 |
+
* Redistributions of source code must retain the above copyright
|
| 11 |
+
notice, this list of conditions and the following disclaimer.
|
| 12 |
+
* Redistributions in binary form must reproduce the above copyright
|
| 13 |
+
notice, this list of conditions and the following disclaimer in the
|
| 14 |
+
documentation and/or other materials provided with the distribution.
|
| 15 |
+
* Neither the name of the Python Markdown Project nor the
|
| 16 |
+
names of its contributors may be used to endorse or promote products
|
| 17 |
+
derived from this software without specific prior written permission.
|
| 18 |
+
|
| 19 |
+
THIS SOFTWARE IS PROVIDED BY THE PYTHON MARKDOWN PROJECT ''AS IS'' AND ANY
|
| 20 |
+
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
| 21 |
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
| 22 |
+
DISCLAIMED. IN NO EVENT SHALL ANY CONTRIBUTORS TO THE PYTHON MARKDOWN PROJECT
|
| 23 |
+
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
| 24 |
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
| 25 |
+
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
| 26 |
+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
| 27 |
+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
| 28 |
+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
| 29 |
+
POSSIBILITY OF SUCH DAMAGE.
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/METADATA
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Metadata-Version: 2.1
|
| 2 |
+
Name: Markdown
|
| 3 |
+
Version: 3.4.4
|
| 4 |
+
Summary: Python implementation of John Gruber's Markdown.
|
| 5 |
+
Author: Manfred Stienstra, Yuri Takhteyev
|
| 6 |
+
Author-email: Waylan limberg <python.markdown@gmail.com>
|
| 7 |
+
Maintainer: Isaac Muse
|
| 8 |
+
Maintainer-email: Waylan Limberg <python.markdown@gmail.com>
|
| 9 |
+
License: Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later)
|
| 10 |
+
Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
|
| 11 |
+
Copyright 2004 Manfred Stienstra (the original version)
|
| 12 |
+
|
| 13 |
+
All rights reserved.
|
| 14 |
+
|
| 15 |
+
Redistribution and use in source and binary forms, with or without
|
| 16 |
+
modification, are permitted provided that the following conditions are met:
|
| 17 |
+
|
| 18 |
+
* Redistributions of source code must retain the above copyright
|
| 19 |
+
notice, this list of conditions and the following disclaimer.
|
| 20 |
+
* Redistributions in binary form must reproduce the above copyright
|
| 21 |
+
notice, this list of conditions and the following disclaimer in the
|
| 22 |
+
documentation and/or other materials provided with the distribution.
|
| 23 |
+
* Neither the name of the Python Markdown Project nor the
|
| 24 |
+
names of its contributors may be used to endorse or promote products
|
| 25 |
+
derived from this software without specific prior written permission.
|
| 26 |
+
|
| 27 |
+
THIS SOFTWARE IS PROVIDED BY THE PYTHON MARKDOWN PROJECT ''AS IS'' AND ANY
|
| 28 |
+
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
| 29 |
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
| 30 |
+
DISCLAIMED. IN NO EVENT SHALL ANY CONTRIBUTORS TO THE PYTHON MARKDOWN PROJECT
|
| 31 |
+
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
| 32 |
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
| 33 |
+
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
| 34 |
+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
| 35 |
+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
| 36 |
+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
| 37 |
+
POSSIBILITY OF SUCH DAMAGE.
|
| 38 |
+
|
| 39 |
+
Project-URL: Homepage, https://Python-Markdown.github.io/
|
| 40 |
+
Project-URL: Documentation, https://Python-Markdown.github.io/
|
| 41 |
+
Project-URL: Repository, https://github.com/Python-Markdown/markdown
|
| 42 |
+
Project-URL: Issue Tracker, https://github.com/Python-Markdown/markdown/issues
|
| 43 |
+
Project-URL: Changelog, https://github.com/Python-Markdown/markdown/blob/master/docs/change_log/index.md
|
| 44 |
+
Keywords: markdown,markdown-parser,python-markdown,markdown-to-html
|
| 45 |
+
Classifier: Development Status :: 5 - Production/Stable
|
| 46 |
+
Classifier: License :: OSI Approved :: BSD License
|
| 47 |
+
Classifier: Operating System :: OS Independent
|
| 48 |
+
Classifier: Programming Language :: Python
|
| 49 |
+
Classifier: Programming Language :: Python :: 3
|
| 50 |
+
Classifier: Programming Language :: Python :: 3.7
|
| 51 |
+
Classifier: Programming Language :: Python :: 3.8
|
| 52 |
+
Classifier: Programming Language :: Python :: 3.9
|
| 53 |
+
Classifier: Programming Language :: Python :: 3.10
|
| 54 |
+
Classifier: Programming Language :: Python :: 3.11
|
| 55 |
+
Classifier: Programming Language :: Python :: 3 :: Only
|
| 56 |
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
| 57 |
+
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
| 58 |
+
Classifier: Topic :: Communications :: Email :: Filters
|
| 59 |
+
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries
|
| 60 |
+
Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
|
| 61 |
+
Classifier: Topic :: Software Development :: Documentation
|
| 62 |
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
| 63 |
+
Classifier: Topic :: Text Processing :: Filters
|
| 64 |
+
Classifier: Topic :: Text Processing :: Markup :: HTML
|
| 65 |
+
Classifier: Topic :: Text Processing :: Markup :: Markdown
|
| 66 |
+
Requires-Python: >=3.7
|
| 67 |
+
Description-Content-Type: text/markdown
|
| 68 |
+
License-File: LICENSE.md
|
| 69 |
+
Requires-Dist: importlib-metadata (>=4.4) ; python_version < "3.10"
|
| 70 |
+
Provides-Extra: docs
|
| 71 |
+
Requires-Dist: mkdocs (>=1.0) ; extra == 'docs'
|
| 72 |
+
Requires-Dist: mkdocs-nature (>=0.4) ; extra == 'docs'
|
| 73 |
+
Requires-Dist: mdx-gh-links (>=0.2) ; extra == 'docs'
|
| 74 |
+
Provides-Extra: testing
|
| 75 |
+
Requires-Dist: coverage ; extra == 'testing'
|
| 76 |
+
Requires-Dist: pyyaml ; extra == 'testing'
|
| 77 |
+
|
| 78 |
+
[Python-Markdown][]
|
| 79 |
+
===================
|
| 80 |
+
|
| 81 |
+
[![Build Status][build-button]][build]
|
| 82 |
+
[![Coverage Status][codecov-button]][codecov]
|
| 83 |
+
[![Latest Version][mdversion-button]][md-pypi]
|
| 84 |
+
[![Python Versions][pyversion-button]][md-pypi]
|
| 85 |
+
[![BSD License][bsdlicense-button]][bsdlicense]
|
| 86 |
+
[![Code of Conduct][codeofconduct-button]][Code of Conduct]
|
| 87 |
+
|
| 88 |
+
[build-button]: https://github.com/Python-Markdown/markdown/workflows/CI/badge.svg?event=push
|
| 89 |
+
[build]: https://github.com/Python-Markdown/markdown/actions?query=workflow%3ACI+event%3Apush
|
| 90 |
+
[codecov-button]: https://codecov.io/gh/Python-Markdown/markdown/branch/master/graph/badge.svg
|
| 91 |
+
[codecov]: https://codecov.io/gh/Python-Markdown/markdown
|
| 92 |
+
[mdversion-button]: https://img.shields.io/pypi/v/Markdown.svg
|
| 93 |
+
[md-pypi]: https://pypi.org/project/Markdown/
|
| 94 |
+
[pyversion-button]: https://img.shields.io/pypi/pyversions/Markdown.svg
|
| 95 |
+
[bsdlicense-button]: https://img.shields.io/badge/license-BSD-yellow.svg
|
| 96 |
+
[bsdlicense]: https://opensource.org/licenses/BSD-3-Clause
|
| 97 |
+
[codeofconduct-button]: https://img.shields.io/badge/code%20of%20conduct-contributor%20covenant-green.svg?style=flat-square
|
| 98 |
+
[Code of Conduct]: https://github.com/Python-Markdown/markdown/blob/master/CODE_OF_CONDUCT.md
|
| 99 |
+
|
| 100 |
+
This is a Python implementation of John Gruber's [Markdown][].
|
| 101 |
+
It is almost completely compliant with the reference implementation,
|
| 102 |
+
though there are a few known issues. See [Features][] for information
|
| 103 |
+
on what exactly is supported and what is not. Additional features are
|
| 104 |
+
supported by the [Available Extensions][].
|
| 105 |
+
|
| 106 |
+
[Python-Markdown]: https://Python-Markdown.github.io/
|
| 107 |
+
[Markdown]: https://daringfireball.net/projects/markdown/
|
| 108 |
+
[Features]: https://Python-Markdown.github.io#Features
|
| 109 |
+
[Available Extensions]: https://Python-Markdown.github.io/extensions
|
| 110 |
+
|
| 111 |
+
Documentation
|
| 112 |
+
-------------
|
| 113 |
+
|
| 114 |
+
```bash
|
| 115 |
+
pip install markdown
|
| 116 |
+
```
|
| 117 |
+
```python
|
| 118 |
+
import markdown
|
| 119 |
+
html = markdown.markdown(your_text_string)
|
| 120 |
+
```
|
| 121 |
+
|
| 122 |
+
For more advanced [installation] and [usage] documentation, see the `docs/` directory
|
| 123 |
+
of the distribution or the project website at <https://Python-Markdown.github.io/>.
|
| 124 |
+
|
| 125 |
+
[installation]: https://python-markdown.github.io/install/
|
| 126 |
+
[usage]: https://python-markdown.github.io/reference/
|
| 127 |
+
|
| 128 |
+
See the change log at <https://Python-Markdown.github.io/change_log>.
|
| 129 |
+
|
| 130 |
+
Support
|
| 131 |
+
-------
|
| 132 |
+
|
| 133 |
+
You may report bugs, ask for help, and discuss various other issues on the [bug tracker][].
|
| 134 |
+
|
| 135 |
+
[bug tracker]: https://github.com/Python-Markdown/markdown/issues
|
| 136 |
+
|
| 137 |
+
Code of Conduct
|
| 138 |
+
---------------
|
| 139 |
+
|
| 140 |
+
Everyone interacting in the Python-Markdown project's code bases, issue trackers,
|
| 141 |
+
and mailing lists is expected to follow the [Code of Conduct].
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/RECORD
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
../../../bin/markdown_py,sha256=xzrfmCar1ZJyeLbzX4ARxmHdgL7mBH6mHBKzFym8ZBA,248
|
| 2 |
+
Markdown-3.4.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
| 3 |
+
Markdown-3.4.4.dist-info/LICENSE.md,sha256=bxGTy2NHGOZcOlN9biXr1hSCDsDvaTz8EiSBEmONZNo,1645
|
| 4 |
+
Markdown-3.4.4.dist-info/METADATA,sha256=3t_AJ71xB1ulJsKKME-ecE_WZHv4RGfI-Znm9LDfv1c,6861
|
| 5 |
+
Markdown-3.4.4.dist-info/RECORD,,
|
| 6 |
+
Markdown-3.4.4.dist-info/WHEEL,sha256=AtBG6SXL3KF_v0NxLf0ehyVOh0cold-JbJYXNGorC6Q,92
|
| 7 |
+
Markdown-3.4.4.dist-info/entry_points.txt,sha256=lMEyiiA_ZZyfPCBlDviBl-SiU0cfoeuEKpwxw361sKQ,1102
|
| 8 |
+
Markdown-3.4.4.dist-info/top_level.txt,sha256=IAxs8x618RXoH1uCqeLLxXsDefJvE_mIibr_M4sOlyk,9
|
| 9 |
+
markdown/__init__.py,sha256=XBsIkhLRPtAIiCAHaiPSu03JaKbHPYqO4bfD0hq6VVo,1013
|
| 10 |
+
markdown/__main__.py,sha256=LVrZCvarSImaF3nRs7B9JXZDBnsGPfiILoPc0pxPgbI,5805
|
| 11 |
+
markdown/__meta__.py,sha256=vYlzYL8jGHCvF4Vieh7mL8oEjiIhBg9NH1br1NOGDUA,1654
|
| 12 |
+
markdown/__pycache__/__init__.cpython-37.pyc,,
|
| 13 |
+
markdown/__pycache__/__main__.cpython-37.pyc,,
|
| 14 |
+
markdown/__pycache__/__meta__.cpython-37.pyc,,
|
| 15 |
+
markdown/__pycache__/blockparser.cpython-37.pyc,,
|
| 16 |
+
markdown/__pycache__/blockprocessors.cpython-37.pyc,,
|
| 17 |
+
markdown/__pycache__/core.cpython-37.pyc,,
|
| 18 |
+
markdown/__pycache__/htmlparser.cpython-37.pyc,,
|
| 19 |
+
markdown/__pycache__/inlinepatterns.cpython-37.pyc,,
|
| 20 |
+
markdown/__pycache__/postprocessors.cpython-37.pyc,,
|
| 21 |
+
markdown/__pycache__/preprocessors.cpython-37.pyc,,
|
| 22 |
+
markdown/__pycache__/serializers.cpython-37.pyc,,
|
| 23 |
+
markdown/__pycache__/test_tools.cpython-37.pyc,,
|
| 24 |
+
markdown/__pycache__/treeprocessors.cpython-37.pyc,,
|
| 25 |
+
markdown/__pycache__/util.cpython-37.pyc,,
|
| 26 |
+
markdown/blockparser.py,sha256=LdOe-2JI-veEsanlWnQUrFHQ_xglyI-UUd5BrNtgi5M,4162
|
| 27 |
+
markdown/blockprocessors.py,sha256=ITWkWUycVERiqZrHS5hEJaZqupiElEpeNF5YC09txwQ,24965
|
| 28 |
+
markdown/core.py,sha256=HSYh7ATmZNVagq_D4aN69qlc-g_c4LDGimkkPprVffY,14729
|
| 29 |
+
markdown/extensions/__init__.py,sha256=JJnN0JI4mU7txHrNNpWcRgUWNh22yqN1j6hUk9bxKrs,2869
|
| 30 |
+
markdown/extensions/__pycache__/__init__.cpython-37.pyc,,
|
| 31 |
+
markdown/extensions/__pycache__/abbr.cpython-37.pyc,,
|
| 32 |
+
markdown/extensions/__pycache__/admonition.cpython-37.pyc,,
|
| 33 |
+
markdown/extensions/__pycache__/attr_list.cpython-37.pyc,,
|
| 34 |
+
markdown/extensions/__pycache__/codehilite.cpython-37.pyc,,
|
| 35 |
+
markdown/extensions/__pycache__/def_list.cpython-37.pyc,,
|
| 36 |
+
markdown/extensions/__pycache__/extra.cpython-37.pyc,,
|
| 37 |
+
markdown/extensions/__pycache__/fenced_code.cpython-37.pyc,,
|
| 38 |
+
markdown/extensions/__pycache__/footnotes.cpython-37.pyc,,
|
| 39 |
+
markdown/extensions/__pycache__/legacy_attrs.cpython-37.pyc,,
|
| 40 |
+
markdown/extensions/__pycache__/legacy_em.cpython-37.pyc,,
|
| 41 |
+
markdown/extensions/__pycache__/md_in_html.cpython-37.pyc,,
|
| 42 |
+
markdown/extensions/__pycache__/meta.cpython-37.pyc,,
|
| 43 |
+
markdown/extensions/__pycache__/nl2br.cpython-37.pyc,,
|
| 44 |
+
markdown/extensions/__pycache__/sane_lists.cpython-37.pyc,,
|
| 45 |
+
markdown/extensions/__pycache__/smarty.cpython-37.pyc,,
|
| 46 |
+
markdown/extensions/__pycache__/tables.cpython-37.pyc,,
|
| 47 |
+
markdown/extensions/__pycache__/toc.cpython-37.pyc,,
|
| 48 |
+
markdown/extensions/__pycache__/wikilinks.cpython-37.pyc,,
|
| 49 |
+
markdown/extensions/abbr.py,sha256=bzUCjh3OlbxwSY7dmoglixM63JM4-Pt-un7cBbEvNRE,3191
|
| 50 |
+
markdown/extensions/admonition.py,sha256=YuuznonEoYXkytbpCIRP8nqViUOhJlzCXubrpYvW4UY,5892
|
| 51 |
+
markdown/extensions/attr_list.py,sha256=p9zQjzCszYQ9ExrFGfs56xIxcYal3NvneF5EzBuXfjw,6026
|
| 52 |
+
markdown/extensions/codehilite.py,sha256=f6ByNCD06Z_MMHGI__wJ5o8CBAZPe5TYSvswfkCAtMA,12966
|
| 53 |
+
markdown/extensions/def_list.py,sha256=CLLuACOPOShLwiuY1jgWb06RfyOcnFfu464jd5jS5z0,3643
|
| 54 |
+
markdown/extensions/extra.py,sha256=TRi9DvkSQemA5WALtwd_mpk7qqQFxISLiHaoIpuo8bA,1843
|
| 55 |
+
markdown/extensions/fenced_code.py,sha256=BeU5iX84l4fuXHJy3ruvCre5ufLQavJiZWZzkj7hGoQ,7240
|
| 56 |
+
markdown/extensions/footnotes.py,sha256=_hP1VoW4Drxg_wsy2vcxu3ga8RBNy7LhEaKB7Bd05dU,15887
|
| 57 |
+
markdown/extensions/legacy_attrs.py,sha256=IiqvLJTzVhNSeJIwPVKxCUnB12-qoxyUE4jW-2o_VCg,2548
|
| 58 |
+
markdown/extensions/legacy_em.py,sha256=A01v5kkTwkQeyE87pfCgOIoc6_vSnspsiv8EJoGgKlA,1584
|
| 59 |
+
markdown/extensions/md_in_html.py,sha256=rHNMv6MhO3SoK_twjcAkNjMY0Fn-w5yXC1fbjBS9kPs,15884
|
| 60 |
+
markdown/extensions/meta.py,sha256=DH1Qr2xbvSItnY4EG__NNNhh7JEMUHeFrwDhX3B4wno,2333
|
| 61 |
+
markdown/extensions/nl2br.py,sha256=CnDxFoVTuD4AIbYMKcs-X8XVIEsTyTQg0YTwOVoXGjw,784
|
| 62 |
+
markdown/extensions/sane_lists.py,sha256=ZQmCf-247KBexVG0fc62nDvokGkV6W1uavYbieNKSG4,1505
|
| 63 |
+
markdown/extensions/smarty.py,sha256=Of926JSkkSEj2tgQZ5Vh01gOaHG9oFgchjX41W-4crk,10081
|
| 64 |
+
markdown/extensions/tables.py,sha256=fzZL40w1jNknE75jfH-f1cCw6Fp3jsjody7350ejzXs,8111
|
| 65 |
+
markdown/extensions/toc.py,sha256=mBe2hsMWQCE6Jc-PuugxMUIvOzs2iIKqPnNVYQYZ_jg,13972
|
| 66 |
+
markdown/extensions/wikilinks.py,sha256=l9gONSBXQECNMSKN-o51OTgMTTurEux9NKfisfE8zbk,2814
|
| 67 |
+
markdown/htmlparser.py,sha256=N2XhpAWhYtv6HvRBEL3x78-YFk8XCzDrJLS9f0GWyGI,13076
|
| 68 |
+
markdown/inlinepatterns.py,sha256=rmcoBMqA0zVd4Xr6BnP7X6DCydEJvJyYyau-lU7Q22o,30121
|
| 69 |
+
markdown/postprocessors.py,sha256=anYxZU1BQIe71SBXHpx4O7ev_Ss5EbaU9PFox41aeh8,4320
|
| 70 |
+
markdown/preprocessors.py,sha256=-s8QGHGlX7JAIJTfCivuc-CVwTLWs0IyEU94YUT2IvQ,2742
|
| 71 |
+
markdown/serializers.py,sha256=7I3QoVHVXs3uxQAS5WFiP42nPkuUUoy3GsO0DFEAPpU,6519
|
| 72 |
+
markdown/test_tools.py,sha256=mWmmlDuTzlFDWPWYeeSAWm3vuJSSo00gm-AeUJpCvk0,8392
|
| 73 |
+
markdown/treeprocessors.py,sha256=aa31Rtjl587HCC7Wiz6weLiR2-knM263oO2bYeW9foU,16345
|
| 74 |
+
markdown/util.py,sha256=ztabZWmIzs-AZM2DdFowvYJIQSUcUBGAFuRoexbmS00,11678
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/WHEEL
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Wheel-Version: 1.0
|
| 2 |
+
Generator: bdist_wheel (0.41.0)
|
| 3 |
+
Root-Is-Purelib: true
|
| 4 |
+
Tag: py3-none-any
|
| 5 |
+
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/entry_points.txt
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[console_scripts]
|
| 2 |
+
markdown_py = markdown.__main__:run
|
| 3 |
+
|
| 4 |
+
[markdown.extensions]
|
| 5 |
+
abbr = markdown.extensions.abbr:AbbrExtension
|
| 6 |
+
admonition = markdown.extensions.admonition:AdmonitionExtension
|
| 7 |
+
attr_list = markdown.extensions.attr_list:AttrListExtension
|
| 8 |
+
codehilite = markdown.extensions.codehilite:CodeHiliteExtension
|
| 9 |
+
def_list = markdown.extensions.def_list:DefListExtension
|
| 10 |
+
extra = markdown.extensions.extra:ExtraExtension
|
| 11 |
+
fenced_code = markdown.extensions.fenced_code:FencedCodeExtension
|
| 12 |
+
footnotes = markdown.extensions.footnotes:FootnoteExtension
|
| 13 |
+
legacy_attrs = markdown.extensions.legacy_attrs:LegacyAttrExtension
|
| 14 |
+
legacy_em = markdown.extensions.legacy_em:LegacyEmExtension
|
| 15 |
+
md_in_html = markdown.extensions.md_in_html:MarkdownInHtmlExtension
|
| 16 |
+
meta = markdown.extensions.meta:MetaExtension
|
| 17 |
+
nl2br = markdown.extensions.nl2br:Nl2BrExtension
|
| 18 |
+
sane_lists = markdown.extensions.sane_lists:SaneListExtension
|
| 19 |
+
smarty = markdown.extensions.smarty:SmartyExtension
|
| 20 |
+
tables = markdown.extensions.tables:TableExtension
|
| 21 |
+
toc = markdown.extensions.toc:TocExtension
|
| 22 |
+
wikilinks = markdown.extensions.wikilinks:WikiLinkExtension
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/top_level.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
markdown
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/INSTALLER
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
pip
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/LICENSE.rst
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Copyright 2010 Pallets
|
| 2 |
+
|
| 3 |
+
Redistribution and use in source and binary forms, with or without
|
| 4 |
+
modification, are permitted provided that the following conditions are
|
| 5 |
+
met:
|
| 6 |
+
|
| 7 |
+
1. Redistributions of source code must retain the above copyright
|
| 8 |
+
notice, this list of conditions and the following disclaimer.
|
| 9 |
+
|
| 10 |
+
2. Redistributions in binary form must reproduce the above copyright
|
| 11 |
+
notice, this list of conditions and the following disclaimer in the
|
| 12 |
+
documentation and/or other materials provided with the distribution.
|
| 13 |
+
|
| 14 |
+
3. Neither the name of the copyright holder nor the names of its
|
| 15 |
+
contributors may be used to endorse or promote products derived from
|
| 16 |
+
this software without specific prior written permission.
|
| 17 |
+
|
| 18 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| 19 |
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| 20 |
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
| 21 |
+
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| 22 |
+
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| 23 |
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
| 24 |
+
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
| 25 |
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
| 26 |
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
| 27 |
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
| 28 |
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/METADATA
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Metadata-Version: 2.1
|
| 2 |
+
Name: MarkupSafe
|
| 3 |
+
Version: 2.1.5
|
| 4 |
+
Summary: Safely add untrusted strings to HTML/XML markup.
|
| 5 |
+
Home-page: https://palletsprojects.com/p/markupsafe/
|
| 6 |
+
Maintainer: Pallets
|
| 7 |
+
Maintainer-email: contact@palletsprojects.com
|
| 8 |
+
License: BSD-3-Clause
|
| 9 |
+
Project-URL: Donate, https://palletsprojects.com/donate
|
| 10 |
+
Project-URL: Documentation, https://markupsafe.palletsprojects.com/
|
| 11 |
+
Project-URL: Changes, https://markupsafe.palletsprojects.com/changes/
|
| 12 |
+
Project-URL: Source Code, https://github.com/pallets/markupsafe/
|
| 13 |
+
Project-URL: Issue Tracker, https://github.com/pallets/markupsafe/issues/
|
| 14 |
+
Project-URL: Chat, https://discord.gg/pallets
|
| 15 |
+
Classifier: Development Status :: 5 - Production/Stable
|
| 16 |
+
Classifier: Environment :: Web Environment
|
| 17 |
+
Classifier: Intended Audience :: Developers
|
| 18 |
+
Classifier: License :: OSI Approved :: BSD License
|
| 19 |
+
Classifier: Operating System :: OS Independent
|
| 20 |
+
Classifier: Programming Language :: Python
|
| 21 |
+
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
| 22 |
+
Classifier: Topic :: Text Processing :: Markup :: HTML
|
| 23 |
+
Requires-Python: >=3.7
|
| 24 |
+
Description-Content-Type: text/x-rst
|
| 25 |
+
License-File: LICENSE.rst
|
| 26 |
+
|
| 27 |
+
MarkupSafe
|
| 28 |
+
==========
|
| 29 |
+
|
| 30 |
+
MarkupSafe implements a text object that escapes characters so it is
|
| 31 |
+
safe to use in HTML and XML. Characters that have special meanings are
|
| 32 |
+
replaced so that they display as the actual characters. This mitigates
|
| 33 |
+
injection attacks, meaning untrusted user input can safely be displayed
|
| 34 |
+
on a page.
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
Installing
|
| 38 |
+
----------
|
| 39 |
+
|
| 40 |
+
Install and update using `pip`_:
|
| 41 |
+
|
| 42 |
+
.. code-block:: text
|
| 43 |
+
|
| 44 |
+
pip install -U MarkupSafe
|
| 45 |
+
|
| 46 |
+
.. _pip: https://pip.pypa.io/en/stable/getting-started/
|
| 47 |
+
|
| 48 |
+
|
| 49 |
+
Examples
|
| 50 |
+
--------
|
| 51 |
+
|
| 52 |
+
.. code-block:: pycon
|
| 53 |
+
|
| 54 |
+
>>> from markupsafe import Markup, escape
|
| 55 |
+
|
| 56 |
+
>>> # escape replaces special characters and wraps in Markup
|
| 57 |
+
>>> escape("<script>alert(document.cookie);</script>")
|
| 58 |
+
Markup('<script>alert(document.cookie);</script>')
|
| 59 |
+
|
| 60 |
+
>>> # wrap in Markup to mark text "safe" and prevent escaping
|
| 61 |
+
>>> Markup("<strong>Hello</strong>")
|
| 62 |
+
Markup('<strong>hello</strong>')
|
| 63 |
+
|
| 64 |
+
>>> escape(Markup("<strong>Hello</strong>"))
|
| 65 |
+
Markup('<strong>hello</strong>')
|
| 66 |
+
|
| 67 |
+
>>> # Markup is a str subclass
|
| 68 |
+
>>> # methods and operators escape their arguments
|
| 69 |
+
>>> template = Markup("Hello <em>{name}</em>")
|
| 70 |
+
>>> template.format(name='"World"')
|
| 71 |
+
Markup('Hello <em>"World"</em>')
|
| 72 |
+
|
| 73 |
+
|
| 74 |
+
Donate
|
| 75 |
+
------
|
| 76 |
+
|
| 77 |
+
The Pallets organization develops and supports MarkupSafe and other
|
| 78 |
+
popular packages. In order to grow the community of contributors and
|
| 79 |
+
users, and allow the maintainers to devote more time to the projects,
|
| 80 |
+
`please donate today`_.
|
| 81 |
+
|
| 82 |
+
.. _please donate today: https://palletsprojects.com/donate
|
| 83 |
+
|
| 84 |
+
|
| 85 |
+
Links
|
| 86 |
+
-----
|
| 87 |
+
|
| 88 |
+
- Documentation: https://markupsafe.palletsprojects.com/
|
| 89 |
+
- Changes: https://markupsafe.palletsprojects.com/changes/
|
| 90 |
+
- PyPI Releases: https://pypi.org/project/MarkupSafe/
|
| 91 |
+
- Source Code: https://github.com/pallets/markupsafe/
|
| 92 |
+
- Issue Tracker: https://github.com/pallets/markupsafe/issues/
|
| 93 |
+
- Chat: https://discord.gg/pallets
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/RECORD
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
MarkupSafe-2.1.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
| 2 |
+
MarkupSafe-2.1.5.dist-info/LICENSE.rst,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475
|
| 3 |
+
MarkupSafe-2.1.5.dist-info/METADATA,sha256=2dRDPam6OZLfpX0wg1JN5P3u9arqACxVSfdGmsJU7o8,3003
|
| 4 |
+
MarkupSafe-2.1.5.dist-info/RECORD,,
|
| 5 |
+
MarkupSafe-2.1.5.dist-info/WHEEL,sha256=uAP-ukXX4cQcmS4DJIfTMngbzZ5Fat-TcU2LYkL-U3k,104
|
| 6 |
+
MarkupSafe-2.1.5.dist-info/top_level.txt,sha256=qy0Plje5IJuvsCBjejJyhDCjEAdcDLK_2agVcex8Z6U,11
|
| 7 |
+
markupsafe/__init__.py,sha256=r7VOTjUq7EMQ4v3p4R1LoVOGJg6ysfYRncLr34laRBs,10958
|
| 8 |
+
markupsafe/__pycache__/__init__.cpython-37.pyc,,
|
| 9 |
+
markupsafe/__pycache__/_native.cpython-37.pyc,,
|
| 10 |
+
markupsafe/_native.py,sha256=GR86Qvo_GcgKmKreA1WmYN9ud17OFwkww8E-fiW-57s,1713
|
| 11 |
+
markupsafe/_speedups.c,sha256=X2XvQVtIdcK4Usz70BvkzoOfjTCmQlDkkjYSn-swE0g,7083
|
| 12 |
+
markupsafe/_speedups.cpython-37m-arm-linux-gnueabihf.so,sha256=P4IiUcWUKMprZZXfnExbbmyOuZLbUe6efUknTcFV91s,35132
|
| 13 |
+
markupsafe/_speedups.pyi,sha256=vfMCsOgbAXRNLUXkyuyonG8uEWKYU4PDqNuMaDELAYw,229
|
| 14 |
+
markupsafe/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/WHEEL
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Wheel-Version: 1.0
|
| 2 |
+
Generator: bdist_wheel (0.41.2)
|
| 3 |
+
Root-Is-Purelib: false
|
| 4 |
+
Tag: cp37-cp37m-linux_armv7l
|
| 5 |
+
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/top_level.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
markupsafe
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/INSTALLER
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
pip
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/LICENSE.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
BSD 3-Clause License
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2013-2024, Kim Davies and contributors.
|
| 4 |
+
All rights reserved.
|
| 5 |
+
|
| 6 |
+
Redistribution and use in source and binary forms, with or without
|
| 7 |
+
modification, are permitted provided that the following conditions are
|
| 8 |
+
met:
|
| 9 |
+
|
| 10 |
+
1. Redistributions of source code must retain the above copyright
|
| 11 |
+
notice, this list of conditions and the following disclaimer.
|
| 12 |
+
|
| 13 |
+
2. Redistributions in binary form must reproduce the above copyright
|
| 14 |
+
notice, this list of conditions and the following disclaimer in the
|
| 15 |
+
documentation and/or other materials provided with the distribution.
|
| 16 |
+
|
| 17 |
+
3. Neither the name of the copyright holder nor the names of its
|
| 18 |
+
contributors may be used to endorse or promote products derived from
|
| 19 |
+
this software without specific prior written permission.
|
| 20 |
+
|
| 21 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| 22 |
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| 23 |
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| 24 |
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| 25 |
+
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| 26 |
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
| 27 |
+
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
| 28 |
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
| 29 |
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
| 30 |
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
| 31 |
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/METADATA
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Metadata-Version: 2.1
|
| 2 |
+
Name: idna
|
| 3 |
+
Version: 3.10
|
| 4 |
+
Summary: Internationalized Domain Names in Applications (IDNA)
|
| 5 |
+
Author-email: Kim Davies <kim+pypi@gumleaf.org>
|
| 6 |
+
Requires-Python: >=3.6
|
| 7 |
+
Description-Content-Type: text/x-rst
|
| 8 |
+
Classifier: Development Status :: 5 - Production/Stable
|
| 9 |
+
Classifier: Intended Audience :: Developers
|
| 10 |
+
Classifier: Intended Audience :: System Administrators
|
| 11 |
+
Classifier: License :: OSI Approved :: BSD License
|
| 12 |
+
Classifier: Operating System :: OS Independent
|
| 13 |
+
Classifier: Programming Language :: Python
|
| 14 |
+
Classifier: Programming Language :: Python :: 3
|
| 15 |
+
Classifier: Programming Language :: Python :: 3 :: Only
|
| 16 |
+
Classifier: Programming Language :: Python :: 3.6
|
| 17 |
+
Classifier: Programming Language :: Python :: 3.7
|
| 18 |
+
Classifier: Programming Language :: Python :: 3.8
|
| 19 |
+
Classifier: Programming Language :: Python :: 3.9
|
| 20 |
+
Classifier: Programming Language :: Python :: 3.10
|
| 21 |
+
Classifier: Programming Language :: Python :: 3.11
|
| 22 |
+
Classifier: Programming Language :: Python :: 3.12
|
| 23 |
+
Classifier: Programming Language :: Python :: 3.13
|
| 24 |
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
| 25 |
+
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
| 26 |
+
Classifier: Topic :: Internet :: Name Service (DNS)
|
| 27 |
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
| 28 |
+
Classifier: Topic :: Utilities
|
| 29 |
+
Requires-Dist: ruff >= 0.6.2 ; extra == "all"
|
| 30 |
+
Requires-Dist: mypy >= 1.11.2 ; extra == "all"
|
| 31 |
+
Requires-Dist: pytest >= 8.3.2 ; extra == "all"
|
| 32 |
+
Requires-Dist: flake8 >= 7.1.1 ; extra == "all"
|
| 33 |
+
Project-URL: Changelog, https://github.com/kjd/idna/blob/master/HISTORY.rst
|
| 34 |
+
Project-URL: Issue tracker, https://github.com/kjd/idna/issues
|
| 35 |
+
Project-URL: Source, https://github.com/kjd/idna
|
| 36 |
+
Provides-Extra: all
|
| 37 |
+
|
| 38 |
+
Internationalized Domain Names in Applications (IDNA)
|
| 39 |
+
=====================================================
|
| 40 |
+
|
| 41 |
+
Support for the Internationalized Domain Names in
|
| 42 |
+
Applications (IDNA) protocol as specified in `RFC 5891
|
| 43 |
+
<https://tools.ietf.org/html/rfc5891>`_. This is the latest version of
|
| 44 |
+
the protocol and is sometimes referred to as “IDNA 2008”.
|
| 45 |
+
|
| 46 |
+
This library also provides support for Unicode Technical
|
| 47 |
+
Standard 46, `Unicode IDNA Compatibility Processing
|
| 48 |
+
<https://unicode.org/reports/tr46/>`_.
|
| 49 |
+
|
| 50 |
+
This acts as a suitable replacement for the “encodings.idna”
|
| 51 |
+
module that comes with the Python standard library, but which
|
| 52 |
+
only supports the older superseded IDNA specification (`RFC 3490
|
| 53 |
+
<https://tools.ietf.org/html/rfc3490>`_).
|
| 54 |
+
|
| 55 |
+
Basic functions are simply executed:
|
| 56 |
+
|
| 57 |
+
.. code-block:: pycon
|
| 58 |
+
|
| 59 |
+
>>> import idna
|
| 60 |
+
>>> idna.encode('ドメイン.テスト')
|
| 61 |
+
b'xn--eckwd4c7c.xn--zckzah'
|
| 62 |
+
>>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))
|
| 63 |
+
ドメイン.テスト
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
Installation
|
| 67 |
+
------------
|
| 68 |
+
|
| 69 |
+
This package is available for installation from PyPI:
|
| 70 |
+
|
| 71 |
+
.. code-block:: bash
|
| 72 |
+
|
| 73 |
+
$ python3 -m pip install idna
|
| 74 |
+
|
| 75 |
+
|
| 76 |
+
Usage
|
| 77 |
+
-----
|
| 78 |
+
|
| 79 |
+
For typical usage, the ``encode`` and ``decode`` functions will take a
|
| 80 |
+
domain name argument and perform a conversion to A-labels or U-labels
|
| 81 |
+
respectively.
|
| 82 |
+
|
| 83 |
+
.. code-block:: pycon
|
| 84 |
+
|
| 85 |
+
>>> import idna
|
| 86 |
+
>>> idna.encode('ドメイン.テスト')
|
| 87 |
+
b'xn--eckwd4c7c.xn--zckzah'
|
| 88 |
+
>>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))
|
| 89 |
+
ドメイン.テスト
|
| 90 |
+
|
| 91 |
+
You may use the codec encoding and decoding methods using the
|
| 92 |
+
``idna.codec`` module:
|
| 93 |
+
|
| 94 |
+
.. code-block:: pycon
|
| 95 |
+
|
| 96 |
+
>>> import idna.codec
|
| 97 |
+
>>> print('домен.испытание'.encode('idna2008'))
|
| 98 |
+
b'xn--d1acufc.xn--80akhbyknj4f'
|
| 99 |
+
>>> print(b'xn--d1acufc.xn--80akhbyknj4f'.decode('idna2008'))
|
| 100 |
+
домен.испытание
|
| 101 |
+
|
| 102 |
+
Conversions can be applied at a per-label basis using the ``ulabel`` or
|
| 103 |
+
``alabel`` functions if necessary:
|
| 104 |
+
|
| 105 |
+
.. code-block:: pycon
|
| 106 |
+
|
| 107 |
+
>>> idna.alabel('测试')
|
| 108 |
+
b'xn--0zwm56d'
|
| 109 |
+
|
| 110 |
+
Compatibility Mapping (UTS #46)
|
| 111 |
+
+++++++++++++++++++++++++++++++
|
| 112 |
+
|
| 113 |
+
As described in `RFC 5895 <https://tools.ietf.org/html/rfc5895>`_, the
|
| 114 |
+
IDNA specification does not normalize input from different potential
|
| 115 |
+
ways a user may input a domain name. This functionality, known as
|
| 116 |
+
a “mapping”, is considered by the specification to be a local
|
| 117 |
+
user-interface issue distinct from IDNA conversion functionality.
|
| 118 |
+
|
| 119 |
+
This library provides one such mapping that was developed by the
|
| 120 |
+
Unicode Consortium. Known as `Unicode IDNA Compatibility Processing
|
| 121 |
+
<https://unicode.org/reports/tr46/>`_, it provides for both a regular
|
| 122 |
+
mapping for typical applications, as well as a transitional mapping to
|
| 123 |
+
help migrate from older IDNA 2003 applications. Strings are
|
| 124 |
+
preprocessed according to Section 4.4 “Preprocessing for IDNA2008”
|
| 125 |
+
prior to the IDNA operations.
|
| 126 |
+
|
| 127 |
+
For example, “Königsgäßchen” is not a permissible label as *LATIN
|
| 128 |
+
CAPITAL LETTER K* is not allowed (nor are capital letters in general).
|
| 129 |
+
UTS 46 will convert this into lower case prior to applying the IDNA
|
| 130 |
+
conversion.
|
| 131 |
+
|
| 132 |
+
.. code-block:: pycon
|
| 133 |
+
|
| 134 |
+
>>> import idna
|
| 135 |
+
>>> idna.encode('Königsgäßchen')
|
| 136 |
+
...
|
| 137 |
+
idna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed
|
| 138 |
+
>>> idna.encode('Königsgäßchen', uts46=True)
|
| 139 |
+
b'xn--knigsgchen-b4a3dun'
|
| 140 |
+
>>> print(idna.decode('xn--knigsgchen-b4a3dun'))
|
| 141 |
+
königsgäßchen
|
| 142 |
+
|
| 143 |
+
Transitional processing provides conversions to help transition from
|
| 144 |
+
the older 2003 standard to the current standard. For example, in the
|
| 145 |
+
original IDNA specification, the *LATIN SMALL LETTER SHARP S* (ß) was
|
| 146 |
+
converted into two *LATIN SMALL LETTER S* (ss), whereas in the current
|
| 147 |
+
IDNA specification this conversion is not performed.
|
| 148 |
+
|
| 149 |
+
.. code-block:: pycon
|
| 150 |
+
|
| 151 |
+
>>> idna.encode('Königsgäßchen', uts46=True, transitional=True)
|
| 152 |
+
'xn--knigsgsschen-lcb0w'
|
| 153 |
+
|
| 154 |
+
Implementers should use transitional processing with caution, only in
|
| 155 |
+
rare cases where conversion from legacy labels to current labels must be
|
| 156 |
+
performed (i.e. IDNA implementations that pre-date 2008). For typical
|
| 157 |
+
applications that just need to convert labels, transitional processing
|
| 158 |
+
is unlikely to be beneficial and could produce unexpected incompatible
|
| 159 |
+
results.
|
| 160 |
+
|
| 161 |
+
``encodings.idna`` Compatibility
|
| 162 |
+
++++++++++++++++++++++++++++++++
|
| 163 |
+
|
| 164 |
+
Function calls from the Python built-in ``encodings.idna`` module are
|
| 165 |
+
mapped to their IDNA 2008 equivalents using the ``idna.compat`` module.
|
| 166 |
+
Simply substitute the ``import`` clause in your code to refer to the new
|
| 167 |
+
module name.
|
| 168 |
+
|
| 169 |
+
Exceptions
|
| 170 |
+
----------
|
| 171 |
+
|
| 172 |
+
All errors raised during the conversion following the specification
|
| 173 |
+
should raise an exception derived from the ``idna.IDNAError`` base
|
| 174 |
+
class.
|
| 175 |
+
|
| 176 |
+
More specific exceptions that may be generated as ``idna.IDNABidiError``
|
| 177 |
+
when the error reflects an illegal combination of left-to-right and
|
| 178 |
+
right-to-left characters in a label; ``idna.InvalidCodepoint`` when
|
| 179 |
+
a specific codepoint is an illegal character in an IDN label (i.e.
|
| 180 |
+
INVALID); and ``idna.InvalidCodepointContext`` when the codepoint is
|
| 181 |
+
illegal based on its positional context (i.e. it is CONTEXTO or CONTEXTJ
|
| 182 |
+
but the contextual requirements are not satisfied.)
|
| 183 |
+
|
| 184 |
+
Building and Diagnostics
|
| 185 |
+
------------------------
|
| 186 |
+
|
| 187 |
+
The IDNA and UTS 46 functionality relies upon pre-calculated lookup
|
| 188 |
+
tables for performance. These tables are derived from computing against
|
| 189 |
+
eligibility criteria in the respective standards. These tables are
|
| 190 |
+
computed using the command-line script ``tools/idna-data``.
|
| 191 |
+
|
| 192 |
+
This tool will fetch relevant codepoint data from the Unicode repository
|
| 193 |
+
and perform the required calculations to identify eligibility. There are
|
| 194 |
+
three main modes:
|
| 195 |
+
|
| 196 |
+
* ``idna-data make-libdata``. Generates ``idnadata.py`` and
|
| 197 |
+
``uts46data.py``, the pre-calculated lookup tables used for IDNA and
|
| 198 |
+
UTS 46 conversions. Implementers who wish to track this library against
|
| 199 |
+
a different Unicode version may use this tool to manually generate a
|
| 200 |
+
different version of the ``idnadata.py`` and ``uts46data.py`` files.
|
| 201 |
+
|
| 202 |
+
* ``idna-data make-table``. Generate a table of the IDNA disposition
|
| 203 |
+
(e.g. PVALID, CONTEXTJ, CONTEXTO) in the format found in Appendix
|
| 204 |
+
B.1 of RFC 5892 and the pre-computed tables published by `IANA
|
| 205 |
+
<https://www.iana.org/>`_.
|
| 206 |
+
|
| 207 |
+
* ``idna-data U+0061``. Prints debugging output on the various
|
| 208 |
+
properties associated with an individual Unicode codepoint (in this
|
| 209 |
+
case, U+0061), that are used to assess the IDNA and UTS 46 status of a
|
| 210 |
+
codepoint. This is helpful in debugging or analysis.
|
| 211 |
+
|
| 212 |
+
The tool accepts a number of arguments, described using ``idna-data
|
| 213 |
+
-h``. Most notably, the ``--version`` argument allows the specification
|
| 214 |
+
of the version of Unicode to be used in computing the table data. For
|
| 215 |
+
example, ``idna-data --version 9.0.0 make-libdata`` will generate
|
| 216 |
+
library data against Unicode 9.0.0.
|
| 217 |
+
|
| 218 |
+
|
| 219 |
+
Additional Notes
|
| 220 |
+
----------------
|
| 221 |
+
|
| 222 |
+
* **Packages**. The latest tagged release version is published in the
|
| 223 |
+
`Python Package Index <https://pypi.org/project/idna/>`_.
|
| 224 |
+
|
| 225 |
+
* **Version support**. This library supports Python 3.6 and higher.
|
| 226 |
+
As this library serves as a low-level toolkit for a variety of
|
| 227 |
+
applications, many of which strive for broad compatibility with older
|
| 228 |
+
Python versions, there is no rush to remove older interpreter support.
|
| 229 |
+
Removing support for older versions should be well justified in that the
|
| 230 |
+
maintenance burden has become too high.
|
| 231 |
+
|
| 232 |
+
* **Python 2**. Python 2 is supported by version 2.x of this library.
|
| 233 |
+
Use "idna<3" in your requirements file if you need this library for
|
| 234 |
+
a Python 2 application. Be advised that these versions are no longer
|
| 235 |
+
actively developed.
|
| 236 |
+
|
| 237 |
+
* **Testing**. The library has a test suite based on each rule of the
|
| 238 |
+
IDNA specification, as well as tests that are provided as part of the
|
| 239 |
+
Unicode Technical Standard 46, `Unicode IDNA Compatibility Processing
|
| 240 |
+
<https://unicode.org/reports/tr46/>`_.
|
| 241 |
+
|
| 242 |
+
* **Emoji**. It is an occasional request to support emoji domains in
|
| 243 |
+
this library. Encoding of symbols like emoji is expressly prohibited by
|
| 244 |
+
the technical standard IDNA 2008 and emoji domains are broadly phased
|
| 245 |
+
out across the domain industry due to associated security risks. For
|
| 246 |
+
now, applications that need to support these non-compliant labels
|
| 247 |
+
may wish to consider trying the encode/decode operation in this library
|
| 248 |
+
first, and then falling back to using `encodings.idna`. See `the Github
|
| 249 |
+
project <https://github.com/kjd/idna/issues/18>`_ for more discussion.
|
| 250 |
+
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/RECORD
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
idna-3.10.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
| 2 |
+
idna-3.10.dist-info/LICENSE.md,sha256=pZ8LDvNjWHQQmkRhykT_enDVBpboFHZ7-vch1Mmw2w8,1541
|
| 3 |
+
idna-3.10.dist-info/METADATA,sha256=URR5ZyDfQ1PCEGhkYoojqfi2Ra0tau2--lhwG4XSfjI,10158
|
| 4 |
+
idna-3.10.dist-info/RECORD,,
|
| 5 |
+
idna-3.10.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
| 6 |
+
idna/__init__.py,sha256=MPqNDLZbXqGaNdXxAFhiqFPKEQXju2jNQhCey6-5eJM,868
|
| 7 |
+
idna/__pycache__/__init__.cpython-37.pyc,,
|
| 8 |
+
idna/__pycache__/codec.cpython-37.pyc,,
|
| 9 |
+
idna/__pycache__/compat.cpython-37.pyc,,
|
| 10 |
+
idna/__pycache__/core.cpython-37.pyc,,
|
| 11 |
+
idna/__pycache__/idnadata.cpython-37.pyc,,
|
| 12 |
+
idna/__pycache__/intranges.cpython-37.pyc,,
|
| 13 |
+
idna/__pycache__/package_data.cpython-37.pyc,,
|
| 14 |
+
idna/__pycache__/uts46data.cpython-37.pyc,,
|
| 15 |
+
idna/codec.py,sha256=PEew3ItwzjW4hymbasnty2N2OXvNcgHB-JjrBuxHPYY,3422
|
| 16 |
+
idna/compat.py,sha256=RzLy6QQCdl9784aFhb2EX9EKGCJjg0P3PilGdeXXcx8,316
|
| 17 |
+
idna/core.py,sha256=YJYyAMnwiQEPjVC4-Fqu_p4CJ6yKKuDGmppBNQNQpFs,13239
|
| 18 |
+
idna/idnadata.py,sha256=W30GcIGvtOWYwAjZj4ZjuouUutC6ffgNuyjJy7fZ-lo,78306
|
| 19 |
+
idna/intranges.py,sha256=amUtkdhYcQG8Zr-CoMM_kVRacxkivC1WgxN1b63KKdU,1898
|
| 20 |
+
idna/package_data.py,sha256=q59S3OXsc5VI8j6vSD0sGBMyk6zZ4vWFREE88yCJYKs,21
|
| 21 |
+
idna/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
| 22 |
+
idna/uts46data.py,sha256=rt90K9J40gUSwppDPCrhjgi5AA6pWM65dEGRSf6rIhM,239289
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/WHEEL
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Wheel-Version: 1.0
|
| 2 |
+
Generator: flit 3.9.0
|
| 3 |
+
Root-Is-Purelib: true
|
| 4 |
+
Tag: py3-none-any
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/INSTALLER
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
pip
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/LICENSE
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
Apache License
|
| 3 |
+
Version 2.0, January 2004
|
| 4 |
+
http://www.apache.org/licenses/
|
| 5 |
+
|
| 6 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
| 7 |
+
|
| 8 |
+
1. Definitions.
|
| 9 |
+
|
| 10 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
| 11 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
| 12 |
+
|
| 13 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
| 14 |
+
the copyright owner that is granting the License.
|
| 15 |
+
|
| 16 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
| 17 |
+
other entities that control, are controlled by, or are under common
|
| 18 |
+
control with that entity. For the purposes of this definition,
|
| 19 |
+
"control" means (i) the power, direct or indirect, to cause the
|
| 20 |
+
direction or management of such entity, whether by contract or
|
| 21 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
| 22 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
| 23 |
+
|
| 24 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
| 25 |
+
exercising permissions granted by this License.
|
| 26 |
+
|
| 27 |
+
"Source" form shall mean the preferred form for making modifications,
|
| 28 |
+
including but not limited to software source code, documentation
|
| 29 |
+
source, and configuration files.
|
| 30 |
+
|
| 31 |
+
"Object" form shall mean any form resulting from mechanical
|
| 32 |
+
transformation or translation of a Source form, including but
|
| 33 |
+
not limited to compiled object code, generated documentation,
|
| 34 |
+
and conversions to other media types.
|
| 35 |
+
|
| 36 |
+
"Work" shall mean the work of authorship, whether in Source or
|
| 37 |
+
Object form, made available under the License, as indicated by a
|
| 38 |
+
copyright notice that is included in or attached to the work
|
| 39 |
+
(an example is provided in the Appendix below).
|
| 40 |
+
|
| 41 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
| 42 |
+
form, that is based on (or derived from) the Work and for which the
|
| 43 |
+
editorial revisions, annotations, elaborations, or other modifications
|
| 44 |
+
represent, as a whole, an original work of authorship. For the purposes
|
| 45 |
+
of this License, Derivative Works shall not include works that remain
|
| 46 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
| 47 |
+
the Work and Derivative Works thereof.
|
| 48 |
+
|
| 49 |
+
"Contribution" shall mean any work of authorship, including
|
| 50 |
+
the original version of the Work and any modifications or additions
|
| 51 |
+
to that Work or Derivative Works thereof, that is intentionally
|
| 52 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
| 53 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
| 54 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
| 55 |
+
means any form of electronic, verbal, or written communication sent
|
| 56 |
+
to the Licensor or its representatives, including but not limited to
|
| 57 |
+
communication on electronic mailing lists, source code control systems,
|
| 58 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
| 59 |
+
Licensor for the purpose of discussing and improving the Work, but
|
| 60 |
+
excluding communication that is conspicuously marked or otherwise
|
| 61 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
| 62 |
+
|
| 63 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
| 64 |
+
on behalf of whom a Contribution has been received by Licensor and
|
| 65 |
+
subsequently incorporated within the Work.
|
| 66 |
+
|
| 67 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
| 68 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 69 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 70 |
+
copyright license to reproduce, prepare Derivative Works of,
|
| 71 |
+
publicly display, publicly perform, sublicense, and distribute the
|
| 72 |
+
Work and such Derivative Works in Source or Object form.
|
| 73 |
+
|
| 74 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
| 75 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 76 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 77 |
+
(except as stated in this section) patent license to make, have made,
|
| 78 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
| 79 |
+
where such license applies only to those patent claims licensable
|
| 80 |
+
by such Contributor that are necessarily infringed by their
|
| 81 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
| 82 |
+
with the Work to which such Contribution(s) was submitted. If You
|
| 83 |
+
institute patent litigation against any entity (including a
|
| 84 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
| 85 |
+
or a Contribution incorporated within the Work constitutes direct
|
| 86 |
+
or contributory patent infringement, then any patent licenses
|
| 87 |
+
granted to You under this License for that Work shall terminate
|
| 88 |
+
as of the date such litigation is filed.
|
| 89 |
+
|
| 90 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
| 91 |
+
Work or Derivative Works thereof in any medium, with or without
|
| 92 |
+
modifications, and in Source or Object form, provided that You
|
| 93 |
+
meet the following conditions:
|
| 94 |
+
|
| 95 |
+
(a) You must give any other recipients of the Work or
|
| 96 |
+
Derivative Works a copy of this License; and
|
| 97 |
+
|
| 98 |
+
(b) You must cause any modified files to carry prominent notices
|
| 99 |
+
stating that You changed the files; and
|
| 100 |
+
|
| 101 |
+
(c) You must retain, in the Source form of any Derivative Works
|
| 102 |
+
that You distribute, all copyright, patent, trademark, and
|
| 103 |
+
attribution notices from the Source form of the Work,
|
| 104 |
+
excluding those notices that do not pertain to any part of
|
| 105 |
+
the Derivative Works; and
|
| 106 |
+
|
| 107 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
| 108 |
+
distribution, then any Derivative Works that You distribute must
|
| 109 |
+
include a readable copy of the attribution notices contained
|
| 110 |
+
within such NOTICE file, excluding those notices that do not
|
| 111 |
+
pertain to any part of the Derivative Works, in at least one
|
| 112 |
+
of the following places: within a NOTICE text file distributed
|
| 113 |
+
as part of the Derivative Works; within the Source form or
|
| 114 |
+
documentation, if provided along with the Derivative Works; or,
|
| 115 |
+
within a display generated by the Derivative Works, if and
|
| 116 |
+
wherever such third-party notices normally appear. The contents
|
| 117 |
+
of the NOTICE file are for informational purposes only and
|
| 118 |
+
do not modify the License. You may add Your own attribution
|
| 119 |
+
notices within Derivative Works that You distribute, alongside
|
| 120 |
+
or as an addendum to the NOTICE text from the Work, provided
|
| 121 |
+
that such additional attribution notices cannot be construed
|
| 122 |
+
as modifying the License.
|
| 123 |
+
|
| 124 |
+
You may add Your own copyright statement to Your modifications and
|
| 125 |
+
may provide additional or different license terms and conditions
|
| 126 |
+
for use, reproduction, or distribution of Your modifications, or
|
| 127 |
+
for any such Derivative Works as a whole, provided Your use,
|
| 128 |
+
reproduction, and distribution of the Work otherwise complies with
|
| 129 |
+
the conditions stated in this License.
|
| 130 |
+
|
| 131 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
| 132 |
+
any Contribution intentionally submitted for inclusion in the Work
|
| 133 |
+
by You to the Licensor shall be under the terms and conditions of
|
| 134 |
+
this License, without any additional terms or conditions.
|
| 135 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
| 136 |
+
the terms of any separate license agreement you may have executed
|
| 137 |
+
with Licensor regarding such Contributions.
|
| 138 |
+
|
| 139 |
+
6. Trademarks. This License does not grant permission to use the trade
|
| 140 |
+
names, trademarks, service marks, or product names of the Licensor,
|
| 141 |
+
except as required for reasonable and customary use in describing the
|
| 142 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
| 143 |
+
|
| 144 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
| 145 |
+
agreed to in writing, Licensor provides the Work (and each
|
| 146 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
| 147 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
| 148 |
+
implied, including, without limitation, any warranties or conditions
|
| 149 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
| 150 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
| 151 |
+
appropriateness of using or redistributing the Work and assume any
|
| 152 |
+
risks associated with Your exercise of permissions under this License.
|
| 153 |
+
|
| 154 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
| 155 |
+
whether in tort (including negligence), contract, or otherwise,
|
| 156 |
+
unless required by applicable law (such as deliberate and grossly
|
| 157 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
| 158 |
+
liable to You for damages, including any direct, indirect, special,
|
| 159 |
+
incidental, or consequential damages of any character arising as a
|
| 160 |
+
result of this License or out of the use or inability to use the
|
| 161 |
+
Work (including but not limited to damages for loss of goodwill,
|
| 162 |
+
work stoppage, computer failure or malfunction, or any and all
|
| 163 |
+
other commercial damages or losses), even if such Contributor
|
| 164 |
+
has been advised of the possibility of such damages.
|
| 165 |
+
|
| 166 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
| 167 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
| 168 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
| 169 |
+
or other liability obligations and/or rights consistent with this
|
| 170 |
+
License. However, in accepting such obligations, You may act only
|
| 171 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
| 172 |
+
of any other Contributor, and only if You agree to indemnify,
|
| 173 |
+
defend, and hold each Contributor harmless for any liability
|
| 174 |
+
incurred by, or claims asserted against, such Contributor by reason
|
| 175 |
+
of your accepting any such warranty or additional liability.
|
| 176 |
+
|
| 177 |
+
END OF TERMS AND CONDITIONS
|
| 178 |
+
|
| 179 |
+
APPENDIX: How to apply the Apache License to your work.
|
| 180 |
+
|
| 181 |
+
To apply the Apache License to your work, attach the following
|
| 182 |
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
| 183 |
+
replaced with your own identifying information. (Don't include
|
| 184 |
+
the brackets!) The text should be enclosed in the appropriate
|
| 185 |
+
comment syntax for the file format. We also recommend that a
|
| 186 |
+
file or class name and description of purpose be included on the
|
| 187 |
+
same "printed page" as the copyright notice for easier
|
| 188 |
+
identification within third-party archives.
|
| 189 |
+
|
| 190 |
+
Copyright [yyyy] [name of copyright owner]
|
| 191 |
+
|
| 192 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
| 193 |
+
you may not use this file except in compliance with the License.
|
| 194 |
+
You may obtain a copy of the License at
|
| 195 |
+
|
| 196 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
| 197 |
+
|
| 198 |
+
Unless required by applicable law or agreed to in writing, software
|
| 199 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
| 200 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 201 |
+
See the License for the specific language governing permissions and
|
| 202 |
+
limitations under the License.
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/METADATA
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Metadata-Version: 2.1
|
| 2 |
+
Name: importlib-metadata
|
| 3 |
+
Version: 6.7.0
|
| 4 |
+
Summary: Read metadata from Python packages
|
| 5 |
+
Home-page: https://github.com/python/importlib_metadata
|
| 6 |
+
Author: Jason R. Coombs
|
| 7 |
+
Author-email: jaraco@jaraco.com
|
| 8 |
+
Classifier: Development Status :: 5 - Production/Stable
|
| 9 |
+
Classifier: Intended Audience :: Developers
|
| 10 |
+
Classifier: License :: OSI Approved :: Apache Software License
|
| 11 |
+
Classifier: Programming Language :: Python :: 3
|
| 12 |
+
Classifier: Programming Language :: Python :: 3 :: Only
|
| 13 |
+
Requires-Python: >=3.7
|
| 14 |
+
License-File: LICENSE
|
| 15 |
+
Requires-Dist: zipp (>=0.5)
|
| 16 |
+
Requires-Dist: typing-extensions (>=3.6.4) ; python_version < "3.8"
|
| 17 |
+
Provides-Extra: docs
|
| 18 |
+
Requires-Dist: sphinx (>=3.5) ; extra == 'docs'
|
| 19 |
+
Requires-Dist: jaraco.packaging (>=9) ; extra == 'docs'
|
| 20 |
+
Requires-Dist: rst.linker (>=1.9) ; extra == 'docs'
|
| 21 |
+
Requires-Dist: furo ; extra == 'docs'
|
| 22 |
+
Requires-Dist: sphinx-lint ; extra == 'docs'
|
| 23 |
+
Requires-Dist: jaraco.tidelift (>=1.4) ; extra == 'docs'
|
| 24 |
+
Provides-Extra: perf
|
| 25 |
+
Requires-Dist: ipython ; extra == 'perf'
|
| 26 |
+
Provides-Extra: testing
|
| 27 |
+
Requires-Dist: pytest (>=6) ; extra == 'testing'
|
| 28 |
+
Requires-Dist: pytest-checkdocs (>=2.4) ; extra == 'testing'
|
| 29 |
+
Requires-Dist: pytest-cov ; extra == 'testing'
|
| 30 |
+
Requires-Dist: pytest-enabler (>=1.3) ; extra == 'testing'
|
| 31 |
+
Requires-Dist: pytest-ruff ; extra == 'testing'
|
| 32 |
+
Requires-Dist: packaging ; extra == 'testing'
|
| 33 |
+
Requires-Dist: pyfakefs ; extra == 'testing'
|
| 34 |
+
Requires-Dist: flufl.flake8 ; extra == 'testing'
|
| 35 |
+
Requires-Dist: pytest-perf (>=0.9.2) ; extra == 'testing'
|
| 36 |
+
Requires-Dist: pytest-black (>=0.3.7) ; (platform_python_implementation != "PyPy") and extra == 'testing'
|
| 37 |
+
Requires-Dist: pytest-mypy (>=0.9.1) ; (platform_python_implementation != "PyPy") and extra == 'testing'
|
| 38 |
+
Requires-Dist: importlib-resources (>=1.3) ; (python_version < "3.9") and extra == 'testing'
|
| 39 |
+
|
| 40 |
+
.. image:: https://img.shields.io/pypi/v/importlib_metadata.svg
|
| 41 |
+
:target: https://pypi.org/project/importlib_metadata
|
| 42 |
+
|
| 43 |
+
.. image:: https://img.shields.io/pypi/pyversions/importlib_metadata.svg
|
| 44 |
+
|
| 45 |
+
.. image:: https://github.com/python/importlib_metadata/workflows/tests/badge.svg
|
| 46 |
+
:target: https://github.com/python/importlib_metadata/actions?query=workflow%3A%22tests%22
|
| 47 |
+
:alt: tests
|
| 48 |
+
|
| 49 |
+
.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
|
| 50 |
+
:target: https://github.com/psf/black
|
| 51 |
+
:alt: Code style: Black
|
| 52 |
+
|
| 53 |
+
.. image:: https://readthedocs.org/projects/importlib-metadata/badge/?version=latest
|
| 54 |
+
:target: https://importlib-metadata.readthedocs.io/en/latest/?badge=latest
|
| 55 |
+
|
| 56 |
+
.. image:: https://img.shields.io/badge/skeleton-2023-informational
|
| 57 |
+
:target: https://blog.jaraco.com/skeleton
|
| 58 |
+
|
| 59 |
+
.. image:: https://tidelift.com/badges/package/pypi/importlib-metadata
|
| 60 |
+
:target: https://tidelift.com/subscription/pkg/pypi-importlib-metadata?utm_source=pypi-importlib-metadata&utm_medium=readme
|
| 61 |
+
|
| 62 |
+
Library to access the metadata for a Python package.
|
| 63 |
+
|
| 64 |
+
This package supplies third-party access to the functionality of
|
| 65 |
+
`importlib.metadata <https://docs.python.org/3/library/importlib.metadata.html>`_
|
| 66 |
+
including improvements added to subsequent Python versions.
|
| 67 |
+
|
| 68 |
+
|
| 69 |
+
Compatibility
|
| 70 |
+
=============
|
| 71 |
+
|
| 72 |
+
New features are introduced in this third-party library and later merged
|
| 73 |
+
into CPython. The following table indicates which versions of this library
|
| 74 |
+
were contributed to different versions in the standard library:
|
| 75 |
+
|
| 76 |
+
.. list-table::
|
| 77 |
+
:header-rows: 1
|
| 78 |
+
|
| 79 |
+
* - importlib_metadata
|
| 80 |
+
- stdlib
|
| 81 |
+
* - 6.5
|
| 82 |
+
- 3.12
|
| 83 |
+
* - 4.13
|
| 84 |
+
- 3.11
|
| 85 |
+
* - 4.6
|
| 86 |
+
- 3.10
|
| 87 |
+
* - 1.4
|
| 88 |
+
- 3.8
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
Usage
|
| 92 |
+
=====
|
| 93 |
+
|
| 94 |
+
See the `online documentation <https://importlib-metadata.readthedocs.io/>`_
|
| 95 |
+
for usage details.
|
| 96 |
+
|
| 97 |
+
`Finder authors
|
| 98 |
+
<https://docs.python.org/3/reference/import.html#finders-and-loaders>`_ can
|
| 99 |
+
also add support for custom package installers. See the above documentation
|
| 100 |
+
for details.
|
| 101 |
+
|
| 102 |
+
|
| 103 |
+
Caveats
|
| 104 |
+
=======
|
| 105 |
+
|
| 106 |
+
This project primarily supports third-party packages installed by PyPA
|
| 107 |
+
tools (or other conforming packages). It does not support:
|
| 108 |
+
|
| 109 |
+
- Packages in the stdlib.
|
| 110 |
+
- Packages installed without metadata.
|
| 111 |
+
|
| 112 |
+
Project details
|
| 113 |
+
===============
|
| 114 |
+
|
| 115 |
+
* Project home: https://github.com/python/importlib_metadata
|
| 116 |
+
* Report bugs at: https://github.com/python/importlib_metadata/issues
|
| 117 |
+
* Code hosting: https://github.com/python/importlib_metadata
|
| 118 |
+
* Documentation: https://importlib-metadata.readthedocs.io/
|
| 119 |
+
|
| 120 |
+
For Enterprise
|
| 121 |
+
==============
|
| 122 |
+
|
| 123 |
+
Available as part of the Tidelift Subscription.
|
| 124 |
+
|
| 125 |
+
This project and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.
|
| 126 |
+
|
| 127 |
+
`Learn more <https://tidelift.com/subscription/pkg/pypi-importlib-metadata?utm_source=pypi-importlib-metadata&utm_medium=referral&utm_campaign=github>`_.
|
| 128 |
+
|
| 129 |
+
Security Contact
|
| 130 |
+
================
|
| 131 |
+
|
| 132 |
+
To report a security vulnerability, please use the
|
| 133 |
+
`Tidelift security contact <https://tidelift.com/security>`_.
|
| 134 |
+
Tidelift will coordinate the fix and disclosure.
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/RECORD
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
importlib_metadata-6.7.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
| 2 |
+
importlib_metadata-6.7.0.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
| 3 |
+
importlib_metadata-6.7.0.dist-info/METADATA,sha256=JDrzuuLRE3CxIRXLeXdZGGFDrVlEXUvt-chm0-s-TtI,4878
|
| 4 |
+
importlib_metadata-6.7.0.dist-info/RECORD,,
|
| 5 |
+
importlib_metadata-6.7.0.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
|
| 6 |
+
importlib_metadata-6.7.0.dist-info/top_level.txt,sha256=CO3fD9yylANiXkrMo4qHLV_mqXL2sC5JFKgt1yWAT-A,19
|
| 7 |
+
importlib_metadata/__init__.py,sha256=MQx_tU_lZg-7U91wdrlrsDt0MGPXkpraLevB8LO1NNc,30724
|
| 8 |
+
importlib_metadata/__pycache__/__init__.cpython-37.pyc,,
|
| 9 |
+
importlib_metadata/__pycache__/_adapters.cpython-37.pyc,,
|
| 10 |
+
importlib_metadata/__pycache__/_collections.cpython-37.pyc,,
|
| 11 |
+
importlib_metadata/__pycache__/_compat.cpython-37.pyc,,
|
| 12 |
+
importlib_metadata/__pycache__/_functools.cpython-37.pyc,,
|
| 13 |
+
importlib_metadata/__pycache__/_itertools.cpython-37.pyc,,
|
| 14 |
+
importlib_metadata/__pycache__/_meta.cpython-37.pyc,,
|
| 15 |
+
importlib_metadata/__pycache__/_py39compat.cpython-37.pyc,,
|
| 16 |
+
importlib_metadata/__pycache__/_text.cpython-37.pyc,,
|
| 17 |
+
importlib_metadata/_adapters.py,sha256=i8S6Ib1OQjcILA-l4gkzktMZe18TaeUNI49PLRp6OBU,2454
|
| 18 |
+
importlib_metadata/_collections.py,sha256=CJ0OTCHIjWA0ZIVS4voORAsn2R4R2cQBEtPsZEJpASY,743
|
| 19 |
+
importlib_metadata/_compat.py,sha256=xaiD8pwYYPCWkVgR30411iT4OmLbSbSAigzhp0nTROw,1735
|
| 20 |
+
importlib_metadata/_functools.py,sha256=PsY2-4rrKX4RVeRC1oGp1lB1pmC9eKN88_f-bD9uOoA,2895
|
| 21 |
+
importlib_metadata/_itertools.py,sha256=cvr_2v8BRbxcIl5x5ldfqdHjhI8Yi8s8yk50G_nm6jQ,2068
|
| 22 |
+
importlib_metadata/_meta.py,sha256=I2AuaUMr5a6cTdZleV9WpyqUCSooqqV-zSzr1qn7FMw,1615
|
| 23 |
+
importlib_metadata/_py39compat.py,sha256=2Tk5twb_VgLCY-1NEAQjdZp_S9OFMC-pUzP2isuaPsQ,1098
|
| 24 |
+
importlib_metadata/_text.py,sha256=HCsFksZpJLeTP3NEk_ngrAeXVRRtTrtyh9eOABoRP4A,2166
|
| 25 |
+
importlib_metadata/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/WHEEL
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Wheel-Version: 1.0
|
| 2 |
+
Generator: bdist_wheel (0.40.0)
|
| 3 |
+
Root-Is-Purelib: true
|
| 4 |
+
Tag: py3-none-any
|
| 5 |
+
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/top_level.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
importlib_metadata
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__init__.py
ADDED
|
@@ -0,0 +1,1015 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
import re
|
| 3 |
+
import abc
|
| 4 |
+
import csv
|
| 5 |
+
import sys
|
| 6 |
+
import zipp
|
| 7 |
+
import email
|
| 8 |
+
import inspect
|
| 9 |
+
import pathlib
|
| 10 |
+
import operator
|
| 11 |
+
import textwrap
|
| 12 |
+
import warnings
|
| 13 |
+
import functools
|
| 14 |
+
import itertools
|
| 15 |
+
import posixpath
|
| 16 |
+
import collections
|
| 17 |
+
|
| 18 |
+
from . import _adapters, _meta, _py39compat
|
| 19 |
+
from ._collections import FreezableDefaultDict, Pair
|
| 20 |
+
from ._compat import (
|
| 21 |
+
NullFinder,
|
| 22 |
+
StrPath,
|
| 23 |
+
install,
|
| 24 |
+
pypy_partial,
|
| 25 |
+
)
|
| 26 |
+
from ._functools import method_cache, pass_none
|
| 27 |
+
from ._itertools import always_iterable, unique_everseen
|
| 28 |
+
from ._meta import PackageMetadata, SimplePath
|
| 29 |
+
|
| 30 |
+
from contextlib import suppress
|
| 31 |
+
from importlib import import_module
|
| 32 |
+
from importlib.abc import MetaPathFinder
|
| 33 |
+
from itertools import starmap
|
| 34 |
+
from typing import Iterable, List, Mapping, Optional, Set, cast
|
| 35 |
+
|
| 36 |
+
__all__ = [
|
| 37 |
+
'Distribution',
|
| 38 |
+
'DistributionFinder',
|
| 39 |
+
'PackageMetadata',
|
| 40 |
+
'PackageNotFoundError',
|
| 41 |
+
'distribution',
|
| 42 |
+
'distributions',
|
| 43 |
+
'entry_points',
|
| 44 |
+
'files',
|
| 45 |
+
'metadata',
|
| 46 |
+
'packages_distributions',
|
| 47 |
+
'requires',
|
| 48 |
+
'version',
|
| 49 |
+
]
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
class PackageNotFoundError(ModuleNotFoundError):
|
| 53 |
+
"""The package was not found."""
|
| 54 |
+
|
| 55 |
+
def __str__(self) -> str:
|
| 56 |
+
return f"No package metadata was found for {self.name}"
|
| 57 |
+
|
| 58 |
+
@property
|
| 59 |
+
def name(self) -> str: # type: ignore[override]
|
| 60 |
+
(name,) = self.args
|
| 61 |
+
return name
|
| 62 |
+
|
| 63 |
+
|
| 64 |
+
class Sectioned:
|
| 65 |
+
"""
|
| 66 |
+
A simple entry point config parser for performance
|
| 67 |
+
|
| 68 |
+
>>> for item in Sectioned.read(Sectioned._sample):
|
| 69 |
+
... print(item)
|
| 70 |
+
Pair(name='sec1', value='# comments ignored')
|
| 71 |
+
Pair(name='sec1', value='a = 1')
|
| 72 |
+
Pair(name='sec1', value='b = 2')
|
| 73 |
+
Pair(name='sec2', value='a = 2')
|
| 74 |
+
|
| 75 |
+
>>> res = Sectioned.section_pairs(Sectioned._sample)
|
| 76 |
+
>>> item = next(res)
|
| 77 |
+
>>> item.name
|
| 78 |
+
'sec1'
|
| 79 |
+
>>> item.value
|
| 80 |
+
Pair(name='a', value='1')
|
| 81 |
+
>>> item = next(res)
|
| 82 |
+
>>> item.value
|
| 83 |
+
Pair(name='b', value='2')
|
| 84 |
+
>>> item = next(res)
|
| 85 |
+
>>> item.name
|
| 86 |
+
'sec2'
|
| 87 |
+
>>> item.value
|
| 88 |
+
Pair(name='a', value='2')
|
| 89 |
+
>>> list(res)
|
| 90 |
+
[]
|
| 91 |
+
"""
|
| 92 |
+
|
| 93 |
+
_sample = textwrap.dedent(
|
| 94 |
+
"""
|
| 95 |
+
[sec1]
|
| 96 |
+
# comments ignored
|
| 97 |
+
a = 1
|
| 98 |
+
b = 2
|
| 99 |
+
|
| 100 |
+
[sec2]
|
| 101 |
+
a = 2
|
| 102 |
+
"""
|
| 103 |
+
).lstrip()
|
| 104 |
+
|
| 105 |
+
@classmethod
|
| 106 |
+
def section_pairs(cls, text):
|
| 107 |
+
return (
|
| 108 |
+
section._replace(value=Pair.parse(section.value))
|
| 109 |
+
for section in cls.read(text, filter_=cls.valid)
|
| 110 |
+
if section.name is not None
|
| 111 |
+
)
|
| 112 |
+
|
| 113 |
+
@staticmethod
|
| 114 |
+
def read(text, filter_=None):
|
| 115 |
+
lines = filter(filter_, map(str.strip, text.splitlines()))
|
| 116 |
+
name = None
|
| 117 |
+
for value in lines:
|
| 118 |
+
section_match = value.startswith('[') and value.endswith(']')
|
| 119 |
+
if section_match:
|
| 120 |
+
name = value.strip('[]')
|
| 121 |
+
continue
|
| 122 |
+
yield Pair(name, value)
|
| 123 |
+
|
| 124 |
+
@staticmethod
|
| 125 |
+
def valid(line: str):
|
| 126 |
+
return line and not line.startswith('#')
|
| 127 |
+
|
| 128 |
+
|
| 129 |
+
class DeprecatedTuple:
|
| 130 |
+
"""
|
| 131 |
+
Provide subscript item access for backward compatibility.
|
| 132 |
+
|
| 133 |
+
>>> recwarn = getfixture('recwarn')
|
| 134 |
+
>>> ep = EntryPoint(name='name', value='value', group='group')
|
| 135 |
+
>>> ep[:]
|
| 136 |
+
('name', 'value', 'group')
|
| 137 |
+
>>> ep[0]
|
| 138 |
+
'name'
|
| 139 |
+
>>> len(recwarn)
|
| 140 |
+
1
|
| 141 |
+
"""
|
| 142 |
+
|
| 143 |
+
# Do not remove prior to 2023-05-01 or Python 3.13
|
| 144 |
+
_warn = functools.partial(
|
| 145 |
+
warnings.warn,
|
| 146 |
+
"EntryPoint tuple interface is deprecated. Access members by name.",
|
| 147 |
+
DeprecationWarning,
|
| 148 |
+
stacklevel=pypy_partial(2),
|
| 149 |
+
)
|
| 150 |
+
|
| 151 |
+
def __getitem__(self, item):
|
| 152 |
+
self._warn()
|
| 153 |
+
return self._key()[item]
|
| 154 |
+
|
| 155 |
+
|
| 156 |
+
class EntryPoint(DeprecatedTuple):
|
| 157 |
+
"""An entry point as defined by Python packaging conventions.
|
| 158 |
+
|
| 159 |
+
See `the packaging docs on entry points
|
| 160 |
+
<https://packaging.python.org/specifications/entry-points/>`_
|
| 161 |
+
for more information.
|
| 162 |
+
|
| 163 |
+
>>> ep = EntryPoint(
|
| 164 |
+
... name=None, group=None, value='package.module:attr [extra1, extra2]')
|
| 165 |
+
>>> ep.module
|
| 166 |
+
'package.module'
|
| 167 |
+
>>> ep.attr
|
| 168 |
+
'attr'
|
| 169 |
+
>>> ep.extras
|
| 170 |
+
['extra1', 'extra2']
|
| 171 |
+
"""
|
| 172 |
+
|
| 173 |
+
pattern = re.compile(
|
| 174 |
+
r'(?P<module>[\w.]+)\s*'
|
| 175 |
+
r'(:\s*(?P<attr>[\w.]+)\s*)?'
|
| 176 |
+
r'((?P<extras>\[.*\])\s*)?$'
|
| 177 |
+
)
|
| 178 |
+
"""
|
| 179 |
+
A regular expression describing the syntax for an entry point,
|
| 180 |
+
which might look like:
|
| 181 |
+
|
| 182 |
+
- module
|
| 183 |
+
- package.module
|
| 184 |
+
- package.module:attribute
|
| 185 |
+
- package.module:object.attribute
|
| 186 |
+
- package.module:attr [extra1, extra2]
|
| 187 |
+
|
| 188 |
+
Other combinations are possible as well.
|
| 189 |
+
|
| 190 |
+
The expression is lenient about whitespace around the ':',
|
| 191 |
+
following the attr, and following any extras.
|
| 192 |
+
"""
|
| 193 |
+
|
| 194 |
+
name: str
|
| 195 |
+
value: str
|
| 196 |
+
group: str
|
| 197 |
+
|
| 198 |
+
dist: Optional['Distribution'] = None
|
| 199 |
+
|
| 200 |
+
def __init__(self, name: str, value: str, group: str) -> None:
|
| 201 |
+
vars(self).update(name=name, value=value, group=group)
|
| 202 |
+
|
| 203 |
+
def load(self):
|
| 204 |
+
"""Load the entry point from its definition. If only a module
|
| 205 |
+
is indicated by the value, return that module. Otherwise,
|
| 206 |
+
return the named object.
|
| 207 |
+
"""
|
| 208 |
+
match = self.pattern.match(self.value)
|
| 209 |
+
module = import_module(match.group('module'))
|
| 210 |
+
attrs = filter(None, (match.group('attr') or '').split('.'))
|
| 211 |
+
return functools.reduce(getattr, attrs, module)
|
| 212 |
+
|
| 213 |
+
@property
|
| 214 |
+
def module(self) -> str:
|
| 215 |
+
match = self.pattern.match(self.value)
|
| 216 |
+
assert match is not None
|
| 217 |
+
return match.group('module')
|
| 218 |
+
|
| 219 |
+
@property
|
| 220 |
+
def attr(self) -> str:
|
| 221 |
+
match = self.pattern.match(self.value)
|
| 222 |
+
assert match is not None
|
| 223 |
+
return match.group('attr')
|
| 224 |
+
|
| 225 |
+
@property
|
| 226 |
+
def extras(self) -> List[str]:
|
| 227 |
+
match = self.pattern.match(self.value)
|
| 228 |
+
assert match is not None
|
| 229 |
+
return re.findall(r'\w+', match.group('extras') or '')
|
| 230 |
+
|
| 231 |
+
def _for(self, dist):
|
| 232 |
+
vars(self).update(dist=dist)
|
| 233 |
+
return self
|
| 234 |
+
|
| 235 |
+
def matches(self, **params):
|
| 236 |
+
"""
|
| 237 |
+
EntryPoint matches the given parameters.
|
| 238 |
+
|
| 239 |
+
>>> ep = EntryPoint(group='foo', name='bar', value='bing:bong [extra1, extra2]')
|
| 240 |
+
>>> ep.matches(group='foo')
|
| 241 |
+
True
|
| 242 |
+
>>> ep.matches(name='bar', value='bing:bong [extra1, extra2]')
|
| 243 |
+
True
|
| 244 |
+
>>> ep.matches(group='foo', name='other')
|
| 245 |
+
False
|
| 246 |
+
>>> ep.matches()
|
| 247 |
+
True
|
| 248 |
+
>>> ep.matches(extras=['extra1', 'extra2'])
|
| 249 |
+
True
|
| 250 |
+
>>> ep.matches(module='bing')
|
| 251 |
+
True
|
| 252 |
+
>>> ep.matches(attr='bong')
|
| 253 |
+
True
|
| 254 |
+
"""
|
| 255 |
+
attrs = (getattr(self, param) for param in params)
|
| 256 |
+
return all(map(operator.eq, params.values(), attrs))
|
| 257 |
+
|
| 258 |
+
def _key(self):
|
| 259 |
+
return self.name, self.value, self.group
|
| 260 |
+
|
| 261 |
+
def __lt__(self, other):
|
| 262 |
+
return self._key() < other._key()
|
| 263 |
+
|
| 264 |
+
def __eq__(self, other):
|
| 265 |
+
return self._key() == other._key()
|
| 266 |
+
|
| 267 |
+
def __setattr__(self, name, value):
|
| 268 |
+
raise AttributeError("EntryPoint objects are immutable.")
|
| 269 |
+
|
| 270 |
+
def __repr__(self):
|
| 271 |
+
return (
|
| 272 |
+
f'EntryPoint(name={self.name!r}, value={self.value!r}, '
|
| 273 |
+
f'group={self.group!r})'
|
| 274 |
+
)
|
| 275 |
+
|
| 276 |
+
def __hash__(self) -> int:
|
| 277 |
+
return hash(self._key())
|
| 278 |
+
|
| 279 |
+
|
| 280 |
+
class EntryPoints(tuple):
|
| 281 |
+
"""
|
| 282 |
+
An immutable collection of selectable EntryPoint objects.
|
| 283 |
+
"""
|
| 284 |
+
|
| 285 |
+
__slots__ = ()
|
| 286 |
+
|
| 287 |
+
def __getitem__(self, name: str) -> EntryPoint: # type: ignore[override]
|
| 288 |
+
"""
|
| 289 |
+
Get the EntryPoint in self matching name.
|
| 290 |
+
"""
|
| 291 |
+
try:
|
| 292 |
+
return next(iter(self.select(name=name)))
|
| 293 |
+
except StopIteration:
|
| 294 |
+
raise KeyError(name)
|
| 295 |
+
|
| 296 |
+
def select(self, **params):
|
| 297 |
+
"""
|
| 298 |
+
Select entry points from self that match the
|
| 299 |
+
given parameters (typically group and/or name).
|
| 300 |
+
"""
|
| 301 |
+
return EntryPoints(ep for ep in self if _py39compat.ep_matches(ep, **params))
|
| 302 |
+
|
| 303 |
+
@property
|
| 304 |
+
def names(self) -> Set[str]:
|
| 305 |
+
"""
|
| 306 |
+
Return the set of all names of all entry points.
|
| 307 |
+
"""
|
| 308 |
+
return {ep.name for ep in self}
|
| 309 |
+
|
| 310 |
+
@property
|
| 311 |
+
def groups(self) -> Set[str]:
|
| 312 |
+
"""
|
| 313 |
+
Return the set of all groups of all entry points.
|
| 314 |
+
"""
|
| 315 |
+
return {ep.group for ep in self}
|
| 316 |
+
|
| 317 |
+
@classmethod
|
| 318 |
+
def _from_text_for(cls, text, dist):
|
| 319 |
+
return cls(ep._for(dist) for ep in cls._from_text(text))
|
| 320 |
+
|
| 321 |
+
@staticmethod
|
| 322 |
+
def _from_text(text):
|
| 323 |
+
return (
|
| 324 |
+
EntryPoint(name=item.value.name, value=item.value.value, group=item.name)
|
| 325 |
+
for item in Sectioned.section_pairs(text or '')
|
| 326 |
+
)
|
| 327 |
+
|
| 328 |
+
|
| 329 |
+
class PackagePath(pathlib.PurePosixPath):
|
| 330 |
+
"""A reference to a path in a package"""
|
| 331 |
+
|
| 332 |
+
hash: Optional["FileHash"]
|
| 333 |
+
size: int
|
| 334 |
+
dist: "Distribution"
|
| 335 |
+
|
| 336 |
+
def read_text(self, encoding: str = 'utf-8') -> str: # type: ignore[override]
|
| 337 |
+
with self.locate().open(encoding=encoding) as stream:
|
| 338 |
+
return stream.read()
|
| 339 |
+
|
| 340 |
+
def read_binary(self) -> bytes:
|
| 341 |
+
with self.locate().open('rb') as stream:
|
| 342 |
+
return stream.read()
|
| 343 |
+
|
| 344 |
+
def locate(self) -> pathlib.Path:
|
| 345 |
+
"""Return a path-like object for this path"""
|
| 346 |
+
return self.dist.locate_file(self)
|
| 347 |
+
|
| 348 |
+
|
| 349 |
+
class FileHash:
|
| 350 |
+
def __init__(self, spec: str) -> None:
|
| 351 |
+
self.mode, _, self.value = spec.partition('=')
|
| 352 |
+
|
| 353 |
+
def __repr__(self) -> str:
|
| 354 |
+
return f'<FileHash mode: {self.mode} value: {self.value}>'
|
| 355 |
+
|
| 356 |
+
|
| 357 |
+
class DeprecatedNonAbstract:
|
| 358 |
+
def __new__(cls, *args, **kwargs):
|
| 359 |
+
all_names = {
|
| 360 |
+
name for subclass in inspect.getmro(cls) for name in vars(subclass)
|
| 361 |
+
}
|
| 362 |
+
abstract = {
|
| 363 |
+
name
|
| 364 |
+
for name in all_names
|
| 365 |
+
if getattr(getattr(cls, name), '__isabstractmethod__', False)
|
| 366 |
+
}
|
| 367 |
+
if abstract:
|
| 368 |
+
warnings.warn(
|
| 369 |
+
f"Unimplemented abstract methods {abstract}",
|
| 370 |
+
DeprecationWarning,
|
| 371 |
+
stacklevel=2,
|
| 372 |
+
)
|
| 373 |
+
return super().__new__(cls)
|
| 374 |
+
|
| 375 |
+
|
| 376 |
+
class Distribution(DeprecatedNonAbstract):
|
| 377 |
+
"""A Python distribution package."""
|
| 378 |
+
|
| 379 |
+
@abc.abstractmethod
|
| 380 |
+
def read_text(self, filename) -> Optional[str]:
|
| 381 |
+
"""Attempt to load metadata file given by the name.
|
| 382 |
+
|
| 383 |
+
:param filename: The name of the file in the distribution info.
|
| 384 |
+
:return: The text if found, otherwise None.
|
| 385 |
+
"""
|
| 386 |
+
|
| 387 |
+
@abc.abstractmethod
|
| 388 |
+
def locate_file(self, path: StrPath) -> pathlib.Path:
|
| 389 |
+
"""
|
| 390 |
+
Given a path to a file in this distribution, return a path
|
| 391 |
+
to it.
|
| 392 |
+
"""
|
| 393 |
+
|
| 394 |
+
@classmethod
|
| 395 |
+
def from_name(cls, name: str) -> "Distribution":
|
| 396 |
+
"""Return the Distribution for the given package name.
|
| 397 |
+
|
| 398 |
+
:param name: The name of the distribution package to search for.
|
| 399 |
+
:return: The Distribution instance (or subclass thereof) for the named
|
| 400 |
+
package, if found.
|
| 401 |
+
:raises PackageNotFoundError: When the named package's distribution
|
| 402 |
+
metadata cannot be found.
|
| 403 |
+
:raises ValueError: When an invalid value is supplied for name.
|
| 404 |
+
"""
|
| 405 |
+
if not name:
|
| 406 |
+
raise ValueError("A distribution name is required.")
|
| 407 |
+
try:
|
| 408 |
+
return next(iter(cls.discover(name=name)))
|
| 409 |
+
except StopIteration:
|
| 410 |
+
raise PackageNotFoundError(name)
|
| 411 |
+
|
| 412 |
+
@classmethod
|
| 413 |
+
def discover(cls, **kwargs) -> Iterable["Distribution"]:
|
| 414 |
+
"""Return an iterable of Distribution objects for all packages.
|
| 415 |
+
|
| 416 |
+
Pass a ``context`` or pass keyword arguments for constructing
|
| 417 |
+
a context.
|
| 418 |
+
|
| 419 |
+
:context: A ``DistributionFinder.Context`` object.
|
| 420 |
+
:return: Iterable of Distribution objects for all packages.
|
| 421 |
+
"""
|
| 422 |
+
context = kwargs.pop('context', None)
|
| 423 |
+
if context and kwargs:
|
| 424 |
+
raise ValueError("cannot accept context and kwargs")
|
| 425 |
+
context = context or DistributionFinder.Context(**kwargs)
|
| 426 |
+
return itertools.chain.from_iterable(
|
| 427 |
+
resolver(context) for resolver in cls._discover_resolvers()
|
| 428 |
+
)
|
| 429 |
+
|
| 430 |
+
@staticmethod
|
| 431 |
+
def at(path: StrPath) -> "Distribution":
|
| 432 |
+
"""Return a Distribution for the indicated metadata path
|
| 433 |
+
|
| 434 |
+
:param path: a string or path-like object
|
| 435 |
+
:return: a concrete Distribution instance for the path
|
| 436 |
+
"""
|
| 437 |
+
return PathDistribution(pathlib.Path(path))
|
| 438 |
+
|
| 439 |
+
@staticmethod
|
| 440 |
+
def _discover_resolvers():
|
| 441 |
+
"""Search the meta_path for resolvers."""
|
| 442 |
+
declared = (
|
| 443 |
+
getattr(finder, 'find_distributions', None) for finder in sys.meta_path
|
| 444 |
+
)
|
| 445 |
+
return filter(None, declared)
|
| 446 |
+
|
| 447 |
+
@property
|
| 448 |
+
def metadata(self) -> _meta.PackageMetadata:
|
| 449 |
+
"""Return the parsed metadata for this Distribution.
|
| 450 |
+
|
| 451 |
+
The returned object will have keys that name the various bits of
|
| 452 |
+
metadata. See PEP 566 for details.
|
| 453 |
+
"""
|
| 454 |
+
opt_text = (
|
| 455 |
+
self.read_text('METADATA')
|
| 456 |
+
or self.read_text('PKG-INFO')
|
| 457 |
+
# This last clause is here to support old egg-info files. Its
|
| 458 |
+
# effect is to just end up using the PathDistribution's self._path
|
| 459 |
+
# (which points to the egg-info file) attribute unchanged.
|
| 460 |
+
or self.read_text('')
|
| 461 |
+
)
|
| 462 |
+
text = cast(str, opt_text)
|
| 463 |
+
return _adapters.Message(email.message_from_string(text))
|
| 464 |
+
|
| 465 |
+
@property
|
| 466 |
+
def name(self) -> str:
|
| 467 |
+
"""Return the 'Name' metadata for the distribution package."""
|
| 468 |
+
return self.metadata['Name']
|
| 469 |
+
|
| 470 |
+
@property
|
| 471 |
+
def _normalized_name(self):
|
| 472 |
+
"""Return a normalized version of the name."""
|
| 473 |
+
return Prepared.normalize(self.name)
|
| 474 |
+
|
| 475 |
+
@property
|
| 476 |
+
def version(self) -> str:
|
| 477 |
+
"""Return the 'Version' metadata for the distribution package."""
|
| 478 |
+
return self.metadata['Version']
|
| 479 |
+
|
| 480 |
+
@property
|
| 481 |
+
def entry_points(self) -> EntryPoints:
|
| 482 |
+
return EntryPoints._from_text_for(self.read_text('entry_points.txt'), self)
|
| 483 |
+
|
| 484 |
+
@property
|
| 485 |
+
def files(self) -> Optional[List[PackagePath]]:
|
| 486 |
+
"""Files in this distribution.
|
| 487 |
+
|
| 488 |
+
:return: List of PackagePath for this distribution or None
|
| 489 |
+
|
| 490 |
+
Result is `None` if the metadata file that enumerates files
|
| 491 |
+
(i.e. RECORD for dist-info, or installed-files.txt or
|
| 492 |
+
SOURCES.txt for egg-info) is missing.
|
| 493 |
+
Result may be empty if the metadata exists but is empty.
|
| 494 |
+
"""
|
| 495 |
+
|
| 496 |
+
def make_file(name, hash=None, size_str=None):
|
| 497 |
+
result = PackagePath(name)
|
| 498 |
+
result.hash = FileHash(hash) if hash else None
|
| 499 |
+
result.size = int(size_str) if size_str else None
|
| 500 |
+
result.dist = self
|
| 501 |
+
return result
|
| 502 |
+
|
| 503 |
+
@pass_none
|
| 504 |
+
def make_files(lines):
|
| 505 |
+
return starmap(make_file, csv.reader(lines))
|
| 506 |
+
|
| 507 |
+
@pass_none
|
| 508 |
+
def skip_missing_files(package_paths):
|
| 509 |
+
return list(filter(lambda path: path.locate().exists(), package_paths))
|
| 510 |
+
|
| 511 |
+
return skip_missing_files(
|
| 512 |
+
make_files(
|
| 513 |
+
self._read_files_distinfo()
|
| 514 |
+
or self._read_files_egginfo_installed()
|
| 515 |
+
or self._read_files_egginfo_sources()
|
| 516 |
+
)
|
| 517 |
+
)
|
| 518 |
+
|
| 519 |
+
def _read_files_distinfo(self):
|
| 520 |
+
"""
|
| 521 |
+
Read the lines of RECORD
|
| 522 |
+
"""
|
| 523 |
+
text = self.read_text('RECORD')
|
| 524 |
+
return text and text.splitlines()
|
| 525 |
+
|
| 526 |
+
def _read_files_egginfo_installed(self):
|
| 527 |
+
"""
|
| 528 |
+
Read installed-files.txt and return lines in a similar
|
| 529 |
+
CSV-parsable format as RECORD: each file must be placed
|
| 530 |
+
relative to the site-packages directory and must also be
|
| 531 |
+
quoted (since file names can contain literal commas).
|
| 532 |
+
|
| 533 |
+
This file is written when the package is installed by pip,
|
| 534 |
+
but it might not be written for other installation methods.
|
| 535 |
+
Assume the file is accurate if it exists.
|
| 536 |
+
"""
|
| 537 |
+
text = self.read_text('installed-files.txt')
|
| 538 |
+
# Prepend the .egg-info/ subdir to the lines in this file.
|
| 539 |
+
# But this subdir is only available from PathDistribution's
|
| 540 |
+
# self._path.
|
| 541 |
+
subdir = getattr(self, '_path', None)
|
| 542 |
+
if not text or not subdir:
|
| 543 |
+
return
|
| 544 |
+
|
| 545 |
+
paths = (
|
| 546 |
+
(subdir / name)
|
| 547 |
+
.resolve()
|
| 548 |
+
.relative_to(self.locate_file('').resolve())
|
| 549 |
+
.as_posix()
|
| 550 |
+
for name in text.splitlines()
|
| 551 |
+
)
|
| 552 |
+
return map('"{}"'.format, paths)
|
| 553 |
+
|
| 554 |
+
def _read_files_egginfo_sources(self):
|
| 555 |
+
"""
|
| 556 |
+
Read SOURCES.txt and return lines in a similar CSV-parsable
|
| 557 |
+
format as RECORD: each file name must be quoted (since it
|
| 558 |
+
might contain literal commas).
|
| 559 |
+
|
| 560 |
+
Note that SOURCES.txt is not a reliable source for what
|
| 561 |
+
files are installed by a package. This file is generated
|
| 562 |
+
for a source archive, and the files that are present
|
| 563 |
+
there (e.g. setup.py) may not correctly reflect the files
|
| 564 |
+
that are present after the package has been installed.
|
| 565 |
+
"""
|
| 566 |
+
text = self.read_text('SOURCES.txt')
|
| 567 |
+
return text and map('"{}"'.format, text.splitlines())
|
| 568 |
+
|
| 569 |
+
@property
|
| 570 |
+
def requires(self) -> Optional[List[str]]:
|
| 571 |
+
"""Generated requirements specified for this Distribution"""
|
| 572 |
+
reqs = self._read_dist_info_reqs() or self._read_egg_info_reqs()
|
| 573 |
+
return reqs and list(reqs)
|
| 574 |
+
|
| 575 |
+
def _read_dist_info_reqs(self):
|
| 576 |
+
return self.metadata.get_all('Requires-Dist')
|
| 577 |
+
|
| 578 |
+
def _read_egg_info_reqs(self):
|
| 579 |
+
source = self.read_text('requires.txt')
|
| 580 |
+
return pass_none(self._deps_from_requires_text)(source)
|
| 581 |
+
|
| 582 |
+
@classmethod
|
| 583 |
+
def _deps_from_requires_text(cls, source):
|
| 584 |
+
return cls._convert_egg_info_reqs_to_simple_reqs(Sectioned.read(source))
|
| 585 |
+
|
| 586 |
+
@staticmethod
|
| 587 |
+
def _convert_egg_info_reqs_to_simple_reqs(sections):
|
| 588 |
+
"""
|
| 589 |
+
Historically, setuptools would solicit and store 'extra'
|
| 590 |
+
requirements, including those with environment markers,
|
| 591 |
+
in separate sections. More modern tools expect each
|
| 592 |
+
dependency to be defined separately, with any relevant
|
| 593 |
+
extras and environment markers attached directly to that
|
| 594 |
+
requirement. This method converts the former to the
|
| 595 |
+
latter. See _test_deps_from_requires_text for an example.
|
| 596 |
+
"""
|
| 597 |
+
|
| 598 |
+
def make_condition(name):
|
| 599 |
+
return name and f'extra == "{name}"'
|
| 600 |
+
|
| 601 |
+
def quoted_marker(section):
|
| 602 |
+
section = section or ''
|
| 603 |
+
extra, sep, markers = section.partition(':')
|
| 604 |
+
if extra and markers:
|
| 605 |
+
markers = f'({markers})'
|
| 606 |
+
conditions = list(filter(None, [markers, make_condition(extra)]))
|
| 607 |
+
return '; ' + ' and '.join(conditions) if conditions else ''
|
| 608 |
+
|
| 609 |
+
def url_req_space(req):
|
| 610 |
+
"""
|
| 611 |
+
PEP 508 requires a space between the url_spec and the quoted_marker.
|
| 612 |
+
Ref python/importlib_metadata#357.
|
| 613 |
+
"""
|
| 614 |
+
# '@' is uniquely indicative of a url_req.
|
| 615 |
+
return ' ' * ('@' in req)
|
| 616 |
+
|
| 617 |
+
for section in sections:
|
| 618 |
+
space = url_req_space(section.value)
|
| 619 |
+
yield section.value + space + quoted_marker(section.name)
|
| 620 |
+
|
| 621 |
+
|
| 622 |
+
class DistributionFinder(MetaPathFinder):
|
| 623 |
+
"""
|
| 624 |
+
A MetaPathFinder capable of discovering installed distributions.
|
| 625 |
+
"""
|
| 626 |
+
|
| 627 |
+
class Context:
|
| 628 |
+
"""
|
| 629 |
+
Keyword arguments presented by the caller to
|
| 630 |
+
``distributions()`` or ``Distribution.discover()``
|
| 631 |
+
to narrow the scope of a search for distributions
|
| 632 |
+
in all DistributionFinders.
|
| 633 |
+
|
| 634 |
+
Each DistributionFinder may expect any parameters
|
| 635 |
+
and should attempt to honor the canonical
|
| 636 |
+
parameters defined below when appropriate.
|
| 637 |
+
"""
|
| 638 |
+
|
| 639 |
+
name = None
|
| 640 |
+
"""
|
| 641 |
+
Specific name for which a distribution finder should match.
|
| 642 |
+
A name of ``None`` matches all distributions.
|
| 643 |
+
"""
|
| 644 |
+
|
| 645 |
+
def __init__(self, **kwargs):
|
| 646 |
+
vars(self).update(kwargs)
|
| 647 |
+
|
| 648 |
+
@property
|
| 649 |
+
def path(self) -> List[str]:
|
| 650 |
+
"""
|
| 651 |
+
The sequence of directory path that a distribution finder
|
| 652 |
+
should search.
|
| 653 |
+
|
| 654 |
+
Typically refers to Python installed package paths such as
|
| 655 |
+
"site-packages" directories and defaults to ``sys.path``.
|
| 656 |
+
"""
|
| 657 |
+
return vars(self).get('path', sys.path)
|
| 658 |
+
|
| 659 |
+
@abc.abstractmethod
|
| 660 |
+
def find_distributions(self, context=Context()) -> Iterable[Distribution]:
|
| 661 |
+
"""
|
| 662 |
+
Find distributions.
|
| 663 |
+
|
| 664 |
+
Return an iterable of all Distribution instances capable of
|
| 665 |
+
loading the metadata for packages matching the ``context``,
|
| 666 |
+
a DistributionFinder.Context instance.
|
| 667 |
+
"""
|
| 668 |
+
|
| 669 |
+
|
| 670 |
+
class FastPath:
|
| 671 |
+
"""
|
| 672 |
+
Micro-optimized class for searching a path for
|
| 673 |
+
children.
|
| 674 |
+
|
| 675 |
+
>>> FastPath('').children()
|
| 676 |
+
['...']
|
| 677 |
+
"""
|
| 678 |
+
|
| 679 |
+
@functools.lru_cache() # type: ignore
|
| 680 |
+
def __new__(cls, root):
|
| 681 |
+
return super().__new__(cls)
|
| 682 |
+
|
| 683 |
+
def __init__(self, root):
|
| 684 |
+
self.root = root
|
| 685 |
+
|
| 686 |
+
def joinpath(self, child):
|
| 687 |
+
return pathlib.Path(self.root, child)
|
| 688 |
+
|
| 689 |
+
def children(self):
|
| 690 |
+
with suppress(Exception):
|
| 691 |
+
return os.listdir(self.root or '.')
|
| 692 |
+
with suppress(Exception):
|
| 693 |
+
return self.zip_children()
|
| 694 |
+
return []
|
| 695 |
+
|
| 696 |
+
def zip_children(self):
|
| 697 |
+
zip_path = zipp.Path(self.root)
|
| 698 |
+
names = zip_path.root.namelist()
|
| 699 |
+
self.joinpath = zip_path.joinpath
|
| 700 |
+
|
| 701 |
+
return dict.fromkeys(child.split(posixpath.sep, 1)[0] for child in names)
|
| 702 |
+
|
| 703 |
+
def search(self, name):
|
| 704 |
+
return self.lookup(self.mtime).search(name)
|
| 705 |
+
|
| 706 |
+
@property
|
| 707 |
+
def mtime(self):
|
| 708 |
+
with suppress(OSError):
|
| 709 |
+
return os.stat(self.root).st_mtime
|
| 710 |
+
self.lookup.cache_clear()
|
| 711 |
+
|
| 712 |
+
@method_cache
|
| 713 |
+
def lookup(self, mtime):
|
| 714 |
+
return Lookup(self)
|
| 715 |
+
|
| 716 |
+
|
| 717 |
+
class Lookup:
|
| 718 |
+
def __init__(self, path: FastPath):
|
| 719 |
+
base = os.path.basename(path.root).lower()
|
| 720 |
+
base_is_egg = base.endswith(".egg")
|
| 721 |
+
self.infos = FreezableDefaultDict(list)
|
| 722 |
+
self.eggs = FreezableDefaultDict(list)
|
| 723 |
+
|
| 724 |
+
for child in path.children():
|
| 725 |
+
low = child.lower()
|
| 726 |
+
if low.endswith((".dist-info", ".egg-info")):
|
| 727 |
+
# rpartition is faster than splitext and suitable for this purpose.
|
| 728 |
+
name = low.rpartition(".")[0].partition("-")[0]
|
| 729 |
+
normalized = Prepared.normalize(name)
|
| 730 |
+
self.infos[normalized].append(path.joinpath(child))
|
| 731 |
+
elif base_is_egg and low == "egg-info":
|
| 732 |
+
name = base.rpartition(".")[0].partition("-")[0]
|
| 733 |
+
legacy_normalized = Prepared.legacy_normalize(name)
|
| 734 |
+
self.eggs[legacy_normalized].append(path.joinpath(child))
|
| 735 |
+
|
| 736 |
+
self.infos.freeze()
|
| 737 |
+
self.eggs.freeze()
|
| 738 |
+
|
| 739 |
+
def search(self, prepared):
|
| 740 |
+
infos = (
|
| 741 |
+
self.infos[prepared.normalized]
|
| 742 |
+
if prepared
|
| 743 |
+
else itertools.chain.from_iterable(self.infos.values())
|
| 744 |
+
)
|
| 745 |
+
eggs = (
|
| 746 |
+
self.eggs[prepared.legacy_normalized]
|
| 747 |
+
if prepared
|
| 748 |
+
else itertools.chain.from_iterable(self.eggs.values())
|
| 749 |
+
)
|
| 750 |
+
return itertools.chain(infos, eggs)
|
| 751 |
+
|
| 752 |
+
|
| 753 |
+
class Prepared:
|
| 754 |
+
"""
|
| 755 |
+
A prepared search for metadata on a possibly-named package.
|
| 756 |
+
"""
|
| 757 |
+
|
| 758 |
+
normalized = None
|
| 759 |
+
legacy_normalized = None
|
| 760 |
+
|
| 761 |
+
def __init__(self, name):
|
| 762 |
+
self.name = name
|
| 763 |
+
if name is None:
|
| 764 |
+
return
|
| 765 |
+
self.normalized = self.normalize(name)
|
| 766 |
+
self.legacy_normalized = self.legacy_normalize(name)
|
| 767 |
+
|
| 768 |
+
@staticmethod
|
| 769 |
+
def normalize(name):
|
| 770 |
+
"""
|
| 771 |
+
PEP 503 normalization plus dashes as underscores.
|
| 772 |
+
"""
|
| 773 |
+
return re.sub(r"[-_.]+", "-", name).lower().replace('-', '_')
|
| 774 |
+
|
| 775 |
+
@staticmethod
|
| 776 |
+
def legacy_normalize(name):
|
| 777 |
+
"""
|
| 778 |
+
Normalize the package name as found in the convention in
|
| 779 |
+
older packaging tools versions and specs.
|
| 780 |
+
"""
|
| 781 |
+
return name.lower().replace('-', '_')
|
| 782 |
+
|
| 783 |
+
def __bool__(self):
|
| 784 |
+
return bool(self.name)
|
| 785 |
+
|
| 786 |
+
|
| 787 |
+
@install
|
| 788 |
+
class MetadataPathFinder(NullFinder, DistributionFinder):
|
| 789 |
+
"""A degenerate finder for distribution packages on the file system.
|
| 790 |
+
|
| 791 |
+
This finder supplies only a find_distributions() method for versions
|
| 792 |
+
of Python that do not have a PathFinder find_distributions().
|
| 793 |
+
"""
|
| 794 |
+
|
| 795 |
+
def find_distributions(
|
| 796 |
+
self, context=DistributionFinder.Context()
|
| 797 |
+
) -> Iterable["PathDistribution"]:
|
| 798 |
+
"""
|
| 799 |
+
Find distributions.
|
| 800 |
+
|
| 801 |
+
Return an iterable of all Distribution instances capable of
|
| 802 |
+
loading the metadata for packages matching ``context.name``
|
| 803 |
+
(or all names if ``None`` indicated) along the paths in the list
|
| 804 |
+
of directories ``context.path``.
|
| 805 |
+
"""
|
| 806 |
+
found = self._search_paths(context.name, context.path)
|
| 807 |
+
return map(PathDistribution, found)
|
| 808 |
+
|
| 809 |
+
@classmethod
|
| 810 |
+
def _search_paths(cls, name, paths):
|
| 811 |
+
"""Find metadata directories in paths heuristically."""
|
| 812 |
+
prepared = Prepared(name)
|
| 813 |
+
return itertools.chain.from_iterable(
|
| 814 |
+
path.search(prepared) for path in map(FastPath, paths)
|
| 815 |
+
)
|
| 816 |
+
|
| 817 |
+
def invalidate_caches(cls) -> None:
|
| 818 |
+
FastPath.__new__.cache_clear()
|
| 819 |
+
|
| 820 |
+
|
| 821 |
+
class PathDistribution(Distribution):
|
| 822 |
+
def __init__(self, path: SimplePath) -> None:
|
| 823 |
+
"""Construct a distribution.
|
| 824 |
+
|
| 825 |
+
:param path: SimplePath indicating the metadata directory.
|
| 826 |
+
"""
|
| 827 |
+
self._path = path
|
| 828 |
+
|
| 829 |
+
def read_text(self, filename: StrPath) -> Optional[str]:
|
| 830 |
+
with suppress(
|
| 831 |
+
FileNotFoundError,
|
| 832 |
+
IsADirectoryError,
|
| 833 |
+
KeyError,
|
| 834 |
+
NotADirectoryError,
|
| 835 |
+
PermissionError,
|
| 836 |
+
):
|
| 837 |
+
return self._path.joinpath(filename).read_text(encoding='utf-8')
|
| 838 |
+
|
| 839 |
+
return None
|
| 840 |
+
|
| 841 |
+
read_text.__doc__ = Distribution.read_text.__doc__
|
| 842 |
+
|
| 843 |
+
def locate_file(self, path: StrPath) -> pathlib.Path:
|
| 844 |
+
return self._path.parent / path
|
| 845 |
+
|
| 846 |
+
@property
|
| 847 |
+
def _normalized_name(self):
|
| 848 |
+
"""
|
| 849 |
+
Performance optimization: where possible, resolve the
|
| 850 |
+
normalized name from the file system path.
|
| 851 |
+
"""
|
| 852 |
+
stem = os.path.basename(str(self._path))
|
| 853 |
+
return (
|
| 854 |
+
pass_none(Prepared.normalize)(self._name_from_stem(stem))
|
| 855 |
+
or super()._normalized_name
|
| 856 |
+
)
|
| 857 |
+
|
| 858 |
+
@staticmethod
|
| 859 |
+
def _name_from_stem(stem):
|
| 860 |
+
"""
|
| 861 |
+
>>> PathDistribution._name_from_stem('foo-3.0.egg-info')
|
| 862 |
+
'foo'
|
| 863 |
+
>>> PathDistribution._name_from_stem('CherryPy-3.0.dist-info')
|
| 864 |
+
'CherryPy'
|
| 865 |
+
>>> PathDistribution._name_from_stem('face.egg-info')
|
| 866 |
+
'face'
|
| 867 |
+
>>> PathDistribution._name_from_stem('foo.bar')
|
| 868 |
+
"""
|
| 869 |
+
filename, ext = os.path.splitext(stem)
|
| 870 |
+
if ext not in ('.dist-info', '.egg-info'):
|
| 871 |
+
return
|
| 872 |
+
name, sep, rest = filename.partition('-')
|
| 873 |
+
return name
|
| 874 |
+
|
| 875 |
+
|
| 876 |
+
def distribution(distribution_name) -> Distribution:
|
| 877 |
+
"""Get the ``Distribution`` instance for the named package.
|
| 878 |
+
|
| 879 |
+
:param distribution_name: The name of the distribution package as a string.
|
| 880 |
+
:return: A ``Distribution`` instance (or subclass thereof).
|
| 881 |
+
"""
|
| 882 |
+
return Distribution.from_name(distribution_name)
|
| 883 |
+
|
| 884 |
+
|
| 885 |
+
def distributions(**kwargs) -> Iterable[Distribution]:
|
| 886 |
+
"""Get all ``Distribution`` instances in the current environment.
|
| 887 |
+
|
| 888 |
+
:return: An iterable of ``Distribution`` instances.
|
| 889 |
+
"""
|
| 890 |
+
return Distribution.discover(**kwargs)
|
| 891 |
+
|
| 892 |
+
|
| 893 |
+
def metadata(distribution_name) -> _meta.PackageMetadata:
|
| 894 |
+
"""Get the metadata for the named package.
|
| 895 |
+
|
| 896 |
+
:param distribution_name: The name of the distribution package to query.
|
| 897 |
+
:return: A PackageMetadata containing the parsed metadata.
|
| 898 |
+
"""
|
| 899 |
+
return Distribution.from_name(distribution_name).metadata
|
| 900 |
+
|
| 901 |
+
|
| 902 |
+
def version(distribution_name) -> str:
|
| 903 |
+
"""Get the version string for the named package.
|
| 904 |
+
|
| 905 |
+
:param distribution_name: The name of the distribution package to query.
|
| 906 |
+
:return: The version string for the package as defined in the package's
|
| 907 |
+
"Version" metadata key.
|
| 908 |
+
"""
|
| 909 |
+
return distribution(distribution_name).version
|
| 910 |
+
|
| 911 |
+
|
| 912 |
+
_unique = functools.partial(
|
| 913 |
+
unique_everseen,
|
| 914 |
+
key=_py39compat.normalized_name,
|
| 915 |
+
)
|
| 916 |
+
"""
|
| 917 |
+
Wrapper for ``distributions`` to return unique distributions by name.
|
| 918 |
+
"""
|
| 919 |
+
|
| 920 |
+
|
| 921 |
+
def entry_points(**params) -> EntryPoints:
|
| 922 |
+
"""Return EntryPoint objects for all installed packages.
|
| 923 |
+
|
| 924 |
+
Pass selection parameters (group or name) to filter the
|
| 925 |
+
result to entry points matching those properties (see
|
| 926 |
+
EntryPoints.select()).
|
| 927 |
+
|
| 928 |
+
:return: EntryPoints for all installed packages.
|
| 929 |
+
"""
|
| 930 |
+
eps = itertools.chain.from_iterable(
|
| 931 |
+
dist.entry_points for dist in _unique(distributions())
|
| 932 |
+
)
|
| 933 |
+
return EntryPoints(eps).select(**params)
|
| 934 |
+
|
| 935 |
+
|
| 936 |
+
def files(distribution_name) -> Optional[List[PackagePath]]:
|
| 937 |
+
"""Return a list of files for the named package.
|
| 938 |
+
|
| 939 |
+
:param distribution_name: The name of the distribution package to query.
|
| 940 |
+
:return: List of files composing the distribution.
|
| 941 |
+
"""
|
| 942 |
+
return distribution(distribution_name).files
|
| 943 |
+
|
| 944 |
+
|
| 945 |
+
def requires(distribution_name) -> Optional[List[str]]:
|
| 946 |
+
"""
|
| 947 |
+
Return a list of requirements for the named package.
|
| 948 |
+
|
| 949 |
+
:return: An iterable of requirements, suitable for
|
| 950 |
+
packaging.requirement.Requirement.
|
| 951 |
+
"""
|
| 952 |
+
return distribution(distribution_name).requires
|
| 953 |
+
|
| 954 |
+
|
| 955 |
+
def packages_distributions() -> Mapping[str, List[str]]:
|
| 956 |
+
"""
|
| 957 |
+
Return a mapping of top-level packages to their
|
| 958 |
+
distributions.
|
| 959 |
+
|
| 960 |
+
>>> import collections.abc
|
| 961 |
+
>>> pkgs = packages_distributions()
|
| 962 |
+
>>> all(isinstance(dist, collections.abc.Sequence) for dist in pkgs.values())
|
| 963 |
+
True
|
| 964 |
+
"""
|
| 965 |
+
pkg_to_dist = collections.defaultdict(list)
|
| 966 |
+
for dist in distributions():
|
| 967 |
+
for pkg in _top_level_declared(dist) or _top_level_inferred(dist):
|
| 968 |
+
pkg_to_dist[pkg].append(dist.metadata['Name'])
|
| 969 |
+
return dict(pkg_to_dist)
|
| 970 |
+
|
| 971 |
+
|
| 972 |
+
def _top_level_declared(dist):
|
| 973 |
+
return (dist.read_text('top_level.txt') or '').split()
|
| 974 |
+
|
| 975 |
+
|
| 976 |
+
def _topmost(name: PackagePath) -> Optional[str]:
|
| 977 |
+
"""
|
| 978 |
+
Return the top-most parent as long as there is a parent.
|
| 979 |
+
"""
|
| 980 |
+
top, *rest = name.parts
|
| 981 |
+
return top if rest else None
|
| 982 |
+
|
| 983 |
+
|
| 984 |
+
def _get_toplevel_name(name: PackagePath) -> str:
|
| 985 |
+
"""
|
| 986 |
+
Infer a possibly importable module name from a name presumed on
|
| 987 |
+
sys.path.
|
| 988 |
+
|
| 989 |
+
>>> _get_toplevel_name(PackagePath('foo.py'))
|
| 990 |
+
'foo'
|
| 991 |
+
>>> _get_toplevel_name(PackagePath('foo'))
|
| 992 |
+
'foo'
|
| 993 |
+
>>> _get_toplevel_name(PackagePath('foo.pyc'))
|
| 994 |
+
'foo'
|
| 995 |
+
>>> _get_toplevel_name(PackagePath('foo/__init__.py'))
|
| 996 |
+
'foo'
|
| 997 |
+
>>> _get_toplevel_name(PackagePath('foo.pth'))
|
| 998 |
+
'foo.pth'
|
| 999 |
+
>>> _get_toplevel_name(PackagePath('foo.dist-info'))
|
| 1000 |
+
'foo.dist-info'
|
| 1001 |
+
"""
|
| 1002 |
+
return _topmost(name) or (
|
| 1003 |
+
# python/typeshed#10328
|
| 1004 |
+
inspect.getmodulename(name) # type: ignore
|
| 1005 |
+
or str(name)
|
| 1006 |
+
)
|
| 1007 |
+
|
| 1008 |
+
|
| 1009 |
+
def _top_level_inferred(dist):
|
| 1010 |
+
opt_names = set(map(_get_toplevel_name, always_iterable(dist.files)))
|
| 1011 |
+
|
| 1012 |
+
def importable_name(name):
|
| 1013 |
+
return '.' not in name
|
| 1014 |
+
|
| 1015 |
+
return filter(importable_name, opt_names)
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/__init__.cpython-37.pyc
ADDED
|
Binary file (36.6 kB). View file
|
|
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_adapters.cpython-37.pyc
ADDED
|
Binary file (2.95 kB). View file
|
|
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_collections.cpython-37.pyc
ADDED
|
Binary file (1.53 kB). View file
|
|
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_compat.cpython-37.pyc
ADDED
|
Binary file (2.14 kB). View file
|
|
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_functools.cpython-37.pyc
ADDED
|
Binary file (3.12 kB). View file
|
|
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_itertools.cpython-37.pyc
ADDED
|
Binary file (2.02 kB). View file
|
|
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_meta.cpython-37.pyc
ADDED
|
Binary file (2.86 kB). View file
|
|
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_py39compat.cpython-37.pyc
ADDED
|
Binary file (1.17 kB). View file
|
|
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_text.cpython-37.pyc
ADDED
|
Binary file (3.07 kB). View file
|
|
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/_adapters.py
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import functools
|
| 2 |
+
import warnings
|
| 3 |
+
import re
|
| 4 |
+
import textwrap
|
| 5 |
+
import email.message
|
| 6 |
+
|
| 7 |
+
from ._text import FoldedCase
|
| 8 |
+
from ._compat import pypy_partial
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
# Do not remove prior to 2024-01-01 or Python 3.14
|
| 12 |
+
_warn = functools.partial(
|
| 13 |
+
warnings.warn,
|
| 14 |
+
"Implicit None on return values is deprecated and will raise KeyErrors.",
|
| 15 |
+
DeprecationWarning,
|
| 16 |
+
stacklevel=pypy_partial(2),
|
| 17 |
+
)
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
class Message(email.message.Message):
|
| 21 |
+
multiple_use_keys = set(
|
| 22 |
+
map(
|
| 23 |
+
FoldedCase,
|
| 24 |
+
[
|
| 25 |
+
'Classifier',
|
| 26 |
+
'Obsoletes-Dist',
|
| 27 |
+
'Platform',
|
| 28 |
+
'Project-URL',
|
| 29 |
+
'Provides-Dist',
|
| 30 |
+
'Provides-Extra',
|
| 31 |
+
'Requires-Dist',
|
| 32 |
+
'Requires-External',
|
| 33 |
+
'Supported-Platform',
|
| 34 |
+
'Dynamic',
|
| 35 |
+
],
|
| 36 |
+
)
|
| 37 |
+
)
|
| 38 |
+
"""
|
| 39 |
+
Keys that may be indicated multiple times per PEP 566.
|
| 40 |
+
"""
|
| 41 |
+
|
| 42 |
+
def __new__(cls, orig: email.message.Message):
|
| 43 |
+
res = super().__new__(cls)
|
| 44 |
+
vars(res).update(vars(orig))
|
| 45 |
+
return res
|
| 46 |
+
|
| 47 |
+
def __init__(self, *args, **kwargs):
|
| 48 |
+
self._headers = self._repair_headers()
|
| 49 |
+
|
| 50 |
+
# suppress spurious error from mypy
|
| 51 |
+
def __iter__(self):
|
| 52 |
+
return super().__iter__()
|
| 53 |
+
|
| 54 |
+
def __getitem__(self, item):
|
| 55 |
+
"""
|
| 56 |
+
Warn users that a ``KeyError`` can be expected when a
|
| 57 |
+
mising key is supplied. Ref python/importlib_metadata#371.
|
| 58 |
+
"""
|
| 59 |
+
res = super().__getitem__(item)
|
| 60 |
+
if res is None:
|
| 61 |
+
_warn()
|
| 62 |
+
return res
|
| 63 |
+
|
| 64 |
+
def _repair_headers(self):
|
| 65 |
+
def redent(value):
|
| 66 |
+
"Correct for RFC822 indentation"
|
| 67 |
+
if not value or '\n' not in value:
|
| 68 |
+
return value
|
| 69 |
+
return textwrap.dedent(' ' * 8 + value)
|
| 70 |
+
|
| 71 |
+
headers = [(key, redent(value)) for key, value in vars(self)['_headers']]
|
| 72 |
+
if self._payload:
|
| 73 |
+
headers.append(('Description', self.get_payload()))
|
| 74 |
+
return headers
|
| 75 |
+
|
| 76 |
+
@property
|
| 77 |
+
def json(self):
|
| 78 |
+
"""
|
| 79 |
+
Convert PackageMetadata to a JSON-compatible format
|
| 80 |
+
per PEP 0566.
|
| 81 |
+
"""
|
| 82 |
+
|
| 83 |
+
def transform(key):
|
| 84 |
+
value = self.get_all(key) if key in self.multiple_use_keys else self[key]
|
| 85 |
+
if key == 'Keywords':
|
| 86 |
+
value = re.split(r'\s+', value)
|
| 87 |
+
tk = key.lower().replace('-', '_')
|
| 88 |
+
return tk, value
|
| 89 |
+
|
| 90 |
+
return dict(map(transform, map(FoldedCase, self)))
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/_collections.py
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import collections
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
# from jaraco.collections 3.3
|
| 5 |
+
class FreezableDefaultDict(collections.defaultdict):
|
| 6 |
+
"""
|
| 7 |
+
Often it is desirable to prevent the mutation of
|
| 8 |
+
a default dict after its initial construction, such
|
| 9 |
+
as to prevent mutation during iteration.
|
| 10 |
+
|
| 11 |
+
>>> dd = FreezableDefaultDict(list)
|
| 12 |
+
>>> dd[0].append('1')
|
| 13 |
+
>>> dd.freeze()
|
| 14 |
+
>>> dd[1]
|
| 15 |
+
[]
|
| 16 |
+
>>> len(dd)
|
| 17 |
+
1
|
| 18 |
+
"""
|
| 19 |
+
|
| 20 |
+
def __missing__(self, key):
|
| 21 |
+
return getattr(self, '_frozen', super().__missing__)(key)
|
| 22 |
+
|
| 23 |
+
def freeze(self):
|
| 24 |
+
self._frozen = lambda key: self.default_factory()
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
class Pair(collections.namedtuple('Pair', 'name value')):
|
| 28 |
+
@classmethod
|
| 29 |
+
def parse(cls, text):
|
| 30 |
+
return cls(*map(str.strip, text.split("=", 1)))
|
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/_compat.py
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
import sys
|
| 3 |
+
import platform
|
| 4 |
+
|
| 5 |
+
from typing import Union
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
__all__ = ['install', 'NullFinder', 'Protocol']
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
try:
|
| 12 |
+
from typing import Protocol
|
| 13 |
+
except ImportError: # pragma: no cover
|
| 14 |
+
# Python 3.7 compatibility
|
| 15 |
+
from typing_extensions import Protocol # type: ignore
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
def install(cls):
|
| 19 |
+
"""
|
| 20 |
+
Class decorator for installation on sys.meta_path.
|
| 21 |
+
|
| 22 |
+
Adds the backport DistributionFinder to sys.meta_path and
|
| 23 |
+
attempts to disable the finder functionality of the stdlib
|
| 24 |
+
DistributionFinder.
|
| 25 |
+
"""
|
| 26 |
+
sys.meta_path.append(cls())
|
| 27 |
+
disable_stdlib_finder()
|
| 28 |
+
return cls
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
def disable_stdlib_finder():
|
| 32 |
+
"""
|
| 33 |
+
Give the backport primacy for discovering path-based distributions
|
| 34 |
+
by monkey-patching the stdlib O_O.
|
| 35 |
+
|
| 36 |
+
See #91 for more background for rationale on this sketchy
|
| 37 |
+
behavior.
|
| 38 |
+
"""
|
| 39 |
+
|
| 40 |
+
def matches(finder):
|
| 41 |
+
return getattr(
|
| 42 |
+
finder, '__module__', None
|
| 43 |
+
) == '_frozen_importlib_external' and hasattr(finder, 'find_distributions')
|
| 44 |
+
|
| 45 |
+
for finder in filter(matches, sys.meta_path): # pragma: nocover
|
| 46 |
+
del finder.find_distributions
|
| 47 |
+
|
| 48 |
+
|
| 49 |
+
class NullFinder:
|
| 50 |
+
"""
|
| 51 |
+
A "Finder" (aka "MetaClassFinder") that never finds any modules,
|
| 52 |
+
but may find distributions.
|
| 53 |
+
"""
|
| 54 |
+
|
| 55 |
+
@staticmethod
|
| 56 |
+
def find_spec(*args, **kwargs):
|
| 57 |
+
return None
|
| 58 |
+
|
| 59 |
+
|
| 60 |
+
def pypy_partial(val):
|
| 61 |
+
"""
|
| 62 |
+
Adjust for variable stacklevel on partial under PyPy.
|
| 63 |
+
|
| 64 |
+
Workaround for #327.
|
| 65 |
+
"""
|
| 66 |
+
is_pypy = platform.python_implementation() == 'PyPy'
|
| 67 |
+
return val + is_pypy
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
if sys.version_info >= (3, 9):
|
| 71 |
+
StrPath = Union[str, os.PathLike[str]]
|
| 72 |
+
else:
|
| 73 |
+
# PathLike is only subscriptable at runtime in 3.9+
|
| 74 |
+
StrPath = Union[str, "os.PathLike[str]"] # pragma: no cover
|