Manage Atom feeds in a persistent git repository

My goal is to build a CLI tool called thicket in Python that maintains a Git repository within which Atom feeds can be persisted, including their contents.

Python Environment and Package Management#

This project uses uv for Python package management and virtual environment handling.

Running Commands#

ALWAYS use uv run to execute Python commands:

  • Run the CLI: uv run -m thicket
  • Run tests: uv run pytest
  • Type checking: uv run mypy src/
  • Linting: uv run ruff check src/
  • Format code: uv run ruff format src/
  • Compile check: uv run python -m py_compile <file>

Package Management#

  • Add dependencies: uv add <package>
  • Add dev dependencies: uv add --dev <package>
  • Install dependencies: uv sync
  • Update dependencies: uv lock --upgrade

Project Structure#

The configuration file specifies:

  • the location of a git store
  • a list of usernames and target Atom/RSS feed(s) and optional metadata about the username such as their email, homepage, icon and display name
  • a cache directory to store temporary results such as feed downloads and their last modification date that speed up operations across runs of the tool

The Git data store should:

  • have a subdirectory per user
  • within that directory, an entry per Atom entry indexed by the Atom id for that entry. The id should be sanitised consistently to be a safe filename. RSS feed should be normalized to Atom before storing it.
  • within each entry file, the metadata of the Atom feed converted into a JSON format that preserves as much metadata as possible.
  • have a JSON file in the Git repository that indexes the users, their associated directories within the Git repository, and any other metadata about that user from the config file The CLI should be modern and use cool progress bars and any otfrom ecosystem libraries.

The intention behind the Git repository is that it can be queried by other websites in order to build a webblog structure of comments that link to other blogs.