py-asyncfiles 1.1.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- py_asyncfiles-1.1.3/CHANGELOG.md +52 -0
- py_asyncfiles-1.1.3/LICENSE +21 -0
- py_asyncfiles-1.1.3/MANIFEST.in +49 -0
- py_asyncfiles-1.1.3/Makefile +55 -0
- py_asyncfiles-1.1.3/PKG-INFO +296 -0
- py_asyncfiles-1.1.3/README.md +245 -0
- py_asyncfiles-1.1.3/asyncfiles/__init__.py +60 -0
- py_asyncfiles-1.1.3/asyncfiles/callbacks.c +8229 -0
- py_asyncfiles-1.1.3/asyncfiles/callbacks.pxd +11 -0
- py_asyncfiles-1.1.3/asyncfiles/callbacks.pyx +203 -0
- py_asyncfiles-1.1.3/asyncfiles/context.pxd +33 -0
- py_asyncfiles-1.1.3/asyncfiles/cpython.pxd +9 -0
- py_asyncfiles-1.1.3/asyncfiles/files.c +27278 -0
- py_asyncfiles-1.1.3/asyncfiles/files.pyx +756 -0
- py_asyncfiles-1.1.3/asyncfiles/py.typed +0 -0
- py_asyncfiles-1.1.3/asyncfiles/types.py +71 -0
- py_asyncfiles-1.1.3/asyncfiles/utils.c +15417 -0
- py_asyncfiles-1.1.3/asyncfiles/utils.pxd +51 -0
- py_asyncfiles-1.1.3/asyncfiles/utils.pyx +255 -0
- py_asyncfiles-1.1.3/asyncfiles/uv.pxd +120 -0
- py_asyncfiles-1.1.3/py_asyncfiles.egg-info/SOURCES.txt +516 -0
- py_asyncfiles-1.1.3/pyproject.toml +185 -0
- py_asyncfiles-1.1.3/requirements.txt +31 -0
- py_asyncfiles-1.1.3/setup.cfg +4 -0
- py_asyncfiles-1.1.3/setup.py +314 -0
- py_asyncfiles-1.1.3/tests/conftest.py +46 -0
- py_asyncfiles-1.1.3/tests/test_files.py +486 -0
- py_asyncfiles-1.1.3/vendor/libuv/.git +1 -0
- py_asyncfiles-1.1.3/vendor/libuv/.gitattributes +1 -0
- py_asyncfiles-1.1.3/vendor/libuv/.github/ISSUE_TEMPLATE.md +13 -0
- py_asyncfiles-1.1.3/vendor/libuv/.github/dependabot.yml +7 -0
- py_asyncfiles-1.1.3/vendor/libuv/.github/workflows/CI-docs.yml +25 -0
- py_asyncfiles-1.1.3/vendor/libuv/.github/workflows/CI-sample.yml +33 -0
- py_asyncfiles-1.1.3/vendor/libuv/.github/workflows/CI-unix.yml +176 -0
- py_asyncfiles-1.1.3/vendor/libuv/.github/workflows/CI-win.yml +128 -0
- py_asyncfiles-1.1.3/vendor/libuv/.github/workflows/sanitizer.yml +104 -0
- py_asyncfiles-1.1.3/vendor/libuv/.gitignore +80 -0
- py_asyncfiles-1.1.3/vendor/libuv/.mailmap +71 -0
- py_asyncfiles-1.1.3/vendor/libuv/.readthedocs.yaml +15 -0
- py_asyncfiles-1.1.3/vendor/libuv/AUTHORS +606 -0
- py_asyncfiles-1.1.3/vendor/libuv/CMakeLists.txt +816 -0
- py_asyncfiles-1.1.3/vendor/libuv/CONTRIBUTING.md +171 -0
- py_asyncfiles-1.1.3/vendor/libuv/ChangeLog +6522 -0
- py_asyncfiles-1.1.3/vendor/libuv/LICENSE +19 -0
- py_asyncfiles-1.1.3/vendor/libuv/LICENSE-docs +396 -0
- py_asyncfiles-1.1.3/vendor/libuv/LICENSE-extra +36 -0
- py_asyncfiles-1.1.3/vendor/libuv/LINKS.md +112 -0
- py_asyncfiles-1.1.3/vendor/libuv/MAINTAINERS.md +56 -0
- py_asyncfiles-1.1.3/vendor/libuv/Makefile.am +563 -0
- py_asyncfiles-1.1.3/vendor/libuv/Makefile.in +6698 -0
- py_asyncfiles-1.1.3/vendor/libuv/README.md +355 -0
- py_asyncfiles-1.1.3/vendor/libuv/SECURITY.md +27 -0
- py_asyncfiles-1.1.3/vendor/libuv/SUPPORTED_PLATFORMS.md +68 -0
- py_asyncfiles-1.1.3/vendor/libuv/aclocal.m4 +1252 -0
- py_asyncfiles-1.1.3/vendor/libuv/ar-lib +271 -0
- py_asyncfiles-1.1.3/vendor/libuv/autogen.sh +75 -0
- py_asyncfiles-1.1.3/vendor/libuv/autom4te.cache/output.0 +17492 -0
- py_asyncfiles-1.1.3/vendor/libuv/autom4te.cache/output.1 +17493 -0
- py_asyncfiles-1.1.3/vendor/libuv/autom4te.cache/output.2 +17492 -0
- py_asyncfiles-1.1.3/vendor/libuv/autom4te.cache/requests +383 -0
- py_asyncfiles-1.1.3/vendor/libuv/autom4te.cache/traces.0 +2948 -0
- py_asyncfiles-1.1.3/vendor/libuv/autom4te.cache/traces.1 +811 -0
- py_asyncfiles-1.1.3/vendor/libuv/autom4te.cache/traces.2 +811 -0
- py_asyncfiles-1.1.3/vendor/libuv/cmake-toolchains/cross-mingw32.cmake +17 -0
- py_asyncfiles-1.1.3/vendor/libuv/compile +348 -0
- py_asyncfiles-1.1.3/vendor/libuv/config.guess +1754 -0
- py_asyncfiles-1.1.3/vendor/libuv/config.sub +1890 -0
- py_asyncfiles-1.1.3/vendor/libuv/configure +17493 -0
- py_asyncfiles-1.1.3/vendor/libuv/configure.ac +92 -0
- py_asyncfiles-1.1.3/vendor/libuv/depcomp +791 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/Makefile +183 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/.gitignore +3 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/CMakeLists.txt +51 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/cgi/main.c +81 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/cgi/tick.c +13 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/default-loop/main.c +12 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/detach/main.c +31 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/dns/main.c +80 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/helloworld/main.c +15 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/idle-basic/main.c +24 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/idle-compute/main.c +43 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/interfaces/main.c +33 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/locks/main.c +57 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/multi-echo-server/hammer.js +20 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/multi-echo-server/main.c +114 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/multi-echo-server/worker.c +88 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/onchange/main.c +44 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/pipe-echo-server/main.c +94 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/plugin/hello.c +5 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/plugin/main.c +38 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/plugin/plugin.h +7 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/proc-streams/main.c +49 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/proc-streams/test.c +8 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/progress/main.c +47 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/queue-cancel/main.c +59 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/queue-work/main.c +44 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/ref-timer/main.c +29 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/signal/main.c +66 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/spawn/main.c +36 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/tcp-echo-server/main.c +87 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/thread-create/main.c +35 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/tty/main.c +31 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/tty-gravity/main.c +48 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/udp-dhcp/main.c +128 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/uvcat/main.c +62 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/uvstop/main.c +33 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/uvtee/main.c +79 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/code/uvwget/main.c +166 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/make.bat +243 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/requirements.txt +36 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/api.rst +36 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/async.rst +65 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/check.rst +54 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/conf.py +348 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/design.rst +141 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/dll.rst +44 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/dns.rst +108 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/errors.rst +388 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/fs.rst +727 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/fs_event.rst +144 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/fs_poll.rst +77 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/guide/about.rst +22 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/guide/basics.rst +236 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/guide/eventloops.rst +50 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/guide/filesystem.rst +349 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/guide/introduction.rst +73 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/guide/networking.rst +256 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/guide/processes.rst +424 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/guide/threads.rst +397 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/guide/utilities.rst +450 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/guide.rst +22 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/handle.rst +286 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/idle.rst +62 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/index.rst +62 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/loop.rst +263 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/metrics.rst +71 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/migration_010_100.rst +244 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/misc.rst +940 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/pipe.rst +182 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/poll.rst +150 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/prepare.rst +54 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/process.rst +291 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/request.rst +121 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/signal.rst +101 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/sphinx-plugins/manpage.py +45 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/static/architecture.png +0 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/static/diagrams.key/Data/st0-311.jpg +0 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/static/diagrams.key/Data/st1-475.jpg +0 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/static/diagrams.key/Index.zip +0 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/static/diagrams.key/Metadata/BuildVersionHistory.plist +8 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/static/diagrams.key/Metadata/DocumentIdentifier +1 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/static/diagrams.key/Metadata/Properties.plist +0 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/static/diagrams.key/preview-micro.jpg +0 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/static/diagrams.key/preview-web.jpg +0 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/static/diagrams.key/preview.jpg +0 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/static/favicon.ico +0 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/static/logo.png +0 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/static/loop_iteration.png +0 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/stream.rst +258 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/tcp.rst +219 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/threading.rst +284 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/threadpool.rst +74 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/timer.rst +92 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/tty.rst +145 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/udp.rst +501 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/upgrading.rst +11 -0
- py_asyncfiles-1.1.3/vendor/libuv/docs/src/version.rst +60 -0
- py_asyncfiles-1.1.3/vendor/libuv/img/banner.png +0 -0
- py_asyncfiles-1.1.3/vendor/libuv/img/logos.svg +152 -0
- py_asyncfiles-1.1.3/vendor/libuv/include/uv/aix.h +32 -0
- py_asyncfiles-1.1.3/vendor/libuv/include/uv/bsd.h +34 -0
- py_asyncfiles-1.1.3/vendor/libuv/include/uv/darwin.h +61 -0
- py_asyncfiles-1.1.3/vendor/libuv/include/uv/errno.h +483 -0
- py_asyncfiles-1.1.3/vendor/libuv/include/uv/linux.h +34 -0
- py_asyncfiles-1.1.3/vendor/libuv/include/uv/os390.h +33 -0
- py_asyncfiles-1.1.3/vendor/libuv/include/uv/posix.h +31 -0
- py_asyncfiles-1.1.3/vendor/libuv/include/uv/sunos.h +44 -0
- py_asyncfiles-1.1.3/vendor/libuv/include/uv/threadpool.h +37 -0
- py_asyncfiles-1.1.3/vendor/libuv/include/uv/tree.h +521 -0
- py_asyncfiles-1.1.3/vendor/libuv/include/uv/unix.h +512 -0
- py_asyncfiles-1.1.3/vendor/libuv/include/uv/version.h +43 -0
- py_asyncfiles-1.1.3/vendor/libuv/include/uv/win.h +698 -0
- py_asyncfiles-1.1.3/vendor/libuv/include/uv.h +1995 -0
- py_asyncfiles-1.1.3/vendor/libuv/install-sh +541 -0
- py_asyncfiles-1.1.3/vendor/libuv/libuv-static.pc.in +12 -0
- py_asyncfiles-1.1.3/vendor/libuv/libuv.pc.in +13 -0
- py_asyncfiles-1.1.3/vendor/libuv/ltmain.sh +11436 -0
- py_asyncfiles-1.1.3/vendor/libuv/m4/.gitignore +5 -0
- py_asyncfiles-1.1.3/vendor/libuv/m4/as_case.m4 +21 -0
- py_asyncfiles-1.1.3/vendor/libuv/m4/ax_pthread.m4 +485 -0
- py_asyncfiles-1.1.3/vendor/libuv/m4/libtool.m4 +8427 -0
- py_asyncfiles-1.1.3/vendor/libuv/m4/libuv-check-flags.m4 +336 -0
- py_asyncfiles-1.1.3/vendor/libuv/m4/libuv-check-versions.m4 +7 -0
- py_asyncfiles-1.1.3/vendor/libuv/m4/libuv-extra-automake-flags.m4 +1 -0
- py_asyncfiles-1.1.3/vendor/libuv/m4/ltoptions.m4 +437 -0
- py_asyncfiles-1.1.3/vendor/libuv/m4/ltsugar.m4 +124 -0
- py_asyncfiles-1.1.3/vendor/libuv/m4/ltversion.m4 +24 -0
- py_asyncfiles-1.1.3/vendor/libuv/m4/lt~obsolete.m4 +99 -0
- py_asyncfiles-1.1.3/vendor/libuv/missing +215 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/fs-poll.c +290 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/heap-inl.h +245 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/idna.c +560 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/idna.h +31 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/inet.c +298 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/queue.h +90 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/random.c +123 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/strscpy.c +38 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/strscpy.h +39 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/strtok.c +52 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/strtok.h +27 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/thread-common.c +175 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/threadpool.c +419 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/timer.c +199 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/aix-common.c +89 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/aix.c +1321 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/async.c +418 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/bsd-ifaddrs.c +164 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/bsd-proctitle.c +99 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/core.c +2104 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/cygwin.c +93 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/darwin-proctitle.c +176 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/darwin-stub.h +97 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/darwin-syscalls.h +17 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/darwin.c +237 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/dl.c +80 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/freebsd.c +290 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/fs.c +2303 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/fsevents.c +906 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/getaddrinfo.c +252 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/getnameinfo.c +121 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/haiku.c +172 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/hurd.c +172 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/ibmi.c +545 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/internal.h +534 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/kqueue.c +667 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/linux.c +2761 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/loop-watcher.c +68 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/loop.c +240 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/netbsd.c +264 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/no-fsevents.c +42 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/no-proctitle.c +45 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/openbsd.c +253 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/os390-proctitle.c +136 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/os390-syscalls.c +536 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/os390-syscalls.h +75 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/os390.c +1070 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/pipe.c +555 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/poll.c +159 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/posix-hrtime.c +36 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/posix-poll.c +385 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/process.c +1123 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/procfs-exepath.c +45 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/proctitle.c +157 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/qnx.c +142 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/random-devurandom.c +93 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/random-getentropy.c +57 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/random-getrandom.c +86 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/random-sysctl-linux.c +99 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/signal.c +581 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/stream.c +1567 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/sunos.c +915 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/sysinfo-loadavg.c +36 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/sysinfo-memory.c +42 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/tcp.c +676 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/thread.c +975 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/tty.c +510 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/unix/udp.c +1434 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/uv-common.c +1051 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/uv-common.h +474 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/uv-data-getter-setters.c +119 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/version.c +45 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/async.c +98 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/atomicops-inl.h +61 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/core.c +683 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/detect-wakeup.c +56 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/dl.c +135 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/error.c +183 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/fs-event.c +620 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/fs-fd-hash-inl.h +200 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/fs.c +3774 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/getaddrinfo.c +388 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/getnameinfo.c +146 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/handle-inl.h +180 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/handle.c +162 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/internal.h +335 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/loop-watcher.c +122 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/pipe.c +2725 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/poll.c +586 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/process-stdio.c +419 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/process.c +1407 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/req-inl.h +214 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/signal.c +282 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/snprintf.c +42 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/stream-inl.h +54 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/stream.c +252 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/tcp.c +1738 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/thread.c +568 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/tty.c +2460 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/udp.c +1162 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/util.c +1760 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/winapi.c +144 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/winapi.h +4831 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/winsock.c +575 -0
- py_asyncfiles-1.1.3/vendor/libuv/src/win/winsock.h +180 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-async-pummel.c +120 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-async.c +142 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-fs-stat.c +138 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-getaddrinfo.c +92 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-list.h +173 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-loop-count.c +134 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-million-async.c +113 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-million-timers.c +86 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-multi-accept.c +451 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-ping-pongs.c +221 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-ping-udp.c +169 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-pound.c +351 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-pump.c +478 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-queue-work.c +71 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-sizes.c +46 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-spawn.c +164 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-tcp-write-batch.c +144 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-thread.c +64 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/benchmark-udp-pummel.c +243 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/blackhole-server.c +122 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/echo-server.c +431 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/fixtures/empty_file +0 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/fixtures/load_error.node +1 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/fixtures/lorem_ipsum.txt +1 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/fixtures/one_file/one_file +0 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/run-benchmarks.c +72 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/run-tests.c +269 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/runner-unix.c +457 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/runner-unix.h +36 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/runner-win.c +348 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/runner-win.h +41 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/runner.c +457 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/runner.h +171 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/task.h +388 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-active.c +84 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-async-null-cb.c +64 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-async.c +134 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-barrier.c +160 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-callback-stack.c +209 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-close-fd.c +84 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-close-order.c +80 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-condvar.c +248 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-connect-unspecified.c +60 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-connection-fail.c +161 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-cwd-and-chdir.c +57 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-default-loop-close.c +58 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-delayed-accept.c +189 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-dlerror.c +65 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-eintr-handling.c +96 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-embed.c +79 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-emfile.c +129 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-env-vars.c +178 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-error.c +82 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-fail-always.c +29 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-fork.c +769 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-fs-copyfile.c +232 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-fs-event.c +1220 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-fs-fd-hash.c +133 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-fs-open-flags.c +435 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-fs-poll.c +292 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-fs-readdir.c +548 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-fs.c +4922 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-get-currentexe.c +109 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-get-loadavg.c +35 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-get-memory.c +53 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-get-passwd.c +211 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-getaddrinfo.c +215 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-gethostname.c +58 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-getnameinfo.c +116 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-getsockname.c +362 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-getters-setters.c +114 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-gettimeofday.c +39 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-handle-fileno.c +125 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-homedir.c +81 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-hrtime.c +65 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-idle.c +125 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-idna.c +232 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-iouring-pollhup.c +111 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-ip-name.c +65 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-ip4-addr.c +55 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-ip6-addr.c +175 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-ipc-heavy-traffic-deadlock-bug.c +159 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-ipc-send-recv.c +435 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-ipc.c +857 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-list.h +1269 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-loop-alive.c +68 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-loop-close.c +77 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-loop-configure.c +38 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-loop-handles.c +337 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-loop-oom.c +62 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-loop-stop.c +83 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-loop-time.c +69 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-metrics.c +390 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-multiple-listen.c +109 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-mutexes.c +182 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-not-readable-nor-writable-on-read-error.c +104 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-not-writable-after-shutdown.c +69 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-osx-select.c +140 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-pass-always.c +28 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-ping-pong.c +439 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-pipe-bind-error.c +215 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-pipe-close-stdout-read-stdin.c +122 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-pipe-connect-error.c +97 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-pipe-connect-multiple.c +178 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-pipe-connect-prepare.c +83 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-pipe-getsockname.c +370 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-pipe-pending-instances.c +59 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-pipe-sendmsg.c +172 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-pipe-server-close.c +94 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-pipe-set-fchmod.c +92 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-pipe-set-non-blocking.c +131 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-platform-output.c +259 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-poll-close-doesnt-corrupt-stack.c +114 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-poll-close.c +73 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-poll-closesocket.c +92 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-poll-multiple-handles.c +104 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-poll-oob.c +214 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-poll.c +730 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-process-priority.c +83 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-process-title-threadsafe.c +108 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-process-title.c +135 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-queue-foreach-delete.c +205 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-random.c +94 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-readable-on-eof.c +110 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-ref.c +445 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-run-nowait.c +46 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-run-once.c +48 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-semaphore.c +111 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-shutdown-close.c +108 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-shutdown-eof.c +188 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-shutdown-simultaneous.c +135 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-shutdown-twice.c +85 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-signal-multiple-loops.c +325 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-signal-pending-on-close.c +116 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-signal.c +325 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-socket-buffer-size.c +77 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-spawn.c +2112 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-stdio-over-pipes.c +299 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-strscpy.c +53 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-strtok.c +90 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-alloc-cb-fail.c +123 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-bind-error.c +317 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-bind6-error.c +176 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-close-accept.c +198 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-close-after-read-timeout.c +183 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-close-reset.c +340 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-close-while-connecting.c +97 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-close.c +136 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-connect-error-after-write.c +98 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-connect-error.c +73 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-connect-timeout.c +196 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-connect6-error.c +129 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-create-socket-early.c +213 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-flags.c +74 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-oob.c +146 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-open.c +407 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-read-stop-start.c +136 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-read-stop.c +76 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-reuseport.c +248 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-rst.c +110 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-shutdown-after-write.c +138 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-try-write-error.c +109 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-try-write.c +135 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-unexpected-read.c +117 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-write-after-connect.c +77 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-write-fail.c +115 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-write-in-a-row.c +143 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-write-queue-order.c +139 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-write-to-half-open-connection.c +141 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tcp-writealot.c +185 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-test-macros.c +42 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-thread-affinity.c +154 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-thread-equal.c +51 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-thread-name.c +193 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-thread-priority.c +111 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-thread.c +306 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-threadpool-cancel.c +418 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-threadpool.c +76 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-timer-again.c +141 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-timer-from-check.c +80 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-timer.c +453 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tmpdir.c +89 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tty-duplicate-key.c +381 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tty-escape-sequence-processing.c +1632 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-tty.c +468 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-alloc-cb-fail.c +196 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-bind.c +93 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-connect.c +196 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-connect6.c +199 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-create-socket-early.c +139 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-dgram-too-big.c +91 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-ipv6.c +259 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-mmsg.c +150 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-multicast-interface.c +104 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-multicast-interface6.c +108 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-multicast-join.c +201 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-multicast-join6.c +224 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-multicast-ttl.c +94 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-open.c +350 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-options.c +160 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-recv-in-a-row.c +128 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-reuseport.c +287 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-send-and-recv.c +212 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-send-hang-loop.c +99 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-send-immediate.c +148 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-send-unreachable.c +201 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-sendmmsg-error.c +75 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-udp-try-send.c +149 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-uname.c +69 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-walk-handles.c +77 -0
- py_asyncfiles-1.1.3/vendor/libuv/test/test-watcher-cross-stop.c +112 -0
- py_asyncfiles-1.1.3/vendor/libuv/tools/make_dist_html.py +122 -0
- py_asyncfiles-1.1.3/vendor/libuv/tools/vswhere_usability_wrapper.cmd +33 -0
- py_asyncfiles-1.1.3/vendor/libuv/tsansupp.txt +2 -0
- py_asyncfiles-1.1.3/vendor/libuv/uv_win_longpath.manifest +8 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Initial release of asyncfiles
|
|
12
|
+
- High-performance async file I/O built on libuv
|
|
13
|
+
- Support for text and binary file modes
|
|
14
|
+
- Context manager interface (`async with open(...)`)
|
|
15
|
+
- Offset-based read/write operations
|
|
16
|
+
- Multiple buffer size configurations
|
|
17
|
+
- Full Python 3.8+ support
|
|
18
|
+
- Type hints and py.typed support
|
|
19
|
+
- Comprehensive test suite with pytest
|
|
20
|
+
- Support for multiple file modes: r, w, a, x, r+, w+, a+
|
|
21
|
+
- Binary mode support (rb, wb, ab, etc.)
|
|
22
|
+
- pathlib.Path compatibility
|
|
23
|
+
- Concurrent file operations support
|
|
24
|
+
- Zero-copy buffer operations (via Cython)
|
|
25
|
+
- fsync and truncate operations
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
- N/A
|
|
29
|
+
|
|
30
|
+
### Deprecated
|
|
31
|
+
- N/A
|
|
32
|
+
|
|
33
|
+
### Removed
|
|
34
|
+
- N/A
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
- N/A
|
|
38
|
+
|
|
39
|
+
### Security
|
|
40
|
+
- N/A
|
|
41
|
+
|
|
42
|
+
## [0.1.0] - 2024-01-XX
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
- Initial alpha release
|
|
46
|
+
- Basic async file operations
|
|
47
|
+
- libuv integration via Cython
|
|
48
|
+
- Core functionality for read/write operations
|
|
49
|
+
- Support for POSIX systems (Linux, macOS, BSD)
|
|
50
|
+
|
|
51
|
+
[Unreleased]: https://github.com/yourusername/asyncfiles/compare/v0.1.0...HEAD
|
|
52
|
+
[0.1.0]: https://github.com/yourusername/asyncfiles/releases/tag/v0.1.0
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 asyncfiles contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Include essential documentation
|
|
2
|
+
include README.md
|
|
3
|
+
include LICENSE
|
|
4
|
+
include CHANGELOG.md
|
|
5
|
+
|
|
6
|
+
# Include configuration files
|
|
7
|
+
include pyproject.toml
|
|
8
|
+
include setup.py
|
|
9
|
+
include Makefile
|
|
10
|
+
include requirements.txt
|
|
11
|
+
|
|
12
|
+
# Include Cython source files
|
|
13
|
+
recursive-include asyncfiles *.pyx
|
|
14
|
+
recursive-include asyncfiles *.pxd
|
|
15
|
+
recursive-include asyncfiles *.pyi
|
|
16
|
+
recursive-include asyncfiles *.c
|
|
17
|
+
recursive-include asyncfiles *.h
|
|
18
|
+
|
|
19
|
+
# Include type hints
|
|
20
|
+
include asyncfiles/py.typed
|
|
21
|
+
|
|
22
|
+
# Include libuv vendor directory
|
|
23
|
+
recursive-include vendor *
|
|
24
|
+
prune vendor/libuv/.git
|
|
25
|
+
|
|
26
|
+
# Include tests
|
|
27
|
+
recursive-include tests *.py
|
|
28
|
+
|
|
29
|
+
# Exclude compiled files
|
|
30
|
+
global-exclude *.pyc
|
|
31
|
+
global-exclude *.pyo
|
|
32
|
+
global-exclude *.so
|
|
33
|
+
global-exclude *.dylib
|
|
34
|
+
global-exclude *.dll
|
|
35
|
+
global-exclude __pycache__
|
|
36
|
+
|
|
37
|
+
# Exclude build artifacts
|
|
38
|
+
prune build
|
|
39
|
+
prune dist
|
|
40
|
+
prune *.egg-info
|
|
41
|
+
prune .git
|
|
42
|
+
prune .github
|
|
43
|
+
|
|
44
|
+
# Exclude development files
|
|
45
|
+
exclude .gitignore
|
|
46
|
+
exclude .gitmodules
|
|
47
|
+
exclude tox.ini
|
|
48
|
+
exclude .coverage
|
|
49
|
+
prune htmlcov
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
.PHONY: _default clean clean-libuv distclean compile debug docs test testinstalled release setup-build ci-clean
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
PYTHON ?= python
|
|
5
|
+
ROOT = $(dir $(realpath $(firstword $(MAKEFILE_LIST))))
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
_default: compile
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
clean:
|
|
12
|
+
rm -fr dist/ doc/_build/ *.egg-info asyncfiles/loop.*.pyd asyncfiles/loop_d.*.pyd
|
|
13
|
+
rm -fr asyncfiles/*.c asyncfiles/*.html asyncfiles/*.so
|
|
14
|
+
rm -fr asyncfiles/handles/*.html asyncfiles/includes/*.html
|
|
15
|
+
find . -name '__pycache__' | xargs rm -rf
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
ci-clean: clean
|
|
19
|
+
rm -fr build/lib.* build/temp.* build/libuv
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
clean-libuv:
|
|
23
|
+
(cd vendor/libuv; git clean -dfX)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
distclean: clean clean-libuv
|
|
27
|
+
rm -fr build/
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
setup-build:
|
|
31
|
+
$(PYTHON) setup.py build_ext --inplace --cython-always
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
compile: clean setup-build
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
debug: clean
|
|
38
|
+
$(PYTHON) setup.py build_ext --inplace --debug \
|
|
39
|
+
--cython-always \
|
|
40
|
+
--cython-annotate \
|
|
41
|
+
--cython-directives="linetrace=True" \
|
|
42
|
+
--define UVLOOP_DEBUG,CYTHON_TRACE,CYTHON_TRACE_NOGIL
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
docs:
|
|
46
|
+
$(PYTHON) setup.py build_ext --inplace build_sphinx
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
test:
|
|
50
|
+
PYTHONASYNCIODEBUG=1 $(PYTHON) -m unittest discover -v tests
|
|
51
|
+
$(PYTHON) -m unittest discover -v tests
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
testinstalled:
|
|
55
|
+
cd "$${HOME}" && $(PYTHON) -m unittest discover -v $(ROOT)/tests
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: py-asyncfiles
|
|
3
|
+
Version: 1.1.3
|
|
4
|
+
Summary: High-performance async file I/O library built on libuv
|
|
5
|
+
Home-page: https://github.com/cve-zh00/asyncfiles
|
|
6
|
+
Author: bastian garcia
|
|
7
|
+
Author-email: Bastián García <bastiang@uc.cl>
|
|
8
|
+
Maintainer-email: Bastián García <bastiang@uc.cl>
|
|
9
|
+
License: MIT
|
|
10
|
+
Keywords: async,asyncio,file,io,libuv,performance,cython
|
|
11
|
+
Platform: POSIX
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: POSIX
|
|
16
|
+
Classifier: Operating System :: MacOS
|
|
17
|
+
Classifier: Operating System :: Unix
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
25
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
26
|
+
Classifier: Framework :: AsyncIO
|
|
27
|
+
Classifier: Typing :: Typed
|
|
28
|
+
Requires-Python: >=3.8
|
|
29
|
+
Description-Content-Type: text/markdown
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
Provides-Extra: dev
|
|
32
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
34
|
+
Requires-Dist: Cython~=3.0; extra == "dev"
|
|
35
|
+
Requires-Dist: black>=23.0; extra == "dev"
|
|
36
|
+
Requires-Dist: isort>=5.12; extra == "dev"
|
|
37
|
+
Requires-Dist: mypy>=1.0; extra == "dev"
|
|
38
|
+
Requires-Dist: flake8>=6.0; extra == "dev"
|
|
39
|
+
Provides-Extra: test
|
|
40
|
+
Requires-Dist: pytest>=7.0; extra == "test"
|
|
41
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "test"
|
|
42
|
+
Requires-Dist: pytest-cov>=4.0; extra == "test"
|
|
43
|
+
Provides-Extra: docs
|
|
44
|
+
Requires-Dist: sphinx>=5.0; extra == "docs"
|
|
45
|
+
Requires-Dist: sphinx-rtd-theme>=1.2; extra == "docs"
|
|
46
|
+
Dynamic: author
|
|
47
|
+
Dynamic: home-page
|
|
48
|
+
Dynamic: license-file
|
|
49
|
+
Dynamic: platform
|
|
50
|
+
Dynamic: requires-python
|
|
51
|
+
|
|
52
|
+
# asyncfiles
|
|
53
|
+
|
|
54
|
+
[](https://www.python.org/downloads/)
|
|
55
|
+
[](LICENSE)
|
|
56
|
+
[](https://github.com/cve-zh00/asyncfiles/issues)
|
|
57
|
+
|
|
58
|
+
**asyncfiles** is a high-performance async file I/O library for Python, built on top of [libuv](https://libuv.org/) using Cython. It provides true asynchronous file operations without blocking the event loop, offering significant performance improvements over thread-based alternatives.
|
|
59
|
+
|
|
60
|
+
## 🚀 Features
|
|
61
|
+
|
|
62
|
+
- **True Async I/O**: Built directly on libuv's async filesystem operations
|
|
63
|
+
- **High Performance**: Cython-optimized with zero-copy buffer operations
|
|
64
|
+
- **Non-blocking**: No thread pools - pure async I/O all the way down
|
|
65
|
+
- **Simple API**: Familiar async context manager interface
|
|
66
|
+
- **Type Hints**: Full typing support for better IDE integration
|
|
67
|
+
- **Memory Efficient**: Configurable buffer sizes for optimal memory usage
|
|
68
|
+
|
|
69
|
+
## 📦 Installation
|
|
70
|
+
|
|
71
|
+
### From PyPI
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
pip3 install py-asyncfiles
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Requirements
|
|
78
|
+
|
|
79
|
+
- Python 3.8 or higher
|
|
80
|
+
- Cython ~3.0
|
|
81
|
+
- A C compiler (gcc, clang, or MSVC)
|
|
82
|
+
- libuv (included as submodule)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
## 🔥 Quick Start
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
import asyncio
|
|
89
|
+
from asyncfiles import open
|
|
90
|
+
|
|
91
|
+
async def main():
|
|
92
|
+
# Read a file
|
|
93
|
+
async with open('example.txt', 'r') as f:
|
|
94
|
+
content = await f.read()
|
|
95
|
+
print(content)
|
|
96
|
+
|
|
97
|
+
# Write to a file
|
|
98
|
+
async with open('output.txt', 'w') as f:
|
|
99
|
+
await f.write('Hello, async world!')
|
|
100
|
+
|
|
101
|
+
asyncio.run(main())
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## 📖 Usage Examples
|
|
105
|
+
|
|
106
|
+
### Reading Files
|
|
107
|
+
|
|
108
|
+
```python
|
|
109
|
+
import asyncio
|
|
110
|
+
from asyncfiles import open
|
|
111
|
+
|
|
112
|
+
async def read_file():
|
|
113
|
+
# Read entire file
|
|
114
|
+
async with open('data.txt', 'r') as f:
|
|
115
|
+
content = await f.read()
|
|
116
|
+
return content
|
|
117
|
+
|
|
118
|
+
asyncio.run(read_file())
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Writing Files
|
|
122
|
+
|
|
123
|
+
```python
|
|
124
|
+
import asyncio
|
|
125
|
+
from asyncfiles import open
|
|
126
|
+
|
|
127
|
+
async def write_file():
|
|
128
|
+
async with open('output.txt', 'w') as f:
|
|
129
|
+
await f.write('Line 1\n')
|
|
130
|
+
await f.write('Line 2\n')
|
|
131
|
+
await f.write('Line 3\n')
|
|
132
|
+
|
|
133
|
+
asyncio.run(write_file())
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Custom Buffer Size
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
import asyncio
|
|
140
|
+
from asyncfiles import open
|
|
141
|
+
|
|
142
|
+
async def large_file():
|
|
143
|
+
# Use 1MB buffer for large files
|
|
144
|
+
async with open('large_file.bin', 'r', buffer_size=1024*1024) as f:
|
|
145
|
+
data = await f.read()
|
|
146
|
+
return data
|
|
147
|
+
|
|
148
|
+
asyncio.run(large_file())
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Multiple Concurrent Operations
|
|
152
|
+
|
|
153
|
+
```python
|
|
154
|
+
import asyncio
|
|
155
|
+
from asyncfiles import open
|
|
156
|
+
|
|
157
|
+
async def process_files():
|
|
158
|
+
# Read multiple files concurrently
|
|
159
|
+
async def read_file(path):
|
|
160
|
+
async with open(path, 'r') as f:
|
|
161
|
+
return await f.read()
|
|
162
|
+
|
|
163
|
+
results = await asyncio.gather(
|
|
164
|
+
read_file('file1.txt'),
|
|
165
|
+
read_file('file2.txt'),
|
|
166
|
+
read_file('file3.txt'),
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
return results
|
|
170
|
+
|
|
171
|
+
asyncio.run(process_files())
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## 🎯 Supported File Modes
|
|
175
|
+
|
|
176
|
+
| Mode | Description |
|
|
177
|
+
|------|-------------|
|
|
178
|
+
| `'r'` | Read text (default) |
|
|
179
|
+
| `'w'` | Write text (truncate) |
|
|
180
|
+
| `'a'` | Append text |
|
|
181
|
+
| `'x'` | Exclusive creation |
|
|
182
|
+
| `'r+'` | Read and write |
|
|
183
|
+
| `'w+'` | Write and read (truncate) |
|
|
184
|
+
| `'a+'` | Append and read |
|
|
185
|
+
|
|
186
|
+
Additional modifiers:
|
|
187
|
+
- `'b'`: Binary mode
|
|
188
|
+
- `'t'`: Text mode (default)
|
|
189
|
+
|
|
190
|
+
## ⚡ Performance
|
|
191
|
+
|
|
192
|
+
asyncfiles significantly outperforms thread-based async file libraries:
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
Benchmark Results (10MB file):
|
|
196
|
+
├── asyncfiles: 45.2 ms ← 🏆 Fastest
|
|
197
|
+
├── aiofile: 78.4 ms
|
|
198
|
+
├── aiofiles: 112.6 ms
|
|
199
|
+
└── stdlib+thread: 156.3 ms
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Run benchmarks yourself:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
python -m benchmark.benchmark_read
|
|
206
|
+
python -m benchmark.benchmark_write
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
## 🛠️ Development
|
|
211
|
+
|
|
212
|
+
### Building from Source
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
# Clean build
|
|
216
|
+
make clean
|
|
217
|
+
|
|
218
|
+
# Compile with optimizations
|
|
219
|
+
make compile
|
|
220
|
+
|
|
221
|
+
# Debug build with line tracing
|
|
222
|
+
make debug
|
|
223
|
+
|
|
224
|
+
# Run tests
|
|
225
|
+
make test
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Running Tests
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
# Run all tests
|
|
232
|
+
make test
|
|
233
|
+
|
|
234
|
+
# Run with async debug mode
|
|
235
|
+
PYTHONASYNCIODEBUG=1 python -m unittest discover -v tests
|
|
236
|
+
|
|
237
|
+
# Test installed package
|
|
238
|
+
make testinstalled
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Code Style
|
|
242
|
+
|
|
243
|
+
- Follow PEP 8 for Python code
|
|
244
|
+
- Use type hints where applicable
|
|
245
|
+
- Add docstrings for public APIs
|
|
246
|
+
- Keep Cython code clean and well-commented
|
|
247
|
+
|
|
248
|
+
## 📄 License
|
|
249
|
+
|
|
250
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
251
|
+
|
|
252
|
+
## 🙏 Acknowledgments
|
|
253
|
+
|
|
254
|
+
This project is heavily inspired by [uvloop](https://github.com/MagicStack/uvloop), which pioneered the use of libuv in Python's async ecosystem. The build system, Cython integration patterns, and overall architecture follow uvloop's excellent design.
|
|
255
|
+
|
|
256
|
+
Special thanks to:
|
|
257
|
+
- **uvloop** team for showing how to properly integrate libuv with Python
|
|
258
|
+
- **libuv** project for the excellent async I/O library
|
|
259
|
+
- **Cython** team for making high-performance Python extensions possible
|
|
260
|
+
|
|
261
|
+
## 🔗 Related Projects
|
|
262
|
+
|
|
263
|
+
- [uvloop](https://github.com/MagicStack/uvloop) - Ultra fast asyncio event loop
|
|
264
|
+
- [aiofiles](https://github.com/Tinche/aiofiles) - Thread-based async file I/O
|
|
265
|
+
- [aiofile](https://github.com/mosquito/aiofile) - Another async file library
|
|
266
|
+
- [libuv](https://github.com/libuv/libuv) - Cross-platform async I/O
|
|
267
|
+
|
|
268
|
+
## 📊 Status
|
|
269
|
+
|
|
270
|
+
**Current Status**: Experimental / In Development
|
|
271
|
+
|
|
272
|
+
This project is currently in active development. The API may change. Production use is not recommended yet.
|
|
273
|
+
|
|
274
|
+
### Roadmap
|
|
275
|
+
- [ ] Iteration support
|
|
276
|
+
- [X] Comprehensive test suite
|
|
277
|
+
- [ ] Complete documentation
|
|
278
|
+
- [x] Binary mode support
|
|
279
|
+
- [x] Seek/tell operations
|
|
280
|
+
- [ ] File metadata operations
|
|
281
|
+
- [ ] PyPI package release
|
|
282
|
+
- [ ] CI/CD pipeline
|
|
283
|
+
- [ ] Performance optimizations
|
|
284
|
+
- [ ] More comprehensive benchmarks
|
|
285
|
+
|
|
286
|
+
## 💬 Support
|
|
287
|
+
|
|
288
|
+
- **Issues**: [GitHub Issues](https://github.com/cve-zh00/asyncfiles/issues)
|
|
289
|
+
|
|
290
|
+
## 📈 Benchmarks
|
|
291
|
+
|
|
292
|
+
For detailed benchmark results and methodology, see [benchmark/README.md](benchmark/README.md).
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
**Made with ❤️ and ⚡ by Zh00**
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# asyncfiles
|
|
2
|
+
|
|
3
|
+
[](https://www.python.org/downloads/)
|
|
4
|
+
[](LICENSE)
|
|
5
|
+
[](https://github.com/cve-zh00/asyncfiles/issues)
|
|
6
|
+
|
|
7
|
+
**asyncfiles** is a high-performance async file I/O library for Python, built on top of [libuv](https://libuv.org/) using Cython. It provides true asynchronous file operations without blocking the event loop, offering significant performance improvements over thread-based alternatives.
|
|
8
|
+
|
|
9
|
+
## 🚀 Features
|
|
10
|
+
|
|
11
|
+
- **True Async I/O**: Built directly on libuv's async filesystem operations
|
|
12
|
+
- **High Performance**: Cython-optimized with zero-copy buffer operations
|
|
13
|
+
- **Non-blocking**: No thread pools - pure async I/O all the way down
|
|
14
|
+
- **Simple API**: Familiar async context manager interface
|
|
15
|
+
- **Type Hints**: Full typing support for better IDE integration
|
|
16
|
+
- **Memory Efficient**: Configurable buffer sizes for optimal memory usage
|
|
17
|
+
|
|
18
|
+
## 📦 Installation
|
|
19
|
+
|
|
20
|
+
### From PyPI
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pip3 install py-asyncfiles
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Requirements
|
|
27
|
+
|
|
28
|
+
- Python 3.8 or higher
|
|
29
|
+
- Cython ~3.0
|
|
30
|
+
- A C compiler (gcc, clang, or MSVC)
|
|
31
|
+
- libuv (included as submodule)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
## 🔥 Quick Start
|
|
35
|
+
|
|
36
|
+
```python
|
|
37
|
+
import asyncio
|
|
38
|
+
from asyncfiles import open
|
|
39
|
+
|
|
40
|
+
async def main():
|
|
41
|
+
# Read a file
|
|
42
|
+
async with open('example.txt', 'r') as f:
|
|
43
|
+
content = await f.read()
|
|
44
|
+
print(content)
|
|
45
|
+
|
|
46
|
+
# Write to a file
|
|
47
|
+
async with open('output.txt', 'w') as f:
|
|
48
|
+
await f.write('Hello, async world!')
|
|
49
|
+
|
|
50
|
+
asyncio.run(main())
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 📖 Usage Examples
|
|
54
|
+
|
|
55
|
+
### Reading Files
|
|
56
|
+
|
|
57
|
+
```python
|
|
58
|
+
import asyncio
|
|
59
|
+
from asyncfiles import open
|
|
60
|
+
|
|
61
|
+
async def read_file():
|
|
62
|
+
# Read entire file
|
|
63
|
+
async with open('data.txt', 'r') as f:
|
|
64
|
+
content = await f.read()
|
|
65
|
+
return content
|
|
66
|
+
|
|
67
|
+
asyncio.run(read_file())
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Writing Files
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
import asyncio
|
|
74
|
+
from asyncfiles import open
|
|
75
|
+
|
|
76
|
+
async def write_file():
|
|
77
|
+
async with open('output.txt', 'w') as f:
|
|
78
|
+
await f.write('Line 1\n')
|
|
79
|
+
await f.write('Line 2\n')
|
|
80
|
+
await f.write('Line 3\n')
|
|
81
|
+
|
|
82
|
+
asyncio.run(write_file())
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Custom Buffer Size
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
import asyncio
|
|
89
|
+
from asyncfiles import open
|
|
90
|
+
|
|
91
|
+
async def large_file():
|
|
92
|
+
# Use 1MB buffer for large files
|
|
93
|
+
async with open('large_file.bin', 'r', buffer_size=1024*1024) as f:
|
|
94
|
+
data = await f.read()
|
|
95
|
+
return data
|
|
96
|
+
|
|
97
|
+
asyncio.run(large_file())
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Multiple Concurrent Operations
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
import asyncio
|
|
104
|
+
from asyncfiles import open
|
|
105
|
+
|
|
106
|
+
async def process_files():
|
|
107
|
+
# Read multiple files concurrently
|
|
108
|
+
async def read_file(path):
|
|
109
|
+
async with open(path, 'r') as f:
|
|
110
|
+
return await f.read()
|
|
111
|
+
|
|
112
|
+
results = await asyncio.gather(
|
|
113
|
+
read_file('file1.txt'),
|
|
114
|
+
read_file('file2.txt'),
|
|
115
|
+
read_file('file3.txt'),
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
return results
|
|
119
|
+
|
|
120
|
+
asyncio.run(process_files())
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## 🎯 Supported File Modes
|
|
124
|
+
|
|
125
|
+
| Mode | Description |
|
|
126
|
+
|------|-------------|
|
|
127
|
+
| `'r'` | Read text (default) |
|
|
128
|
+
| `'w'` | Write text (truncate) |
|
|
129
|
+
| `'a'` | Append text |
|
|
130
|
+
| `'x'` | Exclusive creation |
|
|
131
|
+
| `'r+'` | Read and write |
|
|
132
|
+
| `'w+'` | Write and read (truncate) |
|
|
133
|
+
| `'a+'` | Append and read |
|
|
134
|
+
|
|
135
|
+
Additional modifiers:
|
|
136
|
+
- `'b'`: Binary mode
|
|
137
|
+
- `'t'`: Text mode (default)
|
|
138
|
+
|
|
139
|
+
## ⚡ Performance
|
|
140
|
+
|
|
141
|
+
asyncfiles significantly outperforms thread-based async file libraries:
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
Benchmark Results (10MB file):
|
|
145
|
+
├── asyncfiles: 45.2 ms ← 🏆 Fastest
|
|
146
|
+
├── aiofile: 78.4 ms
|
|
147
|
+
├── aiofiles: 112.6 ms
|
|
148
|
+
└── stdlib+thread: 156.3 ms
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Run benchmarks yourself:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
python -m benchmark.benchmark_read
|
|
155
|
+
python -m benchmark.benchmark_write
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
## 🛠️ Development
|
|
160
|
+
|
|
161
|
+
### Building from Source
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
# Clean build
|
|
165
|
+
make clean
|
|
166
|
+
|
|
167
|
+
# Compile with optimizations
|
|
168
|
+
make compile
|
|
169
|
+
|
|
170
|
+
# Debug build with line tracing
|
|
171
|
+
make debug
|
|
172
|
+
|
|
173
|
+
# Run tests
|
|
174
|
+
make test
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Running Tests
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# Run all tests
|
|
181
|
+
make test
|
|
182
|
+
|
|
183
|
+
# Run with async debug mode
|
|
184
|
+
PYTHONASYNCIODEBUG=1 python -m unittest discover -v tests
|
|
185
|
+
|
|
186
|
+
# Test installed package
|
|
187
|
+
make testinstalled
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Code Style
|
|
191
|
+
|
|
192
|
+
- Follow PEP 8 for Python code
|
|
193
|
+
- Use type hints where applicable
|
|
194
|
+
- Add docstrings for public APIs
|
|
195
|
+
- Keep Cython code clean and well-commented
|
|
196
|
+
|
|
197
|
+
## 📄 License
|
|
198
|
+
|
|
199
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
200
|
+
|
|
201
|
+
## 🙏 Acknowledgments
|
|
202
|
+
|
|
203
|
+
This project is heavily inspired by [uvloop](https://github.com/MagicStack/uvloop), which pioneered the use of libuv in Python's async ecosystem. The build system, Cython integration patterns, and overall architecture follow uvloop's excellent design.
|
|
204
|
+
|
|
205
|
+
Special thanks to:
|
|
206
|
+
- **uvloop** team for showing how to properly integrate libuv with Python
|
|
207
|
+
- **libuv** project for the excellent async I/O library
|
|
208
|
+
- **Cython** team for making high-performance Python extensions possible
|
|
209
|
+
|
|
210
|
+
## 🔗 Related Projects
|
|
211
|
+
|
|
212
|
+
- [uvloop](https://github.com/MagicStack/uvloop) - Ultra fast asyncio event loop
|
|
213
|
+
- [aiofiles](https://github.com/Tinche/aiofiles) - Thread-based async file I/O
|
|
214
|
+
- [aiofile](https://github.com/mosquito/aiofile) - Another async file library
|
|
215
|
+
- [libuv](https://github.com/libuv/libuv) - Cross-platform async I/O
|
|
216
|
+
|
|
217
|
+
## 📊 Status
|
|
218
|
+
|
|
219
|
+
**Current Status**: Experimental / In Development
|
|
220
|
+
|
|
221
|
+
This project is currently in active development. The API may change. Production use is not recommended yet.
|
|
222
|
+
|
|
223
|
+
### Roadmap
|
|
224
|
+
- [ ] Iteration support
|
|
225
|
+
- [X] Comprehensive test suite
|
|
226
|
+
- [ ] Complete documentation
|
|
227
|
+
- [x] Binary mode support
|
|
228
|
+
- [x] Seek/tell operations
|
|
229
|
+
- [ ] File metadata operations
|
|
230
|
+
- [ ] PyPI package release
|
|
231
|
+
- [ ] CI/CD pipeline
|
|
232
|
+
- [ ] Performance optimizations
|
|
233
|
+
- [ ] More comprehensive benchmarks
|
|
234
|
+
|
|
235
|
+
## 💬 Support
|
|
236
|
+
|
|
237
|
+
- **Issues**: [GitHub Issues](https://github.com/cve-zh00/asyncfiles/issues)
|
|
238
|
+
|
|
239
|
+
## 📈 Benchmarks
|
|
240
|
+
|
|
241
|
+
For detailed benchmark results and methodology, see [benchmark/README.md](benchmark/README.md).
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
**Made with ❤️ and ⚡ by Zh00**
|