Upload folder using huggingface_hub
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .gitattributes +12 -0
- gtm/bin/gradio +8 -0
- gtm/bin/httpx +8 -0
- gtm/bin/jsonschema +8 -0
- gtm/bin/markdown-it +8 -0
- gtm/bin/pygmentize +8 -0
- gtm/bin/ruff +3 -0
- gtm/bin/transformers-cli +8 -0
- gtm/bin/upload_theme +8 -0
- gtm/bin/uvicorn +8 -0
- gtm/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/INSTALLER +1 -0
- gtm/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/LICENSE.rst +28 -0
- gtm/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/METADATA +105 -0
- gtm/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/RECORD +58 -0
- gtm/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/WHEEL +5 -0
- gtm/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/entry_points.txt +2 -0
- gtm/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/top_level.txt +1 -0
- gtm/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/INSTALLER +1 -0
- gtm/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/LICENSE.rst +28 -0
- gtm/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/METADATA +93 -0
- gtm/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/RECORD +14 -0
- gtm/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/WHEEL +5 -0
- gtm/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/top_level.txt +1 -0
- gtm/lib/python3.12/site-packages/__pycache__/ffmpy.cpython-312.pyc +0 -0
- gtm/lib/python3.12/site-packages/aiofiles-23.2.1.dist-info/INSTALLER +1 -0
- gtm/lib/python3.12/site-packages/aiofiles-23.2.1.dist-info/METADATA +291 -0
- gtm/lib/python3.12/site-packages/aiofiles-23.2.1.dist-info/RECORD +26 -0
- gtm/lib/python3.12/site-packages/aiofiles-23.2.1.dist-info/WHEEL +4 -0
- gtm/lib/python3.12/site-packages/aiofiles-23.2.1.dist-info/licenses/LICENSE +202 -0
- gtm/lib/python3.12/site-packages/aiofiles-23.2.1.dist-info/licenses/NOTICE +2 -0
- gtm/lib/python3.12/site-packages/aiofiles/__init__.py +22 -0
- gtm/lib/python3.12/site-packages/aiofiles/__pycache__/__init__.cpython-312.pyc +0 -0
- gtm/lib/python3.12/site-packages/aiofiles/__pycache__/base.cpython-312.pyc +0 -0
- gtm/lib/python3.12/site-packages/aiofiles/__pycache__/os.cpython-312.pyc +0 -0
- gtm/lib/python3.12/site-packages/aiofiles/__pycache__/ospath.cpython-312.pyc +0 -0
- gtm/lib/python3.12/site-packages/aiofiles/base.py +113 -0
- gtm/lib/python3.12/site-packages/aiofiles/os.py +51 -0
- gtm/lib/python3.12/site-packages/aiofiles/ospath.py +28 -0
- gtm/lib/python3.12/site-packages/aiofiles/tempfile/__init__.py +357 -0
- gtm/lib/python3.12/site-packages/aiofiles/tempfile/__pycache__/__init__.cpython-312.pyc +0 -0
- gtm/lib/python3.12/site-packages/aiofiles/tempfile/__pycache__/temptypes.cpython-312.pyc +0 -0
- gtm/lib/python3.12/site-packages/aiofiles/tempfile/temptypes.py +69 -0
- gtm/lib/python3.12/site-packages/aiofiles/threadpool/__init__.py +141 -0
- gtm/lib/python3.12/site-packages/aiofiles/threadpool/__pycache__/__init__.cpython-312.pyc +0 -0
- gtm/lib/python3.12/site-packages/aiofiles/threadpool/__pycache__/binary.cpython-312.pyc +0 -0
- gtm/lib/python3.12/site-packages/aiofiles/threadpool/__pycache__/text.cpython-312.pyc +0 -0
- gtm/lib/python3.12/site-packages/aiofiles/threadpool/__pycache__/utils.cpython-312.pyc +0 -0
- gtm/lib/python3.12/site-packages/aiofiles/threadpool/binary.py +104 -0
- gtm/lib/python3.12/site-packages/aiofiles/threadpool/text.py +64 -0
- gtm/lib/python3.12/site-packages/aiofiles/threadpool/utils.py +72 -0
.gitattributes
CHANGED
@@ -43,3 +43,15 @@ gtm/lib/python3.12/site-packages/pysam/libcbcf.cpython-312-darwin.so filter=lfs
|
|
43 |
gtm/lib/python3.12/site-packages/pysam/libcbcftools.cpython-312-darwin.so filter=lfs diff=lfs merge=lfs -text
|
44 |
gtm/lib/python3.12/site-packages/pysam/libchtslib.cpython-312-darwin.so filter=lfs diff=lfs merge=lfs -text
|
45 |
gtm/lib/python3.12/site-packages/tokenizers/tokenizers.cpython-312-darwin.so filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
gtm/lib/python3.12/site-packages/pysam/libcbcftools.cpython-312-darwin.so filter=lfs diff=lfs merge=lfs -text
|
44 |
gtm/lib/python3.12/site-packages/pysam/libchtslib.cpython-312-darwin.so filter=lfs diff=lfs merge=lfs -text
|
45 |
gtm/lib/python3.12/site-packages/tokenizers/tokenizers.cpython-312-darwin.so filter=lfs diff=lfs merge=lfs -text
|
46 |
+
gtm/bin/ruff filter=lfs diff=lfs merge=lfs -text
|
47 |
+
gtm/lib/python3.12/site-packages/altair/vegalite/v5/schema/__pycache__/channels.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
48 |
+
gtm/lib/python3.12/site-packages/altair/vegalite/v5/schema/__pycache__/core.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
49 |
+
gtm/lib/python3.12/site-packages/gradio/templates/frontend/assets/Index-232ce73d.js.map filter=lfs diff=lfs merge=lfs -text
|
50 |
+
gtm/lib/python3.12/site-packages/pandas/_libs/algos.cpython-312-darwin.so filter=lfs diff=lfs merge=lfs -text
|
51 |
+
gtm/lib/python3.12/site-packages/pandas/_libs/groupby.cpython-312-darwin.so filter=lfs diff=lfs merge=lfs -text
|
52 |
+
gtm/lib/python3.12/site-packages/pandas/_libs/hashtable.cpython-312-darwin.so filter=lfs diff=lfs merge=lfs -text
|
53 |
+
gtm/lib/python3.12/site-packages/pandas/_libs/interval.cpython-312-darwin.so filter=lfs diff=lfs merge=lfs -text
|
54 |
+
gtm/lib/python3.12/site-packages/pandas/_libs/join.cpython-312-darwin.so filter=lfs diff=lfs merge=lfs -text
|
55 |
+
gtm/lib/python3.12/site-packages/pandas/_libs/tslibs/offsets.cpython-312-darwin.so filter=lfs diff=lfs merge=lfs -text
|
56 |
+
gtm/lib/python3.12/site-packages/pydantic_core/_pydantic_core.cpython-312-darwin.so filter=lfs diff=lfs merge=lfs -text
|
57 |
+
gtm/lib/python3.12/site-packages/safetensors/_safetensors_rust.cpython-312-darwin.so filter=lfs diff=lfs merge=lfs -text
|
gtm/bin/gradio
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/Users/gorgigeorgievski/code/ai/gtmio/gtm/bin/python3.12
|
2 |
+
# -*- coding: utf-8 -*-
|
3 |
+
import re
|
4 |
+
import sys
|
5 |
+
from gradio.cli import cli
|
6 |
+
if __name__ == '__main__':
|
7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
8 |
+
sys.exit(cli())
|
gtm/bin/httpx
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/Users/gorgigeorgievski/code/ai/gtmio/gtm/bin/python3.12
|
2 |
+
# -*- coding: utf-8 -*-
|
3 |
+
import re
|
4 |
+
import sys
|
5 |
+
from httpx import main
|
6 |
+
if __name__ == '__main__':
|
7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
8 |
+
sys.exit(main())
|
gtm/bin/jsonschema
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/Users/gorgigeorgievski/code/ai/gtmio/gtm/bin/python3.12
|
2 |
+
# -*- coding: utf-8 -*-
|
3 |
+
import re
|
4 |
+
import sys
|
5 |
+
from jsonschema.cli import main
|
6 |
+
if __name__ == '__main__':
|
7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
8 |
+
sys.exit(main())
|
gtm/bin/markdown-it
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/Users/gorgigeorgievski/code/ai/gtmio/gtm/bin/python3.12
|
2 |
+
# -*- coding: utf-8 -*-
|
3 |
+
import re
|
4 |
+
import sys
|
5 |
+
from markdown_it.cli.parse import main
|
6 |
+
if __name__ == '__main__':
|
7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
8 |
+
sys.exit(main())
|
gtm/bin/pygmentize
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/Users/gorgigeorgievski/code/ai/gtmio/gtm/bin/python3.12
|
2 |
+
# -*- coding: utf-8 -*-
|
3 |
+
import re
|
4 |
+
import sys
|
5 |
+
from pygments.cmdline import main
|
6 |
+
if __name__ == '__main__':
|
7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
8 |
+
sys.exit(main())
|
gtm/bin/ruff
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:f63f420adb132fb53bda0781f1682f53845afbe8ca0385de8828971aa03d5b70
|
3 |
+
size 19903280
|
gtm/bin/transformers-cli
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/Users/gorgigeorgievski/code/ai/gtmio/gtm/bin/python3.12
|
2 |
+
# -*- coding: utf-8 -*-
|
3 |
+
import re
|
4 |
+
import sys
|
5 |
+
from transformers.commands.transformers_cli import main
|
6 |
+
if __name__ == '__main__':
|
7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
8 |
+
sys.exit(main())
|
gtm/bin/upload_theme
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/Users/gorgigeorgievski/code/ai/gtmio/gtm/bin/python3.12
|
2 |
+
# -*- coding: utf-8 -*-
|
3 |
+
import re
|
4 |
+
import sys
|
5 |
+
from gradio.themes.upload_theme import main
|
6 |
+
if __name__ == '__main__':
|
7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
8 |
+
sys.exit(main())
|
gtm/bin/uvicorn
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/Users/gorgigeorgievski/code/ai/gtmio/gtm/bin/python3.12
|
2 |
+
# -*- coding: utf-8 -*-
|
3 |
+
import re
|
4 |
+
import sys
|
5 |
+
from uvicorn.main import main
|
6 |
+
if __name__ == '__main__':
|
7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
8 |
+
sys.exit(main())
|
gtm/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/INSTALLER
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
pip
|
gtm/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/LICENSE.rst
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright 2007 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.
|
gtm/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/METADATA
ADDED
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Metadata-Version: 2.1
|
2 |
+
Name: Jinja2
|
3 |
+
Version: 3.1.3
|
4 |
+
Summary: A very fast and expressive template engine.
|
5 |
+
Home-page: https://palletsprojects.com/p/jinja/
|
6 |
+
Maintainer: Pallets
|
7 |
+
Maintainer-email: [email protected]
|
8 |
+
License: BSD-3-Clause
|
9 |
+
Project-URL: Donate, https://palletsprojects.com/donate
|
10 |
+
Project-URL: Documentation, https://jinja.palletsprojects.com/
|
11 |
+
Project-URL: Changes, https://jinja.palletsprojects.com/changes/
|
12 |
+
Project-URL: Source Code, https://github.com/pallets/jinja/
|
13 |
+
Project-URL: Issue Tracker, https://github.com/pallets/jinja/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 |
+
Requires-Dist: MarkupSafe >=2.0
|
27 |
+
Provides-Extra: i18n
|
28 |
+
Requires-Dist: Babel >=2.7 ; extra == 'i18n'
|
29 |
+
|
30 |
+
Jinja
|
31 |
+
=====
|
32 |
+
|
33 |
+
Jinja is a fast, expressive, extensible templating engine. Special
|
34 |
+
placeholders in the template allow writing code similar to Python
|
35 |
+
syntax. Then the template is passed data to render the final document.
|
36 |
+
|
37 |
+
It includes:
|
38 |
+
|
39 |
+
- Template inheritance and inclusion.
|
40 |
+
- Define and import macros within templates.
|
41 |
+
- HTML templates can use autoescaping to prevent XSS from untrusted
|
42 |
+
user input.
|
43 |
+
- A sandboxed environment can safely render untrusted templates.
|
44 |
+
- AsyncIO support for generating templates and calling async
|
45 |
+
functions.
|
46 |
+
- I18N support with Babel.
|
47 |
+
- Templates are compiled to optimized Python code just-in-time and
|
48 |
+
cached, or can be compiled ahead-of-time.
|
49 |
+
- Exceptions point to the correct line in templates to make debugging
|
50 |
+
easier.
|
51 |
+
- Extensible filters, tests, functions, and even syntax.
|
52 |
+
|
53 |
+
Jinja's philosophy is that while application logic belongs in Python if
|
54 |
+
possible, it shouldn't make the template designer's job difficult by
|
55 |
+
restricting functionality too much.
|
56 |
+
|
57 |
+
|
58 |
+
Installing
|
59 |
+
----------
|
60 |
+
|
61 |
+
Install and update using `pip`_:
|
62 |
+
|
63 |
+
.. code-block:: text
|
64 |
+
|
65 |
+
$ pip install -U Jinja2
|
66 |
+
|
67 |
+
.. _pip: https://pip.pypa.io/en/stable/getting-started/
|
68 |
+
|
69 |
+
|
70 |
+
In A Nutshell
|
71 |
+
-------------
|
72 |
+
|
73 |
+
.. code-block:: jinja
|
74 |
+
|
75 |
+
{% extends "base.html" %}
|
76 |
+
{% block title %}Members{% endblock %}
|
77 |
+
{% block content %}
|
78 |
+
<ul>
|
79 |
+
{% for user in users %}
|
80 |
+
<li><a href="{{ user.url }}">{{ user.username }}</a></li>
|
81 |
+
{% endfor %}
|
82 |
+
</ul>
|
83 |
+
{% endblock %}
|
84 |
+
|
85 |
+
|
86 |
+
Donate
|
87 |
+
------
|
88 |
+
|
89 |
+
The Pallets organization develops and supports Jinja and other popular
|
90 |
+
packages. In order to grow the community of contributors and users, and
|
91 |
+
allow the maintainers to devote more time to the projects, `please
|
92 |
+
donate today`_.
|
93 |
+
|
94 |
+
.. _please donate today: https://palletsprojects.com/donate
|
95 |
+
|
96 |
+
|
97 |
+
Links
|
98 |
+
-----
|
99 |
+
|
100 |
+
- Documentation: https://jinja.palletsprojects.com/
|
101 |
+
- Changes: https://jinja.palletsprojects.com/changes/
|
102 |
+
- PyPI Releases: https://pypi.org/project/Jinja2/
|
103 |
+
- Source Code: https://github.com/pallets/jinja/
|
104 |
+
- Issue Tracker: https://github.com/pallets/jinja/issues/
|
105 |
+
- Chat: https://discord.gg/pallets
|
gtm/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/RECORD
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Jinja2-3.1.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
2 |
+
Jinja2-3.1.3.dist-info/LICENSE.rst,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475
|
3 |
+
Jinja2-3.1.3.dist-info/METADATA,sha256=0cLNbRCI91jytc7Bzv3XAQfZzFDF2gxkJuH46eF5vew,3301
|
4 |
+
Jinja2-3.1.3.dist-info/RECORD,,
|
5 |
+
Jinja2-3.1.3.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
6 |
+
Jinja2-3.1.3.dist-info/entry_points.txt,sha256=zRd62fbqIyfUpsRtU7EVIFyiu1tPwfgO7EvPErnxgTE,59
|
7 |
+
Jinja2-3.1.3.dist-info/top_level.txt,sha256=PkeVWtLb3-CqjWi1fO29OCbj55EhX_chhKrCdrVe_zs,7
|
8 |
+
jinja2/__init__.py,sha256=NTBwMwsECrdHmxeXF7seusHLzrh6Ldn1A9qhS5cDuf0,1927
|
9 |
+
jinja2/__pycache__/__init__.cpython-312.pyc,,
|
10 |
+
jinja2/__pycache__/_identifier.cpython-312.pyc,,
|
11 |
+
jinja2/__pycache__/async_utils.cpython-312.pyc,,
|
12 |
+
jinja2/__pycache__/bccache.cpython-312.pyc,,
|
13 |
+
jinja2/__pycache__/compiler.cpython-312.pyc,,
|
14 |
+
jinja2/__pycache__/constants.cpython-312.pyc,,
|
15 |
+
jinja2/__pycache__/debug.cpython-312.pyc,,
|
16 |
+
jinja2/__pycache__/defaults.cpython-312.pyc,,
|
17 |
+
jinja2/__pycache__/environment.cpython-312.pyc,,
|
18 |
+
jinja2/__pycache__/exceptions.cpython-312.pyc,,
|
19 |
+
jinja2/__pycache__/ext.cpython-312.pyc,,
|
20 |
+
jinja2/__pycache__/filters.cpython-312.pyc,,
|
21 |
+
jinja2/__pycache__/idtracking.cpython-312.pyc,,
|
22 |
+
jinja2/__pycache__/lexer.cpython-312.pyc,,
|
23 |
+
jinja2/__pycache__/loaders.cpython-312.pyc,,
|
24 |
+
jinja2/__pycache__/meta.cpython-312.pyc,,
|
25 |
+
jinja2/__pycache__/nativetypes.cpython-312.pyc,,
|
26 |
+
jinja2/__pycache__/nodes.cpython-312.pyc,,
|
27 |
+
jinja2/__pycache__/optimizer.cpython-312.pyc,,
|
28 |
+
jinja2/__pycache__/parser.cpython-312.pyc,,
|
29 |
+
jinja2/__pycache__/runtime.cpython-312.pyc,,
|
30 |
+
jinja2/__pycache__/sandbox.cpython-312.pyc,,
|
31 |
+
jinja2/__pycache__/tests.cpython-312.pyc,,
|
32 |
+
jinja2/__pycache__/utils.cpython-312.pyc,,
|
33 |
+
jinja2/__pycache__/visitor.cpython-312.pyc,,
|
34 |
+
jinja2/_identifier.py,sha256=_zYctNKzRqlk_murTNlzrju1FFJL7Va_Ijqqd7ii2lU,1958
|
35 |
+
jinja2/async_utils.py,sha256=dFcmh6lMNfbh7eLKrBio8JqAKLHdZbpCuurFN4OERtY,2447
|
36 |
+
jinja2/bccache.py,sha256=mhz5xtLxCcHRAa56azOhphIAe19u1we0ojifNMClDio,14061
|
37 |
+
jinja2/compiler.py,sha256=PJzYdRLStlEOqmnQs1YxlizPrJoj3jTZuUleREn6AIQ,72199
|
38 |
+
jinja2/constants.py,sha256=GMoFydBF_kdpaRKPoM5cl5MviquVRLVyZtfp5-16jg0,1433
|
39 |
+
jinja2/debug.py,sha256=iWJ432RadxJNnaMOPrjIDInz50UEgni3_HKuFXi2vuQ,6299
|
40 |
+
jinja2/defaults.py,sha256=boBcSw78h-lp20YbaXSJsqkAI2uN_mD_TtCydpeq5wU,1267
|
41 |
+
jinja2/environment.py,sha256=0qldX3VQKZcm6lgn7zHz94oRFow7YPYERiqkquomNjU,61253
|
42 |
+
jinja2/exceptions.py,sha256=ioHeHrWwCWNaXX1inHmHVblvc4haO7AXsjCp3GfWvx0,5071
|
43 |
+
jinja2/ext.py,sha256=5fnMpllaXkfm2P_93RIvi-OnK7Tk8mCW8Du-GcD12Hc,31844
|
44 |
+
jinja2/filters.py,sha256=vYjKb2zaPShvYtn_LpSmqfS8SScbrA_KOanNibsMDIE,53862
|
45 |
+
jinja2/idtracking.py,sha256=GfNmadir4oDALVxzn3DL9YInhJDr69ebXeA2ygfuCGA,10704
|
46 |
+
jinja2/lexer.py,sha256=DW2nX9zk-6MWp65YR2bqqj0xqCvLtD-u9NWT8AnFRxQ,29726
|
47 |
+
jinja2/loaders.py,sha256=ayAwxfrA1SAffQta0nwSDm3TDT4KYiIGN_D9Z45B310,23085
|
48 |
+
jinja2/meta.py,sha256=GNPEvifmSaU3CMxlbheBOZjeZ277HThOPUTf1RkppKQ,4396
|
49 |
+
jinja2/nativetypes.py,sha256=7GIGALVJgdyL80oZJdQUaUfwSt5q2lSSZbXt0dNf_M4,4210
|
50 |
+
jinja2/nodes.py,sha256=i34GPRAZexXMT6bwuf5SEyvdmS-bRCy9KMjwN5O6pjk,34550
|
51 |
+
jinja2/optimizer.py,sha256=tHkMwXxfZkbfA1KmLcqmBMSaz7RLIvvItrJcPoXTyD8,1650
|
52 |
+
jinja2/parser.py,sha256=Y199wPL-G67gJoi5G_5sHuu9uEP1PJkjjLEW_xTH8-k,39736
|
53 |
+
jinja2/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
54 |
+
jinja2/runtime.py,sha256=_6LkKIWFJjQdqlrgA3K39zBFQ-7Orm3wGDm96RwxQoE,33406
|
55 |
+
jinja2/sandbox.py,sha256=Y0xZeXQnH6EX5VjaV2YixESxoepnRbW_3UeQosaBU3M,14584
|
56 |
+
jinja2/tests.py,sha256=Am5Z6Lmfr2XaH_npIfJJ8MdXtWsbLjMULZJulTAj30E,5905
|
57 |
+
jinja2/utils.py,sha256=IMwRIcN1SsTw2-jdQtlH2KzNABsXZBW_-tnFXafQBvY,23933
|
58 |
+
jinja2/visitor.py,sha256=MH14C6yq24G_KVtWzjwaI7Wg14PCJIYlWW1kpkxYak0,3568
|
gtm/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/WHEEL
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Wheel-Version: 1.0
|
2 |
+
Generator: bdist_wheel (0.42.0)
|
3 |
+
Root-Is-Purelib: true
|
4 |
+
Tag: py3-none-any
|
5 |
+
|
gtm/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/entry_points.txt
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
[babel.extractors]
|
2 |
+
jinja2 = jinja2.ext:babel_extract[i18n]
|
gtm/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/top_level.txt
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
jinja2
|
gtm/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/INSTALLER
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
pip
|
gtm/lib/python3.12/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.
|
gtm/lib/python3.12/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: [email protected]
|
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
|
gtm/lib/python3.12/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=1_erwh2TCU3TrYzgBQGCtZskLEmw2vbfn7Xu2mHHvyU,111
|
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-312.pyc,,
|
9 |
+
markupsafe/__pycache__/_native.cpython-312.pyc,,
|
10 |
+
markupsafe/_native.py,sha256=GR86Qvo_GcgKmKreA1WmYN9ud17OFwkww8E-fiW-57s,1713
|
11 |
+
markupsafe/_speedups.c,sha256=X2XvQVtIdcK4Usz70BvkzoOfjTCmQlDkkjYSn-swE0g,7083
|
12 |
+
markupsafe/_speedups.cpython-312-darwin.so,sha256=zO55W2sOSohVnMko0CD2bITP4v6UpfeRj-x2I_8pGkA,35208
|
13 |
+
markupsafe/_speedups.pyi,sha256=vfMCsOgbAXRNLUXkyuyonG8uEWKYU4PDqNuMaDELAYw,229
|
14 |
+
markupsafe/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
gtm/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/WHEEL
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Wheel-Version: 1.0
|
2 |
+
Generator: bdist_wheel (0.42.0)
|
3 |
+
Root-Is-Purelib: false
|
4 |
+
Tag: cp312-cp312-macosx_10_9_x86_64
|
5 |
+
|
gtm/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/top_level.txt
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
markupsafe
|
gtm/lib/python3.12/site-packages/__pycache__/ffmpy.cpython-312.pyc
ADDED
Binary file (10.6 kB). View file
|
|
gtm/lib/python3.12/site-packages/aiofiles-23.2.1.dist-info/INSTALLER
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
pip
|
gtm/lib/python3.12/site-packages/aiofiles-23.2.1.dist-info/METADATA
ADDED
@@ -0,0 +1,291 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Metadata-Version: 2.1
|
2 |
+
Name: aiofiles
|
3 |
+
Version: 23.2.1
|
4 |
+
Summary: File support for asyncio.
|
5 |
+
Project-URL: Changelog, https://github.com/Tinche/aiofiles#history
|
6 |
+
Project-URL: Bug Tracker, https://github.com/Tinche/aiofiles/issues
|
7 |
+
Project-URL: repository, https://github.com/Tinche/aiofiles
|
8 |
+
Author-email: Tin Tvrtkovic <[email protected]>
|
9 |
+
License: Apache-2.0
|
10 |
+
License-File: LICENSE
|
11 |
+
License-File: NOTICE
|
12 |
+
Classifier: Development Status :: 5 - Production/Stable
|
13 |
+
Classifier: Framework :: AsyncIO
|
14 |
+
Classifier: License :: OSI Approved :: Apache Software License
|
15 |
+
Classifier: Operating System :: OS Independent
|
16 |
+
Classifier: Programming Language :: Python :: 3.7
|
17 |
+
Classifier: Programming Language :: Python :: 3.8
|
18 |
+
Classifier: Programming Language :: Python :: 3.9
|
19 |
+
Classifier: Programming Language :: Python :: 3.10
|
20 |
+
Classifier: Programming Language :: Python :: 3.11
|
21 |
+
Classifier: Programming Language :: Python :: 3.12
|
22 |
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
23 |
+
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
24 |
+
Requires-Python: >=3.7
|
25 |
+
Description-Content-Type: text/markdown
|
26 |
+
|
27 |
+
# aiofiles: file support for asyncio
|
28 |
+
|
29 |
+
[![PyPI](https://img.shields.io/pypi/v/aiofiles.svg)](https://pypi.python.org/pypi/aiofiles)
|
30 |
+
[![Build](https://github.com/Tinche/aiofiles/workflows/CI/badge.svg)](https://github.com/Tinche/aiofiles/actions)
|
31 |
+
[![Coverage](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/Tinche/882f02e3df32136c847ba90d2688f06e/raw/covbadge.json)](https://github.com/Tinche/aiofiles/actions/workflows/main.yml)
|
32 |
+
[![Supported Python versions](https://img.shields.io/pypi/pyversions/aiofiles.svg)](https://github.com/Tinche/aiofiles)
|
33 |
+
[![Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
|
34 |
+
|
35 |
+
**aiofiles** is an Apache2 licensed library, written in Python, for handling local
|
36 |
+
disk files in asyncio applications.
|
37 |
+
|
38 |
+
Ordinary local file IO is blocking, and cannot easily and portably be made
|
39 |
+
asynchronous. This means doing file IO may interfere with asyncio applications,
|
40 |
+
which shouldn't block the executing thread. aiofiles helps with this by
|
41 |
+
introducing asynchronous versions of files that support delegating operations to
|
42 |
+
a separate thread pool.
|
43 |
+
|
44 |
+
```python
|
45 |
+
async with aiofiles.open('filename', mode='r') as f:
|
46 |
+
contents = await f.read()
|
47 |
+
print(contents)
|
48 |
+
'My file contents'
|
49 |
+
```
|
50 |
+
|
51 |
+
Asynchronous iteration is also supported.
|
52 |
+
|
53 |
+
```python
|
54 |
+
async with aiofiles.open('filename') as f:
|
55 |
+
async for line in f:
|
56 |
+
...
|
57 |
+
```
|
58 |
+
|
59 |
+
Asynchronous interface to tempfile module.
|
60 |
+
|
61 |
+
```python
|
62 |
+
async with aiofiles.tempfile.TemporaryFile('wb') as f:
|
63 |
+
await f.write(b'Hello, World!')
|
64 |
+
```
|
65 |
+
|
66 |
+
## Features
|
67 |
+
|
68 |
+
- a file API very similar to Python's standard, blocking API
|
69 |
+
- support for buffered and unbuffered binary files, and buffered text files
|
70 |
+
- support for `async`/`await` ([PEP 492](https://peps.python.org/pep-0492/)) constructs
|
71 |
+
- async interface to tempfile module
|
72 |
+
|
73 |
+
## Installation
|
74 |
+
|
75 |
+
To install aiofiles, simply:
|
76 |
+
|
77 |
+
```bash
|
78 |
+
$ pip install aiofiles
|
79 |
+
```
|
80 |
+
|
81 |
+
## Usage
|
82 |
+
|
83 |
+
Files are opened using the `aiofiles.open()` coroutine, which in addition to
|
84 |
+
mirroring the builtin `open` accepts optional `loop` and `executor`
|
85 |
+
arguments. If `loop` is absent, the default loop will be used, as per the
|
86 |
+
set asyncio policy. If `executor` is not specified, the default event loop
|
87 |
+
executor will be used.
|
88 |
+
|
89 |
+
In case of success, an asynchronous file object is returned with an
|
90 |
+
API identical to an ordinary file, except the following methods are coroutines
|
91 |
+
and delegate to an executor:
|
92 |
+
|
93 |
+
- `close`
|
94 |
+
- `flush`
|
95 |
+
- `isatty`
|
96 |
+
- `read`
|
97 |
+
- `readall`
|
98 |
+
- `read1`
|
99 |
+
- `readinto`
|
100 |
+
- `readline`
|
101 |
+
- `readlines`
|
102 |
+
- `seek`
|
103 |
+
- `seekable`
|
104 |
+
- `tell`
|
105 |
+
- `truncate`
|
106 |
+
- `writable`
|
107 |
+
- `write`
|
108 |
+
- `writelines`
|
109 |
+
|
110 |
+
In case of failure, one of the usual exceptions will be raised.
|
111 |
+
|
112 |
+
`aiofiles.stdin`, `aiofiles.stdout`, `aiofiles.stderr`,
|
113 |
+
`aiofiles.stdin_bytes`, `aiofiles.stdout_bytes`, and
|
114 |
+
`aiofiles.stderr_bytes` provide async access to `sys.stdin`,
|
115 |
+
`sys.stdout`, `sys.stderr`, and their corresponding `.buffer` properties.
|
116 |
+
|
117 |
+
The `aiofiles.os` module contains executor-enabled coroutine versions of
|
118 |
+
several useful `os` functions that deal with files:
|
119 |
+
|
120 |
+
- `stat`
|
121 |
+
- `statvfs`
|
122 |
+
- `sendfile`
|
123 |
+
- `rename`
|
124 |
+
- `renames`
|
125 |
+
- `replace`
|
126 |
+
- `remove`
|
127 |
+
- `unlink`
|
128 |
+
- `mkdir`
|
129 |
+
- `makedirs`
|
130 |
+
- `rmdir`
|
131 |
+
- `removedirs`
|
132 |
+
- `link`
|
133 |
+
- `symlink`
|
134 |
+
- `readlink`
|
135 |
+
- `listdir`
|
136 |
+
- `scandir`
|
137 |
+
- `access`
|
138 |
+
- `path.exists`
|
139 |
+
- `path.isfile`
|
140 |
+
- `path.isdir`
|
141 |
+
- `path.islink`
|
142 |
+
- `path.ismount`
|
143 |
+
- `path.getsize`
|
144 |
+
- `path.getatime`
|
145 |
+
- `path.getctime`
|
146 |
+
- `path.samefile`
|
147 |
+
- `path.sameopenfile`
|
148 |
+
|
149 |
+
### Tempfile
|
150 |
+
|
151 |
+
**aiofiles.tempfile** implements the following interfaces:
|
152 |
+
|
153 |
+
- TemporaryFile
|
154 |
+
- NamedTemporaryFile
|
155 |
+
- SpooledTemporaryFile
|
156 |
+
- TemporaryDirectory
|
157 |
+
|
158 |
+
Results return wrapped with a context manager allowing use with async with and async for.
|
159 |
+
|
160 |
+
```python
|
161 |
+
async with aiofiles.tempfile.NamedTemporaryFile('wb+') as f:
|
162 |
+
await f.write(b'Line1\n Line2')
|
163 |
+
await f.seek(0)
|
164 |
+
async for line in f:
|
165 |
+
print(line)
|
166 |
+
|
167 |
+
async with aiofiles.tempfile.TemporaryDirectory() as d:
|
168 |
+
filename = os.path.join(d, "file.ext")
|
169 |
+
```
|
170 |
+
|
171 |
+
### Writing tests for aiofiles
|
172 |
+
|
173 |
+
Real file IO can be mocked by patching `aiofiles.threadpool.sync_open`
|
174 |
+
as desired. The return type also needs to be registered with the
|
175 |
+
`aiofiles.threadpool.wrap` dispatcher:
|
176 |
+
|
177 |
+
```python
|
178 |
+
aiofiles.threadpool.wrap.register(mock.MagicMock)(
|
179 |
+
lambda *args, **kwargs: threadpool.AsyncBufferedIOBase(*args, **kwargs))
|
180 |
+
|
181 |
+
async def test_stuff():
|
182 |
+
data = 'data'
|
183 |
+
mock_file = mock.MagicMock()
|
184 |
+
|
185 |
+
with mock.patch('aiofiles.threadpool.sync_open', return_value=mock_file) as mock_open:
|
186 |
+
async with aiofiles.open('filename', 'w') as f:
|
187 |
+
await f.write(data)
|
188 |
+
|
189 |
+
mock_file.write.assert_called_once_with(data)
|
190 |
+
```
|
191 |
+
|
192 |
+
### History
|
193 |
+
|
194 |
+
#### 23.2.1 (2023-08-09)
|
195 |
+
|
196 |
+
- Import `os.statvfs` conditionally to fix importing on non-UNIX systems.
|
197 |
+
[#171](https://github.com/Tinche/aiofiles/issues/171) [#172](https://github.com/Tinche/aiofiles/pull/172)
|
198 |
+
|
199 |
+
#### 23.2.0 (2023-08-09)
|
200 |
+
|
201 |
+
- aiofiles is now tested on Python 3.12 too.
|
202 |
+
[#166](https://github.com/Tinche/aiofiles/issues/166) [#168](https://github.com/Tinche/aiofiles/pull/168)
|
203 |
+
- On Python 3.12, `aiofiles.tempfile.NamedTemporaryFile` now accepts a `delete_on_close` argument, just like the stdlib version.
|
204 |
+
- On Python 3.12, `aiofiles.tempfile.NamedTemporaryFile` no longer exposes a `delete` attribute, just like the stdlib version.
|
205 |
+
- Added `aiofiles.os.statvfs` and `aiofiles.os.path.ismount`.
|
206 |
+
[#162](https://github.com/Tinche/aiofiles/pull/162)
|
207 |
+
- Use [PDM](https://pdm.fming.dev/latest/) instead of Poetry.
|
208 |
+
[#169](https://github.com/Tinche/aiofiles/pull/169)
|
209 |
+
|
210 |
+
#### 23.1.0 (2023-02-09)
|
211 |
+
|
212 |
+
- Added `aiofiles.os.access`.
|
213 |
+
[#146](https://github.com/Tinche/aiofiles/pull/146)
|
214 |
+
- Removed `aiofiles.tempfile.temptypes.AsyncSpooledTemporaryFile.softspace`.
|
215 |
+
[#151](https://github.com/Tinche/aiofiles/pull/151)
|
216 |
+
- Added `aiofiles.stdin`, `aiofiles.stdin_bytes`, and other stdio streams.
|
217 |
+
[#154](https://github.com/Tinche/aiofiles/pull/154)
|
218 |
+
- Transition to `asyncio.get_running_loop` (vs `asyncio.get_event_loop`) internally.
|
219 |
+
|
220 |
+
#### 22.1.0 (2022-09-04)
|
221 |
+
|
222 |
+
- Added `aiofiles.os.path.islink`.
|
223 |
+
[#126](https://github.com/Tinche/aiofiles/pull/126)
|
224 |
+
- Added `aiofiles.os.readlink`.
|
225 |
+
[#125](https://github.com/Tinche/aiofiles/pull/125)
|
226 |
+
- Added `aiofiles.os.symlink`.
|
227 |
+
[#124](https://github.com/Tinche/aiofiles/pull/124)
|
228 |
+
- Added `aiofiles.os.unlink`.
|
229 |
+
[#123](https://github.com/Tinche/aiofiles/pull/123)
|
230 |
+
- Added `aiofiles.os.link`.
|
231 |
+
[#121](https://github.com/Tinche/aiofiles/pull/121)
|
232 |
+
- Added `aiofiles.os.renames`.
|
233 |
+
[#120](https://github.com/Tinche/aiofiles/pull/120)
|
234 |
+
- Added `aiofiles.os.{listdir, scandir}`.
|
235 |
+
[#143](https://github.com/Tinche/aiofiles/pull/143)
|
236 |
+
- Switched to CalVer.
|
237 |
+
- Dropped Python 3.6 support. If you require it, use version 0.8.0.
|
238 |
+
- aiofiles is now tested on Python 3.11.
|
239 |
+
|
240 |
+
#### 0.8.0 (2021-11-27)
|
241 |
+
|
242 |
+
- aiofiles is now tested on Python 3.10.
|
243 |
+
- Added `aiofiles.os.replace`.
|
244 |
+
[#107](https://github.com/Tinche/aiofiles/pull/107)
|
245 |
+
- Added `aiofiles.os.{makedirs, removedirs}`.
|
246 |
+
- Added `aiofiles.os.path.{exists, isfile, isdir, getsize, getatime, getctime, samefile, sameopenfile}`.
|
247 |
+
[#63](https://github.com/Tinche/aiofiles/pull/63)
|
248 |
+
- Added `suffix`, `prefix`, `dir` args to `aiofiles.tempfile.TemporaryDirectory`.
|
249 |
+
[#116](https://github.com/Tinche/aiofiles/pull/116)
|
250 |
+
|
251 |
+
#### 0.7.0 (2021-05-17)
|
252 |
+
|
253 |
+
- Added the `aiofiles.tempfile` module for async temporary files.
|
254 |
+
[#56](https://github.com/Tinche/aiofiles/pull/56)
|
255 |
+
- Switched to Poetry and GitHub actions.
|
256 |
+
- Dropped 3.5 support.
|
257 |
+
|
258 |
+
#### 0.6.0 (2020-10-27)
|
259 |
+
|
260 |
+
- `aiofiles` is now tested on ppc64le.
|
261 |
+
- Added `name` and `mode` properties to async file objects.
|
262 |
+
[#82](https://github.com/Tinche/aiofiles/pull/82)
|
263 |
+
- Fixed a DeprecationWarning internally.
|
264 |
+
[#75](https://github.com/Tinche/aiofiles/pull/75)
|
265 |
+
- Python 3.9 support and tests.
|
266 |
+
|
267 |
+
#### 0.5.0 (2020-04-12)
|
268 |
+
|
269 |
+
- Python 3.8 support. Code base modernization (using `async/await` instead of `asyncio.coroutine`/`yield from`).
|
270 |
+
- Added `aiofiles.os.remove`, `aiofiles.os.rename`, `aiofiles.os.mkdir`, `aiofiles.os.rmdir`.
|
271 |
+
[#62](https://github.com/Tinche/aiofiles/pull/62)
|
272 |
+
|
273 |
+
#### 0.4.0 (2018-08-11)
|
274 |
+
|
275 |
+
- Python 3.7 support.
|
276 |
+
- Removed Python 3.3/3.4 support. If you use these versions, stick to aiofiles 0.3.x.
|
277 |
+
|
278 |
+
#### 0.3.2 (2017-09-23)
|
279 |
+
|
280 |
+
- The LICENSE is now included in the sdist.
|
281 |
+
[#31](https://github.com/Tinche/aiofiles/pull/31)
|
282 |
+
|
283 |
+
#### 0.3.1 (2017-03-10)
|
284 |
+
|
285 |
+
- Introduced a changelog.
|
286 |
+
- `aiofiles.os.sendfile` will now work if the standard `os` module contains a `sendfile` function.
|
287 |
+
|
288 |
+
### Contributing
|
289 |
+
|
290 |
+
Contributions are very welcome. Tests can be run with `tox`, please ensure
|
291 |
+
the coverage at least stays the same before you submit a pull request.
|
gtm/lib/python3.12/site-packages/aiofiles-23.2.1.dist-info/RECORD
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
aiofiles-23.2.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
2 |
+
aiofiles-23.2.1.dist-info/METADATA,sha256=cot28p_PNjdl_MK--l9Qu2e6QOv9OxdHrKbjLmYf9Uw,9673
|
3 |
+
aiofiles-23.2.1.dist-info/RECORD,,
|
4 |
+
aiofiles-23.2.1.dist-info/WHEEL,sha256=KGYbc1zXlYddvwxnNty23BeaKzh7YuoSIvIMO4jEhvw,87
|
5 |
+
aiofiles-23.2.1.dist-info/licenses/LICENSE,sha256=y16Ofl9KOYjhBjwULGDcLfdWBfTEZRXnduOspt-XbhQ,11325
|
6 |
+
aiofiles-23.2.1.dist-info/licenses/NOTICE,sha256=EExY0dRQvWR0wJ2LZLwBgnM6YKw9jCU-M0zegpRSD_E,55
|
7 |
+
aiofiles/__init__.py,sha256=1iAMJQyJtX3LGIS0AoFTJeO1aJ_RK2jpBSBhg0VoIrE,344
|
8 |
+
aiofiles/__pycache__/__init__.cpython-312.pyc,,
|
9 |
+
aiofiles/__pycache__/base.cpython-312.pyc,,
|
10 |
+
aiofiles/__pycache__/os.cpython-312.pyc,,
|
11 |
+
aiofiles/__pycache__/ospath.cpython-312.pyc,,
|
12 |
+
aiofiles/base.py,sha256=rZwA151Ji8XlBkzvDmcF1CgDTY2iKNuJMfvNlM0s0E0,2684
|
13 |
+
aiofiles/os.py,sha256=zuFGaIyGCGUuFb7trFFEm6SLdCRqTFsSV0mY6SO8z3M,970
|
14 |
+
aiofiles/ospath.py,sha256=zqG2VFzRb6yYiIOWipqsdgvZmoMTFvZmBdkxkAl1FT4,764
|
15 |
+
aiofiles/tempfile/__init__.py,sha256=hFSNTOjOUv371Ozdfy6FIxeln46Nm3xOVh4ZR3Q94V0,10244
|
16 |
+
aiofiles/tempfile/__pycache__/__init__.cpython-312.pyc,,
|
17 |
+
aiofiles/tempfile/__pycache__/temptypes.cpython-312.pyc,,
|
18 |
+
aiofiles/tempfile/temptypes.py,sha256=ddEvNjMLVlr7WUILCe6ypTqw77yREeIonTk16Uw_NVs,2093
|
19 |
+
aiofiles/threadpool/__init__.py,sha256=c_aexl1t193iKdPZaolPEEbHDrQ0RrsH_HTAToMPQBo,3171
|
20 |
+
aiofiles/threadpool/__pycache__/__init__.cpython-312.pyc,,
|
21 |
+
aiofiles/threadpool/__pycache__/binary.cpython-312.pyc,,
|
22 |
+
aiofiles/threadpool/__pycache__/text.cpython-312.pyc,,
|
23 |
+
aiofiles/threadpool/__pycache__/utils.cpython-312.pyc,,
|
24 |
+
aiofiles/threadpool/binary.py,sha256=hp-km9VCRu0MLz_wAEUfbCz7OL7xtn9iGAawabpnp5U,2315
|
25 |
+
aiofiles/threadpool/text.py,sha256=fNmpw2PEkj0BZSldipJXAgZqVGLxALcfOMiuDQ54Eas,1223
|
26 |
+
aiofiles/threadpool/utils.py,sha256=B59dSZwO_WZs2dFFycKeA91iD2Xq2nNw1EFF8YMBI5k,1868
|
gtm/lib/python3.12/site-packages/aiofiles-23.2.1.dist-info/WHEEL
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Wheel-Version: 1.0
|
2 |
+
Generator: hatchling 1.17.1
|
3 |
+
Root-Is-Purelib: true
|
4 |
+
Tag: py3-none-any
|
gtm/lib/python3.12/site-packages/aiofiles-23.2.1.dist-info/licenses/LICENSE
ADDED
@@ -0,0 +1,202 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Apache License
|
2 |
+
Version 2.0, January 2004
|
3 |
+
http://www.apache.org/licenses/
|
4 |
+
|
5 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
6 |
+
|
7 |
+
1. Definitions.
|
8 |
+
|
9 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
10 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
11 |
+
|
12 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
13 |
+
the copyright owner that is granting the License.
|
14 |
+
|
15 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
16 |
+
other entities that control, are controlled by, or are under common
|
17 |
+
control with that entity. For the purposes of this definition,
|
18 |
+
"control" means (i) the power, direct or indirect, to cause the
|
19 |
+
direction or management of such entity, whether by contract or
|
20 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
21 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
22 |
+
|
23 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
24 |
+
exercising permissions granted by this License.
|
25 |
+
|
26 |
+
"Source" form shall mean the preferred form for making modifications,
|
27 |
+
including but not limited to software source code, documentation
|
28 |
+
source, and configuration files.
|
29 |
+
|
30 |
+
"Object" form shall mean any form resulting from mechanical
|
31 |
+
transformation or translation of a Source form, including but
|
32 |
+
not limited to compiled object code, generated documentation,
|
33 |
+
and conversions to other media types.
|
34 |
+
|
35 |
+
"Work" shall mean the work of authorship, whether in Source or
|
36 |
+
Object form, made available under the License, as indicated by a
|
37 |
+
copyright notice that is included in or attached to the work
|
38 |
+
(an example is provided in the Appendix below).
|
39 |
+
|
40 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
41 |
+
form, that is based on (or derived from) the Work and for which the
|
42 |
+
editorial revisions, annotations, elaborations, or other modifications
|
43 |
+
represent, as a whole, an original work of authorship. For the purposes
|
44 |
+
of this License, Derivative Works shall not include works that remain
|
45 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
46 |
+
the Work and Derivative Works thereof.
|
47 |
+
|
48 |
+
"Contribution" shall mean any work of authorship, including
|
49 |
+
the original version of the Work and any modifications or additions
|
50 |
+
to that Work or Derivative Works thereof, that is intentionally
|
51 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
52 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
53 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
54 |
+
means any form of electronic, verbal, or written communication sent
|
55 |
+
to the Licensor or its representatives, including but not limited to
|
56 |
+
communication on electronic mailing lists, source code control systems,
|
57 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
58 |
+
Licensor for the purpose of discussing and improving the Work, but
|
59 |
+
excluding communication that is conspicuously marked or otherwise
|
60 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
61 |
+
|
62 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
63 |
+
on behalf of whom a Contribution has been received by Licensor and
|
64 |
+
subsequently incorporated within the Work.
|
65 |
+
|
66 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
67 |
+
this License, each Contributor hereby grants to You a perpetual,
|
68 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
69 |
+
copyright license to reproduce, prepare Derivative Works of,
|
70 |
+
publicly display, publicly perform, sublicense, and distribute the
|
71 |
+
Work and such Derivative Works in Source or Object form.
|
72 |
+
|
73 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
74 |
+
this License, each Contributor hereby grants to You a perpetual,
|
75 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
76 |
+
(except as stated in this section) patent license to make, have made,
|
77 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
78 |
+
where such license applies only to those patent claims licensable
|
79 |
+
by such Contributor that are necessarily infringed by their
|
80 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
81 |
+
with the Work to which such Contribution(s) was submitted. If You
|
82 |
+
institute patent litigation against any entity (including a
|
83 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
84 |
+
or a Contribution incorporated within the Work constitutes direct
|
85 |
+
or contributory patent infringement, then any patent licenses
|
86 |
+
granted to You under this License for that Work shall terminate
|
87 |
+
as of the date such litigation is filed.
|
88 |
+
|
89 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
90 |
+
Work or Derivative Works thereof in any medium, with or without
|
91 |
+
modifications, and in Source or Object form, provided that You
|
92 |
+
meet the following conditions:
|
93 |
+
|
94 |
+
(a) You must give any other recipients of the Work or
|
95 |
+
Derivative Works a copy of this License; and
|
96 |
+
|
97 |
+
(b) You must cause any modified files to carry prominent notices
|
98 |
+
stating that You changed the files; and
|
99 |
+
|
100 |
+
(c) You must retain, in the Source form of any Derivative Works
|
101 |
+
that You distribute, all copyright, patent, trademark, and
|
102 |
+
attribution notices from the Source form of the Work,
|
103 |
+
excluding those notices that do not pertain to any part of
|
104 |
+
the Derivative Works; and
|
105 |
+
|
106 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
107 |
+
distribution, then any Derivative Works that You distribute must
|
108 |
+
include a readable copy of the attribution notices contained
|
109 |
+
within such NOTICE file, excluding those notices that do not
|
110 |
+
pertain to any part of the Derivative Works, in at least one
|
111 |
+
of the following places: within a NOTICE text file distributed
|
112 |
+
as part of the Derivative Works; within the Source form or
|
113 |
+
documentation, if provided along with the Derivative Works; or,
|
114 |
+
within a display generated by the Derivative Works, if and
|
115 |
+
wherever such third-party notices normally appear. The contents
|
116 |
+
of the NOTICE file are for informational purposes only and
|
117 |
+
do not modify the License. You may add Your own attribution
|
118 |
+
notices within Derivative Works that You distribute, alongside
|
119 |
+
or as an addendum to the NOTICE text from the Work, provided
|
120 |
+
that such additional attribution notices cannot be construed
|
121 |
+
as modifying the License.
|
122 |
+
|
123 |
+
You may add Your own copyright statement to Your modifications and
|
124 |
+
may provide additional or different license terms and conditions
|
125 |
+
for use, reproduction, or distribution of Your modifications, or
|
126 |
+
for any such Derivative Works as a whole, provided Your use,
|
127 |
+
reproduction, and distribution of the Work otherwise complies with
|
128 |
+
the conditions stated in this License.
|
129 |
+
|
130 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
131 |
+
any Contribution intentionally submitted for inclusion in the Work
|
132 |
+
by You to the Licensor shall be under the terms and conditions of
|
133 |
+
this License, without any additional terms or conditions.
|
134 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
135 |
+
the terms of any separate license agreement you may have executed
|
136 |
+
with Licensor regarding such Contributions.
|
137 |
+
|
138 |
+
6. Trademarks. This License does not grant permission to use the trade
|
139 |
+
names, trademarks, service marks, or product names of the Licensor,
|
140 |
+
except as required for reasonable and customary use in describing the
|
141 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
142 |
+
|
143 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
144 |
+
agreed to in writing, Licensor provides the Work (and each
|
145 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
146 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
147 |
+
implied, including, without limitation, any warranties or conditions
|
148 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
149 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
150 |
+
appropriateness of using or redistributing the Work and assume any
|
151 |
+
risks associated with Your exercise of permissions under this License.
|
152 |
+
|
153 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
154 |
+
whether in tort (including negligence), contract, or otherwise,
|
155 |
+
unless required by applicable law (such as deliberate and grossly
|
156 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
157 |
+
liable to You for damages, including any direct, indirect, special,
|
158 |
+
incidental, or consequential damages of any character arising as a
|
159 |
+
result of this License or out of the use or inability to use the
|
160 |
+
Work (including but not limited to damages for loss of goodwill,
|
161 |
+
work stoppage, computer failure or malfunction, or any and all
|
162 |
+
other commercial damages or losses), even if such Contributor
|
163 |
+
has been advised of the possibility of such damages.
|
164 |
+
|
165 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
166 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
167 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
168 |
+
or other liability obligations and/or rights consistent with this
|
169 |
+
License. However, in accepting such obligations, You may act only
|
170 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
171 |
+
of any other Contributor, and only if You agree to indemnify,
|
172 |
+
defend, and hold each Contributor harmless for any liability
|
173 |
+
incurred by, or claims asserted against, such Contributor by reason
|
174 |
+
of your accepting any such warranty or additional liability.
|
175 |
+
|
176 |
+
END OF TERMS AND CONDITIONS
|
177 |
+
|
178 |
+
APPENDIX: How to apply the Apache License to your work.
|
179 |
+
|
180 |
+
To apply the Apache License to your work, attach the following
|
181 |
+
boilerplate notice, with the fields enclosed by brackets "{}"
|
182 |
+
replaced with your own identifying information. (Don't include
|
183 |
+
the brackets!) The text should be enclosed in the appropriate
|
184 |
+
comment syntax for the file format. We also recommend that a
|
185 |
+
file or class name and description of purpose be included on the
|
186 |
+
same "printed page" as the copyright notice for easier
|
187 |
+
identification within third-party archives.
|
188 |
+
|
189 |
+
Copyright {yyyy} {name of copyright owner}
|
190 |
+
|
191 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
192 |
+
you may not use this file except in compliance with the License.
|
193 |
+
You may obtain a copy of the License at
|
194 |
+
|
195 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
196 |
+
|
197 |
+
Unless required by applicable law or agreed to in writing, software
|
198 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
199 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
200 |
+
See the License for the specific language governing permissions and
|
201 |
+
limitations under the License.
|
202 |
+
|
gtm/lib/python3.12/site-packages/aiofiles-23.2.1.dist-info/licenses/NOTICE
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
Asyncio support for files
|
2 |
+
Copyright 2016 Tin Tvrtkovic
|
gtm/lib/python3.12/site-packages/aiofiles/__init__.py
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""Utilities for asyncio-friendly file handling."""
|
2 |
+
from .threadpool import (
|
3 |
+
open,
|
4 |
+
stdin,
|
5 |
+
stdout,
|
6 |
+
stderr,
|
7 |
+
stdin_bytes,
|
8 |
+
stdout_bytes,
|
9 |
+
stderr_bytes,
|
10 |
+
)
|
11 |
+
from . import tempfile
|
12 |
+
|
13 |
+
__all__ = [
|
14 |
+
"open",
|
15 |
+
"tempfile",
|
16 |
+
"stdin",
|
17 |
+
"stdout",
|
18 |
+
"stderr",
|
19 |
+
"stdin_bytes",
|
20 |
+
"stdout_bytes",
|
21 |
+
"stderr_bytes",
|
22 |
+
]
|
gtm/lib/python3.12/site-packages/aiofiles/__pycache__/__init__.cpython-312.pyc
ADDED
Binary file (525 Bytes). View file
|
|
gtm/lib/python3.12/site-packages/aiofiles/__pycache__/base.cpython-312.pyc
ADDED
Binary file (6.43 kB). View file
|
|
gtm/lib/python3.12/site-packages/aiofiles/__pycache__/os.cpython-312.pyc
ADDED
Binary file (1.61 kB). View file
|
|
gtm/lib/python3.12/site-packages/aiofiles/__pycache__/ospath.cpython-312.pyc
ADDED
Binary file (1.65 kB). View file
|
|
gtm/lib/python3.12/site-packages/aiofiles/base.py
ADDED
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""Various base classes."""
|
2 |
+
from types import coroutine
|
3 |
+
from collections.abc import Coroutine
|
4 |
+
from asyncio import get_running_loop
|
5 |
+
|
6 |
+
|
7 |
+
class AsyncBase:
|
8 |
+
def __init__(self, file, loop, executor):
|
9 |
+
self._file = file
|
10 |
+
self._executor = executor
|
11 |
+
self._ref_loop = loop
|
12 |
+
|
13 |
+
@property
|
14 |
+
def _loop(self):
|
15 |
+
return self._ref_loop or get_running_loop()
|
16 |
+
|
17 |
+
def __aiter__(self):
|
18 |
+
"""We are our own iterator."""
|
19 |
+
return self
|
20 |
+
|
21 |
+
def __repr__(self):
|
22 |
+
return super().__repr__() + " wrapping " + repr(self._file)
|
23 |
+
|
24 |
+
async def __anext__(self):
|
25 |
+
"""Simulate normal file iteration."""
|
26 |
+
line = await self.readline()
|
27 |
+
if line:
|
28 |
+
return line
|
29 |
+
else:
|
30 |
+
raise StopAsyncIteration
|
31 |
+
|
32 |
+
|
33 |
+
class AsyncIndirectBase(AsyncBase):
|
34 |
+
def __init__(self, name, loop, executor, indirect):
|
35 |
+
self._indirect = indirect
|
36 |
+
self._name = name
|
37 |
+
super().__init__(None, loop, executor)
|
38 |
+
|
39 |
+
@property
|
40 |
+
def _file(self):
|
41 |
+
return self._indirect()
|
42 |
+
|
43 |
+
@_file.setter
|
44 |
+
def _file(self, v):
|
45 |
+
pass # discard writes
|
46 |
+
|
47 |
+
|
48 |
+
class _ContextManager(Coroutine):
|
49 |
+
__slots__ = ("_coro", "_obj")
|
50 |
+
|
51 |
+
def __init__(self, coro):
|
52 |
+
self._coro = coro
|
53 |
+
self._obj = None
|
54 |
+
|
55 |
+
def send(self, value):
|
56 |
+
return self._coro.send(value)
|
57 |
+
|
58 |
+
def throw(self, typ, val=None, tb=None):
|
59 |
+
if val is None:
|
60 |
+
return self._coro.throw(typ)
|
61 |
+
elif tb is None:
|
62 |
+
return self._coro.throw(typ, val)
|
63 |
+
else:
|
64 |
+
return self._coro.throw(typ, val, tb)
|
65 |
+
|
66 |
+
def close(self):
|
67 |
+
return self._coro.close()
|
68 |
+
|
69 |
+
@property
|
70 |
+
def gi_frame(self):
|
71 |
+
return self._coro.gi_frame
|
72 |
+
|
73 |
+
@property
|
74 |
+
def gi_running(self):
|
75 |
+
return self._coro.gi_running
|
76 |
+
|
77 |
+
@property
|
78 |
+
def gi_code(self):
|
79 |
+
return self._coro.gi_code
|
80 |
+
|
81 |
+
def __next__(self):
|
82 |
+
return self.send(None)
|
83 |
+
|
84 |
+
@coroutine
|
85 |
+
def __iter__(self):
|
86 |
+
resp = yield from self._coro
|
87 |
+
return resp
|
88 |
+
|
89 |
+
def __await__(self):
|
90 |
+
resp = yield from self._coro
|
91 |
+
return resp
|
92 |
+
|
93 |
+
async def __anext__(self):
|
94 |
+
resp = await self._coro
|
95 |
+
return resp
|
96 |
+
|
97 |
+
async def __aenter__(self):
|
98 |
+
self._obj = await self._coro
|
99 |
+
return self._obj
|
100 |
+
|
101 |
+
async def __aexit__(self, exc_type, exc, tb):
|
102 |
+
self._obj.close()
|
103 |
+
self._obj = None
|
104 |
+
|
105 |
+
|
106 |
+
class AiofilesContextManager(_ContextManager):
|
107 |
+
"""An adjusted async context manager for aiofiles."""
|
108 |
+
|
109 |
+
async def __aexit__(self, exc_type, exc_val, exc_tb):
|
110 |
+
await get_running_loop().run_in_executor(
|
111 |
+
None, self._obj._file.__exit__, exc_type, exc_val, exc_tb
|
112 |
+
)
|
113 |
+
self._obj = None
|
gtm/lib/python3.12/site-packages/aiofiles/os.py
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""Async executor versions of file functions from the os module."""
|
2 |
+
import os
|
3 |
+
|
4 |
+
from . import ospath as path
|
5 |
+
from .ospath import wrap
|
6 |
+
|
7 |
+
__all__ = [
|
8 |
+
"path",
|
9 |
+
"stat",
|
10 |
+
"statvfs",
|
11 |
+
"rename",
|
12 |
+
"renames",
|
13 |
+
"replace",
|
14 |
+
"remove",
|
15 |
+
"unlink",
|
16 |
+
"mkdir",
|
17 |
+
"makedirs",
|
18 |
+
"rmdir",
|
19 |
+
"removedirs",
|
20 |
+
"link",
|
21 |
+
"symlink",
|
22 |
+
"readlink",
|
23 |
+
"listdir",
|
24 |
+
"scandir",
|
25 |
+
"access",
|
26 |
+
"sendfile",
|
27 |
+
"wrap",
|
28 |
+
]
|
29 |
+
|
30 |
+
|
31 |
+
stat = wrap(os.stat)
|
32 |
+
rename = wrap(os.rename)
|
33 |
+
renames = wrap(os.renames)
|
34 |
+
replace = wrap(os.replace)
|
35 |
+
remove = wrap(os.remove)
|
36 |
+
unlink = wrap(os.unlink)
|
37 |
+
mkdir = wrap(os.mkdir)
|
38 |
+
makedirs = wrap(os.makedirs)
|
39 |
+
rmdir = wrap(os.rmdir)
|
40 |
+
removedirs = wrap(os.removedirs)
|
41 |
+
link = wrap(os.link)
|
42 |
+
symlink = wrap(os.symlink)
|
43 |
+
readlink = wrap(os.readlink)
|
44 |
+
listdir = wrap(os.listdir)
|
45 |
+
scandir = wrap(os.scandir)
|
46 |
+
access = wrap(os.access)
|
47 |
+
|
48 |
+
if hasattr(os, "sendfile"):
|
49 |
+
sendfile = wrap(os.sendfile)
|
50 |
+
if hasattr(os, "statvfs"):
|
51 |
+
statvfs = wrap(os.statvfs)
|
gtm/lib/python3.12/site-packages/aiofiles/ospath.py
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""Async executor versions of file functions from the os.path module."""
|
2 |
+
import asyncio
|
3 |
+
from functools import partial, wraps
|
4 |
+
from os import path
|
5 |
+
|
6 |
+
|
7 |
+
def wrap(func):
|
8 |
+
@wraps(func)
|
9 |
+
async def run(*args, loop=None, executor=None, **kwargs):
|
10 |
+
if loop is None:
|
11 |
+
loop = asyncio.get_running_loop()
|
12 |
+
pfunc = partial(func, *args, **kwargs)
|
13 |
+
return await loop.run_in_executor(executor, pfunc)
|
14 |
+
|
15 |
+
return run
|
16 |
+
|
17 |
+
|
18 |
+
exists = wrap(path.exists)
|
19 |
+
isfile = wrap(path.isfile)
|
20 |
+
isdir = wrap(path.isdir)
|
21 |
+
islink = wrap(path.islink)
|
22 |
+
ismount = wrap(path.ismount)
|
23 |
+
getsize = wrap(path.getsize)
|
24 |
+
getmtime = wrap(path.getmtime)
|
25 |
+
getatime = wrap(path.getatime)
|
26 |
+
getctime = wrap(path.getctime)
|
27 |
+
samefile = wrap(path.samefile)
|
28 |
+
sameopenfile = wrap(path.sameopenfile)
|
gtm/lib/python3.12/site-packages/aiofiles/tempfile/__init__.py
ADDED
@@ -0,0 +1,357 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import asyncio
|
2 |
+
from functools import partial, singledispatch
|
3 |
+
from io import BufferedRandom, BufferedReader, BufferedWriter, FileIO, TextIOBase
|
4 |
+
from tempfile import NamedTemporaryFile as syncNamedTemporaryFile
|
5 |
+
from tempfile import SpooledTemporaryFile as syncSpooledTemporaryFile
|
6 |
+
from tempfile import TemporaryDirectory as syncTemporaryDirectory
|
7 |
+
from tempfile import TemporaryFile as syncTemporaryFile
|
8 |
+
from tempfile import _TemporaryFileWrapper as syncTemporaryFileWrapper
|
9 |
+
|
10 |
+
from ..base import AiofilesContextManager
|
11 |
+
from ..threadpool.binary import AsyncBufferedIOBase, AsyncBufferedReader, AsyncFileIO
|
12 |
+
from ..threadpool.text import AsyncTextIOWrapper
|
13 |
+
from .temptypes import AsyncSpooledTemporaryFile, AsyncTemporaryDirectory
|
14 |
+
import sys
|
15 |
+
|
16 |
+
__all__ = [
|
17 |
+
"NamedTemporaryFile",
|
18 |
+
"TemporaryFile",
|
19 |
+
"SpooledTemporaryFile",
|
20 |
+
"TemporaryDirectory",
|
21 |
+
]
|
22 |
+
|
23 |
+
|
24 |
+
# ================================================================
|
25 |
+
# Public methods for async open and return of temp file/directory
|
26 |
+
# objects with async interface
|
27 |
+
# ================================================================
|
28 |
+
if sys.version_info >= (3, 12):
|
29 |
+
|
30 |
+
def NamedTemporaryFile(
|
31 |
+
mode="w+b",
|
32 |
+
buffering=-1,
|
33 |
+
encoding=None,
|
34 |
+
newline=None,
|
35 |
+
suffix=None,
|
36 |
+
prefix=None,
|
37 |
+
dir=None,
|
38 |
+
delete=True,
|
39 |
+
delete_on_close=True,
|
40 |
+
loop=None,
|
41 |
+
executor=None,
|
42 |
+
):
|
43 |
+
"""Async open a named temporary file"""
|
44 |
+
return AiofilesContextManager(
|
45 |
+
_temporary_file(
|
46 |
+
named=True,
|
47 |
+
mode=mode,
|
48 |
+
buffering=buffering,
|
49 |
+
encoding=encoding,
|
50 |
+
newline=newline,
|
51 |
+
suffix=suffix,
|
52 |
+
prefix=prefix,
|
53 |
+
dir=dir,
|
54 |
+
delete=delete,
|
55 |
+
delete_on_close=delete_on_close,
|
56 |
+
loop=loop,
|
57 |
+
executor=executor,
|
58 |
+
)
|
59 |
+
)
|
60 |
+
|
61 |
+
else:
|
62 |
+
|
63 |
+
def NamedTemporaryFile(
|
64 |
+
mode="w+b",
|
65 |
+
buffering=-1,
|
66 |
+
encoding=None,
|
67 |
+
newline=None,
|
68 |
+
suffix=None,
|
69 |
+
prefix=None,
|
70 |
+
dir=None,
|
71 |
+
delete=True,
|
72 |
+
loop=None,
|
73 |
+
executor=None,
|
74 |
+
):
|
75 |
+
"""Async open a named temporary file"""
|
76 |
+
return AiofilesContextManager(
|
77 |
+
_temporary_file(
|
78 |
+
named=True,
|
79 |
+
mode=mode,
|
80 |
+
buffering=buffering,
|
81 |
+
encoding=encoding,
|
82 |
+
newline=newline,
|
83 |
+
suffix=suffix,
|
84 |
+
prefix=prefix,
|
85 |
+
dir=dir,
|
86 |
+
delete=delete,
|
87 |
+
loop=loop,
|
88 |
+
executor=executor,
|
89 |
+
)
|
90 |
+
)
|
91 |
+
|
92 |
+
|
93 |
+
def TemporaryFile(
|
94 |
+
mode="w+b",
|
95 |
+
buffering=-1,
|
96 |
+
encoding=None,
|
97 |
+
newline=None,
|
98 |
+
suffix=None,
|
99 |
+
prefix=None,
|
100 |
+
dir=None,
|
101 |
+
loop=None,
|
102 |
+
executor=None,
|
103 |
+
):
|
104 |
+
"""Async open an unnamed temporary file"""
|
105 |
+
return AiofilesContextManager(
|
106 |
+
_temporary_file(
|
107 |
+
named=False,
|
108 |
+
mode=mode,
|
109 |
+
buffering=buffering,
|
110 |
+
encoding=encoding,
|
111 |
+
newline=newline,
|
112 |
+
suffix=suffix,
|
113 |
+
prefix=prefix,
|
114 |
+
dir=dir,
|
115 |
+
loop=loop,
|
116 |
+
executor=executor,
|
117 |
+
)
|
118 |
+
)
|
119 |
+
|
120 |
+
|
121 |
+
def SpooledTemporaryFile(
|
122 |
+
max_size=0,
|
123 |
+
mode="w+b",
|
124 |
+
buffering=-1,
|
125 |
+
encoding=None,
|
126 |
+
newline=None,
|
127 |
+
suffix=None,
|
128 |
+
prefix=None,
|
129 |
+
dir=None,
|
130 |
+
loop=None,
|
131 |
+
executor=None,
|
132 |
+
):
|
133 |
+
"""Async open a spooled temporary file"""
|
134 |
+
return AiofilesContextManager(
|
135 |
+
_spooled_temporary_file(
|
136 |
+
max_size=max_size,
|
137 |
+
mode=mode,
|
138 |
+
buffering=buffering,
|
139 |
+
encoding=encoding,
|
140 |
+
newline=newline,
|
141 |
+
suffix=suffix,
|
142 |
+
prefix=prefix,
|
143 |
+
dir=dir,
|
144 |
+
loop=loop,
|
145 |
+
executor=executor,
|
146 |
+
)
|
147 |
+
)
|
148 |
+
|
149 |
+
|
150 |
+
def TemporaryDirectory(suffix=None, prefix=None, dir=None, loop=None, executor=None):
|
151 |
+
"""Async open a temporary directory"""
|
152 |
+
return AiofilesContextManagerTempDir(
|
153 |
+
_temporary_directory(
|
154 |
+
suffix=suffix, prefix=prefix, dir=dir, loop=loop, executor=executor
|
155 |
+
)
|
156 |
+
)
|
157 |
+
|
158 |
+
|
159 |
+
# =========================================================
|
160 |
+
# Internal coroutines to open new temp files/directories
|
161 |
+
# =========================================================
|
162 |
+
if sys.version_info >= (3, 12):
|
163 |
+
|
164 |
+
async def _temporary_file(
|
165 |
+
named=True,
|
166 |
+
mode="w+b",
|
167 |
+
buffering=-1,
|
168 |
+
encoding=None,
|
169 |
+
newline=None,
|
170 |
+
suffix=None,
|
171 |
+
prefix=None,
|
172 |
+
dir=None,
|
173 |
+
delete=True,
|
174 |
+
delete_on_close=True,
|
175 |
+
loop=None,
|
176 |
+
executor=None,
|
177 |
+
max_size=0,
|
178 |
+
):
|
179 |
+
"""Async method to open a temporary file with async interface"""
|
180 |
+
if loop is None:
|
181 |
+
loop = asyncio.get_running_loop()
|
182 |
+
|
183 |
+
if named:
|
184 |
+
cb = partial(
|
185 |
+
syncNamedTemporaryFile,
|
186 |
+
mode=mode,
|
187 |
+
buffering=buffering,
|
188 |
+
encoding=encoding,
|
189 |
+
newline=newline,
|
190 |
+
suffix=suffix,
|
191 |
+
prefix=prefix,
|
192 |
+
dir=dir,
|
193 |
+
delete=delete,
|
194 |
+
delete_on_close=delete_on_close,
|
195 |
+
)
|
196 |
+
else:
|
197 |
+
cb = partial(
|
198 |
+
syncTemporaryFile,
|
199 |
+
mode=mode,
|
200 |
+
buffering=buffering,
|
201 |
+
encoding=encoding,
|
202 |
+
newline=newline,
|
203 |
+
suffix=suffix,
|
204 |
+
prefix=prefix,
|
205 |
+
dir=dir,
|
206 |
+
)
|
207 |
+
|
208 |
+
f = await loop.run_in_executor(executor, cb)
|
209 |
+
|
210 |
+
# Wrap based on type of underlying IO object
|
211 |
+
if type(f) is syncTemporaryFileWrapper:
|
212 |
+
# _TemporaryFileWrapper was used (named files)
|
213 |
+
result = wrap(f.file, f, loop=loop, executor=executor)
|
214 |
+
result._closer = f._closer
|
215 |
+
return result
|
216 |
+
else:
|
217 |
+
# IO object was returned directly without wrapper
|
218 |
+
return wrap(f, f, loop=loop, executor=executor)
|
219 |
+
|
220 |
+
else:
|
221 |
+
|
222 |
+
async def _temporary_file(
|
223 |
+
named=True,
|
224 |
+
mode="w+b",
|
225 |
+
buffering=-1,
|
226 |
+
encoding=None,
|
227 |
+
newline=None,
|
228 |
+
suffix=None,
|
229 |
+
prefix=None,
|
230 |
+
dir=None,
|
231 |
+
delete=True,
|
232 |
+
loop=None,
|
233 |
+
executor=None,
|
234 |
+
max_size=0,
|
235 |
+
):
|
236 |
+
"""Async method to open a temporary file with async interface"""
|
237 |
+
if loop is None:
|
238 |
+
loop = asyncio.get_running_loop()
|
239 |
+
|
240 |
+
if named:
|
241 |
+
cb = partial(
|
242 |
+
syncNamedTemporaryFile,
|
243 |
+
mode=mode,
|
244 |
+
buffering=buffering,
|
245 |
+
encoding=encoding,
|
246 |
+
newline=newline,
|
247 |
+
suffix=suffix,
|
248 |
+
prefix=prefix,
|
249 |
+
dir=dir,
|
250 |
+
delete=delete,
|
251 |
+
)
|
252 |
+
else:
|
253 |
+
cb = partial(
|
254 |
+
syncTemporaryFile,
|
255 |
+
mode=mode,
|
256 |
+
buffering=buffering,
|
257 |
+
encoding=encoding,
|
258 |
+
newline=newline,
|
259 |
+
suffix=suffix,
|
260 |
+
prefix=prefix,
|
261 |
+
dir=dir,
|
262 |
+
)
|
263 |
+
|
264 |
+
f = await loop.run_in_executor(executor, cb)
|
265 |
+
|
266 |
+
# Wrap based on type of underlying IO object
|
267 |
+
if type(f) is syncTemporaryFileWrapper:
|
268 |
+
# _TemporaryFileWrapper was used (named files)
|
269 |
+
result = wrap(f.file, f, loop=loop, executor=executor)
|
270 |
+
# add delete property
|
271 |
+
result.delete = f.delete
|
272 |
+
return result
|
273 |
+
else:
|
274 |
+
# IO object was returned directly without wrapper
|
275 |
+
return wrap(f, f, loop=loop, executor=executor)
|
276 |
+
|
277 |
+
|
278 |
+
async def _spooled_temporary_file(
|
279 |
+
max_size=0,
|
280 |
+
mode="w+b",
|
281 |
+
buffering=-1,
|
282 |
+
encoding=None,
|
283 |
+
newline=None,
|
284 |
+
suffix=None,
|
285 |
+
prefix=None,
|
286 |
+
dir=None,
|
287 |
+
loop=None,
|
288 |
+
executor=None,
|
289 |
+
):
|
290 |
+
"""Open a spooled temporary file with async interface"""
|
291 |
+
if loop is None:
|
292 |
+
loop = asyncio.get_running_loop()
|
293 |
+
|
294 |
+
cb = partial(
|
295 |
+
syncSpooledTemporaryFile,
|
296 |
+
max_size=max_size,
|
297 |
+
mode=mode,
|
298 |
+
buffering=buffering,
|
299 |
+
encoding=encoding,
|
300 |
+
newline=newline,
|
301 |
+
suffix=suffix,
|
302 |
+
prefix=prefix,
|
303 |
+
dir=dir,
|
304 |
+
)
|
305 |
+
|
306 |
+
f = await loop.run_in_executor(executor, cb)
|
307 |
+
|
308 |
+
# Single interface provided by SpooledTemporaryFile for all modes
|
309 |
+
return AsyncSpooledTemporaryFile(f, loop=loop, executor=executor)
|
310 |
+
|
311 |
+
|
312 |
+
async def _temporary_directory(
|
313 |
+
suffix=None, prefix=None, dir=None, loop=None, executor=None
|
314 |
+
):
|
315 |
+
"""Async method to open a temporary directory with async interface"""
|
316 |
+
if loop is None:
|
317 |
+
loop = asyncio.get_running_loop()
|
318 |
+
|
319 |
+
cb = partial(syncTemporaryDirectory, suffix, prefix, dir)
|
320 |
+
f = await loop.run_in_executor(executor, cb)
|
321 |
+
|
322 |
+
return AsyncTemporaryDirectory(f, loop=loop, executor=executor)
|
323 |
+
|
324 |
+
|
325 |
+
class AiofilesContextManagerTempDir(AiofilesContextManager):
|
326 |
+
"""With returns the directory location, not the object (matching sync lib)"""
|
327 |
+
|
328 |
+
async def __aenter__(self):
|
329 |
+
self._obj = await self._coro
|
330 |
+
return self._obj.name
|
331 |
+
|
332 |
+
|
333 |
+
@singledispatch
|
334 |
+
def wrap(base_io_obj, file, *, loop=None, executor=None):
|
335 |
+
"""Wrap the object with interface based on type of underlying IO"""
|
336 |
+
raise TypeError("Unsupported IO type: {}".format(base_io_obj))
|
337 |
+
|
338 |
+
|
339 |
+
@wrap.register(TextIOBase)
|
340 |
+
def _(base_io_obj, file, *, loop=None, executor=None):
|
341 |
+
return AsyncTextIOWrapper(file, loop=loop, executor=executor)
|
342 |
+
|
343 |
+
|
344 |
+
@wrap.register(BufferedWriter)
|
345 |
+
def _(base_io_obj, file, *, loop=None, executor=None):
|
346 |
+
return AsyncBufferedIOBase(file, loop=loop, executor=executor)
|
347 |
+
|
348 |
+
|
349 |
+
@wrap.register(BufferedReader)
|
350 |
+
@wrap.register(BufferedRandom)
|
351 |
+
def _(base_io_obj, file, *, loop=None, executor=None):
|
352 |
+
return AsyncBufferedReader(file, loop=loop, executor=executor)
|
353 |
+
|
354 |
+
|
355 |
+
@wrap.register(FileIO)
|
356 |
+
def _(base_io_obj, file, *, loop=None, executor=None):
|
357 |
+
return AsyncFileIO(file, loop=loop, executor=executor)
|
gtm/lib/python3.12/site-packages/aiofiles/tempfile/__pycache__/__init__.cpython-312.pyc
ADDED
Binary file (8.39 kB). View file
|
|
gtm/lib/python3.12/site-packages/aiofiles/tempfile/__pycache__/temptypes.cpython-312.pyc
ADDED
Binary file (3.75 kB). View file
|
|
gtm/lib/python3.12/site-packages/aiofiles/tempfile/temptypes.py
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""Async wrappers for spooled temp files and temp directory objects"""
|
2 |
+
from functools import partial
|
3 |
+
|
4 |
+
from ..base import AsyncBase
|
5 |
+
from ..threadpool.utils import (
|
6 |
+
cond_delegate_to_executor,
|
7 |
+
delegate_to_executor,
|
8 |
+
proxy_property_directly,
|
9 |
+
)
|
10 |
+
|
11 |
+
|
12 |
+
@delegate_to_executor("fileno", "rollover")
|
13 |
+
@cond_delegate_to_executor(
|
14 |
+
"close",
|
15 |
+
"flush",
|
16 |
+
"isatty",
|
17 |
+
"read",
|
18 |
+
"readline",
|
19 |
+
"readlines",
|
20 |
+
"seek",
|
21 |
+
"tell",
|
22 |
+
"truncate",
|
23 |
+
)
|
24 |
+
@proxy_property_directly("closed", "encoding", "mode", "name", "newlines")
|
25 |
+
class AsyncSpooledTemporaryFile(AsyncBase):
|
26 |
+
"""Async wrapper for SpooledTemporaryFile class"""
|
27 |
+
|
28 |
+
async def _check(self):
|
29 |
+
if self._file._rolled:
|
30 |
+
return
|
31 |
+
max_size = self._file._max_size
|
32 |
+
if max_size and self._file.tell() > max_size:
|
33 |
+
await self.rollover()
|
34 |
+
|
35 |
+
async def write(self, s):
|
36 |
+
"""Implementation to anticipate rollover"""
|
37 |
+
if self._file._rolled:
|
38 |
+
cb = partial(self._file.write, s)
|
39 |
+
return await self._loop.run_in_executor(self._executor, cb)
|
40 |
+
else:
|
41 |
+
file = self._file._file # reference underlying base IO object
|
42 |
+
rv = file.write(s)
|
43 |
+
await self._check()
|
44 |
+
return rv
|
45 |
+
|
46 |
+
async def writelines(self, iterable):
|
47 |
+
"""Implementation to anticipate rollover"""
|
48 |
+
if self._file._rolled:
|
49 |
+
cb = partial(self._file.writelines, iterable)
|
50 |
+
return await self._loop.run_in_executor(self._executor, cb)
|
51 |
+
else:
|
52 |
+
file = self._file._file # reference underlying base IO object
|
53 |
+
rv = file.writelines(iterable)
|
54 |
+
await self._check()
|
55 |
+
return rv
|
56 |
+
|
57 |
+
|
58 |
+
@delegate_to_executor("cleanup")
|
59 |
+
@proxy_property_directly("name")
|
60 |
+
class AsyncTemporaryDirectory:
|
61 |
+
"""Async wrapper for TemporaryDirectory class"""
|
62 |
+
|
63 |
+
def __init__(self, file, loop, executor):
|
64 |
+
self._file = file
|
65 |
+
self._loop = loop
|
66 |
+
self._executor = executor
|
67 |
+
|
68 |
+
async def close(self):
|
69 |
+
await self.cleanup()
|
gtm/lib/python3.12/site-packages/aiofiles/threadpool/__init__.py
ADDED
@@ -0,0 +1,141 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""Handle files using a thread pool executor."""
|
2 |
+
import asyncio
|
3 |
+
import sys
|
4 |
+
from functools import partial, singledispatch
|
5 |
+
from io import (
|
6 |
+
BufferedIOBase,
|
7 |
+
BufferedRandom,
|
8 |
+
BufferedReader,
|
9 |
+
BufferedWriter,
|
10 |
+
FileIO,
|
11 |
+
TextIOBase,
|
12 |
+
)
|
13 |
+
from types import coroutine
|
14 |
+
|
15 |
+
from ..base import AiofilesContextManager
|
16 |
+
from .binary import (
|
17 |
+
AsyncBufferedIOBase,
|
18 |
+
AsyncBufferedReader,
|
19 |
+
AsyncFileIO,
|
20 |
+
AsyncIndirectBufferedIOBase,
|
21 |
+
)
|
22 |
+
from .text import AsyncTextIndirectIOWrapper, AsyncTextIOWrapper
|
23 |
+
|
24 |
+
sync_open = open
|
25 |
+
|
26 |
+
__all__ = (
|
27 |
+
"open",
|
28 |
+
"stdin",
|
29 |
+
"stdout",
|
30 |
+
"stderr",
|
31 |
+
"stdin_bytes",
|
32 |
+
"stdout_bytes",
|
33 |
+
"stderr_bytes",
|
34 |
+
)
|
35 |
+
|
36 |
+
|
37 |
+
def open(
|
38 |
+
file,
|
39 |
+
mode="r",
|
40 |
+
buffering=-1,
|
41 |
+
encoding=None,
|
42 |
+
errors=None,
|
43 |
+
newline=None,
|
44 |
+
closefd=True,
|
45 |
+
opener=None,
|
46 |
+
*,
|
47 |
+
loop=None,
|
48 |
+
executor=None,
|
49 |
+
):
|
50 |
+
return AiofilesContextManager(
|
51 |
+
_open(
|
52 |
+
file,
|
53 |
+
mode=mode,
|
54 |
+
buffering=buffering,
|
55 |
+
encoding=encoding,
|
56 |
+
errors=errors,
|
57 |
+
newline=newline,
|
58 |
+
closefd=closefd,
|
59 |
+
opener=opener,
|
60 |
+
loop=loop,
|
61 |
+
executor=executor,
|
62 |
+
)
|
63 |
+
)
|
64 |
+
|
65 |
+
|
66 |
+
@coroutine
|
67 |
+
def _open(
|
68 |
+
file,
|
69 |
+
mode="r",
|
70 |
+
buffering=-1,
|
71 |
+
encoding=None,
|
72 |
+
errors=None,
|
73 |
+
newline=None,
|
74 |
+
closefd=True,
|
75 |
+
opener=None,
|
76 |
+
*,
|
77 |
+
loop=None,
|
78 |
+
executor=None,
|
79 |
+
):
|
80 |
+
"""Open an asyncio file."""
|
81 |
+
if loop is None:
|
82 |
+
loop = asyncio.get_running_loop()
|
83 |
+
cb = partial(
|
84 |
+
sync_open,
|
85 |
+
file,
|
86 |
+
mode=mode,
|
87 |
+
buffering=buffering,
|
88 |
+
encoding=encoding,
|
89 |
+
errors=errors,
|
90 |
+
newline=newline,
|
91 |
+
closefd=closefd,
|
92 |
+
opener=opener,
|
93 |
+
)
|
94 |
+
f = yield from loop.run_in_executor(executor, cb)
|
95 |
+
|
96 |
+
return wrap(f, loop=loop, executor=executor)
|
97 |
+
|
98 |
+
|
99 |
+
@singledispatch
|
100 |
+
def wrap(file, *, loop=None, executor=None):
|
101 |
+
raise TypeError("Unsupported io type: {}.".format(file))
|
102 |
+
|
103 |
+
|
104 |
+
@wrap.register(TextIOBase)
|
105 |
+
def _(file, *, loop=None, executor=None):
|
106 |
+
return AsyncTextIOWrapper(file, loop=loop, executor=executor)
|
107 |
+
|
108 |
+
|
109 |
+
@wrap.register(BufferedWriter)
|
110 |
+
@wrap.register(BufferedIOBase)
|
111 |
+
def _(file, *, loop=None, executor=None):
|
112 |
+
return AsyncBufferedIOBase(file, loop=loop, executor=executor)
|
113 |
+
|
114 |
+
|
115 |
+
@wrap.register(BufferedReader)
|
116 |
+
@wrap.register(BufferedRandom)
|
117 |
+
def _(file, *, loop=None, executor=None):
|
118 |
+
return AsyncBufferedReader(file, loop=loop, executor=executor)
|
119 |
+
|
120 |
+
|
121 |
+
@wrap.register(FileIO)
|
122 |
+
def _(file, *, loop=None, executor=None):
|
123 |
+
return AsyncFileIO(file, loop=loop, executor=executor)
|
124 |
+
|
125 |
+
|
126 |
+
stdin = AsyncTextIndirectIOWrapper("sys.stdin", None, None, indirect=lambda: sys.stdin)
|
127 |
+
stdout = AsyncTextIndirectIOWrapper(
|
128 |
+
"sys.stdout", None, None, indirect=lambda: sys.stdout
|
129 |
+
)
|
130 |
+
stderr = AsyncTextIndirectIOWrapper(
|
131 |
+
"sys.stderr", None, None, indirect=lambda: sys.stderr
|
132 |
+
)
|
133 |
+
stdin_bytes = AsyncIndirectBufferedIOBase(
|
134 |
+
"sys.stdin.buffer", None, None, indirect=lambda: sys.stdin.buffer
|
135 |
+
)
|
136 |
+
stdout_bytes = AsyncIndirectBufferedIOBase(
|
137 |
+
"sys.stdout.buffer", None, None, indirect=lambda: sys.stdout.buffer
|
138 |
+
)
|
139 |
+
stderr_bytes = AsyncIndirectBufferedIOBase(
|
140 |
+
"sys.stderr.buffer", None, None, indirect=lambda: sys.stderr.buffer
|
141 |
+
)
|
gtm/lib/python3.12/site-packages/aiofiles/threadpool/__pycache__/__init__.cpython-312.pyc
ADDED
Binary file (4.58 kB). View file
|
|
gtm/lib/python3.12/site-packages/aiofiles/threadpool/__pycache__/binary.cpython-312.pyc
ADDED
Binary file (2.89 kB). View file
|
|
gtm/lib/python3.12/site-packages/aiofiles/threadpool/__pycache__/text.cpython-312.pyc
ADDED
Binary file (1.54 kB). View file
|
|
gtm/lib/python3.12/site-packages/aiofiles/threadpool/__pycache__/utils.cpython-312.pyc
ADDED
Binary file (3.93 kB). View file
|
|
gtm/lib/python3.12/site-packages/aiofiles/threadpool/binary.py
ADDED
@@ -0,0 +1,104 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from ..base import AsyncBase, AsyncIndirectBase
|
2 |
+
from .utils import delegate_to_executor, proxy_method_directly, proxy_property_directly
|
3 |
+
|
4 |
+
|
5 |
+
@delegate_to_executor(
|
6 |
+
"close",
|
7 |
+
"flush",
|
8 |
+
"isatty",
|
9 |
+
"read",
|
10 |
+
"read1",
|
11 |
+
"readinto",
|
12 |
+
"readline",
|
13 |
+
"readlines",
|
14 |
+
"seek",
|
15 |
+
"seekable",
|
16 |
+
"tell",
|
17 |
+
"truncate",
|
18 |
+
"writable",
|
19 |
+
"write",
|
20 |
+
"writelines",
|
21 |
+
)
|
22 |
+
@proxy_method_directly("detach", "fileno", "readable")
|
23 |
+
@proxy_property_directly("closed", "raw", "name", "mode")
|
24 |
+
class AsyncBufferedIOBase(AsyncBase):
|
25 |
+
"""The asyncio executor version of io.BufferedWriter and BufferedIOBase."""
|
26 |
+
|
27 |
+
|
28 |
+
@delegate_to_executor("peek")
|
29 |
+
class AsyncBufferedReader(AsyncBufferedIOBase):
|
30 |
+
"""The asyncio executor version of io.BufferedReader and Random."""
|
31 |
+
|
32 |
+
|
33 |
+
@delegate_to_executor(
|
34 |
+
"close",
|
35 |
+
"flush",
|
36 |
+
"isatty",
|
37 |
+
"read",
|
38 |
+
"readall",
|
39 |
+
"readinto",
|
40 |
+
"readline",
|
41 |
+
"readlines",
|
42 |
+
"seek",
|
43 |
+
"seekable",
|
44 |
+
"tell",
|
45 |
+
"truncate",
|
46 |
+
"writable",
|
47 |
+
"write",
|
48 |
+
"writelines",
|
49 |
+
)
|
50 |
+
@proxy_method_directly("fileno", "readable")
|
51 |
+
@proxy_property_directly("closed", "name", "mode")
|
52 |
+
class AsyncFileIO(AsyncBase):
|
53 |
+
"""The asyncio executor version of io.FileIO."""
|
54 |
+
|
55 |
+
|
56 |
+
@delegate_to_executor(
|
57 |
+
"close",
|
58 |
+
"flush",
|
59 |
+
"isatty",
|
60 |
+
"read",
|
61 |
+
"read1",
|
62 |
+
"readinto",
|
63 |
+
"readline",
|
64 |
+
"readlines",
|
65 |
+
"seek",
|
66 |
+
"seekable",
|
67 |
+
"tell",
|
68 |
+
"truncate",
|
69 |
+
"writable",
|
70 |
+
"write",
|
71 |
+
"writelines",
|
72 |
+
)
|
73 |
+
@proxy_method_directly("detach", "fileno", "readable")
|
74 |
+
@proxy_property_directly("closed", "raw", "name", "mode")
|
75 |
+
class AsyncIndirectBufferedIOBase(AsyncIndirectBase):
|
76 |
+
"""The indirect asyncio executor version of io.BufferedWriter and BufferedIOBase."""
|
77 |
+
|
78 |
+
|
79 |
+
@delegate_to_executor("peek")
|
80 |
+
class AsyncIndirectBufferedReader(AsyncIndirectBufferedIOBase):
|
81 |
+
"""The indirect asyncio executor version of io.BufferedReader and Random."""
|
82 |
+
|
83 |
+
|
84 |
+
@delegate_to_executor(
|
85 |
+
"close",
|
86 |
+
"flush",
|
87 |
+
"isatty",
|
88 |
+
"read",
|
89 |
+
"readall",
|
90 |
+
"readinto",
|
91 |
+
"readline",
|
92 |
+
"readlines",
|
93 |
+
"seek",
|
94 |
+
"seekable",
|
95 |
+
"tell",
|
96 |
+
"truncate",
|
97 |
+
"writable",
|
98 |
+
"write",
|
99 |
+
"writelines",
|
100 |
+
)
|
101 |
+
@proxy_method_directly("fileno", "readable")
|
102 |
+
@proxy_property_directly("closed", "name", "mode")
|
103 |
+
class AsyncIndirectFileIO(AsyncIndirectBase):
|
104 |
+
"""The indirect asyncio executor version of io.FileIO."""
|
gtm/lib/python3.12/site-packages/aiofiles/threadpool/text.py
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from ..base import AsyncBase, AsyncIndirectBase
|
2 |
+
from .utils import delegate_to_executor, proxy_method_directly, proxy_property_directly
|
3 |
+
|
4 |
+
|
5 |
+
@delegate_to_executor(
|
6 |
+
"close",
|
7 |
+
"flush",
|
8 |
+
"isatty",
|
9 |
+
"read",
|
10 |
+
"readable",
|
11 |
+
"readline",
|
12 |
+
"readlines",
|
13 |
+
"seek",
|
14 |
+
"seekable",
|
15 |
+
"tell",
|
16 |
+
"truncate",
|
17 |
+
"write",
|
18 |
+
"writable",
|
19 |
+
"writelines",
|
20 |
+
)
|
21 |
+
@proxy_method_directly("detach", "fileno", "readable")
|
22 |
+
@proxy_property_directly(
|
23 |
+
"buffer",
|
24 |
+
"closed",
|
25 |
+
"encoding",
|
26 |
+
"errors",
|
27 |
+
"line_buffering",
|
28 |
+
"newlines",
|
29 |
+
"name",
|
30 |
+
"mode",
|
31 |
+
)
|
32 |
+
class AsyncTextIOWrapper(AsyncBase):
|
33 |
+
"""The asyncio executor version of io.TextIOWrapper."""
|
34 |
+
|
35 |
+
|
36 |
+
@delegate_to_executor(
|
37 |
+
"close",
|
38 |
+
"flush",
|
39 |
+
"isatty",
|
40 |
+
"read",
|
41 |
+
"readable",
|
42 |
+
"readline",
|
43 |
+
"readlines",
|
44 |
+
"seek",
|
45 |
+
"seekable",
|
46 |
+
"tell",
|
47 |
+
"truncate",
|
48 |
+
"write",
|
49 |
+
"writable",
|
50 |
+
"writelines",
|
51 |
+
)
|
52 |
+
@proxy_method_directly("detach", "fileno", "readable")
|
53 |
+
@proxy_property_directly(
|
54 |
+
"buffer",
|
55 |
+
"closed",
|
56 |
+
"encoding",
|
57 |
+
"errors",
|
58 |
+
"line_buffering",
|
59 |
+
"newlines",
|
60 |
+
"name",
|
61 |
+
"mode",
|
62 |
+
)
|
63 |
+
class AsyncTextIndirectIOWrapper(AsyncIndirectBase):
|
64 |
+
"""The indirect asyncio executor version of io.TextIOWrapper."""
|
gtm/lib/python3.12/site-packages/aiofiles/threadpool/utils.py
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import functools
|
2 |
+
|
3 |
+
|
4 |
+
def delegate_to_executor(*attrs):
|
5 |
+
def cls_builder(cls):
|
6 |
+
for attr_name in attrs:
|
7 |
+
setattr(cls, attr_name, _make_delegate_method(attr_name))
|
8 |
+
return cls
|
9 |
+
|
10 |
+
return cls_builder
|
11 |
+
|
12 |
+
|
13 |
+
def proxy_method_directly(*attrs):
|
14 |
+
def cls_builder(cls):
|
15 |
+
for attr_name in attrs:
|
16 |
+
setattr(cls, attr_name, _make_proxy_method(attr_name))
|
17 |
+
return cls
|
18 |
+
|
19 |
+
return cls_builder
|
20 |
+
|
21 |
+
|
22 |
+
def proxy_property_directly(*attrs):
|
23 |
+
def cls_builder(cls):
|
24 |
+
for attr_name in attrs:
|
25 |
+
setattr(cls, attr_name, _make_proxy_property(attr_name))
|
26 |
+
return cls
|
27 |
+
|
28 |
+
return cls_builder
|
29 |
+
|
30 |
+
|
31 |
+
def cond_delegate_to_executor(*attrs):
|
32 |
+
def cls_builder(cls):
|
33 |
+
for attr_name in attrs:
|
34 |
+
setattr(cls, attr_name, _make_cond_delegate_method(attr_name))
|
35 |
+
return cls
|
36 |
+
|
37 |
+
return cls_builder
|
38 |
+
|
39 |
+
|
40 |
+
def _make_delegate_method(attr_name):
|
41 |
+
async def method(self, *args, **kwargs):
|
42 |
+
cb = functools.partial(getattr(self._file, attr_name), *args, **kwargs)
|
43 |
+
return await self._loop.run_in_executor(self._executor, cb)
|
44 |
+
|
45 |
+
return method
|
46 |
+
|
47 |
+
|
48 |
+
def _make_proxy_method(attr_name):
|
49 |
+
def method(self, *args, **kwargs):
|
50 |
+
return getattr(self._file, attr_name)(*args, **kwargs)
|
51 |
+
|
52 |
+
return method
|
53 |
+
|
54 |
+
|
55 |
+
def _make_proxy_property(attr_name):
|
56 |
+
def proxy_property(self):
|
57 |
+
return getattr(self._file, attr_name)
|
58 |
+
|
59 |
+
return property(proxy_property)
|
60 |
+
|
61 |
+
|
62 |
+
def _make_cond_delegate_method(attr_name):
|
63 |
+
"""For spooled temp files, delegate only if rolled to file object"""
|
64 |
+
|
65 |
+
async def method(self, *args, **kwargs):
|
66 |
+
if self._file._rolled:
|
67 |
+
cb = functools.partial(getattr(self._file, attr_name), *args, **kwargs)
|
68 |
+
return await self._loop.run_in_executor(self._executor, cb)
|
69 |
+
else:
|
70 |
+
return getattr(self._file, attr_name)(*args, **kwargs)
|
71 |
+
|
72 |
+
return method
|