diff --git a/CHANGELOG.md b/CHANGELOG.md index 4dbd291..42fc674 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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. diff --git a/pyproject.toml b/pyproject.toml index 1029afc..05d2d93 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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" diff --git a/uv.lock b/uv.lock index 0f67b60..2946ef4 100644 --- a/uv.lock +++ b/uv.lock @@ -581,7 +581,7 @@ wheels = [ [[package]] name = "urlpath" -version = "1.2.0" +version = "2.0.0" source = { editable = "." } dependencies = [ { name = "charset-normalizer" },