- Add AI code generation requirements to AGENTS.md - Add module-level docstrings to all 46 Python modules - Add detailed Google-style docstrings to all classes and functions - Remove all inline comments following self-documenting code principle - Include Args, Returns, Raises sections in function docstrings - Add Attributes and Examples sections to class docstrings
51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
"""Title value object.
|
|
|
|
This module defines the Title value object for blog post titles
|
|
with validation for minimum and maximum length constraints.
|
|
"""
|
|
|
|
from dataclasses import dataclass
|
|
|
|
from app.domain.value_objects.base import ValueObject
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class Title(ValueObject[str]):
|
|
"""Blog post title value object.
|
|
|
|
Wraps and validates blog post titles ensuring they meet length
|
|
requirements and are not empty.
|
|
|
|
Attributes:
|
|
value: The title string value.
|
|
MIN_LENGTH: Minimum allowed title length (3 characters).
|
|
MAX_LENGTH: Maximum allowed title length (200 characters).
|
|
|
|
Raises:
|
|
ValueError: If title is empty, too short, or too long.
|
|
|
|
Example:
|
|
>>> title = Title("My Blog Post")
|
|
>>> print(title.value)
|
|
"""
|
|
|
|
MIN_LENGTH: int = 3
|
|
MAX_LENGTH: int = 200
|
|
|
|
def _validate(self) -> None:
|
|
"""Validate title string.
|
|
|
|
Checks that title is a non-empty string within length bounds.
|
|
|
|
Raises:
|
|
ValueError: If title fails validation criteria.
|
|
"""
|
|
if not isinstance(self.value, str):
|
|
raise ValueError("Title must be a string")
|
|
if len(self.value) < self.MIN_LENGTH:
|
|
raise ValueError(f"Title must be at least {self.MIN_LENGTH} characters")
|
|
if len(self.value) > self.MAX_LENGTH:
|
|
raise ValueError(f"Title must be at most {self.MAX_LENGTH} characters")
|
|
if not self.value.strip():
|
|
raise ValueError("Title cannot be empty or whitespace")
|