Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 36 additions & 53 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,64 +5,47 @@ 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).

## [Unreleased]
## [2.0.0] - 2025-10-13

### Changed
- **License changed from PSF-2.0 to MIT** - More permissive and standard for open source libraries
- Migrated from setuptools to modern UV/hatchling build system
- Migrated README from RST to Markdown format with executable code examples
- Dropped support for Python 3.4-3.8 (now requires Python 3.9+)
- Replaced `python -m doctest README.rst` with pytest-markdown-docs for testing examples
- Converted tests from unittest to pytest style (native assert statements, fixtures)
- Restructured package from single file (`urlpath.py`) to proper package directory (`urlpath/__init__.py`)
- Converted README examples from RST doctest format to executable Python code blocks
- Reorganized test directory from `test/` to `tests/` (following pytest conventions)
- Enhanced pytest configuration with strict mode and warning filters
- Consolidated and cleaned up `.gitignore` file with modern Python tooling patterns
- Replaced Travis CI with GitHub Actions for all CI/CD workflows
- Updated GitHub Actions workflows to use modern actions and UV package manager
- Modernized code formatting (improved consistency and readability)
- Centralized all package metadata in `pyproject.toml` (removed from module docstring)
- **Updated all docstrings from reStructuredText to Google/NumPy style** (Args/Returns/Raises format)
- **Refactored monolithic module into modular structure**: Split `urlpath/__init__.py` (1540 lines) into `_compat.py`, `_utils.py`, `_flavour.py`, and `_url.py` for better maintainability
- **Centralized Python version checking**: Replaced 18 scattered `sys.version_info >= (3, 12)` checks with single `IS_PY312_PLUS` constant in `_compat.py`
- **Added `cleanup_escapes()` helper function**: Eliminated 6 duplicate `.replace("\\x00", "/")` patterns for cleaner code
- **Made WebOb a required test dependency**: Removed conditional imports and test skips to ensure WebOb integration is always tested
- **License changed from PSF to MIT**
- **Dropped support for Python 3.4-3.8** (now requires Python 3.9+)
- **Added support for Python 3.11, 3.12, 3.13, and 3.14**
- Build system migrated from setuptools to UV/hatchling
- README format changed from RST to Markdown
- Package structure changed from single-file module (`urlpath.py`, 689 lines) to multi-module package (`urlpath/__init__.py` + 4 submodules, 1852 total lines)
- Test directory renamed from `test/` to `tests/`
- Tests converted from unittest style to pytest style
- GitHub Actions workflow updated to use UV package manager and test Python 3.9-3.14
- GitHub Actions `deploy.yml` replaced with `release.yml` for PyPI releases
- `.gitignore` simplified from 103 lines to 29 lines
- Internal Python version checks consolidated into `IS_PY312_PLUS` constant in `_compat.py`
- Duplicate escape sequence handling patterns replaced with `cleanup_escapes()` helper function in `_utils.py`

### Added
- `.python-version` file for Python version management
- Comprehensive Makefile with development targets (test, lint, format, build, clean, etc.)
- Ruff for both linting and code formatting
- mypy for static type checking with relaxed configuration
- pytest as the test runner (replacing unittest CLI)
- pytest-markdown-docs for testing README code examples
- `conftest.py` for pytest sys.path configuration
- GitHub Actions workflow for automated releases to PyPI (`release.yml`)
- Separate CI jobs for linting/formatting/type checking vs. tests
- Pre-commit hooks configuration (`.pre-commit-config.yaml`)
- Keywords in `pyproject.toml` for better PyPI discoverability
- Downloads badge in README.md
- MIT LICENSE file
- CHANGELOG.md file (this file)
- `.github/copilot-instructions.md` for AI-assisted development
- `uv.lock` for reproducible dependency resolution
- **`from __future__ import annotations`** for modern type annotation support in Python 3.9+
- **Complete type annotations** for all 56+ functions, methods, and properties
- **Comprehensive docstrings** for all public classes, functions, methods, and properties
- **Pydocstyle linting** (Ruff "D" rules) to enforce documentation consistency
- **Type annotations for all test functions** (`-> None` return types)
- **Docstrings for magic methods** (`__str__`, `__bytes__`, etc.)
- **Test coverage for constructor canonicalization**: Tests for `SplitResult`, `ParseResult`, `bytes`, and `__fspath__` inputs
- **Test coverage for multi-argument URL construction**: Validates that `URL("base", "child", "../final")` matches chained joinpath semantics
- `.python-version` file (specifies 3.9-3.14)
- `Makefile` with development targets (install, test, lint, format, check, build, clean, help)
- `pyproject.toml` for all package configuration and metadata
- `conftest.py` for pytest configuration
- `.pre-commit-config.yaml` for automated code quality checks
- `LICENSE` file (MIT)
- `CHANGELOG.md` (this file)
- `uv.lock` for dependency locking
- `.github/copilot-instructions.md` for AI development assistance
- Ruff for linting and formatting
- mypy for type checking
- pytest and pytest-markdown-docs for testing
- Type annotations (`from __future__ import annotations` and full typing throughout)
- Comprehensive docstrings for all classes, methods, and properties
- Additional test coverage (constructor canonicalization, multi-argument construction, JMESPath filtering)

### Removed
- `setup.py` (replaced by `pyproject.toml`)
- `MANIFEST` file (replaced by hatchling configuration)
- `README.rst` (replaced by `README.md`)
- `deploy.yml` workflow (replaced by `release.yml`)
- Support for Python 3.4, 3.5, 3.6, 3.7, and 3.8
- Travis CI configuration (replaced by GitHub Actions)
- `setup.py`
- `MANIFEST` file
- `README.rst`
- `.github/workflows/deploy.yml`
- Travis CI badge from README

## [1.2.0] - (Previous release)
## [1.2.0] - 2021-11-12

See git history for changes prior to modernization.
See git history for changes prior to this release.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "hatchling.build"

[project]
name = "urlpath"
version = "1.2.0"
version = "2.0.0"
description = "Object-oriented URL from urllib.parse and pathlib"
readme = "README.md"
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.