From c7e53b652bcb3705f1a566c94e8cadb8b12f995d Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Oct 2025 01:49:39 +0000 Subject: [PATCH] Fix all Pydantic v2 deprecation warnings (17 model classes) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- wikijs/models/asset.py | 34 ++++++------------------- wikijs/models/group.py | 56 ++++++++++++------------------------------ wikijs/models/user.py | 20 +++------------ 3 files changed, 28 insertions(+), 82 deletions(-) diff --git a/wikijs/models/asset.py b/wikijs/models/asset.py index ac32bc2..8cc5998 100644 --- a/wikijs/models/asset.py +++ b/wikijs/models/asset.py @@ -2,7 +2,7 @@ from typing import Optional -from pydantic import Field, field_validator +from pydantic import ConfigDict, Field, field_validator from .base import BaseModel, TimestampedModel @@ -10,15 +10,12 @@ from .base import BaseModel, TimestampedModel class AssetFolder(BaseModel): """Asset folder model.""" + model_config = ConfigDict(populate_by_name=True) + id: int = Field(..., description="Folder ID") slug: str = Field(..., description="Folder slug/path") name: Optional[str] = Field(None, description="Folder name") - class Config: - """Pydantic configuration.""" - - populate_by_name = True - class Asset(TimestampedModel): """Wiki.js asset model. @@ -75,10 +72,7 @@ class Asset(TimestampedModel): """Get file size in kilobytes.""" return self.file_size / 1024 - class Config: - """Pydantic configuration.""" - - populate_by_name = True + model_config = ConfigDict(populate_by_name=True) class AssetUpload(BaseModel): @@ -102,10 +96,7 @@ class AssetUpload(BaseModel): raise ValueError("File path cannot be empty") return v.strip() - class Config: - """Pydantic configuration.""" - - populate_by_name = True + model_config = ConfigDict(populate_by_name=True) class AssetRename(BaseModel): @@ -137,10 +128,7 @@ class AssetRename(BaseModel): raise ValueError("Filename cannot be empty") return v.strip() - class Config: - """Pydantic configuration.""" - - populate_by_name = True + model_config = ConfigDict(populate_by_name=True) class AssetMove(BaseModel): @@ -170,10 +158,7 @@ class AssetMove(BaseModel): raise ValueError("Folder ID must be non-negative") return v - class Config: - """Pydantic configuration.""" - - populate_by_name = True + model_config = ConfigDict(populate_by_name=True) class FolderCreate(BaseModel): @@ -199,7 +184,4 @@ class FolderCreate(BaseModel): raise ValueError("Slug cannot be just slashes") return v - class Config: - """Pydantic configuration.""" - - populate_by_name = True + model_config = ConfigDict(populate_by_name=True) diff --git a/wikijs/models/group.py b/wikijs/models/group.py index 64b246f..56e5fa8 100644 --- a/wikijs/models/group.py +++ b/wikijs/models/group.py @@ -2,7 +2,7 @@ from typing import List, Optional -from pydantic import Field, field_validator +from pydantic import ConfigDict, Field, field_validator from .base import BaseModel, TimestampedModel @@ -10,18 +10,17 @@ from .base import BaseModel, TimestampedModel class GroupPermission(BaseModel): """Group permission model.""" + model_config = ConfigDict(populate_by_name=True) + id: str = Field(..., description="Permission identifier") name: Optional[str] = Field(None, description="Permission name") - class Config: - """Pydantic configuration.""" - - populate_by_name = True - class GroupPageRule(BaseModel): """Group page access rule model.""" + model_config = ConfigDict(populate_by_name=True) + id: str = Field(..., description="Rule identifier") path: str = Field(..., description="Page path pattern") 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") locales: List[str] = Field(default_factory=list, description="Allowed locales") - class Config: - """Pydantic configuration.""" - - populate_by_name = True - class GroupUser(BaseModel): """User member of a group (minimal representation).""" + model_config = ConfigDict(populate_by_name=True) + id: int = Field(..., description="User ID") name: str = Field(..., description="User name") email: str = Field(..., description="User email") - class Config: - """Pydantic configuration.""" - - populate_by_name = True - class Group(TimestampedModel): """Wiki.js group model. @@ -95,10 +86,7 @@ class Group(TimestampedModel): raise ValueError("Group name cannot exceed 255 characters") return v.strip() - class Config: - """Pydantic configuration.""" - - populate_by_name = True + model_config = ConfigDict(populate_by_name=True) class GroupCreate(BaseModel): @@ -111,6 +99,8 @@ class GroupCreate(BaseModel): 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") redirect_on_login: Optional[str] = Field( None, alias="redirectOnLogin", description="Redirect path on login" @@ -134,11 +124,6 @@ class GroupCreate(BaseModel): raise ValueError("Group name cannot exceed 255 characters") return v.strip() - class Config: - """Pydantic configuration.""" - - populate_by_name = True - class GroupUpdate(BaseModel): """Model for updating an existing group. @@ -152,6 +137,8 @@ class GroupUpdate(BaseModel): page_rules: Updated page access rules """ + model_config = ConfigDict(populate_by_name=True) + name: Optional[str] = Field( 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") return v.strip() - class Config: - """Pydantic configuration.""" - - populate_by_name = True - class GroupAssignUser(BaseModel): """Model for assigning a user to a group. @@ -191,14 +173,11 @@ class GroupAssignUser(BaseModel): user_id: User ID """ + model_config = ConfigDict(populate_by_name=True) + group_id: int = Field(..., alias="groupId", description="Group ID") user_id: int = Field(..., alias="userId", description="User ID") - class Config: - """Pydantic configuration.""" - - populate_by_name = True - class GroupUnassignUser(BaseModel): """Model for removing a user from a group. @@ -208,10 +187,7 @@ class GroupUnassignUser(BaseModel): user_id: User ID """ + model_config = ConfigDict(populate_by_name=True) + group_id: int = Field(..., alias="groupId", description="Group ID") user_id: int = Field(..., alias="userId", description="User ID") - - class Config: - """Pydantic configuration.""" - - populate_by_name = True diff --git a/wikijs/models/user.py b/wikijs/models/user.py index bb71337..96ee627 100644 --- a/wikijs/models/user.py +++ b/wikijs/models/user.py @@ -3,7 +3,7 @@ import re 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 @@ -63,11 +63,7 @@ class User(TimestampedModel): return v.strip() - class Config: - """Pydantic model configuration.""" - - populate_by_name = True - str_strip_whitespace = True + model_config = ConfigDict(populate_by_name=True, str_strip_whitespace=True) class UserCreate(BaseModel): @@ -122,11 +118,7 @@ class UserCreate(BaseModel): return v - class Config: - """Pydantic model configuration.""" - - populate_by_name = True - str_strip_whitespace = True + model_config = ConfigDict(populate_by_name=True, str_strip_whitespace=True) class UserUpdate(BaseModel): @@ -185,8 +177,4 @@ class UserUpdate(BaseModel): return v - class Config: - """Pydantic model configuration.""" - - populate_by_name = True - str_strip_whitespace = True + model_config = ConfigDict(populate_by_name=True, str_strip_whitespace=True)