Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
305c9ec
feat!: remove legacy pydantic v1 models
dhvcc Jul 22, 2026
9adf559
feat!: spec-compliant, generic, lossless models
dhvcc Jul 22, 2026
72bfef9
feat: friendlier Tag ergonomics
dhvcc Jul 22, 2026
b16bbca
feat: typed Apple Podcasts (itunes) schema
dhvcc Jul 22, 2026
1035e57
feat: RSS 1.0 (RDF Site Summary) models
dhvcc Jul 22, 2026
aa82fdc
feat: universal parse() with feed type detection
dhvcc Jul 22, 2026
6f1e663
docs: rewrite README and add mkdocs documentation site
dhvcc Jul 22, 2026
9803c93
chore: bump to 4.0.0, update deps and CI
dhvcc Jul 22, 2026
ef0c46d
test: JSON snapshot suite and coverage for 4.0 features
dhvcc Jul 22, 2026
095df6c
ci: allow manual workflow runs via workflow_dispatch
dhvcc Jul 22, 2026
8ad98b4
build!: migrate from poetry to uv
dhvcc Jul 22, 2026
a715356
build: commit uv.lock, un-ignore it over the global gitignore
dhvcc Jul 22, 2026
660ffda
chore: bump pre-commit-hooks to v6.0.0
dhvcc Jul 22, 2026
37212db
fix!: actually flatten json_plain/dict_plain, make dumps round-trip
dhvcc Jul 22, 2026
4335b5f
feat: raise InvalidXMLError for malformed XML
dhvcc Jul 22, 2026
eed42a1
fix: make Atom updated optional - real-world feeds omit it
dhvcc Jul 22, 2026
83fe2d4
test: real-world corpus, property-based suite, coverage floor
dhvcc Jul 22, 2026
ece30b5
docs: error contract, test architecture, migration notes
dhvcc Jul 22, 2026
ebea36d
fix: recognize namespace-prefixed Atom feed roots
dhvcc Jul 23, 2026
e62540d
fix: respect dump options in dict_plain/json_plain
dhvcc Jul 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 11 additions & 14 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
name: Lint and test

on:
workflow_dispatch:
schedule:
- cron: "0 0 1 * *"
push:
Expand All @@ -9,6 +10,8 @@ on:
- "README.md"
- "pre-commit-config.yaml"
- "LICENSE"
- "docs/**"
- "mkdocs.yml"

jobs:
test:
Expand All @@ -23,29 +26,23 @@ jobs:
steps:
- uses: actions/checkout@v4.2.2

- name: Install poetry
run: pipx install poetry

- name: Set up Python ${{ matrix.python-version }} on ${{ matrix.os }}
id: setup-python
uses: actions/setup-python@v5.6.0
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
python-version: ${{ matrix.python-version }}
cache-dependency-path: pyproject.toml
cache: poetry

- name: Install dependencies
if: steps.setup-python.outputs.cache-hit != 'true'
run: poetry install
run: uv sync --locked

- name: Lint code with black
run: poetry run black --check .
run: uv run black --check .

- name: Lint code with ruff
run: poetry run ruff check .
run: uv run ruff check .

- name: Lint code with mypy
run: poetry run mypy rss_parser
run: uv run mypy rss_parser

- name: Test code with pytest
run: poetry run pytest --doctest-modules
run: uv run pytest --doctest-modules rss_parser tests --cov=rss_parser
32 changes: 32 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Deploy docs

on:
push:
branches:
- master
paths:
- "docs/**"
- "mkdocs.yml"
- ".github/workflows/docs.yml"
workflow_dispatch:

permissions:
contents: write

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.2.2

- name: Install uv
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
python-version: "3.12"

- name: Install dependencies
run: uv sync --locked --group docs

- name: Deploy to gh-pages
run: uv run mkdocs gh-deploy --force
17 changes: 11 additions & 6 deletions .github/workflows/publish_to_pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,16 @@ on:
# TODO: Only on CI success

jobs:
build-and-test-publish:
build-and-publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Build and publish to pypi
uses: JRubics/poetry-publish@v1.9
with:
pypi_token: ${{ secrets.pypi_password }}
- uses: actions/checkout@v4.2.2

- name: Install uv
uses: astral-sh/setup-uv@v6

- name: Build sdist and wheel
run: uv build

- name: Publish to PyPI
run: uv publish --token ${{ secrets.pypi_password }}
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -116,3 +116,9 @@ venv.bak/
.ruff_cache
.python-version
.DS_Store

# mkdocs build output
site/

# uv lockfile must be committed (overrides global ignore)
!uv.lock
18 changes: 9 additions & 9 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,47 +1,47 @@
repos:
# Use pre-commit repo, v3.4.0
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: "v3.4.0"
rev: "v6.0.0"
hooks:
# Check for files that contain merge conflict strings.
- id: check-merge-conflict
stages: [ commit, push ]
stages: [ pre-commit, pre-push ]
# Simply check whether files parse as valid python.
- id: check-ast
stages: [ commit ]
stages: [ pre-commit ]

# Use locally installed hooks
- repo: local

hooks:
- id: black-format-staged
name: black
entry: poetry
entry: uv
args:
- run
- black
language: system
types: [ python ]
stages: [ commit ]
stages: [ pre-commit ]

- id: mypy-check-staged
name: mypy
entry: poetry
entry: uv
args:
- run
- mypy
- rss_parser
pass_filenames: false
language: system
stages: [ push ]
stages: [ pre-push ]

- id: ruff-check-global
name: ruff
entry: poetry
entry: uv
args:
- run
- ruff
- check
language: system
types: [ python ]
stages: [ commit, push ]
stages: [ pre-commit, pre-push ]
Loading
Loading