# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.5.3]

### Fixed

- Restored installed-package metadata lookup path in `get_resource_path` (v1.5.2 inadvertently removed the `.parent.parent` candidate when adding `.parent.parent.parent` for dev environment)

## [1.5.2]

### Fixed

- Fixed CLI metadata resolution after refactoring (`get_resource_path` path traversal updated for new `cli/` subdirectory)

## [1.5.1]

### Changed

- CLI dependencies (`typer`, `rich`) moved to optional extras (`pip install pypi-package-stats[cli]`)
- Library installable without CLI dependencies (`pip install pypi-package-stats`)
- Reorganized package structure: consolidated CLI code into `cli/` package, removed `output/` directory
- Moved `get_upload_time` from `output/utils.py` to `core/processing.py`
- README reorganized to be library-focused with API reference tables
- Graceful error message when CLI invoked without `[cli]` extras installed

### Added

- Dedicated CLI Guide (`CLI.md`) with full command reference and troubleshooting
- API Reference documentation page with mkdocstrings integration
- `[project.optional-dependencies] cli` extra in `pyproject.toml`

## [1.5.0]

### Added

- Request throttling for rate-limited hosts (e.g. pypistats.org) to avoid 429s

### Changed

- CI workflow now tests on Python 3.8 through 3.14
- Safe date parsing for Python version breakdown (handles invalid date strings)
- More robust repository URL handling: strip `.git` suffix only when URL ends with `.git`
- Renamed loop variable `os` to `os_stat` in models to avoid shadowing the `os` module

## [1.4.0]

### Added

- Public Python API (`get_package_stats` function) for programmatic access to PyPI package statistics
- Automatic retry mechanism with exponential backoff for handling transient network errors and rate limits
- Custom exception hierarchy (`PyPIStatsError`, `PackageNotFoundError`, `APIError`) for better error handling
- Comprehensive test suite with unit tests for core functionality (client, cache, processing, utilities)
- GitHub Actions CI/CD workflow for automated testing across Python 3.8-3.12
- Test fixtures and sample data for reliable testing

### Changed

- Major codebase refactoring with improved architecture and separation of concerns
- Reorganized code structure: moved core functionality to `core/` directory (client, cache, exceptions, models, processing, constants)
- Introduced `api.py` module providing clean public API interface
- Enhanced README documentation with clearer structure and examples

## [1.3.2]

### Added

- Google Search Console verification meta tag for improved SEO tracking
- Comprehensive keywords list in mkdocs.yml for better search engine discoverability
- Open Graph image metadata for enhanced social media sharing
- Structured metadata (description, keywords, author info) to documentation pages (CHANGELOG.md, CONTRIBUTING.md, LICENSE.md, index.md)
- `extract_repo_name` utility function supporting GitHub, GitLab, and Bitbucket URL parsing

### Changed

- Redesigned CLI welcome banner with compact 2-line Unicode block style (replacing large ASCII art)
- Banner title now dynamically displays repository name (e.g., "owner/repo") instead of static "Welcome" text
- Streamlined README.md by removing verbose sections and reorganizing content into concise tables
- Updated example output image with new banner design


## [1.3.1]

### Fixed

- Fixed pyproject.toml Missing error by forcing inclusion in wheel build
- Fixed get_resource_path function to fetch pyproject.toml from the correct path

## [1.3.0]

### Fixed

- Fixed pyproject.toml parsing error by improving path resolution for PyInstaller and different execution environments

### Added

- PyPI downloads badge to README
- MkDocs theme overrides for improved documentation styling

### Changed

- Improved README flow and formatting
- Enhanced rate limiting documentation with clearer explanations

## [1.2.0]

### Added

- MkDocs documentation site with GitHub Pages deployment
- GitHub Actions workflow for automated documentation deployment
- Refactored CONTRIBUTING.md with comprehensive contribution guidelines
- Documentation site accessible at https://ysskrishna.github.io/pypi-package-stats/

### Changed

- Updated nestedutils dependency to v1.1.2
- Improved package keywords for better discoverability on PyPI
- Updated documentation URL in pyproject.toml to point to GitHub Pages
- Enhanced README with documentation badge and improved structure

## [1.1.0]

### Added

- Development documentation (DEVELOPMENT.md) with contribution guidelines
- Release documentation (RELEASE.md) with release process instructions
- Human-readable date formatting for package upload times (e.g., "December 7, 2025")
- OS name normalization (darwin → macOS, windows → Windows, linux → Linux)
- CLI welcome banner with ASCII art about the project
- Example output image in media directory

### Changed
- Improved CLI help text formatting and clarity
- Enhanced README documentation with better structure and examples
- Refined default value handling for better user experience
- Improved CLI output formatting and consistency

## [1.0.0]

### Added
- Initial release of PyPI Package Stats
- CLI tool to fetch comprehensive PyPI package information
- Package metadata display:
  - Name, version, upload time
  - Description, author, license
  - Home page and PyPI URL
- Download statistics:
  - Last day, week, month, and 180-day download counts
  - Excludes mirror downloads
- Python version breakdown:
  - Top 5 Python versions (last 30 days)
  - Download percentages and counts
- Operating system distribution:
  - Top 4 operating systems (last 30 days)
  - Download percentages and counts
- JSON output format option
- Persistent disk caching with configurable TTL (default: 3600 seconds)
- Cache management commands:
  - Clear cache
  - View cache information
- Rich terminal output with formatted tables
- Support for Python 3.8+

[1.5.3]: https://github.com/ysskrishna/pypi-package-stats/compare/v1.5.2...v1.5.3
[1.5.2]: https://github.com/ysskrishna/pypi-package-stats/compare/v1.5.1...v1.5.2
[1.5.1]: https://github.com/ysskrishna/pypi-package-stats/compare/v1.5.0...v1.5.1
[1.5.0]: https://github.com/ysskrishna/pypi-package-stats/compare/v1.4.0...v1.5.0
[1.4.0]: https://github.com/ysskrishna/pypi-package-stats/compare/v1.3.2...v1.4.0
[1.3.2]: https://github.com/ysskrishna/pypi-package-stats/compare/v1.3.1...v1.3.2
[1.3.1]: https://github.com/ysskrishna/pypi-package-stats/compare/v1.3.0...v1.3.1
[1.3.0]: https://github.com/ysskrishna/pypi-package-stats/compare/v1.2.0...v1.3.0
[1.2.0]: https://github.com/ysskrishna/pypi-package-stats/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/ysskrishna/pypi-package-stats/compare/v1.0.0...v1.1.0
[1.0.0]: https://github.com/ysskrishna/pypi-package-stats/releases/tag/v1.0.0

