"""Migration version parsing and comparison utilities.
Provides structured parsing of migration versions supporting both legacy sequential
(0001) and timestamp-based (20251011120000) formats with type-safe comparison.
"""
import re
from dataclasses import dataclass
from datetime import datetime, timezone
from enum import Enum
from typing import TYPE_CHECKING, final
if TYPE_CHECKING:
from pathlib import Path
from sqlspec.utils.logging import get_logger
__all__ = (
"MigrationVersion",
"VersionType",
"convert_to_sequential_version",
"generate_conversion_map",
"generate_timestamp_version",
"get_next_sequential_number",
"is_sequential_version",
"is_timestamp_version",
"parse_extension_stem",
"parse_version",
)
logger = get_logger(__name__)
SEQUENTIAL_PATTERN = re.compile(r"^(?!\d{14}$)\d+$")
TIMESTAMP_PATTERN = re.compile(r"^(\d{14})$")
EXTENSION_PATTERN = re.compile(r"^ext_(\w+)_(.+)$")
EXTENSION_STEM_PATTERN = re.compile(r"^ext_(?P<name>\w+?)_(?P<version>\d+)(?:_.*)?$")
class VersionType(Enum):
"""Migration version format type."""
SEQUENTIAL = "sequential"
TIMESTAMP = "timestamp"