New Features
- bandersnatch is now a >= 3.8 Python project
- New size_project_metadata filter plugin, which can deny download of projects larger than defined threshold - `PR 806`
- Add option to compare file size and upload time instead of sha256sum for downloading - `PR 822`
- Add optional uvloop support - `PR 891` - Thanks **cooperlees**
- Move to official docker upload action w/arm64 images uploaded - `PR 896` - Thanks **cooperlees**
Deprecations
- blacklist/whitelist will no longer work in bandersnatch configuration - `PR 897` - Thanks **cooperlees**
- Please use allowlist/denylist respectively
Bug Fixes
- Unused storage plugins are loaded and cause non-fatal errors if dependencies are missing - `PR 799` - Thanks **electricworry**
- Replaced usages of `asynctest` with `unittest.mock` in tests - `PR 807` and `PR 856` - Thanks **ichard26**
- Remove debugging line that loads entire files into memory. - `PR 858` - Thanks **asrp**
- Removed terrible isinstance check of unittest.Mock in mirror.py - `PR 859` - Thanks **ichard26**
- Put potential time consuming IO operations into executor - `PR 877`
- Migrated Markdown documentation from recommonmark to MyST-Parser + docs config clean up - `PR 879` - Thanks **ichard26**
- Use `shutil.move()` for temp file management - `PR 883` - Thanks **happyaron**
- Fixed logging bug in `SizeProjectMetadataFilter` to show it activated - `PR 889` - Thanks **cooperlees**
- Attempt to wrap all potentially block calls in a ThreadPoolExecutor - `PR 894` - Thanks **cooperlees**