Files
disknext/tests/fixtures/groups.py
于小丘 209cb24ab4 feat: add models for physical files, policies, and user management
- Implement PhysicalFile model to manage physical file references and reference counting.
- Create Policy model with associated options and group links for storage policies.
- Introduce Redeem and Report models for handling redeem codes and reports.
- Add Settings model for site configuration and user settings management.
- Develop Share model for sharing objects with unique codes and associated metadata.
- Implement SourceLink model for managing download links associated with objects.
- Create StoragePack model for managing user storage packages.
- Add Tag model for user-defined tags with manual and automatic types.
- Implement Task model for managing background tasks with status tracking.
- Develop User model with comprehensive user management features including authentication.
- Introduce UserAuthn model for managing WebAuthn credentials.
- Create WebDAV model for managing WebDAV accounts associated with users.
2026-02-10 19:07:48 +08:00

208 lines
5.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
用户组测试数据工厂
提供创建测试用户组的便捷方法。
"""
from sqlmodel.ext.asyncio.session import AsyncSession
from sqlmodels.group import Group, GroupOptions
class GroupFactory:
"""用户组工厂类,用于创建各种类型的测试用户组"""
@staticmethod
async def create(
session: AsyncSession,
name: str | None = None,
**kwargs
) -> Group:
"""
创建用户组
参数:
session: 数据库会话
name: 用户组名称(默认: test_group_{随机}
**kwargs: 其他用户组字段
返回:
Group: 创建的用户组实例
"""
import uuid
if name is None:
name = f"test_group_{uuid.uuid4().hex[:8]}"
group = Group(
name=name,
max_storage=kwargs.get("max_storage", 1024 * 1024 * 1024 * 10), # 默认 10GB
share_enabled=kwargs.get("share_enabled", True),
web_dav_enabled=kwargs.get("web_dav_enabled", True),
admin=kwargs.get("admin", False),
speed_limit=kwargs.get("speed_limit", 0),
)
# 如果提供了选项参数,创建 GroupOptions
if kwargs.get("create_options", False):
group = await group.save(session, commit=False)
options = GroupOptions(
group_id=group.id,
share_download=kwargs.get("share_download", True),
share_free=kwargs.get("share_free", False),
relocate=kwargs.get("relocate", True),
source_batch=kwargs.get("source_batch", 10),
select_node=kwargs.get("select_node", False),
advance_delete=kwargs.get("advance_delete", False),
)
await options.save(session, commit=False)
await session.commit()
else:
group = await group.save(session)
return group
@staticmethod
async def create_admin_group(
session: AsyncSession,
name: str | None = None
) -> Group:
"""
创建管理员组
参数:
session: 数据库会话
name: 用户组名称(默认: admin_group_{随机}
返回:
Group: 创建的管理员组实例
"""
import uuid
if name is None:
name = f"admin_group_{uuid.uuid4().hex[:8]}"
admin_group = Group(
name=name,
max_storage=0, # 无限制
share_enabled=True,
web_dav_enabled=True,
admin=True,
speed_limit=0,
)
admin_group = await admin_group.save(session, commit=False)
# 创建管理员组选项
admin_options = GroupOptions(
group_id=admin_group.id,
share_download=True,
share_free=True,
relocate=True,
source_batch=100,
select_node=True,
advance_delete=True,
archive_download=True,
archive_task=True,
webdav_proxy=True,
aria2=True,
redirected_source=True,
)
await admin_options.save(session, commit=False)
await session.commit()
return admin_group
@staticmethod
async def create_limited_group(
session: AsyncSession,
max_storage: int,
name: str | None = None
) -> Group:
"""
创建有存储限制的用户组
参数:
session: 数据库会话
max_storage: 最大存储空间(字节)
name: 用户组名称(默认: limited_group_{随机}
返回:
Group: 创建的用户组实例
"""
import uuid
if name is None:
name = f"limited_group_{uuid.uuid4().hex[:8]}"
limited_group = Group(
name=name,
max_storage=max_storage,
share_enabled=True,
web_dav_enabled=False,
admin=False,
speed_limit=1024, # 1MB/s
)
limited_group = await limited_group.save(session, commit=False)
# 创建限制组选项
limited_options = GroupOptions(
group_id=limited_group.id,
share_download=False,
share_free=False,
relocate=False,
source_batch=0,
select_node=False,
advance_delete=False,
)
await limited_options.save(session, commit=False)
await session.commit()
return limited_group
@staticmethod
async def create_free_group(
session: AsyncSession,
name: str | None = None
) -> Group:
"""
创建免费用户组(无特殊权限)
参数:
session: 数据库会话
name: 用户组名称(默认: free_group_{随机}
返回:
Group: 创建的用户组实例
"""
import uuid
if name is None:
name = f"free_group_{uuid.uuid4().hex[:8]}"
free_group = Group(
name=name,
max_storage=1024 * 1024 * 1024, # 1GB
share_enabled=False,
web_dav_enabled=False,
admin=False,
speed_limit=512, # 512KB/s
)
free_group = await free_group.save(session, commit=False)
# 创建免费组选项
free_options = GroupOptions(
group_id=free_group.id,
share_download=False,
share_free=False,
relocate=False,
source_batch=0,
select_node=False,
advance_delete=False,
)
await free_options.save(session, commit=False)
await session.commit()
return free_group