v0.0.9

SocAIty/SpeechCraftv0.0.9Jun 26, 2026by paulpierre

AI Summary

This release resolves six open issues, fixing critical bugs like `UnicodeEncodeError` and `UnboundLocalError`. It introduces community-requested features such as URL filtering, configurable markdown heading styles, and improved dependency management for `uvx` support.

Key Highlights

  • Fixed `UnicodeEncodeError` on non-ASCII content and `UnboundLocalError` in tag handling.
  • Added `exclude_paths` parameter for advanced URL filtering across CLI and functions.
  • Enabled `uvx` support via proper dependency declaration in `pyproject.toml`.
  • Configurable markdown heading styles (ATX, UNDERLINE, etc.) via CLI flag.
  • Bypassed JavaScript checks by sending a browser-like User-Agent header.

Breaking Changes

  • Minimum Python version bumped to 3.8.
  • Configuration format changed from `[tool.poetry.scripts]` to `[project.scripts]`.

New Features

  • `exclude_paths` parameter for URL filtering in `crawl()`, `get_target_links()`, `worker()`, `md_crawl()`, and CLI.
  • `heading_style` parameter for markdownify supporting ATX, ATX_CLOSED, UNDERLINE, and SETEX styles.
  • Proper `dependencies` in `pyproject.toml` enabling `uvx` support.
  • Comprehensive test suite with 60 tests and 95% coverage.

Full Release Notes

## What's New

This release resolves **6 open issues** and introduces several community-requested features.

### Fixed
- **#7** — `UnicodeEncodeError` on non-ASCII content. All file writes now use `encoding='utf-8'`.
- **#8** — Bypass JavaScript checks. A browser-like `User-Agent` header is now sent on all `requests.get` calls.
- **#10** — `target_content` CSS selector handling. Null `href` links are now skipped in `get_target_links`.
- **#11** — `UnboundLocalError` in `get_target_content` when no tags are found. `main_content` is now initialized to `None` and checked before `str()` conversion.

### Added
- **#9** — `exclude_paths` parameter for URL filtering. Available in `crawl()`, `get_target_links()`, `worker()`, `md_crawl()`, and the CLI (`-x` / `--exclude-paths`).
- **#20** — Configurable `heading_style` for markdownify (`ATX`, `ATX_CLOSED`, `UNDERLINE`, `SETEXT`). CLI flag: `-s` / `--heading-style`.
- **#17** — Proper `dependencies` in `pyproject.toml` (`beautifulsoup4`, `markdownify`, `requests`) enabling `uvx` support out of the box.
- Comprehensive test suite — 60 tests with 95% coverage across `__init__.py` (96%) and `cli.py` (88%).
- `dev` optional dependencies (`pytest`, `pytest-cov`) for contributors.

### Changed
- Minimum Python version bumped to 3.8.
- `pyproject.toml` now uses `[project.scripts]` instead of `[tool.poetry.scripts]`.

**Full changelog:** https://github.com/paulpierre/markdown-crawler/blob/main/CHANGELOG.md