pl-row-encode 0.3.1__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.
- pl_row_encode-0.3.1/.claude/scheduled_tasks.lock +1 -0
- pl_row_encode-0.3.1/.github/workflows/ci.yml +44 -0
- pl_row_encode-0.3.1/.github/workflows/pr-title.yml +18 -0
- pl_row_encode-0.3.1/.github/workflows/publish.yml +144 -0
- pl_row_encode-0.3.1/.github/workflows/release-please.yml +61 -0
- pl_row_encode-0.3.1/.gitignore +20 -0
- pl_row_encode-0.3.1/.pre-commit-config.yaml +53 -0
- pl_row_encode-0.3.1/.python-version +1 -0
- pl_row_encode-0.3.1/.release-please-manifest.json +3 -0
- pl_row_encode-0.3.1/CHANGELOG.md +33 -0
- pl_row_encode-0.3.1/Cargo.lock +2429 -0
- pl_row_encode-0.3.1/Cargo.toml +39 -0
- pl_row_encode-0.3.1/LICENSE +21 -0
- pl_row_encode-0.3.1/Makefile +16 -0
- pl_row_encode-0.3.1/PKG-INFO +92 -0
- pl_row_encode-0.3.1/README.md +71 -0
- pl_row_encode-0.3.1/pl_row_encode/__init__.py +197 -0
- pl_row_encode-0.3.1/pyproject.toml +49 -0
- pl_row_encode-0.3.1/release-please-config.json +10 -0
- pl_row_encode-0.3.1/src/lib.rs +137 -0
- pl_row_encode-0.3.1/tests/test_property.py +190 -0
- pl_row_encode-0.3.1/tests/test_roundtrip.py +65 -0
- pl_row_encode-0.3.1/tests/test_workflows.py +129 -0
- pl_row_encode-0.3.1/tox.ini +17 -0
- pl_row_encode-0.3.1/uv.lock +376 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"sessionId":"ed1ac758-6dc2-4ee4-8ca4-3f4a9d526f6f","pid":25058,"procStart":"Wed Jun 3 01:56:30 2026","acquiredAt":1780883354895}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: ci-${{ github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
checks:
|
|
18
|
+
name: tox (py${{ matrix.python }})
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
strategy:
|
|
21
|
+
fail-fast: false
|
|
22
|
+
matrix:
|
|
23
|
+
python: ["3.12", "3.13", "3.14"]
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v4
|
|
26
|
+
|
|
27
|
+
- name: Install Rust toolchain
|
|
28
|
+
uses: dtolnay/rust-toolchain@stable
|
|
29
|
+
|
|
30
|
+
- name: Cache Rust build
|
|
31
|
+
uses: Swatinem/rust-cache@v2
|
|
32
|
+
|
|
33
|
+
- name: Install uv
|
|
34
|
+
uses: astral-sh/setup-uv@v5
|
|
35
|
+
with:
|
|
36
|
+
enable-cache: true
|
|
37
|
+
|
|
38
|
+
- name: Set up Python ${{ matrix.python }}
|
|
39
|
+
run: uv python install ${{ matrix.python }}
|
|
40
|
+
|
|
41
|
+
# `-f pyXYZ` selects every factor (test/lint/type) for this Python version
|
|
42
|
+
# from tox.ini's `py{312,313,314}-{test,lint,type}` matrix.
|
|
43
|
+
- name: Run tox
|
|
44
|
+
run: uvx --with tox-uv tox -f py${{ matrix.python == '3.12' && '312' || matrix.python == '3.13' && '313' || '314' }}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
name: PR Title
|
|
2
|
+
|
|
3
|
+
# Squash-merges use the PR title as the commit message, so it must be a valid
|
|
4
|
+
# Conventional Commit for release-please to compute the next version correctly.
|
|
5
|
+
on:
|
|
6
|
+
pull_request_target:
|
|
7
|
+
types: [opened, edited, synchronize, reopened]
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
pull-requests: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
lint-title:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: amannn/action-semantic-pull-request@v6
|
|
17
|
+
env:
|
|
18
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
name: build-wheels
|
|
2
|
+
|
|
3
|
+
# Builds compiled wheels (+ sdist) for every supported platform and uploads them as
|
|
4
|
+
# `wheels-*` artifacts. This is a reusable, build-only workflow: it does NOT publish.
|
|
5
|
+
# release-please.yml calls it via `workflow_call` and then runs the PyPI upload itself.
|
|
6
|
+
#
|
|
7
|
+
# Why the upload lives in the caller, not here: PyPI Trusted Publishing does not work
|
|
8
|
+
# from inside a reusable workflow (it raises `invalid-publisher`), so the
|
|
9
|
+
# `pypa/gh-action-pypi-publish` step must run in a top-level workflow.
|
|
10
|
+
# See https://github.com/pypa/gh-action-pypi-publish/issues/166
|
|
11
|
+
on:
|
|
12
|
+
workflow_call:
|
|
13
|
+
pull_request:
|
|
14
|
+
paths:
|
|
15
|
+
- "src/**"
|
|
16
|
+
- "Cargo.*"
|
|
17
|
+
- "pyproject.toml"
|
|
18
|
+
- ".github/workflows/publish.yml"
|
|
19
|
+
workflow_dispatch:
|
|
20
|
+
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
linux:
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
strategy:
|
|
28
|
+
fail-fast: false
|
|
29
|
+
matrix:
|
|
30
|
+
target: [x86_64, aarch64]
|
|
31
|
+
steps:
|
|
32
|
+
- uses: actions/checkout@v4
|
|
33
|
+
- uses: actions/setup-python@v5
|
|
34
|
+
with:
|
|
35
|
+
python-version: "3.x"
|
|
36
|
+
- name: Build wheels
|
|
37
|
+
uses: PyO3/maturin-action@v1
|
|
38
|
+
with:
|
|
39
|
+
target: ${{ matrix.target }}
|
|
40
|
+
args: --release --out dist
|
|
41
|
+
sccache: true
|
|
42
|
+
manylinux: auto
|
|
43
|
+
- name: Build free-threaded wheels
|
|
44
|
+
uses: PyO3/maturin-action@v1
|
|
45
|
+
with:
|
|
46
|
+
target: ${{ matrix.target }}
|
|
47
|
+
args: --release --out dist -i python3.13t
|
|
48
|
+
sccache: true
|
|
49
|
+
manylinux: auto
|
|
50
|
+
- uses: actions/upload-artifact@v4
|
|
51
|
+
with:
|
|
52
|
+
name: wheels-linux-${{ matrix.target }}
|
|
53
|
+
path: dist
|
|
54
|
+
|
|
55
|
+
musllinux:
|
|
56
|
+
runs-on: ubuntu-latest
|
|
57
|
+
strategy:
|
|
58
|
+
fail-fast: false
|
|
59
|
+
matrix:
|
|
60
|
+
target: [x86_64]
|
|
61
|
+
steps:
|
|
62
|
+
- uses: actions/checkout@v4
|
|
63
|
+
- uses: actions/setup-python@v5
|
|
64
|
+
with:
|
|
65
|
+
python-version: "3.x"
|
|
66
|
+
- name: Build wheels
|
|
67
|
+
uses: PyO3/maturin-action@v1
|
|
68
|
+
with:
|
|
69
|
+
target: ${{ matrix.target }}
|
|
70
|
+
args: --release --out dist
|
|
71
|
+
sccache: true
|
|
72
|
+
manylinux: musllinux_1_2
|
|
73
|
+
- uses: actions/upload-artifact@v4
|
|
74
|
+
with:
|
|
75
|
+
name: wheels-musllinux-${{ matrix.target }}
|
|
76
|
+
path: dist
|
|
77
|
+
|
|
78
|
+
windows:
|
|
79
|
+
runs-on: windows-latest
|
|
80
|
+
strategy:
|
|
81
|
+
fail-fast: false
|
|
82
|
+
matrix:
|
|
83
|
+
target: [x64]
|
|
84
|
+
steps:
|
|
85
|
+
- uses: actions/checkout@v4
|
|
86
|
+
- uses: actions/setup-python@v5
|
|
87
|
+
with:
|
|
88
|
+
python-version: "3.x"
|
|
89
|
+
architecture: ${{ matrix.target }}
|
|
90
|
+
- name: Build wheels
|
|
91
|
+
uses: PyO3/maturin-action@v1
|
|
92
|
+
with:
|
|
93
|
+
target: ${{ matrix.target }}
|
|
94
|
+
args: --release --out dist
|
|
95
|
+
sccache: true
|
|
96
|
+
- uses: actions/upload-artifact@v4
|
|
97
|
+
with:
|
|
98
|
+
name: wheels-windows-${{ matrix.target }}
|
|
99
|
+
path: dist
|
|
100
|
+
|
|
101
|
+
macos:
|
|
102
|
+
# Both targets build on Apple-Silicon macos-14 runners (which can cross-compile
|
|
103
|
+
# the x86_64 wheel). The Intel macos-13 runners are being wound down and can sit
|
|
104
|
+
# queued for hours, which would block the whole release on the `pypi` job.
|
|
105
|
+
runs-on: macos-14
|
|
106
|
+
strategy:
|
|
107
|
+
fail-fast: false
|
|
108
|
+
matrix:
|
|
109
|
+
target: [x86_64, aarch64]
|
|
110
|
+
steps:
|
|
111
|
+
- uses: actions/checkout@v4
|
|
112
|
+
- uses: actions/setup-python@v5
|
|
113
|
+
with:
|
|
114
|
+
python-version: "3.x"
|
|
115
|
+
- name: Build wheels
|
|
116
|
+
uses: PyO3/maturin-action@v1
|
|
117
|
+
with:
|
|
118
|
+
target: ${{ matrix.target }}
|
|
119
|
+
args: --release --out dist
|
|
120
|
+
sccache: true
|
|
121
|
+
- name: Build free-threaded wheels
|
|
122
|
+
uses: PyO3/maturin-action@v1
|
|
123
|
+
with:
|
|
124
|
+
target: ${{ matrix.target }}
|
|
125
|
+
args: --release --out dist -i python3.13t
|
|
126
|
+
sccache: true
|
|
127
|
+
- uses: actions/upload-artifact@v4
|
|
128
|
+
with:
|
|
129
|
+
name: wheels-macos-${{ matrix.target }}
|
|
130
|
+
path: dist
|
|
131
|
+
|
|
132
|
+
sdist:
|
|
133
|
+
runs-on: ubuntu-latest
|
|
134
|
+
steps:
|
|
135
|
+
- uses: actions/checkout@v4
|
|
136
|
+
- name: Build sdist
|
|
137
|
+
uses: PyO3/maturin-action@v1
|
|
138
|
+
with:
|
|
139
|
+
command: sdist
|
|
140
|
+
args: --out dist
|
|
141
|
+
- uses: actions/upload-artifact@v4
|
|
142
|
+
with:
|
|
143
|
+
name: wheels-sdist
|
|
144
|
+
path: dist
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
name: release-please
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
pull-requests: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
release-please:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
outputs:
|
|
16
|
+
release_created: ${{ steps.release.outputs.release_created }}
|
|
17
|
+
tag_name: ${{ steps.release.outputs.tag_name }}
|
|
18
|
+
steps:
|
|
19
|
+
# Maintains a release PR off main; merging it bumps Cargo.toml + Cargo.lock,
|
|
20
|
+
# updates CHANGELOG.md, tags vX.Y.Z, and publishes a GitHub Release.
|
|
21
|
+
- uses: googleapis/release-please-action@v4
|
|
22
|
+
id: release
|
|
23
|
+
with:
|
|
24
|
+
config-file: release-please-config.json
|
|
25
|
+
manifest-file: .release-please-manifest.json
|
|
26
|
+
|
|
27
|
+
# When a release was just created, build wheels (reusable workflow) then publish.
|
|
28
|
+
# This all runs in the push-to-main context rather than via a `release:` trigger
|
|
29
|
+
# because releases made with GITHUB_TOKEN cannot trigger downstream workflows.
|
|
30
|
+
build:
|
|
31
|
+
needs: release-please
|
|
32
|
+
if: ${{ needs.release-please.outputs.release_created == 'true' }}
|
|
33
|
+
uses: ./.github/workflows/publish.yml
|
|
34
|
+
|
|
35
|
+
# The PyPI upload must run in this top-level workflow, not the reusable one above:
|
|
36
|
+
# Trusted Publishing fails (`invalid-publisher`) from inside a reusable workflow.
|
|
37
|
+
# NOTE: the PyPI trusted publisher must be configured with workflow file
|
|
38
|
+
# `release-please.yml` (this file), since that is the workflow that runs the upload.
|
|
39
|
+
pypi:
|
|
40
|
+
needs: [release-please, build]
|
|
41
|
+
if: ${{ needs.release-please.outputs.release_created == 'true' }}
|
|
42
|
+
runs-on: ubuntu-latest
|
|
43
|
+
environment: pypi
|
|
44
|
+
permissions:
|
|
45
|
+
id-token: write # OIDC Trusted Publishing
|
|
46
|
+
contents: read
|
|
47
|
+
attestations: write # build provenance
|
|
48
|
+
steps:
|
|
49
|
+
- uses: actions/download-artifact@v4
|
|
50
|
+
with:
|
|
51
|
+
pattern: wheels-*
|
|
52
|
+
path: dist
|
|
53
|
+
merge-multiple: true
|
|
54
|
+
- name: Generate artifact attestation
|
|
55
|
+
uses: actions/attest-build-provenance@v2
|
|
56
|
+
with:
|
|
57
|
+
subject-path: "dist/*"
|
|
58
|
+
- name: Publish to PyPI
|
|
59
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
60
|
+
with:
|
|
61
|
+
packages-dir: dist
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Runnable with `prek` (the project's fast pre-commit runner) or vanilla `pre-commit`.
|
|
2
|
+
# prek install # sets up pre-commit AND commit-msg hooks (see below)
|
|
3
|
+
# prek run --all-files
|
|
4
|
+
default_install_hook_types: [pre-commit, commit-msg]
|
|
5
|
+
|
|
6
|
+
repos:
|
|
7
|
+
# Enforces Conventional Commit messages so release-please can compute versions.
|
|
8
|
+
- repo: https://github.com/compilerla/conventional-pre-commit
|
|
9
|
+
rev: v4.0.0
|
|
10
|
+
hooks:
|
|
11
|
+
- id: conventional-pre-commit
|
|
12
|
+
stages: [commit-msg]
|
|
13
|
+
|
|
14
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
15
|
+
rev: v5.0.0
|
|
16
|
+
hooks:
|
|
17
|
+
- id: trailing-whitespace
|
|
18
|
+
- id: end-of-file-fixer
|
|
19
|
+
- id: check-toml
|
|
20
|
+
- id: check-yaml
|
|
21
|
+
- id: check-merge-conflict
|
|
22
|
+
- id: check-added-large-files
|
|
23
|
+
|
|
24
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
25
|
+
rev: v0.15.15
|
|
26
|
+
hooks:
|
|
27
|
+
- id: ruff-format
|
|
28
|
+
- id: ruff
|
|
29
|
+
args: [--fix]
|
|
30
|
+
|
|
31
|
+
# Local hooks use the project toolchain so versions stay in sync with the repo.
|
|
32
|
+
- repo: local
|
|
33
|
+
hooks:
|
|
34
|
+
- id: cargo-fmt
|
|
35
|
+
name: cargo fmt
|
|
36
|
+
entry: cargo fmt --
|
|
37
|
+
language: system
|
|
38
|
+
files: \.rs$
|
|
39
|
+
pass_filenames: false
|
|
40
|
+
|
|
41
|
+
- id: cargo-clippy
|
|
42
|
+
name: cargo clippy
|
|
43
|
+
entry: cargo clippy --all-targets -- -D warnings
|
|
44
|
+
language: system
|
|
45
|
+
files: \.rs$
|
|
46
|
+
pass_filenames: false
|
|
47
|
+
|
|
48
|
+
- id: ty
|
|
49
|
+
name: ty check
|
|
50
|
+
entry: uv run ty check
|
|
51
|
+
language: system
|
|
52
|
+
types: [python]
|
|
53
|
+
pass_filenames: false
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.14
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.3.1](https://github.com/tylerriccio33/pl-row-encode/compare/v0.3.0...v0.3.1) (2026-06-09)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* build both macOS wheels on macos-14 to avoid stuck macos-13 runner ([9be245a](https://github.com/tylerriccio33/pl-row-encode/commit/9be245a68dbc0b31be87827fa14beb100f27bd20))
|
|
9
|
+
* build both macOS wheels on macos-14 to avoid stuck macos-13 runner ([4703b0d](https://github.com/tylerriccio33/pl-row-encode/commit/4703b0dcd0df106d9e9ad334c80f2a267c4cd29f))
|
|
10
|
+
|
|
11
|
+
## [0.3.0](https://github.com/tylerriccio33/pl-row-encode/compare/v0.2.0...v0.3.0) (2026-06-09)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* enable automated PyPI release pipeline ([cf82771](https://github.com/tylerriccio33/pl-row-encode/commit/cf82771e6601cb4419d6e976db48f70fe26503b4))
|
|
17
|
+
* enable automated PyPI release pipeline ([cf8e0df](https://github.com/tylerriccio33/pl-row-encode/commit/cf8e0df43bfb00ec3356648dc26204855462925f))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* publish to PyPI from release-please instead of release trigger ([932af88](https://github.com/tylerriccio33/pl-row-encode/commit/932af882a147188042fb783d4ab2c2cb02b19fc9))
|
|
23
|
+
* publish to PyPI from release-please instead of release trigger ([66c2385](https://github.com/tylerriccio33/pl-row-encode/commit/66c2385988bbb672446182a237b380a1b3d1c409))
|
|
24
|
+
* run PyPI upload from top-level workflow not reusable one ([71101d8](https://github.com/tylerriccio33/pl-row-encode/commit/71101d80b0e45418322a9050145f991601425b2b))
|
|
25
|
+
* run PyPI upload from top-level workflow not reusable one ([9e9a2eb](https://github.com/tylerriccio33/pl-row-encode/commit/9e9a2eb75677d2cfc297bb809a1aaa0022b7466e))
|
|
26
|
+
|
|
27
|
+
## [0.2.0](https://github.com/tylerriccio33/pl-row-encode/compare/v0.1.0...v0.2.0) (2026-06-08)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### Features
|
|
31
|
+
|
|
32
|
+
* enable automated PyPI release pipeline ([cf82771](https://github.com/tylerriccio33/pl-row-encode/commit/cf82771e6601cb4419d6e976db48f70fe26503b4))
|
|
33
|
+
* enable automated PyPI release pipeline ([cf8e0df](https://github.com/tylerriccio33/pl-row-encode/commit/cf8e0df43bfb00ec3356648dc26204855462925f))
|