@vicoa/cli 1.7.8-win32-x64 → 1.7.8

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.
Files changed (313) hide show
  1. package/README.md +82 -0
  2. package/bin/vicoa.js +38 -0
  3. package/package.json +30 -10
  4. package/bin/_internal/VCRUNTIME140.dll +0 -0
  5. package/bin/_internal/VCRUNTIME140_1.dll +0 -0
  6. package/bin/_internal/_asyncio.pyd +0 -0
  7. package/bin/_internal/_bz2.pyd +0 -0
  8. package/bin/_internal/_cffi_backend.cp312-win_amd64.pyd +0 -0
  9. package/bin/_internal/_ctypes.pyd +0 -0
  10. package/bin/_internal/_decimal.pyd +0 -0
  11. package/bin/_internal/_hashlib.pyd +0 -0
  12. package/bin/_internal/_lzma.pyd +0 -0
  13. package/bin/_internal/_multiprocessing.pyd +0 -0
  14. package/bin/_internal/_overlapped.pyd +0 -0
  15. package/bin/_internal/_queue.pyd +0 -0
  16. package/bin/_internal/_socket.pyd +0 -0
  17. package/bin/_internal/_sqlite3.pyd +0 -0
  18. package/bin/_internal/_ssl.pyd +0 -0
  19. package/bin/_internal/_uuid.pyd +0 -0
  20. package/bin/_internal/_wmi.pyd +0 -0
  21. package/bin/_internal/_zoneinfo.pyd +0 -0
  22. package/bin/_internal/ada92cb5d92a588d1b93__mypyc.cp312-win_amd64.pyd +0 -0
  23. package/bin/_internal/aiofile-3.12.3.dist-info/INSTALLER +0 -1
  24. package/bin/_internal/aiofile-3.12.3.dist-info/METADATA +0 -564
  25. package/bin/_internal/aiofile-3.12.3.dist-info/RECORD +0 -15
  26. package/bin/_internal/aiofile-3.12.3.dist-info/WHEEL +0 -4
  27. package/bin/_internal/aiofile-3.12.3.dist-info/licenses/LICENCE +0 -195
  28. package/bin/_internal/aiofile-3.12.3.dist-info/licenses/LICENCE.md +0 -195
  29. package/bin/_internal/aiohttp/_http_parser.cp312-win_amd64.pyd +0 -0
  30. package/bin/_internal/aiohttp/_http_writer.cp312-win_amd64.pyd +0 -0
  31. package/bin/_internal/aiohttp/_websocket/mask.cp312-win_amd64.pyd +0 -0
  32. package/bin/_internal/aiohttp/_websocket/reader_c.cp312-win_amd64.pyd +0 -0
  33. package/bin/_internal/api-ms-win-core-console-l1-1-0.dll +0 -0
  34. package/bin/_internal/api-ms-win-core-datetime-l1-1-0.dll +0 -0
  35. package/bin/_internal/api-ms-win-core-debug-l1-1-0.dll +0 -0
  36. package/bin/_internal/api-ms-win-core-errorhandling-l1-1-0.dll +0 -0
  37. package/bin/_internal/api-ms-win-core-fibers-l1-1-0.dll +0 -0
  38. package/bin/_internal/api-ms-win-core-fibers-l1-1-1.dll +0 -0
  39. package/bin/_internal/api-ms-win-core-file-l1-1-0.dll +0 -0
  40. package/bin/_internal/api-ms-win-core-file-l1-2-0.dll +0 -0
  41. package/bin/_internal/api-ms-win-core-file-l2-1-0.dll +0 -0
  42. package/bin/_internal/api-ms-win-core-handle-l1-1-0.dll +0 -0
  43. package/bin/_internal/api-ms-win-core-heap-l1-1-0.dll +0 -0
  44. package/bin/_internal/api-ms-win-core-interlocked-l1-1-0.dll +0 -0
  45. package/bin/_internal/api-ms-win-core-kernel32-legacy-l1-1-1.dll +0 -0
  46. package/bin/_internal/api-ms-win-core-libraryloader-l1-1-0.dll +0 -0
  47. package/bin/_internal/api-ms-win-core-localization-l1-2-0.dll +0 -0
  48. package/bin/_internal/api-ms-win-core-memory-l1-1-0.dll +0 -0
  49. package/bin/_internal/api-ms-win-core-namedpipe-l1-1-0.dll +0 -0
  50. package/bin/_internal/api-ms-win-core-processenvironment-l1-1-0.dll +0 -0
  51. package/bin/_internal/api-ms-win-core-processthreads-l1-1-0.dll +0 -0
  52. package/bin/_internal/api-ms-win-core-processthreads-l1-1-1.dll +0 -0
  53. package/bin/_internal/api-ms-win-core-profile-l1-1-0.dll +0 -0
  54. package/bin/_internal/api-ms-win-core-rtlsupport-l1-1-0.dll +0 -0
  55. package/bin/_internal/api-ms-win-core-string-l1-1-0.dll +0 -0
  56. package/bin/_internal/api-ms-win-core-synch-l1-1-0.dll +0 -0
  57. package/bin/_internal/api-ms-win-core-synch-l1-2-0.dll +0 -0
  58. package/bin/_internal/api-ms-win-core-sysinfo-l1-1-0.dll +0 -0
  59. package/bin/_internal/api-ms-win-core-sysinfo-l1-2-0.dll +0 -0
  60. package/bin/_internal/api-ms-win-core-timezone-l1-1-0.dll +0 -0
  61. package/bin/_internal/api-ms-win-core-util-l1-1-0.dll +0 -0
  62. package/bin/_internal/api-ms-win-crt-conio-l1-1-0.dll +0 -0
  63. package/bin/_internal/api-ms-win-crt-convert-l1-1-0.dll +0 -0
  64. package/bin/_internal/api-ms-win-crt-environment-l1-1-0.dll +0 -0
  65. package/bin/_internal/api-ms-win-crt-filesystem-l1-1-0.dll +0 -0
  66. package/bin/_internal/api-ms-win-crt-heap-l1-1-0.dll +0 -0
  67. package/bin/_internal/api-ms-win-crt-locale-l1-1-0.dll +0 -0
  68. package/bin/_internal/api-ms-win-crt-math-l1-1-0.dll +0 -0
  69. package/bin/_internal/api-ms-win-crt-process-l1-1-0.dll +0 -0
  70. package/bin/_internal/api-ms-win-crt-runtime-l1-1-0.dll +0 -0
  71. package/bin/_internal/api-ms-win-crt-stdio-l1-1-0.dll +0 -0
  72. package/bin/_internal/api-ms-win-crt-string-l1-1-0.dll +0 -0
  73. package/bin/_internal/api-ms-win-crt-time-l1-1-0.dll +0 -0
  74. package/bin/_internal/api-ms-win-crt-utility-l1-1-0.dll +0 -0
  75. package/bin/_internal/attrs-26.1.0.dist-info/INSTALLER +0 -1
  76. package/bin/_internal/attrs-26.1.0.dist-info/METADATA +0 -199
  77. package/bin/_internal/attrs-26.1.0.dist-info/RECORD +0 -55
  78. package/bin/_internal/attrs-26.1.0.dist-info/WHEEL +0 -4
  79. package/bin/_internal/attrs-26.1.0.dist-info/licenses/LICENSE +0 -21
  80. package/bin/_internal/base_library.zip +0 -0
  81. package/bin/_internal/certifi/cacert.pem +0 -3959
  82. package/bin/_internal/certifi/py.typed +0 -0
  83. package/bin/_internal/charset_normalizer/cd.cp312-win_amd64.pyd +0 -0
  84. package/bin/_internal/charset_normalizer/md.cp312-win_amd64.pyd +0 -0
  85. package/bin/_internal/click-8.4.2.dist-info/INSTALLER +0 -1
  86. package/bin/_internal/click-8.4.2.dist-info/METADATA +0 -84
  87. package/bin/_internal/click-8.4.2.dist-info/RECORD +0 -40
  88. package/bin/_internal/click-8.4.2.dist-info/WHEEL +0 -4
  89. package/bin/_internal/click-8.4.2.dist-info/licenses/LICENSE.txt +0 -28
  90. package/bin/_internal/cryptography/hazmat/bindings/_rust.pyd +0 -0
  91. package/bin/_internal/cryptography-50.0.0.dist-info/INSTALLER +0 -1
  92. package/bin/_internal/cryptography-50.0.0.dist-info/METADATA +0 -110
  93. package/bin/_internal/cryptography-50.0.0.dist-info/RECORD +0 -199
  94. package/bin/_internal/cryptography-50.0.0.dist-info/WHEEL +0 -4
  95. package/bin/_internal/cryptography-50.0.0.dist-info/licenses/LICENSE +0 -3
  96. package/bin/_internal/cryptography-50.0.0.dist-info/licenses/LICENSE.APACHE +0 -202
  97. package/bin/_internal/cryptography-50.0.0.dist-info/licenses/LICENSE.BSD +0 -27
  98. package/bin/_internal/cryptography-50.0.0.dist-info/sboms/cryptography-rust.cyclonedx.json +0 -1365
  99. package/bin/_internal/cryptography-50.0.0.dist-info/sboms/sbom.json +0 -43
  100. package/bin/_internal/email_validator-2.3.0.dist-info/INSTALLER +0 -1
  101. package/bin/_internal/email_validator-2.3.0.dist-info/METADATA +0 -466
  102. package/bin/_internal/email_validator-2.3.0.dist-info/RECORD +0 -27
  103. package/bin/_internal/email_validator-2.3.0.dist-info/WHEEL +0 -5
  104. package/bin/_internal/email_validator-2.3.0.dist-info/entry_points.txt +0 -2
  105. package/bin/_internal/email_validator-2.3.0.dist-info/licenses/LICENSE +0 -27
  106. package/bin/_internal/email_validator-2.3.0.dist-info/top_level.txt +0 -1
  107. package/bin/_internal/fastmcp-3.4.6.dist-info/INSTALLER +0 -1
  108. package/bin/_internal/fastmcp-3.4.6.dist-info/METADATA +0 -160
  109. package/bin/_internal/fastmcp-3.4.6.dist-info/RECORD +0 -5
  110. package/bin/_internal/fastmcp-3.4.6.dist-info/WHEEL +0 -4
  111. package/bin/_internal/fastmcp-3.4.6.dist-info/licenses/LICENSE +0 -201
  112. package/bin/_internal/frozenlist/_frozenlist.cp312-win_amd64.pyd +0 -0
  113. package/bin/_internal/integrations/cli_wrappers/IMPORTANT_USE_CASES.md +0 -33
  114. package/bin/_internal/integrations/github/claude-code-action/CLAUDE.md +0 -136
  115. package/bin/_internal/integrations/github/claude-code-action/CODE_OF_CONDUCT.md +0 -128
  116. package/bin/_internal/integrations/github/claude-code-action/CONTRIBUTING.md +0 -116
  117. package/bin/_internal/integrations/github/claude-code-action/LICENSE +0 -21
  118. package/bin/_internal/integrations/github/claude-code-action/README.md +0 -53
  119. package/bin/_internal/integrations/github/claude-code-action/ROADMAP.md +0 -20
  120. package/bin/_internal/integrations/github/claude-code-action/SECURITY.md +0 -15
  121. package/bin/_internal/integrations/github/claude-code-action/action.yml +0 -294
  122. package/bin/_internal/integrations/github/claude-code-action/base-action/CLAUDE.md +0 -60
  123. package/bin/_internal/integrations/github/claude-code-action/base-action/CODE_OF_CONDUCT.md +0 -128
  124. package/bin/_internal/integrations/github/claude-code-action/base-action/CONTRIBUTING.md +0 -136
  125. package/bin/_internal/integrations/github/claude-code-action/base-action/LICENSE +0 -21
  126. package/bin/_internal/integrations/github/claude-code-action/base-action/MIRROR_DISCLAIMER.md +0 -11
  127. package/bin/_internal/integrations/github/claude-code-action/base-action/README.md +0 -521
  128. package/bin/_internal/integrations/github/claude-code-action/base-action/action.yml +0 -149
  129. package/bin/_internal/integrations/github/claude-code-action/base-action/bun.lock +0 -54
  130. package/bin/_internal/integrations/github/claude-code-action/base-action/examples/issue-triage.yml +0 -108
  131. package/bin/_internal/integrations/github/claude-code-action/base-action/package.json +0 -23
  132. package/bin/_internal/integrations/github/claude-code-action/base-action/scripts/install-hooks.sh +0 -13
  133. package/bin/_internal/integrations/github/claude-code-action/base-action/scripts/pre-push +0 -46
  134. package/bin/_internal/integrations/github/claude-code-action/base-action/src/index.ts +0 -82
  135. package/bin/_internal/integrations/github/claude-code-action/base-action/src/prepare-prompt.ts +0 -82
  136. package/bin/_internal/integrations/github/claude-code-action/base-action/src/run-claude.ts +0 -257
  137. package/bin/_internal/integrations/github/claude-code-action/base-action/src/run-vicoa.ts +0 -301
  138. package/bin/_internal/integrations/github/claude-code-action/base-action/src/setup-claude-code-settings.ts +0 -68
  139. package/bin/_internal/integrations/github/claude-code-action/base-action/src/validate-env.ts +0 -54
  140. package/bin/_internal/integrations/github/claude-code-action/base-action/test-local.sh +0 -12
  141. package/bin/_internal/integrations/github/claude-code-action/base-action/test-mcp-local.sh +0 -18
  142. package/bin/_internal/integrations/github/claude-code-action/base-action/tsconfig.json +0 -30
  143. package/bin/_internal/integrations/github/claude-code-action/bun.lock +0 -384
  144. package/bin/_internal/integrations/github/claude-code-action/docs/capabilities-and-limitations.md +0 -33
  145. package/bin/_internal/integrations/github/claude-code-action/docs/cloud-providers.md +0 -99
  146. package/bin/_internal/integrations/github/claude-code-action/docs/configuration.md +0 -345
  147. package/bin/_internal/integrations/github/claude-code-action/docs/custom-automations.md +0 -113
  148. package/bin/_internal/integrations/github/claude-code-action/docs/experimental.md +0 -128
  149. package/bin/_internal/integrations/github/claude-code-action/docs/faq.md +0 -205
  150. package/bin/_internal/integrations/github/claude-code-action/docs/migration-guide.md +0 -261
  151. package/bin/_internal/integrations/github/claude-code-action/docs/security.md +0 -38
  152. package/bin/_internal/integrations/github/claude-code-action/docs/setup.md +0 -146
  153. package/bin/_internal/integrations/github/claude-code-action/docs/usage.md +0 -213
  154. package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci/auto-fix-ci.yml +0 -97
  155. package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci/commands/fix-ci.md +0 -127
  156. package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci-signed/auto-fix-ci-signed.yml +0 -97
  157. package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci-signed/commands/fix-ci-signed.md +0 -148
  158. package/bin/_internal/integrations/github/claude-code-action/examples/issue-deduplication.yml +0 -63
  159. package/bin/_internal/integrations/github/claude-code-action/examples/issue-triage.yml +0 -75
  160. package/bin/_internal/integrations/github/claude-code-action/examples/vicoa.yml +0 -75
  161. package/bin/_internal/integrations/github/claude-code-action/package.json +0 -31
  162. package/bin/_internal/integrations/github/claude-code-action/scripts/install-hooks.sh +0 -13
  163. package/bin/_internal/integrations/github/claude-code-action/scripts/pre-commit +0 -46
  164. package/bin/_internal/integrations/github/claude-code-action/scripts/setup-network-restrictions.sh +0 -123
  165. package/bin/_internal/integrations/github/claude-code-action/src/create-prompt/index.ts +0 -799
  166. package/bin/_internal/integrations/github/claude-code-action/src/create-prompt/types.ts +0 -102
  167. package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/collect-inputs.ts +0 -58
  168. package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/format-turns.ts +0 -465
  169. package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/prepare.ts +0 -98
  170. package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/update-comment-link.ts +0 -245
  171. package/bin/_internal/integrations/github/claude-code-action/src/github/api/client.ts +0 -23
  172. package/bin/_internal/integrations/github/claude-code-action/src/github/api/config.ts +0 -4
  173. package/bin/_internal/integrations/github/claude-code-action/src/github/api/queries/github.ts +0 -117
  174. package/bin/_internal/integrations/github/claude-code-action/src/github/context.ts +0 -277
  175. package/bin/_internal/integrations/github/claude-code-action/src/github/data/fetcher.ts +0 -233
  176. package/bin/_internal/integrations/github/claude-code-action/src/github/data/formatter.ts +0 -144
  177. package/bin/_internal/integrations/github/claude-code-action/src/github/operations/branch-cleanup.ts +0 -132
  178. package/bin/_internal/integrations/github/claude-code-action/src/github/operations/branch.ts +0 -163
  179. package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comment-logic.ts +0 -203
  180. package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/common.ts +0 -33
  181. package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/create-initial.ts +0 -111
  182. package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/update-claude-comment.ts +0 -70
  183. package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/update-with-branch.ts +0 -57
  184. package/bin/_internal/integrations/github/claude-code-action/src/github/operations/git-config.ts +0 -62
  185. package/bin/_internal/integrations/github/claude-code-action/src/github/token.ts +0 -108
  186. package/bin/_internal/integrations/github/claude-code-action/src/github/types.ts +0 -98
  187. package/bin/_internal/integrations/github/claude-code-action/src/github/utils/image-downloader.ts +0 -246
  188. package/bin/_internal/integrations/github/claude-code-action/src/github/utils/sanitizer.ts +0 -100
  189. package/bin/_internal/integrations/github/claude-code-action/src/github/validation/actor.ts +0 -64
  190. package/bin/_internal/integrations/github/claude-code-action/src/github/validation/permissions.ts +0 -47
  191. package/bin/_internal/integrations/github/claude-code-action/src/github/validation/trigger.ts +0 -148
  192. package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-actions-server.ts +0 -279
  193. package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-comment-server.ts +0 -101
  194. package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-file-ops-server.ts +0 -677
  195. package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-inline-comment-server.ts +0 -184
  196. package/bin/_internal/integrations/github/claude-code-action/src/mcp/install-mcp-server.ts +0 -201
  197. package/bin/_internal/integrations/github/claude-code-action/src/modes/agent/index.ts +0 -152
  198. package/bin/_internal/integrations/github/claude-code-action/src/modes/agent/parse-tools.ts +0 -22
  199. package/bin/_internal/integrations/github/claude-code-action/src/modes/detector.ts +0 -66
  200. package/bin/_internal/integrations/github/claude-code-action/src/modes/registry.ts +0 -54
  201. package/bin/_internal/integrations/github/claude-code-action/src/modes/tag/index.ts +0 -187
  202. package/bin/_internal/integrations/github/claude-code-action/src/modes/types.ts +0 -100
  203. package/bin/_internal/integrations/github/claude-code-action/src/prepare/index.ts +0 -20
  204. package/bin/_internal/integrations/github/claude-code-action/src/prepare/types.ts +0 -20
  205. package/bin/_internal/integrations/github/claude-code-action/src/utils/retry.ts +0 -40
  206. package/bin/_internal/integrations/github/claude-code-action/tsconfig.json +0 -30
  207. package/bin/_internal/integrations/headless/tests/README.md +0 -58
  208. package/bin/_internal/integrations/n8n/LICENSE +0 -21
  209. package/bin/_internal/integrations/n8n/README.md +0 -298
  210. package/bin/_internal/integrations/n8n/package-lock.json +0 -2989
  211. package/bin/_internal/integrations/n8n/package.json +0 -68
  212. package/bin/_internal/integrations/n8n/src/credentials/OmnaraApi.credentials.ts +0 -52
  213. package/bin/_internal/integrations/n8n/src/nodes/Omnara/Omnara.node.json +0 -35
  214. package/bin/_internal/integrations/n8n/src/nodes/Omnara/Omnara.node.ts +0 -304
  215. package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/message/index.ts +0 -37
  216. package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/message/send.operation.ts +0 -151
  217. package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/message/sendAndWait.operation.ts +0 -252
  218. package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/session/end.operation.ts +0 -56
  219. package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/session/index.ts +0 -29
  220. package/bin/_internal/integrations/n8n/src/nodes/Omnara/vicoa.png +0 -0
  221. package/bin/_internal/integrations/n8n/src/utils/GenericFunctions.ts +0 -93
  222. package/bin/_internal/integrations/n8n/src/utils/sendAndWait/configureWaitTillDate.ts +0 -42
  223. package/bin/_internal/integrations/n8n/src/utils/sendAndWait/descriptions.ts +0 -20
  224. package/bin/_internal/integrations/n8n/src/utils/sendAndWaitWebhook.ts +0 -72
  225. package/bin/_internal/integrations/n8n/tsconfig.json +0 -20
  226. package/bin/_internal/jiter/jiter.cp312-win_amd64.pyd +0 -0
  227. package/bin/_internal/jsonschema/benchmarks/issue232/issue.json +0 -2653
  228. package/bin/_internal/jsonschema-4.26.0.dist-info/INSTALLER +0 -1
  229. package/bin/_internal/jsonschema-4.26.0.dist-info/METADATA +0 -170
  230. package/bin/_internal/jsonschema-4.26.0.dist-info/RECORD +0 -82
  231. package/bin/_internal/jsonschema-4.26.0.dist-info/WHEEL +0 -4
  232. package/bin/_internal/jsonschema-4.26.0.dist-info/entry_points.txt +0 -2
  233. package/bin/_internal/jsonschema-4.26.0.dist-info/licenses/COPYING +0 -19
  234. package/bin/_internal/jsonschema_specifications/schemas/draft201909/metaschema.json +0 -42
  235. package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/applicator +0 -56
  236. package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/content +0 -17
  237. package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/core +0 -57
  238. package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/format +0 -14
  239. package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/meta-data +0 -37
  240. package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/validation +0 -98
  241. package/bin/_internal/jsonschema_specifications/schemas/draft202012/metaschema.json +0 -58
  242. package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/applicator +0 -48
  243. package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/content +0 -17
  244. package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/core +0 -51
  245. package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/format-annotation +0 -14
  246. package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/format-assertion +0 -14
  247. package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/meta-data +0 -37
  248. package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/unevaluated +0 -15
  249. package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/validation +0 -98
  250. package/bin/_internal/jsonschema_specifications/schemas/draft3/metaschema.json +0 -172
  251. package/bin/_internal/jsonschema_specifications/schemas/draft4/metaschema.json +0 -149
  252. package/bin/_internal/jsonschema_specifications/schemas/draft6/metaschema.json +0 -153
  253. package/bin/_internal/jsonschema_specifications/schemas/draft7/metaschema.json +0 -166
  254. package/bin/_internal/libcrypto-3.dll +0 -0
  255. package/bin/_internal/libffi-8.dll +0 -0
  256. package/bin/_internal/libssl-3.dll +0 -0
  257. package/bin/_internal/mcp-1.29.0.dist-info/INSTALLER +0 -1
  258. package/bin/_internal/mcp-1.29.0.dist-info/METADATA +0 -239
  259. package/bin/_internal/mcp-1.29.0.dist-info/RECORD +0 -228
  260. package/bin/_internal/mcp-1.29.0.dist-info/WHEEL +0 -4
  261. package/bin/_internal/mcp-1.29.0.dist-info/entry_points.txt +0 -2
  262. package/bin/_internal/mcp-1.29.0.dist-info/licenses/LICENSE +0 -21
  263. package/bin/_internal/multidict/_multidict.cp312-win_amd64.pyd +0 -0
  264. package/bin/_internal/opentelemetry_api-1.44.0.dist-info/INSTALLER +0 -1
  265. package/bin/_internal/opentelemetry_api-1.44.0.dist-info/METADATA +0 -43
  266. package/bin/_internal/opentelemetry_api-1.44.0.dist-info/RECORD +0 -78
  267. package/bin/_internal/opentelemetry_api-1.44.0.dist-info/WHEEL +0 -4
  268. package/bin/_internal/opentelemetry_api-1.44.0.dist-info/entry_points.txt +0 -15
  269. package/bin/_internal/opentelemetry_api-1.44.0.dist-info/licenses/LICENSE +0 -201
  270. package/bin/_internal/propcache/_helpers_c.cp312-win_amd64.pyd +0 -0
  271. package/bin/_internal/pydantic-2.13.4.dist-info/INSTALLER +0 -1
  272. package/bin/_internal/pydantic-2.13.4.dist-info/METADATA +0 -1294
  273. package/bin/_internal/pydantic-2.13.4.dist-info/RECORD +0 -217
  274. package/bin/_internal/pydantic-2.13.4.dist-info/WHEEL +0 -4
  275. package/bin/_internal/pydantic-2.13.4.dist-info/licenses/LICENSE +0 -21
  276. package/bin/_internal/pydantic_core/_pydantic_core.cp312-win_amd64.pyd +0 -0
  277. package/bin/_internal/pyexpat.pyd +0 -0
  278. package/bin/_internal/python3.dll +0 -0
  279. package/bin/_internal/python312.dll +0 -0
  280. package/bin/_internal/pywin32_system32/pythoncom312.dll +0 -0
  281. package/bin/_internal/pywin32_system32/pywintypes312.dll +0 -0
  282. package/bin/_internal/rpds/rpds.cp312-win_amd64.pyd +0 -0
  283. package/bin/_internal/select.pyd +0 -0
  284. package/bin/_internal/setuptools/_vendor/jaraco/text/Lorem ipsum.txt +0 -2
  285. package/bin/_internal/sqlite3.dll +0 -0
  286. package/bin/_internal/ucrtbase.dll +0 -0
  287. package/bin/_internal/unicodedata.pyd +0 -0
  288. package/bin/_internal/vicoa/_bin/README.md +0 -28
  289. package/bin/_internal/vicoa-1.7.8.dist-info/INSTALLER +0 -1
  290. package/bin/_internal/vicoa-1.7.8.dist-info/METADATA +0 -314
  291. package/bin/_internal/vicoa-1.7.8.dist-info/RECORD +0 -11
  292. package/bin/_internal/vicoa-1.7.8.dist-info/REQUESTED +0 -0
  293. package/bin/_internal/vicoa-1.7.8.dist-info/WHEEL +0 -5
  294. package/bin/_internal/vicoa-1.7.8.dist-info/direct_url.json +0 -1
  295. package/bin/_internal/vicoa-1.7.8.dist-info/entry_points.txt +0 -2
  296. package/bin/_internal/vicoa-1.7.8.dist-info/licenses/LICENSE +0 -201
  297. package/bin/_internal/vicoa-1.7.8.dist-info/top_level.txt +0 -4
  298. package/bin/_internal/watchfiles/_rust_notify.cp312-win_amd64.pyd +0 -0
  299. package/bin/_internal/websockets/speedups.cp312-win_amd64.pyd +0 -0
  300. package/bin/_internal/websockets-17.0.1.dist-info/INSTALLER +0 -1
  301. package/bin/_internal/websockets-17.0.1.dist-info/METADATA +0 -170
  302. package/bin/_internal/websockets-17.0.1.dist-info/RECORD +0 -116
  303. package/bin/_internal/websockets-17.0.1.dist-info/WHEEL +0 -5
  304. package/bin/_internal/websockets-17.0.1.dist-info/entry_points.txt +0 -2
  305. package/bin/_internal/websockets-17.0.1.dist-info/licenses/LICENSE +0 -24
  306. package/bin/_internal/websockets-17.0.1.dist-info/top_level.txt +0 -1
  307. package/bin/_internal/win32/_win32sysloader.pyd +0 -0
  308. package/bin/_internal/win32/win32api.pyd +0 -0
  309. package/bin/_internal/win32/win32evtlog.pyd +0 -0
  310. package/bin/_internal/win32/win32job.pyd +0 -0
  311. package/bin/_internal/yaml/_yaml.cp312-win_amd64.pyd +0 -0
  312. package/bin/_internal/yarl/_quoting_c.cp312-win_amd64.pyd +0 -0
  313. package/bin/vicoa.exe +0 -0
@@ -1,564 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: aiofile
3
- Version: 3.12.3
4
- Summary: Asynchronous file operations.
5
- Project-URL: Homepage, https://github.com/mosquito/aiofile
6
- Author-email: Dmitry Orlov <me@mosquito.su>
7
- License-Expression: Apache-2.0
8
- License-File: LICENCE
9
- License-File: LICENCE.md
10
- Keywords: aio,asyncio,fileio,io,python
11
- Classifier: Development Status :: 5 - Production/Stable
12
- Classifier: Environment :: Console
13
- Classifier: Intended Audience :: Developers
14
- Classifier: Intended Audience :: Education
15
- Classifier: Intended Audience :: End Users/Desktop
16
- Classifier: License :: OSI Approved :: Apache Software License
17
- Classifier: Natural Language :: English
18
- Classifier: Natural Language :: Russian
19
- Classifier: Operating System :: MacOS :: MacOS X
20
- Classifier: Operating System :: POSIX :: Linux
21
- Classifier: Programming Language :: Python
22
- Classifier: Programming Language :: Python :: 3 :: Only
23
- Classifier: Programming Language :: Python :: 3.11
24
- Classifier: Programming Language :: Python :: 3.12
25
- Classifier: Programming Language :: Python :: 3.13
26
- Classifier: Programming Language :: Python :: 3.14
27
- Classifier: Programming Language :: Python :: Implementation :: CPython
28
- Classifier: Topic :: Software Development :: Libraries
29
- Classifier: Topic :: System
30
- Classifier: Topic :: System :: Operating System
31
- Requires-Python: >=3.11
32
- Requires-Dist: caio~=0.12.0
33
- Description-Content-Type: text/markdown
34
-
35
- # AIOFile
36
-
37
- [![Github Actions](https://github.com/mosquito/aiofile/workflows/ci/badge.svg)](https://github.com/mosquito/aiofile/actions?query=workflow%3Aci) [![Latest Version](https://img.shields.io/pypi/v/aiofile.svg)](https://pypi.python.org/pypi/aiofile/) [![Python Versions](https://img.shields.io/pypi/pyversions/aiofile.svg)](https://pypi.python.org/pypi/aiofile/) [![License](https://img.shields.io/pypi/l/aiofile.svg)](https://pypi.python.org/pypi/aiofile/) [![Coverage Status](https://coveralls.io/repos/github/mosquito/aiofile/badge.svg?branch=master)](https://coveralls.io/github/mosquito/aiofile?branch=master)
38
-
39
- Real asynchronous file operations with asyncio support.
40
-
41
- ## Features
42
-
43
- * Since version 2.0.0, uses [caio](https://pypi.org/project/caio), which provides multiple
44
- async I/O backends:
45
- * **Linux io_uring** — the modern, high-performance Linux kernel AIO interface.
46
- * **Linux libaio** — the classic kernel AIO mechanism via [libaio](https://pagure.io/libaio).
47
- * **Thread-based (C)** — a [threadpool](https://github.com/mbrossard/threadpool/)-backed
48
- implementation for POSIX systems (macOS, Linux).
49
- * **Pure Python** — a thread-based fallback for any platform.
50
- * The best available backend is chosen automatically based on system compatibility.
51
- * `AIOFile` has no internal file pointer. Pass `offset` and `chunk_size` to each operation,
52
- or use the `Reader`/`Writer` helpers. For a file-like interface, use `async_open`.
53
-
54
- ## Limitations
55
-
56
- * The Linux native AIO and io_uring backends cannot open special files.
57
- Asynchronous operations against special filesystems such as `/proc/` or `/sys/` are not
58
- supported by the kernel — this is neither an aiofile nor a caio issue.
59
- In such cases, switch to a thread-based implementation
60
- (see the [Troubleshooting](#troubleshooting) section).
61
-
62
- ## Code examples
63
-
64
- All code examples require Python 3.11+.
65
-
66
- ### High-level API
67
-
68
- #### `async_open` helper
69
-
70
- This helper mimics Python's file-like objects, returning an object with
71
- equivalent asynchronous methods.
72
-
73
- Supported methods:
74
-
75
- * `async def read(length=-1)` — reads a chunk from the file; `-1` reads to the end.
76
- * `async def write(data)` — writes a chunk to the file.
77
- * `def seek(offset)` — sets the file pointer position.
78
- * `def tell()` — returns the current file pointer position.
79
- * `async def readline(size=-1, newline="\n")` — reads until a newline or EOF.
80
- Since version 3.7.0, `__aiter__` returns a `LineReader`.
81
- This method is suboptimal for small lines because it does not reuse the read buffer —
82
- prefer `LineReader` when reading line by line.
83
- * `def __aiter__() -> LineReader` — iterator over lines.
84
- * `def iter_chunked(chunk_size: int = 32768) -> Reader` — iterator over chunks.
85
- * `.file` — the underlying `AIOFile` object.
86
-
87
- Basic example:
88
-
89
- <!-- name: test_basic -->
90
- ```python
91
- import asyncio
92
- from pathlib import Path
93
- from tempfile import gettempdir
94
-
95
- from aiofile import async_open
96
-
97
- tmp_filename = Path(gettempdir()) / "hello.txt"
98
-
99
- async def main():
100
- async with async_open(tmp_filename, 'w+') as afp:
101
- await afp.write("Hello ")
102
- await afp.write("world")
103
- afp.seek(0)
104
-
105
- print(await afp.read())
106
-
107
- await afp.write("Hello from\nasync world")
108
- print(await afp.readline())
109
- print(await afp.readline())
110
-
111
- asyncio.run(main())
112
- ```
113
-
114
- Example without context manager:
115
-
116
- <!-- name: test_basic_without_context_manager -->
117
- ```python
118
- import asyncio
119
- import atexit
120
- import os
121
- from tempfile import mktemp
122
-
123
- from aiofile import async_open
124
-
125
-
126
- TMP_NAME = mktemp()
127
- atexit.register(os.unlink, TMP_NAME)
128
-
129
-
130
- async def main():
131
- afp = await async_open(TMP_NAME, "w")
132
- await afp.write("Hello")
133
- await afp.close()
134
-
135
-
136
- asyncio.run(main())
137
- assert open(TMP_NAME, "r").read() == "Hello"
138
- ```
139
-
140
- Concatenate example program (`cat`):
141
-
142
- ```python
143
- import asyncio
144
- import sys
145
- from argparse import ArgumentParser
146
- from pathlib import Path
147
-
148
- from aiofile import async_open
149
-
150
- parser = ArgumentParser(
151
- description="Read files line by line using asynchronous io API"
152
- )
153
- parser.add_argument("file_name", nargs="+", type=Path)
154
-
155
- async def main(arguments):
156
- for src in arguments.file_name:
157
- async with async_open(src, "r") as afp:
158
- async for line in afp:
159
- sys.stdout.write(line)
160
-
161
-
162
- asyncio.run(main(parser.parse_args()))
163
- ```
164
-
165
- Copy file example program (`cp`):
166
-
167
- ```python
168
- import asyncio
169
- from argparse import ArgumentParser
170
- from pathlib import Path
171
-
172
- from aiofile import async_open
173
-
174
- parser = ArgumentParser(
175
- description="Copying files using asynchronous io API"
176
- )
177
- parser.add_argument("source", type=Path)
178
- parser.add_argument("dest", type=Path)
179
- parser.add_argument("--chunk-size", type=int, default=65535)
180
-
181
-
182
- async def main(arguments):
183
- async with async_open(arguments.source, "rb") as src, \
184
- async_open(arguments.dest, "wb") as dest:
185
- async for chunk in src.iter_chunked(arguments.chunk_size):
186
- await dest.write(chunk)
187
-
188
-
189
- asyncio.run(main(parser.parse_args()))
190
- ```
191
-
192
- Example with opening an already-open file pointer:
193
-
194
- ```python
195
- import asyncio
196
- from typing import IO, Any
197
- from aiofile import async_open
198
-
199
-
200
- async def main(fp: IO[Any]):
201
- async with async_open(fp) as afp:
202
- await afp.write("Hello from\nasync world")
203
- print(await afp.readline())
204
-
205
-
206
- with open("test.txt", "w+") as fp:
207
- asyncio.run(main(fp))
208
- ```
209
-
210
- Linux native AIO and io_uring do not support reading or writing special files
211
- (procfs, sysfs, Unix pipes, etc.), so operations on these files require
212
- a compatible context object.
213
-
214
- ```python
215
- import asyncio
216
- from aiofile import async_open
217
- from caio import thread_aio_asyncio
218
- from contextlib import AsyncExitStack
219
-
220
-
221
- async def main():
222
- async with AsyncExitStack() as stack:
223
-
224
- # Custom context should be reused
225
- ctx = await stack.enter_async_context(
226
- thread_aio_asyncio.AsyncioContext()
227
- )
228
-
229
- # Open special file with custom context
230
- src = await stack.enter_async_context(
231
- async_open("/proc/cpuinfo", "r", context=ctx)
232
- )
233
-
234
- # Open regular file with default context
235
- dest = await stack.enter_async_context(
236
- async_open("/tmp/cpuinfo", "w")
237
- )
238
-
239
- # Copying file content line by line
240
- async for line in src:
241
- await dest.write(line)
242
-
243
-
244
- asyncio.run(main())
245
- ```
246
-
247
- ### `clone` helper
248
-
249
- An asynchronous context supports a limited number of concurrent operations at the low level,
250
- regardless of how many file descriptors are open. `clone` lets you create a second file-like
251
- object with its own independent offset from a single descriptor, without opening the file
252
- multiple times.
253
-
254
- ```python
255
- """
256
- This example counts multiple hash functions from the file passed as the first
257
- argument. The hash functions are counted competitively, and the results are
258
- printed in the order of hashing completion.
259
- """
260
- import asyncio
261
- import hashlib
262
- import sys
263
-
264
- import aiofile
265
-
266
-
267
- async def hasher(name, hash_func, afp):
268
- loop = asyncio.get_running_loop()
269
- async for chunk in afp.iter_chunked(2 ** 20):
270
- await loop.run_in_executor(None, hash_func.update, chunk)
271
- print(name, hash_func.hexdigest())
272
-
273
-
274
- async def main():
275
- async with aiofile.async_open(sys.argv[1], "rb") as source:
276
- hashers = [
277
- ("MD5", hashlib.md5()),
278
- ("SHA1", hashlib.sha1()),
279
- ("SHA256", hashlib.sha256()),
280
- ("SHA512", hashlib.sha512()),
281
- ]
282
-
283
- await asyncio.gather(*[
284
- hasher(name, hash_func, await aiofile.clone(source))
285
- for name, hash_func in hashers
286
- ])
287
-
288
-
289
- asyncio.run(main())
290
- ```
291
-
292
- > **Note:** This will likely perform poorly on Windows, so if that is
293
- > your target platform, this optimization may not be worth it.
294
-
295
- ### Low-level API
296
-
297
- The `AIOFile` class is a low-level interface for asynchronous file operations. Its `read` and
298
- `write` methods accept an `offset=0` (in bytes) at which the operation is performed.
299
-
300
- This allows many independent I/O operations on a single open file without an internal pointer.
301
- For sequential reading and writing, use `Writer`, `Reader`, and `LineReader`. Note that
302
- `async_open` is not the same as `AIOFile`: it wraps it to provide a file-like interface
303
- similar to the built-in `open`.
304
-
305
- ```python
306
- import asyncio
307
- from aiofile import AIOFile
308
-
309
-
310
- async def main():
311
- async with AIOFile("hello.txt", 'w+') as afp:
312
- payload = "Hello world\n"
313
-
314
- await asyncio.gather(
315
- *[afp.write(payload, offset=i * len(payload)) for i in range(10)]
316
- )
317
-
318
- await afp.fsync()
319
-
320
- assert await afp.read(len(payload) * 10) == payload * 10
321
-
322
- asyncio.run(main())
323
- ```
324
-
325
- The low-level API is essentially a lightly sugared `caio` API.
326
-
327
- ```python
328
- import asyncio
329
- from aiofile import AIOFile
330
-
331
-
332
- async def main():
333
- async with AIOFile("/tmp/hello.txt", 'w+') as afp:
334
- await afp.write("Hello ")
335
- await afp.write("world", offset=7)
336
- await afp.fsync()
337
-
338
- print(await afp.read())
339
-
340
-
341
- asyncio.run(main())
342
- ```
343
-
344
- #### `Reader` and `Writer`
345
-
346
- To read or write a file linearly, the following example may be helpful.
347
-
348
- ```python
349
- import asyncio
350
- from aiofile import AIOFile, Reader, Writer
351
-
352
-
353
- async def main():
354
- async with AIOFile("/tmp/hello.txt", 'w+') as afp:
355
- writer = Writer(afp)
356
- reader = Reader(afp, chunk_size=8)
357
-
358
- await writer("Hello")
359
- await writer(" ")
360
- await writer("World")
361
- await afp.fsync()
362
-
363
- async for chunk in reader:
364
- print(chunk)
365
-
366
-
367
- asyncio.run(main())
368
- ```
369
-
370
- #### `LineReader` - read file line by line
371
-
372
- `LineReader` is a helper for reading a file linearly, line by line. It maintains a buffer
373
- and reads file fragments chunk by chunk, searching for line boundaries. The default chunk
374
- size is 4KB.
375
-
376
- ```python
377
- import asyncio
378
- from aiofile import AIOFile, LineReader, Writer
379
-
380
-
381
- async def main():
382
- async with AIOFile("/tmp/hello.txt", 'w+') as afp:
383
- writer = Writer(afp)
384
-
385
- await writer("Hello")
386
- await writer(" ")
387
- await writer("World")
388
- await writer("\n")
389
- await writer("\n")
390
- await writer("From async world")
391
- await afp.fsync()
392
-
393
- async for line in LineReader(afp):
394
- print(line)
395
-
396
-
397
- asyncio.run(main())
398
- ```
399
-
400
- To read a file line by line, prefer `LineReader` over `async_open`.
401
-
402
- ## More examples
403
-
404
- ### Async CSV Dict Reader
405
-
406
- ```python
407
- import asyncio
408
- import io
409
- from csv import DictReader
410
-
411
- from aiofile import AIOFile, LineReader
412
-
413
-
414
- class AsyncDictReader:
415
- def __init__(self, afp, **kwargs):
416
- self.buffer = io.BytesIO()
417
- self.file_reader = LineReader(
418
- afp, line_sep=kwargs.pop('line_sep', '\n'),
419
- chunk_size=kwargs.pop('chunk_size', 4096),
420
- offset=kwargs.pop('offset', 0),
421
- )
422
- self.reader = DictReader(
423
- io.TextIOWrapper(
424
- self.buffer,
425
- encoding=kwargs.pop('encoding', 'utf-8'),
426
- errors=kwargs.pop('errors', 'replace'),
427
- ), **kwargs,
428
- )
429
- self.line_num = 0
430
-
431
- def __aiter__(self):
432
- return self
433
-
434
- async def __anext__(self):
435
- if self.line_num == 0:
436
- header = await self.file_reader.readline()
437
- self.buffer.write(header)
438
-
439
- line = await self.file_reader.readline()
440
-
441
- if not line:
442
- raise StopAsyncIteration
443
-
444
- self.buffer.write(line)
445
- self.buffer.seek(0)
446
-
447
- try:
448
- result = next(self.reader)
449
- except StopIteration as e:
450
- raise StopAsyncIteration from e
451
-
452
- self.buffer.seek(0)
453
- self.buffer.truncate(0)
454
- self.line_num = self.reader.line_num
455
-
456
- return result
457
-
458
-
459
- async def main():
460
- async with AIOFile('sample.csv', 'rb') as afp:
461
- async for item in AsyncDictReader(afp):
462
- print(item)
463
-
464
-
465
- asyncio.run(main())
466
- ```
467
-
468
- ## Troubleshooting
469
-
470
- The caio Linux backends (io_uring and libaio) work well on modern kernels and filesystems.
471
- Problems are usually environment-specific and are not bugs. There are several ways to resolve them:
472
-
473
- 1. Upgrade the kernel.
474
- 2. Use a compatible filesystem.
475
- 3. Switch to a thread-based or pure-Python backend.
476
-
477
- Since version 0.7.0, caio offers several ways to select the backend:
478
-
479
- 1. Set the `CAIO_IMPL` environment variable at runtime:
480
-
481
- * `uring` — Linux io_uring (requires kernel ≥ 5.1)
482
- * `linux` — Linux libaio
483
- * `thread` — C-based thread pool implementation
484
- * `python` — pure-Python thread-based fallback
485
-
486
- 2. The `default_implementation` file located next to `__init__.py` in the caio installation
487
- directory. Useful for distribution package maintainers. The file may contain comments
488
- (lines starting with `#`); the first non-comment line should be one of the values above.
489
-
490
- 3. Manage contexts manually:
491
-
492
- ```python
493
- import asyncio
494
-
495
- from aiofile import async_open
496
- from caio import linux_aio_asyncio, thread_aio_asyncio
497
-
498
-
499
- async def main():
500
- linux_ctx = linux_aio_asyncio.AsyncioContext()
501
- threads_ctx = thread_aio_asyncio.AsyncioContext()
502
-
503
- async with async_open("/tmp/test.txt", "w", context=linux_ctx) as afp:
504
- await afp.write("Hello")
505
-
506
- async with async_open("/tmp/test.txt", "r", context=threads_ctx) as afp:
507
- print(await afp.read())
508
-
509
-
510
- asyncio.run(main())
511
- ```
512
-
513
- ## Benchmark
514
-
515
- stdlib, `aiofile` (once per `caio` backend, each in its own subprocess), `aiofiles`,
516
- `aiomisc.io` — linear/random block order, read/write, buffered/`O_DIRECT`,
517
- sequential/concurrent, fixed op count per cell (never a partial/cancelled
518
- measurement). Tool, methodology and raw data: [`benchmark/`](benchmark/); a
519
- third report at 4096B lives in `benchmark/results/`.
520
-
521
- ![aiofile benchmark, 65536B blocks](https://media.githubusercontent.com/media/mosquito/aiofile/master/benchmark/results/aiofile-bench-report-bs65536.png)
522
-
523
- Linear write, one Linux/ext4 run, 65536B blocks, 2000 ops/cell, per-op
524
- latency in ms (p50 / p95, ±stdev):
525
-
526
- | participant | x1 | x8 |
527
- |-----------------------|------------------------|------------------------|
528
- | stdlib (buffered) | 0.081 / 0.128 (±0.030) | 0.167 / 0.298 (±0.157) |
529
- | stdlib (O_DIRECT) | 0.148 / 0.398 (±0.097) | 0.266 / 0.650 (±0.192) |
530
- | aiofile (linux_uring) | 0.050 / 0.108 (±0.022) | 0.040 / 0.248 (±0.293) |
531
- | aiofile (linux_aio) | 0.009 / 0.024 (±0.020) | 0.040 / 0.089 (±0.020) |
532
- | aiofile (thread_aio) | 0.150 / 0.461 (±0.128) | 0.664 / 2.930 (±0.943) |
533
- | aiofile (python_aio) | 0.109 / 0.173 (±0.042) | 0.189 / 0.314 (±0.072) |
534
- | aiofiles | 0.155 / 0.257 (±0.175) | 1.166 / 2.238 (±0.570) |
535
- | aiomisc | 0.156 / 0.256 (±0.051) | 1.118 / 1.607 (±1.750) |
536
-
537
- `linux_aio` posts the lowest, tightest per-op latency at both concurrency
538
- levels here -- `io_submit()` is a lean, purpose-built syscall, while
539
- `linux_uring`'s ring/SQPOLL machinery is built to amortize *over batched
540
- submissions*, not to minimize one op's latency, so it only pulls ahead
541
- once there's a batch to amortize over. `aiofiles`/`aiomisc` latency
542
- *grows* at x8 (one seek cursor, serialized by a lock) instead of
543
- shrinking like the positional-I/O libraries.
544
-
545
- ![aiofile benchmark, 256B blocks](https://media.githubusercontent.com/media/mosquito/aiofile/master/benchmark/results/aiofile-bench-report-bs256.png)
546
-
547
- Linear write, 256B blocks, 2000 ops/cell, per-op latency in ms (p50 / p95, ±stdev):
548
-
549
- | participant | x1 | x8 |
550
- |-----------------------|-------------------------------|------------------------|
551
- | stdlib (buffered) | 0.066 / 0.104 (±0.017) | 0.152 / 0.299 (±0.125) |
552
- | stdlib (O_DIRECT) | n/a (256B isn't 4096-aligned) | n/a |
553
- | aiofile (linux_uring) | 0.086 / 0.159 (±0.043) | 0.043 / 0.070 (±0.021) |
554
- | aiofile (linux_aio) | 0.005 / 0.008 (±0.004) | 0.017 / 0.027 (±0.008) |
555
- | aiofile (thread_aio) | 0.128 / 0.290 (±0.090) | 0.464 / 1.503 (±0.470) |
556
- | aiofile (python_aio) | 0.113 / 0.201 (±0.037) | 0.179 / 0.354 (±0.124) |
557
- | aiofiles | 0.136 / 0.169 (±0.030) | 1.002 / 1.516 (±0.372) |
558
- | aiomisc | 0.144 / 0.223 (±0.040) | 1.046 / 1.999 (±0.415) |
559
-
560
- Same shape at a tiny block size: `linux_aio` still has the lowest latency
561
- by a wide margin (sub-10μs median at x1), `linux_uring` still needs
562
- concurrency to close the gap (and still doesn't fully close it), and the
563
- lock-serialized libraries still get *worse*, not better, under
564
- concurrency.
@@ -1,15 +0,0 @@
1
- aiofile-3.12.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
2
- aiofile-3.12.3.dist-info/METADATA,sha256=-qoxFcSVrBmJqmvaJit5psl-BWyD4Er8_HFYSlnjzrE,17890
3
- aiofile-3.12.3.dist-info/RECORD,,
4
- aiofile-3.12.3.dist-info/WHEEL,sha256=lCkmxWfQsSc9CfIClYeavTdQeEX2toPqufh9gI35EQA,87
5
- aiofile-3.12.3.dist-info/licenses/LICENCE,sha256=7GQBUOA3dNG1Jk-yaPOCncNnRVURCRMev23QpZ1ew-s,10495
6
- aiofile-3.12.3.dist-info/licenses/LICENCE.md,sha256=7GQBUOA3dNG1Jk-yaPOCncNnRVURCRMev23QpZ1ew-s,10495
7
- aiofile/__init__.py,sha256=BRzd0ek2MqpOYdmXNs8sQXkeyt3-l7YUvsA_L7XlxhU,672
8
- aiofile/__pycache__/__init__.cpython-312.pyc,,
9
- aiofile/__pycache__/aio.cpython-312.pyc,,
10
- aiofile/__pycache__/utils.cpython-312.pyc,,
11
- aiofile/__pycache__/version.cpython-312.pyc,,
12
- aiofile/aio.py,sha256=JmskRBhhhUInXqwWGnZMzlCYl4svDjprlomGgCkvIu4,10868
13
- aiofile/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
14
- aiofile/utils.py,sha256=lcwcpEyNOABrXwvUNgLqFjoJrL9DKS_IkbmBmh0gKaI,11675
15
- aiofile/version.py,sha256=FmlXpZQekQEtRRFJX7PFDVeM5pOmtZ7TlmWbuOe3on8,932
@@ -1,4 +0,0 @@
1
- Wheel-Version: 1.0
2
- Generator: hatchling 1.31.0
3
- Root-Is-Purelib: true
4
- Tag: py3-none-any