Fix all Pydantic v2 deprecation warnings (17 model classes)
Convert deprecated class Config pattern to modern ConfigDict pattern across all data models: - models/asset.py: Updated 6 classes (AssetFolder, Asset, AssetUpload, AssetRename, AssetMove, FolderCreate) - models/group.py: Updated 8 classes (GroupPermission, GroupPageRule, GroupUser, Group, GroupCreate, GroupUpdate, GroupAssignUser, GroupUnassignUser) - models/user.py: Updated 3 classes (User, UserCreate, UserUpdate) Changes: - Added ConfigDict import from pydantic - Replaced 'class Config:' with 'model_config = ConfigDict(...)' - Preserved all config options (populate_by_name, str_strip_whitespace) Impact: - Eliminated 19 Pydantic deprecation warnings - All 423 tests still passing - No breaking changes to functionality - Future-proofed for Pydantic v3 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from pydantic import Field, field_validator
|
from pydantic import ConfigDict, Field, field_validator
|
||||||
|
|
||||||
from .base import BaseModel, TimestampedModel
|
from .base import BaseModel, TimestampedModel
|
||||||
|
|
||||||
@@ -10,15 +10,12 @@ from .base import BaseModel, TimestampedModel
|
|||||||
class AssetFolder(BaseModel):
|
class AssetFolder(BaseModel):
|
||||||
"""Asset folder model."""
|
"""Asset folder model."""
|
||||||
|
|
||||||
|
model_config = ConfigDict(populate_by_name=True)
|
||||||
|
|
||||||
id: int = Field(..., description="Folder ID")
|
id: int = Field(..., description="Folder ID")
|
||||||
slug: str = Field(..., description="Folder slug/path")
|
slug: str = Field(..., description="Folder slug/path")
|
||||||
name: Optional[str] = Field(None, description="Folder name")
|
name: Optional[str] = Field(None, description="Folder name")
|
||||||
|
|
||||||
class Config:
|
|
||||||
"""Pydantic configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
|
|
||||||
|
|
||||||
class Asset(TimestampedModel):
|
class Asset(TimestampedModel):
|
||||||
"""Wiki.js asset model.
|
"""Wiki.js asset model.
|
||||||
@@ -75,10 +72,7 @@ class Asset(TimestampedModel):
|
|||||||
"""Get file size in kilobytes."""
|
"""Get file size in kilobytes."""
|
||||||
return self.file_size / 1024
|
return self.file_size / 1024
|
||||||
|
|
||||||
class Config:
|
model_config = ConfigDict(populate_by_name=True)
|
||||||
"""Pydantic configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
|
|
||||||
|
|
||||||
class AssetUpload(BaseModel):
|
class AssetUpload(BaseModel):
|
||||||
@@ -102,10 +96,7 @@ class AssetUpload(BaseModel):
|
|||||||
raise ValueError("File path cannot be empty")
|
raise ValueError("File path cannot be empty")
|
||||||
return v.strip()
|
return v.strip()
|
||||||
|
|
||||||
class Config:
|
model_config = ConfigDict(populate_by_name=True)
|
||||||
"""Pydantic configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
|
|
||||||
|
|
||||||
class AssetRename(BaseModel):
|
class AssetRename(BaseModel):
|
||||||
@@ -137,10 +128,7 @@ class AssetRename(BaseModel):
|
|||||||
raise ValueError("Filename cannot be empty")
|
raise ValueError("Filename cannot be empty")
|
||||||
return v.strip()
|
return v.strip()
|
||||||
|
|
||||||
class Config:
|
model_config = ConfigDict(populate_by_name=True)
|
||||||
"""Pydantic configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
|
|
||||||
|
|
||||||
class AssetMove(BaseModel):
|
class AssetMove(BaseModel):
|
||||||
@@ -170,10 +158,7 @@ class AssetMove(BaseModel):
|
|||||||
raise ValueError("Folder ID must be non-negative")
|
raise ValueError("Folder ID must be non-negative")
|
||||||
return v
|
return v
|
||||||
|
|
||||||
class Config:
|
model_config = ConfigDict(populate_by_name=True)
|
||||||
"""Pydantic configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
|
|
||||||
|
|
||||||
class FolderCreate(BaseModel):
|
class FolderCreate(BaseModel):
|
||||||
@@ -199,7 +184,4 @@ class FolderCreate(BaseModel):
|
|||||||
raise ValueError("Slug cannot be just slashes")
|
raise ValueError("Slug cannot be just slashes")
|
||||||
return v
|
return v
|
||||||
|
|
||||||
class Config:
|
model_config = ConfigDict(populate_by_name=True)
|
||||||
"""Pydantic configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
|
|
||||||
from pydantic import Field, field_validator
|
from pydantic import ConfigDict, Field, field_validator
|
||||||
|
|
||||||
from .base import BaseModel, TimestampedModel
|
from .base import BaseModel, TimestampedModel
|
||||||
|
|
||||||
@@ -10,18 +10,17 @@ from .base import BaseModel, TimestampedModel
|
|||||||
class GroupPermission(BaseModel):
|
class GroupPermission(BaseModel):
|
||||||
"""Group permission model."""
|
"""Group permission model."""
|
||||||
|
|
||||||
|
model_config = ConfigDict(populate_by_name=True)
|
||||||
|
|
||||||
id: str = Field(..., description="Permission identifier")
|
id: str = Field(..., description="Permission identifier")
|
||||||
name: Optional[str] = Field(None, description="Permission name")
|
name: Optional[str] = Field(None, description="Permission name")
|
||||||
|
|
||||||
class Config:
|
|
||||||
"""Pydantic configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
|
|
||||||
|
|
||||||
class GroupPageRule(BaseModel):
|
class GroupPageRule(BaseModel):
|
||||||
"""Group page access rule model."""
|
"""Group page access rule model."""
|
||||||
|
|
||||||
|
model_config = ConfigDict(populate_by_name=True)
|
||||||
|
|
||||||
id: str = Field(..., description="Rule identifier")
|
id: str = Field(..., description="Rule identifier")
|
||||||
path: str = Field(..., description="Page path pattern")
|
path: str = Field(..., description="Page path pattern")
|
||||||
roles: List[str] = Field(default_factory=list, description="Allowed roles")
|
roles: List[str] = Field(default_factory=list, description="Allowed roles")
|
||||||
@@ -29,24 +28,16 @@ class GroupPageRule(BaseModel):
|
|||||||
deny: bool = Field(default=False, description="Whether this is a deny rule")
|
deny: bool = Field(default=False, description="Whether this is a deny rule")
|
||||||
locales: List[str] = Field(default_factory=list, description="Allowed locales")
|
locales: List[str] = Field(default_factory=list, description="Allowed locales")
|
||||||
|
|
||||||
class Config:
|
|
||||||
"""Pydantic configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
|
|
||||||
|
|
||||||
class GroupUser(BaseModel):
|
class GroupUser(BaseModel):
|
||||||
"""User member of a group (minimal representation)."""
|
"""User member of a group (minimal representation)."""
|
||||||
|
|
||||||
|
model_config = ConfigDict(populate_by_name=True)
|
||||||
|
|
||||||
id: int = Field(..., description="User ID")
|
id: int = Field(..., description="User ID")
|
||||||
name: str = Field(..., description="User name")
|
name: str = Field(..., description="User name")
|
||||||
email: str = Field(..., description="User email")
|
email: str = Field(..., description="User email")
|
||||||
|
|
||||||
class Config:
|
|
||||||
"""Pydantic configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
|
|
||||||
|
|
||||||
class Group(TimestampedModel):
|
class Group(TimestampedModel):
|
||||||
"""Wiki.js group model.
|
"""Wiki.js group model.
|
||||||
@@ -95,10 +86,7 @@ class Group(TimestampedModel):
|
|||||||
raise ValueError("Group name cannot exceed 255 characters")
|
raise ValueError("Group name cannot exceed 255 characters")
|
||||||
return v.strip()
|
return v.strip()
|
||||||
|
|
||||||
class Config:
|
model_config = ConfigDict(populate_by_name=True)
|
||||||
"""Pydantic configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
|
|
||||||
|
|
||||||
class GroupCreate(BaseModel):
|
class GroupCreate(BaseModel):
|
||||||
@@ -111,6 +99,8 @@ class GroupCreate(BaseModel):
|
|||||||
page_rules: List of page access rule configurations
|
page_rules: List of page access rule configurations
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
model_config = ConfigDict(populate_by_name=True)
|
||||||
|
|
||||||
name: str = Field(..., min_length=1, max_length=255, description="Group name")
|
name: str = Field(..., min_length=1, max_length=255, description="Group name")
|
||||||
redirect_on_login: Optional[str] = Field(
|
redirect_on_login: Optional[str] = Field(
|
||||||
None, alias="redirectOnLogin", description="Redirect path on login"
|
None, alias="redirectOnLogin", description="Redirect path on login"
|
||||||
@@ -134,11 +124,6 @@ class GroupCreate(BaseModel):
|
|||||||
raise ValueError("Group name cannot exceed 255 characters")
|
raise ValueError("Group name cannot exceed 255 characters")
|
||||||
return v.strip()
|
return v.strip()
|
||||||
|
|
||||||
class Config:
|
|
||||||
"""Pydantic configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
|
|
||||||
|
|
||||||
class GroupUpdate(BaseModel):
|
class GroupUpdate(BaseModel):
|
||||||
"""Model for updating an existing group.
|
"""Model for updating an existing group.
|
||||||
@@ -152,6 +137,8 @@ class GroupUpdate(BaseModel):
|
|||||||
page_rules: Updated page access rules
|
page_rules: Updated page access rules
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
model_config = ConfigDict(populate_by_name=True)
|
||||||
|
|
||||||
name: Optional[str] = Field(
|
name: Optional[str] = Field(
|
||||||
None, min_length=1, max_length=255, description="Group name"
|
None, min_length=1, max_length=255, description="Group name"
|
||||||
)
|
)
|
||||||
@@ -177,11 +164,6 @@ class GroupUpdate(BaseModel):
|
|||||||
raise ValueError("Group name cannot exceed 255 characters")
|
raise ValueError("Group name cannot exceed 255 characters")
|
||||||
return v.strip()
|
return v.strip()
|
||||||
|
|
||||||
class Config:
|
|
||||||
"""Pydantic configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
|
|
||||||
|
|
||||||
class GroupAssignUser(BaseModel):
|
class GroupAssignUser(BaseModel):
|
||||||
"""Model for assigning a user to a group.
|
"""Model for assigning a user to a group.
|
||||||
@@ -191,14 +173,11 @@ class GroupAssignUser(BaseModel):
|
|||||||
user_id: User ID
|
user_id: User ID
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
model_config = ConfigDict(populate_by_name=True)
|
||||||
|
|
||||||
group_id: int = Field(..., alias="groupId", description="Group ID")
|
group_id: int = Field(..., alias="groupId", description="Group ID")
|
||||||
user_id: int = Field(..., alias="userId", description="User ID")
|
user_id: int = Field(..., alias="userId", description="User ID")
|
||||||
|
|
||||||
class Config:
|
|
||||||
"""Pydantic configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
|
|
||||||
|
|
||||||
class GroupUnassignUser(BaseModel):
|
class GroupUnassignUser(BaseModel):
|
||||||
"""Model for removing a user from a group.
|
"""Model for removing a user from a group.
|
||||||
@@ -208,10 +187,7 @@ class GroupUnassignUser(BaseModel):
|
|||||||
user_id: User ID
|
user_id: User ID
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
model_config = ConfigDict(populate_by_name=True)
|
||||||
|
|
||||||
group_id: int = Field(..., alias="groupId", description="Group ID")
|
group_id: int = Field(..., alias="groupId", description="Group ID")
|
||||||
user_id: int = Field(..., alias="userId", description="User ID")
|
user_id: int = Field(..., alias="userId", description="User ID")
|
||||||
|
|
||||||
class Config:
|
|
||||||
"""Pydantic configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
import re
|
import re
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
|
|
||||||
from pydantic import EmailStr, Field, field_validator
|
from pydantic import ConfigDict, EmailStr, Field, field_validator
|
||||||
|
|
||||||
from .base import BaseModel, TimestampedModel
|
from .base import BaseModel, TimestampedModel
|
||||||
|
|
||||||
@@ -63,11 +63,7 @@ class User(TimestampedModel):
|
|||||||
|
|
||||||
return v.strip()
|
return v.strip()
|
||||||
|
|
||||||
class Config:
|
model_config = ConfigDict(populate_by_name=True, str_strip_whitespace=True)
|
||||||
"""Pydantic model configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
str_strip_whitespace = True
|
|
||||||
|
|
||||||
|
|
||||||
class UserCreate(BaseModel):
|
class UserCreate(BaseModel):
|
||||||
@@ -122,11 +118,7 @@ class UserCreate(BaseModel):
|
|||||||
|
|
||||||
return v
|
return v
|
||||||
|
|
||||||
class Config:
|
model_config = ConfigDict(populate_by_name=True, str_strip_whitespace=True)
|
||||||
"""Pydantic model configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
str_strip_whitespace = True
|
|
||||||
|
|
||||||
|
|
||||||
class UserUpdate(BaseModel):
|
class UserUpdate(BaseModel):
|
||||||
@@ -185,8 +177,4 @@ class UserUpdate(BaseModel):
|
|||||||
|
|
||||||
return v
|
return v
|
||||||
|
|
||||||
class Config:
|
model_config = ConfigDict(populate_by_name=True, str_strip_whitespace=True)
|
||||||
"""Pydantic model configuration."""
|
|
||||||
|
|
||||||
populate_by_name = True
|
|
||||||
str_strip_whitespace = True
|
|
||||||
|
|||||||
Reference in New Issue
Block a user