Metadata-Version: 2.3
Name: archivepodcast
Version: 1.5.9
Summary: Flask webapp that will archive a podcast from a RSS feed. It will download the episodes and re-host them.
Author: Kieran Gee
Author-email: Kieran Gee <kieran.lost.the.game@gmail.com>
Requires-Dist: flask[async]>=3.1,<4
Requires-Dist: aiobotocore>=2.25.2
Requires-Dist: aiohttp>=3.13.2
Requires-Dist: jinja2>=3.1,<4
Requires-Dist: lxml>=5,<5.4
Requires-Dist: markdown>=3.10
Requires-Dist: psutil>=7.1.3
Requires-Dist: pydantic>=2.12
Requires-Dist: pydantic-settings>=2.12
Requires-Dist: python-magic>=0.4
Requires-Dist: rich>=14.2.0
Requires-Dist: typed-ffmpeg>=3.7
Requires-Dist: waitress>=3.0
Requires-Dist: sphinx ; extra == 'docs'
Requires-Dist: myst-parser ; extra == 'docs'
Requires-Dist: sphinx-rtd-theme ; extra == 'docs'
Requires-Dist: ruff ; extra == 'lint'
Requires-Dist: aiomonitor ; extra == 'profile'
Requires-Dist: pytest>=9.0 ; extra == 'test'
Requires-Dist: pytest-cov ; extra == 'test'
Requires-Dist: pytest-mock ; extra == 'test'
Requires-Dist: pytest-random-order ; extra == 'test'
Requires-Dist: detect-test-pollution ; extra == 'test'
Requires-Dist: types-aiobotocore-s3 ; extra == 'test'
Requires-Dist: pytest-asyncio ; extra == 'test'
Requires-Dist: pytest-socket>=0.7.0 ; extra == 'test'
Requires-Dist: mypy ; extra == 'type'
Requires-Dist: ty ; extra == 'type'
Requires-Dist: types-lxml ; extra == 'type'
Requires-Dist: types-psutil ; extra == 'type'
Requires-Dist: types-markdown ; extra == 'type'
Requires-Dist: botocore-stubs ; extra == 'type'
Requires-Dist: types-aiobotocore ; extra == 'type'
Requires-Dist: types-aiobotocore-s3 ; extra == 'type'
Requires-Dist: aws-lambda-powertools ; extra == 'type'
Requires-Python: >=3.11, <3.15
Project-URL: docs, https://archivepodcast.readthedocs.io/
Project-URL: repository, https://github.com/kism/archivepodcast
Provides-Extra: docs
Provides-Extra: lint
Provides-Extra: profile
Provides-Extra: test
Provides-Extra: type
Description-Content-Type: text/markdown

# Archive Podcast

[![Check](https://github.com/kism/archivepodcast/actions/workflows/check.yml/badge.svg)](https://github.com/kism/archivepodcast/actions/workflows/check.yml)
[![CheckType](https://github.com/kism/archivepodcast/actions/workflows/check_types.yml/badge.svg)](https://github.com/kism/archivepodcast/actions/workflows/check_types.yml)
[![Test](https://github.com/kism/archivepodcast/actions/workflows/test.yml/badge.svg)](https://github.com/kism/archivepodcast/actions/workflows/test.yml)
[![codecov](https://codecov.io/gh/kism/archivepodcast/graph/badge.svg?token=FPGDA0ODT7)](https://codecov.io/gh/kism/archivepodcast)
![PyPI - Version](https://img.shields.io/pypi/v/archivepodcast)
![Python Version from PEP 621 TOML](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Fkism%2Farchivepodcast%2Frefs%2Fheads%2Fmain%2Fpyproject.toml)

Flask webapp that will archive a podcast from a RSS feed. It will download the episodes and re-host them.

Features:

- Webapp

  - List of feeds hosted
  - File listing for unlisted episodes
  - Web player
  - Health check page
  - Looks for new episodes to fetch every hour

- Adhoc CLI / Worker

  - Run once or on a schedule to fetch new episodes

- Rename feeds to indicate that they are an archive
- Local or S3 storage backend

## Todo

- check age of rendered / static pages or use checksum to avoid collisions
- serverless
  - config from s3
- fix readme again
- pydantic xml

Prod time to beat running adhoc, 56 seconds, current: 9s
