mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 16:31:08 -05:00
Enhance type safety in version control system by adding UserModel TypeVar, improving type hints in managers.py and utils.py, and ensuring consistent type imports.
This commit is contained in:
@@ -1,19 +1,26 @@
|
||||
from typing import Optional, List, Dict, Any, Tuple, Union
|
||||
from typing import Optional, List, Dict, Any, Tuple, Type, TypeVar, cast
|
||||
from django.db import transaction
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.utils import timezone
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from .models import VersionBranch, VersionTag, ChangeSet
|
||||
|
||||
User = get_user_model()
|
||||
UserModel = TypeVar('UserModel', bound=AbstractUser)
|
||||
User = cast(Type[UserModel], get_user_model())
|
||||
|
||||
class BranchManager:
|
||||
"""Manages version control branch operations"""
|
||||
|
||||
def create_branch(self, name: str, parent: Optional[VersionBranch] = None,
|
||||
user: Optional['User'] = None) -> VersionBranch:
|
||||
@transaction.atomic
|
||||
def create_branch(
|
||||
self,
|
||||
name: str,
|
||||
parent: Optional[VersionBranch] = None,
|
||||
user: Optional[UserModel] = None
|
||||
) -> VersionBranch:
|
||||
"""Create a new version branch"""
|
||||
branch = VersionBranch.objects.create(
|
||||
name=name,
|
||||
parent=parent,
|
||||
@@ -27,8 +34,12 @@ class BranchManager:
|
||||
return branch
|
||||
|
||||
@transaction.atomic
|
||||
def merge_branches(self, source: VersionBranch, target: VersionBranch,
|
||||
user: Optional['User'] = None) -> Tuple[bool, List[Dict[str, Any]]]:
|
||||
def merge_branches(
|
||||
self,
|
||||
source: VersionBranch,
|
||||
target: VersionBranch,
|
||||
user: Optional[UserModel] = None
|
||||
) -> Tuple[bool, List[Dict[str, Any]]]:
|
||||
"""
|
||||
Merge source branch into target branch
|
||||
Returns: (success, conflicts)
|
||||
@@ -65,9 +76,15 @@ class BranchManager:
|
||||
class ChangeTracker:
|
||||
"""Tracks and manages changes across the system"""
|
||||
|
||||
def record_change(self, instance: Any, change_type: str,
|
||||
branch: VersionBranch, user: Optional['User'] = None,
|
||||
metadata: Optional[Dict] = None) -> ChangeSet:
|
||||
@transaction.atomic
|
||||
def record_change(
|
||||
self,
|
||||
instance: Any,
|
||||
change_type: str,
|
||||
branch: VersionBranch,
|
||||
user: Optional[UserModel] = None,
|
||||
metadata: Optional[Dict] = None
|
||||
) -> ChangeSet:
|
||||
"""Record a change in the system"""
|
||||
if not hasattr(instance, 'history'):
|
||||
raise ValueError("Instance must be a model with history tracking enabled")
|
||||
@@ -100,8 +117,11 @@ class ChangeTracker:
|
||||
class MergeStrategy:
|
||||
"""Handles merge operations and conflict resolution"""
|
||||
|
||||
def auto_merge(self, source: VersionBranch,
|
||||
target: VersionBranch) -> Tuple[bool, List[Dict[str, Any]]]:
|
||||
def auto_merge(
|
||||
self,
|
||||
source: VersionBranch,
|
||||
target: VersionBranch
|
||||
) -> Tuple[bool, List[Dict[str, Any]]]:
|
||||
"""
|
||||
Attempt automatic merge between branches
|
||||
Returns: (success, conflicts)
|
||||
@@ -155,8 +175,11 @@ class MergeStrategy:
|
||||
)
|
||||
|
||||
@transaction.atomic
|
||||
def _apply_change_to_branch(self, change: ChangeSet,
|
||||
target_branch: VersionBranch) -> None:
|
||||
def _apply_change_to_branch(
|
||||
self,
|
||||
change: ChangeSet,
|
||||
target_branch: VersionBranch
|
||||
) -> None:
|
||||
"""Apply a change from one branch to another"""
|
||||
# Create new changeset in target branch
|
||||
new_changeset = ChangeSet.objects.create(
|
||||
|
||||
Reference in New Issue
Block a user