pyvoy 1.3.0__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.
Files changed (152) hide show
  1. pyvoy-1.3.0/.gitattributes +1 -0
  2. pyvoy-1.3.0/.github/workflows/bench.yaml +42 -0
  3. pyvoy-1.3.0/.github/workflows/ci.yaml +106 -0
  4. pyvoy-1.3.0/.github/workflows/codeql.yml +41 -0
  5. pyvoy-1.3.0/.github/workflows/docs.yaml +49 -0
  6. pyvoy-1.3.0/.github/workflows/release.yaml +120 -0
  7. pyvoy-1.3.0/.github/workflows/renovate.yaml +18 -0
  8. pyvoy-1.3.0/.gitignore +23 -0
  9. pyvoy-1.3.0/CODE_OF_CONDUCT.md +31 -0
  10. pyvoy-1.3.0/Cargo.lock +1871 -0
  11. pyvoy-1.3.0/Cargo.toml +36 -0
  12. pyvoy-1.3.0/LICENSE +21 -0
  13. pyvoy-1.3.0/PKG-INFO +205 -0
  14. pyvoy-1.3.0/README.md +169 -0
  15. pyvoy-1.3.0/bench/__init__.py +0 -0
  16. pyvoy-1.3.0/bench/_charts.py +53 -0
  17. pyvoy-1.3.0/bench/_results.py +60 -0
  18. pyvoy-1.3.0/bench/charts/asgi_h1_0000ms_throughput.png +0 -0
  19. pyvoy-1.3.0/bench/charts/asgi_h1_0010ms_throughput.png +0 -0
  20. pyvoy-1.3.0/bench/charts/asgi_h1_highms_throughput.png +0 -0
  21. pyvoy-1.3.0/bench/charts/asgi_h2_0000ms_throughput.png +0 -0
  22. pyvoy-1.3.0/bench/charts/asgi_h2_0010ms_throughput.png +0 -0
  23. pyvoy-1.3.0/bench/charts/asgi_h2_highms_throughput.png +0 -0
  24. pyvoy-1.3.0/bench/charts/wsgi_h1_0000ms_throughput.png +0 -0
  25. pyvoy-1.3.0/bench/charts/wsgi_h1_0010ms_throughput.png +0 -0
  26. pyvoy-1.3.0/bench/charts/wsgi_h1_highms_throughput.png +0 -0
  27. pyvoy-1.3.0/bench/charts/wsgi_h2_0000ms_throughput.png +0 -0
  28. pyvoy-1.3.0/bench/charts/wsgi_h2_0010ms_throughput.png +0 -0
  29. pyvoy-1.3.0/bench/charts/wsgi_h2_highms_throughput.png +0 -0
  30. pyvoy-1.3.0/bench/compression_app.py +41 -0
  31. pyvoy-1.3.0/bench/run_benchmark.py +814 -0
  32. pyvoy-1.3.0/bench/static_app.py +55 -0
  33. pyvoy-1.3.0/build.rs +5 -0
  34. pyvoy-1.3.0/codecov.yml +8 -0
  35. pyvoy-1.3.0/docs/api.md +3 -0
  36. pyvoy-1.3.0/docs/deployment.md +41 -0
  37. pyvoy-1.3.0/docs/design.md +59 -0
  38. pyvoy-1.3.0/docs/http-client.md +71 -0
  39. pyvoy-1.3.0/docs/img/favicon.png +0 -0
  40. pyvoy-1.3.0/docs/img/logo.png +0 -0
  41. pyvoy-1.3.0/docs/index.md +133 -0
  42. pyvoy-1.3.0/docs/settings.md +104 -0
  43. pyvoy-1.3.0/example/__init__.py +0 -0
  44. pyvoy-1.3.0/example/docker/Dockerfile +22 -0
  45. pyvoy-1.3.0/example/docker/__init__.py +0 -0
  46. pyvoy-1.3.0/example/docker/pyproject.toml +6 -0
  47. pyvoy-1.3.0/example/docker/server.py +16 -0
  48. pyvoy-1.3.0/example/docker/uv.lock +153 -0
  49. pyvoy-1.3.0/example/example.go +65 -0
  50. pyvoy-1.3.0/example/server.py +58 -0
  51. pyvoy-1.3.0/poe_tasks.toml +56 -0
  52. pyvoy-1.3.0/pyproject.toml +248 -0
  53. pyvoy-1.3.0/pyvoy/__init__.py +33 -0
  54. pyvoy-1.3.0/pyvoy/_cli.py +545 -0
  55. pyvoy-1.3.0/pyvoy/_debug.py +79 -0
  56. pyvoy-1.3.0/pyvoy/_glue.py +78 -0
  57. pyvoy-1.3.0/pyvoy/_server.py +1059 -0
  58. pyvoy-1.3.0/pyvoy/_trio.py +240 -0
  59. pyvoy-1.3.0/pyvoy/_watcher.py +89 -0
  60. pyvoy-1.3.0/pyvoy/asgi/__init__.py +0 -0
  61. pyvoy-1.3.0/pyvoy/asgi/httpclient.pyi +23 -0
  62. pyvoy-1.3.0/pyvoy/py.typed +0 -0
  63. pyvoy-1.3.0/pyvoy/wsgi/__init__.py +0 -0
  64. pyvoy-1.3.0/pyvoy/wsgi/httpclient.pyi +21 -0
  65. pyvoy-1.3.0/pyvoy.code-workspace +56 -0
  66. pyvoy-1.3.0/renovate.json +58 -0
  67. pyvoy-1.3.0/scripts/__init__.py +0 -0
  68. pyvoy-1.3.0/scripts/setup_it.py +52 -0
  69. pyvoy-1.3.0/src/asgi/filter.rs +513 -0
  70. pyvoy-1.3.0/src/asgi/mod.rs +15 -0
  71. pyvoy-1.3.0/src/asgi/python/mod.rs +913 -0
  72. pyvoy-1.3.0/src/asgi/shared/app.rs +125 -0
  73. pyvoy-1.3.0/src/asgi/shared/awaitable.rs +105 -0
  74. pyvoy-1.3.0/src/asgi/shared/eventloop.rs +276 -0
  75. pyvoy-1.3.0/src/asgi/shared/headers.rs +37 -0
  76. pyvoy-1.3.0/src/asgi/shared/lifespan.rs +382 -0
  77. pyvoy-1.3.0/src/asgi/shared/mod.rs +28 -0
  78. pyvoy-1.3.0/src/asgi/shared/scope.rs +89 -0
  79. pyvoy-1.3.0/src/asgi/transport.rs +834 -0
  80. pyvoy-1.3.0/src/asgi/websocket/executor.rs +817 -0
  81. pyvoy-1.3.0/src/asgi/websocket/mod.rs +610 -0
  82. pyvoy-1.3.0/src/asgi/websocket/stream.rs +153 -0
  83. pyvoy-1.3.0/src/envoy.rs +166 -0
  84. pyvoy-1.3.0/src/eventbridge.rs +109 -0
  85. pyvoy-1.3.0/src/headernames.rs +1100 -0
  86. pyvoy-1.3.0/src/lib.rs +261 -0
  87. pyvoy-1.3.0/src/ondrop.rs +18 -0
  88. pyvoy-1.3.0/src/types.rs +741 -0
  89. pyvoy-1.3.0/src/wsgi/filter.rs +590 -0
  90. pyvoy-1.3.0/src/wsgi/mod.rs +16 -0
  91. pyvoy-1.3.0/src/wsgi/pool.rs +134 -0
  92. pyvoy-1.3.0/src/wsgi/python.rs +740 -0
  93. pyvoy-1.3.0/src/wsgi/response.rs +146 -0
  94. pyvoy-1.3.0/src/wsgi/transport.rs +702 -0
  95. pyvoy-1.3.0/src/wsgi/types.rs +65 -0
  96. pyvoy-1.3.0/tests/__init__.py +0 -0
  97. pyvoy-1.3.0/tests/_util.py +48 -0
  98. pyvoy-1.3.0/tests/apps/__init__.py +0 -0
  99. pyvoy-1.3.0/tests/apps/asgi/__init__.py +0 -0
  100. pyvoy-1.3.0/tests/apps/asgi/asgi2.py +120 -0
  101. pyvoy-1.3.0/tests/apps/asgi/atexit_hook.py +37 -0
  102. pyvoy-1.3.0/tests/apps/asgi/echo_accept_encoding.py +27 -0
  103. pyvoy-1.3.0/tests/apps/asgi/httpclient/__init__.py +0 -0
  104. pyvoy-1.3.0/tests/apps/asgi/httpclient/kitchensink.py +162 -0
  105. pyvoy-1.3.0/tests/apps/asgi/httpclient/runner.py +142 -0
  106. pyvoy-1.3.0/tests/apps/asgi/kitchensink.py +1335 -0
  107. pyvoy-1.3.0/tests/apps/asgi/lifespan.py +291 -0
  108. pyvoy-1.3.0/tests/apps/httpclient/__init__.py +0 -0
  109. pyvoy-1.3.0/tests/apps/httpclient/cases/__init__.py +1 -0
  110. pyvoy-1.3.0/tests/apps/httpclient/cases/_util.py +52 -0
  111. pyvoy-1.3.0/tests/apps/httpclient/cases/client.py +783 -0
  112. pyvoy-1.3.0/tests/apps/httpclient/cases/errors.py +99 -0
  113. pyvoy-1.3.0/tests/apps/httpclient/cases/tls.py +33 -0
  114. pyvoy-1.3.0/tests/apps/httpclient/cases/validation.py +20 -0
  115. pyvoy-1.3.0/tests/apps/static/app.js +1 -0
  116. pyvoy-1.3.0/tests/apps/static/index.html +3 -0
  117. pyvoy-1.3.0/tests/apps/static/sub/nested.txt +1 -0
  118. pyvoy-1.3.0/tests/apps/websockets/__init__.py +0 -0
  119. pyvoy-1.3.0/tests/apps/websockets/echo.py +31 -0
  120. pyvoy-1.3.0/tests/apps/websockets/kitchensink.py +160 -0
  121. pyvoy-1.3.0/tests/apps/wsgi/__init__.py +0 -0
  122. pyvoy-1.3.0/tests/apps/wsgi/atexit_hook.py +22 -0
  123. pyvoy-1.3.0/tests/apps/wsgi/httpclient/__init__.py +0 -0
  124. pyvoy-1.3.0/tests/apps/wsgi/httpclient/runner.py +131 -0
  125. pyvoy-1.3.0/tests/apps/wsgi/kitchensink.py +851 -0
  126. pyvoy-1.3.0/tests/conftest.py +88 -0
  127. pyvoy-1.3.0/tests/httpclient/__init__.py +0 -0
  128. pyvoy-1.3.0/tests/httpclient/conftest.py +167 -0
  129. pyvoy-1.3.0/tests/httpclient/test_client.py +250 -0
  130. pyvoy-1.3.0/tests/httpclient/test_errors.py +64 -0
  131. pyvoy-1.3.0/tests/httpclient/test_tls.py +47 -0
  132. pyvoy-1.3.0/tests/httpclient/test_validation.py +21 -0
  133. pyvoy-1.3.0/tests/test_asgi2.py +34 -0
  134. pyvoy-1.3.0/tests/test_asgi_lifespan.py +279 -0
  135. pyvoy-1.3.0/tests/test_atexit.py +29 -0
  136. pyvoy-1.3.0/tests/test_cli.py +358 -0
  137. pyvoy-1.3.0/tests/test_compression.py +259 -0
  138. pyvoy-1.3.0/tests/test_ipv6.py +64 -0
  139. pyvoy-1.3.0/tests/test_kitchensink.py +698 -0
  140. pyvoy-1.3.0/tests/test_loops.py +49 -0
  141. pyvoy-1.3.0/tests/test_mounts.py +129 -0
  142. pyvoy-1.3.0/tests/test_mtls.py +120 -0
  143. pyvoy-1.3.0/tests/test_rootpath.py +96 -0
  144. pyvoy-1.3.0/tests/test_server.py +185 -0
  145. pyvoy-1.3.0/tests/test_startup_errors.py +388 -0
  146. pyvoy-1.3.0/tests/test_static_mounts.py +122 -0
  147. pyvoy-1.3.0/tests/test_tls.py +211 -0
  148. pyvoy-1.3.0/tests/test_upstreams.py +48 -0
  149. pyvoy-1.3.0/tests/test_websockets.py +420 -0
  150. pyvoy-1.3.0/tests/test_worker_threads.py +88 -0
  151. pyvoy-1.3.0/uv.lock +2397 -0
  152. pyvoy-1.3.0/zensical.toml +58 -0
@@ -0,0 +1 @@
1
+ * text=auto eol=lf
@@ -0,0 +1,42 @@
1
+ name: Benchmark
2
+ on:
3
+ push:
4
+ branches:
5
+ - main
6
+ paths:
7
+ - "src/**"
8
+ - "Cargo.lock"
9
+ - "bench/**"
10
+ - ".github/workflows/bench.yaml"
11
+ # Just verify the harness on PRs, no need for actual numbers
12
+ pull_request:
13
+ paths:
14
+ - "bench/**"
15
+ - ".github/workflows/bench.yaml"
16
+ workflow_dispatch:
17
+
18
+ permissions:
19
+ contents: read
20
+
21
+ jobs:
22
+ bench:
23
+ runs-on: ubuntu-24.04
24
+ strategy:
25
+ fail-fast: false
26
+ matrix:
27
+ # Overkill to benchmark with every Python version, we just use the latest.
28
+ python:
29
+ - "3.14"
30
+ - "3.14t"
31
+ steps:
32
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
33
+
34
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
35
+
36
+ - run: rustup update
37
+
38
+ - run: cargo install --features http3 oha
39
+
40
+ - run: uv sync --python ${{ matrix.python }} --managed-python
41
+
42
+ - run: uv run poe bench ${{ github.event_name == 'pull_request' && '--short' || '' }}
@@ -0,0 +1,106 @@
1
+ name: CI
2
+ on:
3
+ push:
4
+ branches:
5
+ - main
6
+ pull_request:
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+ attestations: write
12
+ id-token: write
13
+
14
+ concurrency:
15
+ # Cancel in-progress jobs for PRs only
16
+ group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.sha || github.ref }}
17
+ cancel-in-progress: true
18
+
19
+ jobs:
20
+ build:
21
+ runs-on: ${{ matrix.os }}
22
+ strategy:
23
+ fail-fast: false
24
+ matrix:
25
+ os:
26
+ - macos-15
27
+ - ubuntu-24.04
28
+ - windows-2025
29
+ python:
30
+ - "3.11"
31
+ - "3.14"
32
+ # Test oldest and newest on all OS's, but others only on one
33
+ # to save CI load.
34
+ include:
35
+ - os: ubuntu-24.04
36
+ python: "3.11"
37
+ - os: ubuntu-24.04
38
+ python: "3.12"
39
+ - os: ubuntu-24.04
40
+ python: "3.13"
41
+ - os: ubuntu-24.04
42
+ python: "3.14t"
43
+ # Enable coverage on just one job
44
+ - os: ubuntu-24.04
45
+ python: "3.14"
46
+ coverage: "cov"
47
+ - os: ubuntu-24.04
48
+ python: "3.15"
49
+ - os: ubuntu-24.04
50
+ python: "3.15t"
51
+
52
+ env:
53
+ # Avoid multiple compile e.g. in lint and test by setting as a job env var
54
+ RUSTFLAGS: ${{ matrix.coverage == 'cov' && '-C instrument-coverage' || '' }}
55
+ # Test the abi3 build on the oldest versions, and version-specific builds on the rest.
56
+ MATURIN_PEP517_ARGS: ${{ (matrix.python == '3.11' || matrix.python == '3.12') && '--features pyo3/abi3-py311' || '' }}
57
+
58
+ steps:
59
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
60
+
61
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
62
+ with:
63
+ python-version: ${{ matrix.python }}
64
+
65
+ - name: Setup rust
66
+ run: |
67
+ rustup update
68
+ ${{ matrix.coverage == 'cov' && 'rustup component add llvm-tools' || '' }}
69
+
70
+ - run: uv lock --check
71
+
72
+ # Go ahead and run lint on all Python versions since we may have version-specific
73
+ # guards in rust in the future.
74
+ - name: run lints
75
+ if: startsWith(matrix.os, 'ubuntu-')
76
+ run: uv run poe lint
77
+
78
+ - name: run tests
79
+ # Coverage instrumentation slows websockets compression down too much while the integration test has
80
+ # relatively tight timeouts.
81
+ run: uv run poe test ${{ github.event_name == 'push' && matrix.coverage != 'cov' && '--full' || '' }}
82
+
83
+ # Needed for connect integration tests runner
84
+ - uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
85
+ if: github.event_name == 'push' && matrix.python != '3.14t' && !startsWith(matrix.os, 'windows-')
86
+ with:
87
+ go-version: stable
88
+
89
+ - name: run connect integration tests on push
90
+ # TODO: Enable on free-threaded Python after publishing a wheel for it.
91
+ # The integration test first installs pyvoy from PyPi before we reinstall from local
92
+ # and it's tricky to avoid that.
93
+ if: github.event_name == 'push' && matrix.python != '3.15t' && !startsWith(matrix.os, 'windows-')
94
+ run: uv run poe integration-test-connect
95
+
96
+ - name: verify wheel build
97
+ run: uv run poe wheel
98
+
99
+ - name: prepare coverage
100
+ if: ${{ matrix.coverage == 'cov' }}
101
+ run: |
102
+ $(rustc --print=target-libdir)/../bin/llvm-profdata merge -sparse default_*.profraw -o tests.profdata
103
+ $(rustc --print=target-libdir)/../bin/llvm-cov export -format=lcov --ignore-filename-regex='/.cargo/registry' --ignore-filename-regex='.cargo/git/checkouts' --ignore-filename-regex='.rustup/toolchains' -instr-profile tests.profdata pyvoy/_pyvoy.*.so > tests.lcov
104
+
105
+ - uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
106
+ if: ${{ matrix.coverage == 'cov' }}
@@ -0,0 +1,41 @@
1
+ name: "CodeQL"
2
+
3
+ on:
4
+ push:
5
+ branches: ["main"]
6
+ pull_request:
7
+ branches: ["main"]
8
+ schedule:
9
+ - cron: "44 7 * * 2"
10
+
11
+ jobs:
12
+ analyze:
13
+ name: Analyze (${{ matrix.language }})
14
+ runs-on: ubuntu-latest
15
+ permissions:
16
+ security-events: write
17
+ packages: read
18
+ strategy:
19
+ fail-fast: false
20
+ matrix:
21
+ include:
22
+ - language: actions
23
+ build-mode: none
24
+ - language: python
25
+ build-mode: none
26
+ - language: rust
27
+ build-mode: none
28
+ steps:
29
+ - name: Checkout repository
30
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
31
+
32
+ - name: Initialize CodeQL
33
+ uses: github/codeql-action/init@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
34
+ with:
35
+ languages: ${{ matrix.language }}
36
+ build-mode: ${{ matrix.build-mode }}
37
+
38
+ - name: Perform CodeQL Analysis
39
+ uses: github/codeql-action/analyze@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
40
+ with:
41
+ category: "/language:${{matrix.language}}"
@@ -0,0 +1,49 @@
1
+ name: Documentation
2
+ on:
3
+ push:
4
+ branches:
5
+ - main
6
+ paths:
7
+ - "docs/**"
8
+ - zensical.toml
9
+ - ".github/workflows/docs.yaml"
10
+ pull_request:
11
+ paths:
12
+ - "docs/**"
13
+ - zensical.toml
14
+ - ".github/workflows/docs.yaml"
15
+
16
+ permissions:
17
+ contents: read
18
+ pages: write
19
+ id-token: write
20
+
21
+ jobs:
22
+ build:
23
+ environment:
24
+ name: ${{ github.event_name != 'pull_request' && 'github-pages' || null }}
25
+ url: ${{ steps.deployment.outputs.page_url }}
26
+
27
+ runs-on: ubuntu-24.04
28
+
29
+ steps:
30
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
31
+
32
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
33
+
34
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
35
+ with:
36
+ python-version: "3.14"
37
+
38
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
39
+
40
+ - run: uv run --group docs --no-dev zensical build --clean
41
+
42
+ - uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
43
+ if: github.event_name != 'pull_request'
44
+ with:
45
+ path: site
46
+
47
+ - uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 # v5.0.1
48
+ if: github.event_name != 'pull_request'
49
+ id: deployment
@@ -0,0 +1,120 @@
1
+ name: Release
2
+ on:
3
+ push:
4
+ tags:
5
+ - "v*"
6
+ workflow_dispatch:
7
+ pull_request:
8
+ paths:
9
+ - .github/workflows/release.yaml
10
+
11
+ permissions:
12
+ id-token: write
13
+ attestations: write
14
+ contents: write
15
+
16
+ env:
17
+ # When bumping, also bump MATURIN_PEP517_ARGS in ci.yaml
18
+ # maturin flags to build targets we publish non-abi3 wheels for
19
+ UNSTABLE_API_FLAGS: -i 3.13 -i 3.14 -i 3.14t -i 3.15 -i 3.15t
20
+ # maturin flags to build targets we publish abi3 wheels for
21
+ ABI3_FLAGS: -i 3.11 --features pyo3/abi3-py311
22
+ ABI3T_FLAGS: -i 3.15t --features pyo3/abi3t-py315
23
+
24
+ jobs:
25
+ ext:
26
+ runs-on: ${{ matrix.runner }}
27
+ strategy:
28
+ matrix:
29
+ include:
30
+ - runner: ubuntu-24.04
31
+ target: x86_64
32
+ manylinux: manylinux_2_28
33
+ - runner: ubuntu-24.04
34
+ target: x86_64
35
+ manylinux: musllinux_1_2
36
+ - runner: ubuntu-24.04-arm
37
+ target: aarch64
38
+ manylinux: manylinux_2_28
39
+ - runner: ubuntu-24.04-arm
40
+ target: aarch64
41
+ manylinux: musllinux_1_2
42
+ - runner: windows-2025
43
+ target: x86_64
44
+ - runner: windows-11-arm
45
+ target: aarch64
46
+ - runner: macos-15
47
+ target: aarch64
48
+ steps:
49
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
50
+
51
+ # We only publish abi3 wheels for Windows
52
+ - name: Build wheels
53
+ if: runner.os != 'Windows'
54
+ uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
55
+ with:
56
+ target: ${{ matrix.target }}
57
+ args: --release --out dist ${{ env.UNSTABLE_API_FLAGS }}
58
+ sccache: true
59
+ manylinux: ${{ matrix.manylinux }}
60
+ before-script-linux: ${{ matrix.manylinux == 'manylinux_2_28' && 'dnf install -y clang' || 'apt-get install -y libclang-dev' }}
61
+
62
+ - name: Build abi3 wheel
63
+ uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
64
+ with:
65
+ target: ${{ matrix.target }}
66
+ args: --release --out dist ${{ env.ABI3_FLAGS }}
67
+ sccache: true
68
+ manylinux: ${{ matrix.manylinux }}
69
+ before-script-linux: ${{ matrix.manylinux == 'manylinux_2_28' && 'dnf install -y clang' || 'apt-get install -y libclang-dev' }}
70
+
71
+ - name: Build abi3t wheel
72
+ uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
73
+ with:
74
+ target: ${{ matrix.target }}
75
+ args: --release --out dist ${{ env.ABI3T_FLAGS }}
76
+ sccache: true
77
+ manylinux: ${{ matrix.manylinux }}
78
+ before-script-linux: ${{ matrix.manylinux == 'manylinux_2_28' && 'dnf install -y clang' || 'apt-get install -y libclang-dev' }}
79
+
80
+ - name: Upload wheels
81
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
82
+ with:
83
+ name: wheels-${{ matrix.runner }}-${{ matrix.target }}${{ matrix.manylinux && format('-{0}', matrix.manylinux) || '' }}
84
+ path: dist
85
+
86
+ ext-sdist:
87
+ runs-on: ubuntu-26.04
88
+ steps:
89
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
90
+
91
+ - name: Build sdist
92
+ uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
93
+ with:
94
+ command: sdist
95
+ args: --out dist
96
+
97
+ - name: Upload sdist
98
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
99
+ with:
100
+ name: wheels-sdist
101
+ path: dist
102
+
103
+ release:
104
+ runs-on: ubuntu-26.04
105
+ environment: ${{ github.event_name == 'push' && 'prod' || github.event_name == 'workflow_dispatch' && 'dev' || null }}
106
+ needs:
107
+ - ext
108
+ - ext-sdist
109
+ steps:
110
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
111
+ with:
112
+ path: dist/
113
+ merge-multiple: true
114
+
115
+ - name: publish all packages
116
+ if: github.event_name != 'pull_request'
117
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
118
+ with:
119
+ repository-url: ${{ github.event_name == 'workflow_dispatch' && 'https://test.pypi.org/legacy/' || null }}
120
+ skip-existing: true
@@ -0,0 +1,18 @@
1
+ name: Renovate Dependencies
2
+
3
+ on:
4
+ schedule:
5
+ # https://crontab.guru/#5_12_*_*_1
6
+ - cron: "5 12 * * 1"
7
+ workflow_dispatch:
8
+
9
+ # Uses app token so default token needs no permissions
10
+ permissions: {}
11
+
12
+ jobs:
13
+ renovate:
14
+ uses: curioswitch/go-build/.github/workflows/export-renovate.yaml@7d855da299ce7a10188c909a58328fc21ed89c40 # v0.9.0
15
+ with:
16
+ github_app_id: "1047503"
17
+ secrets:
18
+ github_app_key: ${{ secrets.CURIOSWITCH_APP_KEY }}
pyvoy-1.3.0/.gitignore ADDED
@@ -0,0 +1,23 @@
1
+ debug
2
+ target
3
+
4
+ __pycache__
5
+ .venv
6
+
7
+ .envrc
8
+ .idea
9
+ .vscode
10
+
11
+ pyvoy/_pyvoy.*
12
+
13
+ *.profraw
14
+ *.profdata
15
+ *.lcov
16
+
17
+ profile.json.gz
18
+
19
+ out
20
+ site
21
+ .DS_Store
22
+
23
+ wstest/reports
@@ -0,0 +1,31 @@
1
+ This project follows the CurioSwitch code of conduct.
2
+
3
+ > [!WARNING]
4
+ > Any following content is overridden by the laws of CurioSwitch's residing country, Japan.
5
+ > For example, things like death threats will be dealt with strictly.
6
+
7
+ There is just one guideline: be fair. It is not possible to define fairness precisely
8
+ but consider these examples when thinking about it.
9
+
10
+ Fair:
11
+
12
+ - Respond promptly to submitted issues / PRs.
13
+ - Contributors spend time on submissions and it is not fair to not do the same in return.
14
+ - Aim for robust / tested code and systems.
15
+ - It is not fair to users to give them a tool that only half-works and causes them frustration.
16
+ - Acknowledge others' points, even if disagreeing, instead of ignoring.
17
+ - People engage in good faith, and it is not fair to leave it wasted.
18
+
19
+ Unfair:
20
+
21
+ - Keep issues about bugs or significant pain points open for a long time or suggest the contributor can raise a PR.
22
+ - Users are not maintainers and it is not fair to expect them to become one to fix a bug
23
+ (it is always welcome when they have the time and will to contribute though).
24
+ - Prioritize issues and discussions with friends, acquaintances, or those in the same timezone over others.
25
+ - This is OSS and it is not fair to create boundaries or factions within it.
26
+
27
+ We are not perfect and may act in a way that isn't fair. This is fine and generally will not
28
+ need punitive measures - we will aim to improve over time. But do accept feedback about it in
29
+ good faith and respond to it fairly. If you need to provide feedback related to the above in
30
+ a private matter, feel free to email oss@curioswitch.org and we will aim to help in a fair
31
+ manner.