fix: auto-fix code issues (cron)
- 修复重复导入/字段 - 修复异常处理 - 修复PEP8格式问题 - 添加类型注解
This commit is contained in:
@@ -10,19 +10,19 @@ InsightFlow Phase 8 - 企业级功能管理模块
|
||||
作者: InsightFlow Team
|
||||
"""
|
||||
|
||||
import sqlite3
|
||||
import json
|
||||
import uuid
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Optional, List, Dict, Any, Tuple
|
||||
from dataclasses import dataclass
|
||||
from enum import Enum
|
||||
import logging
|
||||
import sqlite3
|
||||
import uuid
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime, timedelta
|
||||
from enum import StrEnum
|
||||
from typing import Any
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class SSOProvider(str, Enum):
|
||||
class SSOProvider(StrEnum):
|
||||
"""SSO 提供商类型"""
|
||||
|
||||
WECHAT_WORK = "wechat_work" # 企业微信
|
||||
@@ -34,7 +34,7 @@ class SSOProvider(str, Enum):
|
||||
CUSTOM_SAML = "custom_saml" # 自定义 SAML
|
||||
|
||||
|
||||
class SSOStatus(str, Enum):
|
||||
class SSOStatus(StrEnum):
|
||||
"""SSO 配置状态"""
|
||||
|
||||
DISABLED = "disabled" # 未启用
|
||||
@@ -43,7 +43,7 @@ class SSOStatus(str, Enum):
|
||||
ERROR = "error" # 配置错误
|
||||
|
||||
|
||||
class SCIMSyncStatus(str, Enum):
|
||||
class SCIMSyncStatus(StrEnum):
|
||||
"""SCIM 同步状态"""
|
||||
|
||||
IDLE = "idle" # 空闲
|
||||
@@ -52,7 +52,7 @@ class SCIMSyncStatus(str, Enum):
|
||||
FAILED = "failed" # 同步失败
|
||||
|
||||
|
||||
class AuditLogExportFormat(str, Enum):
|
||||
class AuditLogExportFormat(StrEnum):
|
||||
"""审计日志导出格式"""
|
||||
|
||||
JSON = "json"
|
||||
@@ -61,7 +61,7 @@ class AuditLogExportFormat(str, Enum):
|
||||
XLSX = "xlsx"
|
||||
|
||||
|
||||
class DataRetentionAction(str, Enum):
|
||||
class DataRetentionAction(StrEnum):
|
||||
"""数据保留策略动作"""
|
||||
|
||||
ARCHIVE = "archive" # 归档
|
||||
@@ -69,7 +69,7 @@ class DataRetentionAction(str, Enum):
|
||||
ANONYMIZE = "anonymize" # 匿名化
|
||||
|
||||
|
||||
class ComplianceStandard(str, Enum):
|
||||
class ComplianceStandard(StrEnum):
|
||||
"""合规标准"""
|
||||
|
||||
SOC2 = "soc2"
|
||||
@@ -87,29 +87,29 @@ class SSOConfig:
|
||||
tenant_id: str
|
||||
provider: str # SSO 提供商
|
||||
status: str # 状态
|
||||
entity_id: Optional[str] # SAML Entity ID
|
||||
sso_url: Optional[str] # SAML SSO URL
|
||||
slo_url: Optional[str] # SAML SLO URL
|
||||
certificate: Optional[str] # SAML 证书 (X.509)
|
||||
metadata_url: Optional[str] # SAML 元数据 URL
|
||||
metadata_xml: Optional[str] # SAML 元数据 XML
|
||||
entity_id: str | None # SAML Entity ID
|
||||
sso_url: str | None # SAML SSO URL
|
||||
slo_url: str | None # SAML SLO URL
|
||||
certificate: str | None # SAML 证书 (X.509)
|
||||
metadata_url: str | None # SAML 元数据 URL
|
||||
metadata_xml: str | None # SAML 元数据 XML
|
||||
# OAuth/OIDC 配置
|
||||
client_id: Optional[str]
|
||||
client_secret: Optional[str]
|
||||
authorization_url: Optional[str]
|
||||
token_url: Optional[str]
|
||||
userinfo_url: Optional[str]
|
||||
scopes: List[str]
|
||||
client_id: str | None
|
||||
client_secret: str | None
|
||||
authorization_url: str | None
|
||||
token_url: str | None
|
||||
userinfo_url: str | None
|
||||
scopes: list[str]
|
||||
# 属性映射
|
||||
attribute_mapping: Dict[str, str] # 如 {"email": "user.mail", "name": "user.name"}
|
||||
attribute_mapping: dict[str, str] # 如 {"email": "user.mail", "name": "user.name"}
|
||||
# 其他配置
|
||||
auto_provision: bool # 自动创建用户
|
||||
default_role: str # 默认角色
|
||||
domain_restriction: List[str] # 允许的邮箱域名
|
||||
domain_restriction: list[str] # 允许的邮箱域名
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
last_tested_at: Optional[datetime]
|
||||
last_error: Optional[str]
|
||||
last_tested_at: datetime | None
|
||||
last_error: str | None
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -125,14 +125,14 @@ class SCIMConfig:
|
||||
scim_token: str # SCIM 访问令牌
|
||||
# 同步配置
|
||||
sync_interval_minutes: int # 同步间隔(分钟)
|
||||
last_sync_at: Optional[datetime]
|
||||
last_sync_status: Optional[str]
|
||||
last_sync_error: Optional[str]
|
||||
last_sync_at: datetime | None
|
||||
last_sync_status: str | None
|
||||
last_sync_error: str | None
|
||||
last_sync_users_count: int
|
||||
# 属性映射
|
||||
attribute_mapping: Dict[str, str]
|
||||
attribute_mapping: dict[str, str]
|
||||
# 同步规则
|
||||
sync_rules: Dict[str, Any] # 过滤规则、转换规则等
|
||||
sync_rules: dict[str, Any] # 过滤规则、转换规则等
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
@@ -146,12 +146,12 @@ class SCIMUser:
|
||||
external_id: str # 外部系统 ID
|
||||
user_name: str
|
||||
email: str
|
||||
display_name: Optional[str]
|
||||
given_name: Optional[str]
|
||||
family_name: Optional[str]
|
||||
display_name: str | None
|
||||
given_name: str | None
|
||||
family_name: str | None
|
||||
active: bool
|
||||
groups: List[str]
|
||||
raw_data: Dict[str, Any] # 原始 SCIM 数据
|
||||
groups: list[str]
|
||||
raw_data: dict[str, Any] # 原始 SCIM 数据
|
||||
synced_at: datetime
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
@@ -166,20 +166,20 @@ class AuditLogExport:
|
||||
export_format: str
|
||||
start_date: datetime
|
||||
end_date: datetime
|
||||
filters: Dict[str, Any] # 过滤条件
|
||||
compliance_standard: Optional[str]
|
||||
filters: dict[str, Any] # 过滤条件
|
||||
compliance_standard: str | None
|
||||
status: str # pending/processing/completed/failed
|
||||
file_path: Optional[str]
|
||||
file_size: Optional[int]
|
||||
record_count: Optional[int]
|
||||
checksum: Optional[str] # 文件校验和
|
||||
downloaded_by: Optional[str]
|
||||
downloaded_at: Optional[datetime]
|
||||
expires_at: Optional[datetime] # 文件过期时间
|
||||
file_path: str | None
|
||||
file_size: int | None
|
||||
record_count: int | None
|
||||
checksum: str | None # 文件校验和
|
||||
downloaded_by: str | None
|
||||
downloaded_at: datetime | None
|
||||
expires_at: datetime | None # 文件过期时间
|
||||
created_by: str
|
||||
created_at: datetime
|
||||
completed_at: Optional[datetime]
|
||||
error_message: Optional[str]
|
||||
completed_at: datetime | None
|
||||
error_message: str | None
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -189,23 +189,23 @@ class DataRetentionPolicy:
|
||||
id: str
|
||||
tenant_id: str
|
||||
name: str
|
||||
description: Optional[str]
|
||||
description: str | None
|
||||
resource_type: str # project/transcript/entity/audit_log/user_data
|
||||
retention_days: int # 保留天数
|
||||
action: str # archive/delete/anonymize
|
||||
# 条件
|
||||
conditions: Dict[str, Any] # 触发条件
|
||||
conditions: dict[str, Any] # 触发条件
|
||||
# 执行配置
|
||||
auto_execute: bool # 自动执行
|
||||
execute_at: Optional[str] # 执行时间 (cron 表达式)
|
||||
execute_at: str | None # 执行时间 (cron 表达式)
|
||||
notify_before_days: int # 提前通知天数
|
||||
# 归档配置
|
||||
archive_location: Optional[str] # 归档位置
|
||||
archive_location: str | None # 归档位置
|
||||
archive_encryption: bool # 归档加密
|
||||
# 状态
|
||||
is_active: bool
|
||||
last_executed_at: Optional[datetime]
|
||||
last_execution_result: Optional[str]
|
||||
last_executed_at: datetime | None
|
||||
last_execution_result: str | None
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
@@ -218,13 +218,13 @@ class DataRetentionJob:
|
||||
policy_id: str
|
||||
tenant_id: str
|
||||
status: str # pending/running/completed/failed
|
||||
started_at: Optional[datetime]
|
||||
completed_at: Optional[datetime]
|
||||
started_at: datetime | None
|
||||
completed_at: datetime | None
|
||||
affected_records: int
|
||||
archived_records: int
|
||||
deleted_records: int
|
||||
error_count: int
|
||||
details: Dict[str, Any]
|
||||
details: dict[str, Any]
|
||||
created_at: datetime
|
||||
|
||||
|
||||
@@ -236,11 +236,11 @@ class SAMLAuthRequest:
|
||||
tenant_id: str
|
||||
sso_config_id: str
|
||||
request_id: str # SAML Request ID
|
||||
relay_state: Optional[str]
|
||||
relay_state: str | None
|
||||
created_at: datetime
|
||||
expires_at: datetime
|
||||
used: bool
|
||||
used_at: Optional[datetime]
|
||||
used_at: datetime | None
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -250,13 +250,13 @@ class SAMLAuthResponse:
|
||||
id: str
|
||||
request_id: str
|
||||
tenant_id: str
|
||||
user_id: Optional[str]
|
||||
email: Optional[str]
|
||||
name: Optional[str]
|
||||
attributes: Dict[str, Any]
|
||||
session_index: Optional[str]
|
||||
user_id: str | None
|
||||
email: str | None
|
||||
name: str | None
|
||||
attributes: dict[str, Any]
|
||||
session_index: str | None
|
||||
processed: bool
|
||||
processed_at: Optional[datetime]
|
||||
processed_at: datetime | None
|
||||
created_at: datetime
|
||||
|
||||
|
||||
@@ -548,22 +548,22 @@ class EnterpriseManager:
|
||||
self,
|
||||
tenant_id: str,
|
||||
provider: str,
|
||||
entity_id: Optional[str] = None,
|
||||
sso_url: Optional[str] = None,
|
||||
slo_url: Optional[str] = None,
|
||||
certificate: Optional[str] = None,
|
||||
metadata_url: Optional[str] = None,
|
||||
metadata_xml: Optional[str] = None,
|
||||
client_id: Optional[str] = None,
|
||||
client_secret: Optional[str] = None,
|
||||
authorization_url: Optional[str] = None,
|
||||
token_url: Optional[str] = None,
|
||||
userinfo_url: Optional[str] = None,
|
||||
scopes: Optional[List[str]] = None,
|
||||
attribute_mapping: Optional[Dict[str, str]] = None,
|
||||
entity_id: str | None = None,
|
||||
sso_url: str | None = None,
|
||||
slo_url: str | None = None,
|
||||
certificate: str | None = None,
|
||||
metadata_url: str | None = None,
|
||||
metadata_xml: str | None = None,
|
||||
client_id: str | None = None,
|
||||
client_secret: str | None = None,
|
||||
authorization_url: str | None = None,
|
||||
token_url: str | None = None,
|
||||
userinfo_url: str | None = None,
|
||||
scopes: list[str] | None = None,
|
||||
attribute_mapping: dict[str, str] | None = None,
|
||||
auto_provision: bool = True,
|
||||
default_role: str = "member",
|
||||
domain_restriction: Optional[List[str]] = None,
|
||||
domain_restriction: list[str] | None = None,
|
||||
) -> SSOConfig:
|
||||
"""创建 SSO 配置"""
|
||||
conn = self._get_connection()
|
||||
@@ -649,7 +649,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def get_sso_config(self, config_id: str) -> Optional[SSOConfig]:
|
||||
def get_sso_config(self, config_id: str) -> SSOConfig | None:
|
||||
"""获取 SSO 配置"""
|
||||
conn = self._get_connection()
|
||||
try:
|
||||
@@ -664,7 +664,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def get_tenant_sso_config(self, tenant_id: str, provider: Optional[str] = None) -> Optional[SSOConfig]:
|
||||
def get_tenant_sso_config(self, tenant_id: str, provider: str | None = None) -> SSOConfig | None:
|
||||
"""获取租户的 SSO 配置"""
|
||||
conn = self._get_connection()
|
||||
try:
|
||||
@@ -698,7 +698,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def update_sso_config(self, config_id: str, **kwargs) -> Optional[SSOConfig]:
|
||||
def update_sso_config(self, config_id: str, **kwargs) -> SSOConfig | None:
|
||||
"""更新 SSO 配置"""
|
||||
conn = self._get_connection()
|
||||
try:
|
||||
@@ -772,7 +772,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def list_sso_configs(self, tenant_id: str) -> List[SSOConfig]:
|
||||
def list_sso_configs(self, tenant_id: str) -> list[SSOConfig]:
|
||||
"""列出租户的所有 SSO 配置"""
|
||||
conn = self._get_connection()
|
||||
try:
|
||||
@@ -835,7 +835,7 @@ class EnterpriseManager:
|
||||
return metadata
|
||||
|
||||
def create_saml_auth_request(
|
||||
self, tenant_id: str, config_id: str, relay_state: Optional[str] = None
|
||||
self, tenant_id: str, config_id: str, relay_state: str | None = None
|
||||
) -> SAMLAuthRequest:
|
||||
"""创建 SAML 认证请求"""
|
||||
conn = self._get_connection()
|
||||
@@ -881,7 +881,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def get_saml_auth_request(self, request_id: str) -> Optional[SAMLAuthRequest]:
|
||||
def get_saml_auth_request(self, request_id: str) -> SAMLAuthRequest | None:
|
||||
"""获取 SAML 认证请求"""
|
||||
conn = self._get_connection()
|
||||
try:
|
||||
@@ -901,7 +901,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def process_saml_response(self, request_id: str, saml_response: str) -> Optional[SAMLAuthResponse]:
|
||||
def process_saml_response(self, request_id: str, saml_response: str) -> SAMLAuthResponse | None:
|
||||
"""处理 SAML 响应"""
|
||||
# 这里应该实现实际的 SAML 响应解析
|
||||
# 简化实现:假设响应已经验证并解析
|
||||
@@ -954,7 +954,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def _parse_saml_response(self, saml_response: str) -> Dict[str, Any]:
|
||||
def _parse_saml_response(self, saml_response: str) -> dict[str, Any]:
|
||||
"""解析 SAML 响应(简化实现)"""
|
||||
# 实际应该使用 python-saml 库解析
|
||||
# 这里返回模拟数据
|
||||
@@ -974,8 +974,8 @@ class EnterpriseManager:
|
||||
scim_base_url: str,
|
||||
scim_token: str,
|
||||
sync_interval_minutes: int = 60,
|
||||
attribute_mapping: Optional[Dict[str, str]] = None,
|
||||
sync_rules: Optional[Dict[str, Any]] = None,
|
||||
attribute_mapping: dict[str, str] | None = None,
|
||||
sync_rules: dict[str, Any] | None = None,
|
||||
) -> SCIMConfig:
|
||||
"""创建 SCIM 配置"""
|
||||
conn = self._get_connection()
|
||||
@@ -1035,7 +1035,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def get_scim_config(self, config_id: str) -> Optional[SCIMConfig]:
|
||||
def get_scim_config(self, config_id: str) -> SCIMConfig | None:
|
||||
"""获取 SCIM 配置"""
|
||||
conn = self._get_connection()
|
||||
try:
|
||||
@@ -1050,7 +1050,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def get_tenant_scim_config(self, tenant_id: str) -> Optional[SCIMConfig]:
|
||||
def get_tenant_scim_config(self, tenant_id: str) -> SCIMConfig | None:
|
||||
"""获取租户的 SCIM 配置"""
|
||||
conn = self._get_connection()
|
||||
try:
|
||||
@@ -1071,7 +1071,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def update_scim_config(self, config_id: str, **kwargs) -> Optional[SCIMConfig]:
|
||||
def update_scim_config(self, config_id: str, **kwargs) -> SCIMConfig | None:
|
||||
"""更新 SCIM 配置"""
|
||||
conn = self._get_connection()
|
||||
try:
|
||||
@@ -1121,7 +1121,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def sync_scim_users(self, config_id: str) -> Dict[str, Any]:
|
||||
def sync_scim_users(self, config_id: str) -> dict[str, Any]:
|
||||
"""执行 SCIM 用户同步"""
|
||||
config = self.get_scim_config(config_id)
|
||||
if not config:
|
||||
@@ -1184,13 +1184,13 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def _fetch_scim_users(self, config: SCIMConfig) -> List[Dict[str, Any]]:
|
||||
def _fetch_scim_users(self, config: SCIMConfig) -> list[dict[str, Any]]:
|
||||
"""从 SCIM 服务端获取用户(模拟实现)"""
|
||||
# 实际应该使用 HTTP 请求获取
|
||||
# GET {scim_base_url}/Users
|
||||
return []
|
||||
|
||||
def _upsert_scim_user(self, conn: sqlite3.Connection, tenant_id: str, user_data: Dict[str, Any]):
|
||||
def _upsert_scim_user(self, conn: sqlite3.Connection, tenant_id: str, user_data: dict[str, Any]):
|
||||
"""插入或更新 SCIM 用户"""
|
||||
cursor = conn.cursor()
|
||||
|
||||
@@ -1238,7 +1238,7 @@ class EnterpriseManager:
|
||||
),
|
||||
)
|
||||
|
||||
def list_scim_users(self, tenant_id: str, active_only: bool = True) -> List[SCIMUser]:
|
||||
def list_scim_users(self, tenant_id: str, active_only: bool = True) -> list[SCIMUser]:
|
||||
"""列出 SCIM 用户"""
|
||||
conn = self._get_connection()
|
||||
try:
|
||||
@@ -1269,8 +1269,8 @@ class EnterpriseManager:
|
||||
start_date: datetime,
|
||||
end_date: datetime,
|
||||
created_by: str,
|
||||
filters: Optional[Dict[str, Any]] = None,
|
||||
compliance_standard: Optional[str] = None,
|
||||
filters: dict[str, Any] | None = None,
|
||||
compliance_standard: str | None = None,
|
||||
) -> AuditLogExport:
|
||||
"""创建审计日志导出任务"""
|
||||
conn = self._get_connection()
|
||||
@@ -1337,7 +1337,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def process_audit_export(self, export_id: str, db_manager=None) -> Optional[AuditLogExport]:
|
||||
def process_audit_export(self, export_id: str, db_manager=None) -> AuditLogExport | None:
|
||||
"""处理审计日志导出任务"""
|
||||
export = self.get_audit_export(export_id)
|
||||
if not export:
|
||||
@@ -1401,8 +1401,8 @@ class EnterpriseManager:
|
||||
conn.close()
|
||||
|
||||
def _fetch_audit_logs(
|
||||
self, tenant_id: str, start_date: datetime, end_date: datetime, filters: Dict[str, Any], db_manager=None
|
||||
) -> List[Dict[str, Any]]:
|
||||
self, tenant_id: str, start_date: datetime, end_date: datetime, filters: dict[str, Any], db_manager=None
|
||||
) -> list[dict[str, Any]]:
|
||||
"""获取审计日志数据"""
|
||||
if db_manager is None:
|
||||
return []
|
||||
@@ -1411,7 +1411,7 @@ class EnterpriseManager:
|
||||
# 这里简化实现
|
||||
return []
|
||||
|
||||
def _apply_compliance_filter(self, logs: List[Dict[str, Any]], standard: str) -> List[Dict[str, Any]]:
|
||||
def _apply_compliance_filter(self, logs: list[dict[str, Any]], standard: str) -> list[dict[str, Any]]:
|
||||
"""应用合规标准字段过滤"""
|
||||
fields = self.COMPLIANCE_FIELDS.get(ComplianceStandard(standard), [])
|
||||
|
||||
@@ -1425,10 +1425,10 @@ class EnterpriseManager:
|
||||
|
||||
return filtered_logs
|
||||
|
||||
def _generate_export_file(self, export_id: str, logs: List[Dict[str, Any]], format: str) -> Tuple[str, int, str]:
|
||||
def _generate_export_file(self, export_id: str, logs: list[dict[str, Any]], format: str) -> tuple[str, int, str]:
|
||||
"""生成导出文件"""
|
||||
import os
|
||||
import hashlib
|
||||
import os
|
||||
|
||||
export_dir = "/tmp/insightflow/exports"
|
||||
os.makedirs(export_dir, exist_ok=True)
|
||||
@@ -1461,7 +1461,7 @@ class EnterpriseManager:
|
||||
|
||||
return file_path, file_size, checksum
|
||||
|
||||
def get_audit_export(self, export_id: str) -> Optional[AuditLogExport]:
|
||||
def get_audit_export(self, export_id: str) -> AuditLogExport | None:
|
||||
"""获取审计日志导出记录"""
|
||||
conn = self._get_connection()
|
||||
try:
|
||||
@@ -1476,7 +1476,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def list_audit_exports(self, tenant_id: str, limit: int = 100) -> List[AuditLogExport]:
|
||||
def list_audit_exports(self, tenant_id: str, limit: int = 100) -> list[AuditLogExport]:
|
||||
"""列出审计日志导出记录"""
|
||||
conn = self._get_connection()
|
||||
try:
|
||||
@@ -1524,12 +1524,12 @@ class EnterpriseManager:
|
||||
resource_type: str,
|
||||
retention_days: int,
|
||||
action: str,
|
||||
description: Optional[str] = None,
|
||||
conditions: Optional[Dict[str, Any]] = None,
|
||||
description: str | None = None,
|
||||
conditions: dict[str, Any] | None = None,
|
||||
auto_execute: bool = False,
|
||||
execute_at: Optional[str] = None,
|
||||
execute_at: str | None = None,
|
||||
notify_before_days: int = 7,
|
||||
archive_location: Optional[str] = None,
|
||||
archive_location: str | None = None,
|
||||
archive_encryption: bool = True,
|
||||
) -> DataRetentionPolicy:
|
||||
"""创建数据保留策略"""
|
||||
@@ -1599,7 +1599,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def get_retention_policy(self, policy_id: str) -> Optional[DataRetentionPolicy]:
|
||||
def get_retention_policy(self, policy_id: str) -> DataRetentionPolicy | None:
|
||||
"""获取数据保留策略"""
|
||||
conn = self._get_connection()
|
||||
try:
|
||||
@@ -1614,7 +1614,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def list_retention_policies(self, tenant_id: str, resource_type: Optional[str] = None) -> List[DataRetentionPolicy]:
|
||||
def list_retention_policies(self, tenant_id: str, resource_type: str | None = None) -> list[DataRetentionPolicy]:
|
||||
"""列出数据保留策略"""
|
||||
conn = self._get_connection()
|
||||
try:
|
||||
@@ -1637,7 +1637,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def update_retention_policy(self, policy_id: str, **kwargs) -> Optional[DataRetentionPolicy]:
|
||||
def update_retention_policy(self, policy_id: str, **kwargs) -> DataRetentionPolicy | None:
|
||||
"""更新数据保留策略"""
|
||||
conn = self._get_connection()
|
||||
try:
|
||||
@@ -1818,7 +1818,7 @@ class EnterpriseManager:
|
||||
|
||||
def _retain_audit_logs(
|
||||
self, conn: sqlite3.Connection, policy: DataRetentionPolicy, cutoff_date: datetime
|
||||
) -> Dict[str, int]:
|
||||
) -> dict[str, int]:
|
||||
"""保留审计日志"""
|
||||
cursor = conn.cursor()
|
||||
|
||||
@@ -1851,19 +1851,19 @@ class EnterpriseManager:
|
||||
|
||||
def _retain_projects(
|
||||
self, conn: sqlite3.Connection, policy: DataRetentionPolicy, cutoff_date: datetime
|
||||
) -> Dict[str, int]:
|
||||
) -> dict[str, int]:
|
||||
"""保留项目数据"""
|
||||
# 简化实现
|
||||
return {"affected": 0, "archived": 0, "deleted": 0, "errors": 0}
|
||||
|
||||
def _retain_transcripts(
|
||||
self, conn: sqlite3.Connection, policy: DataRetentionPolicy, cutoff_date: datetime
|
||||
) -> Dict[str, int]:
|
||||
) -> dict[str, int]:
|
||||
"""保留转录数据"""
|
||||
# 简化实现
|
||||
return {"affected": 0, "archived": 0, "deleted": 0, "errors": 0}
|
||||
|
||||
def get_retention_job(self, job_id: str) -> Optional[DataRetentionJob]:
|
||||
def get_retention_job(self, job_id: str) -> DataRetentionJob | None:
|
||||
"""获取数据保留任务"""
|
||||
conn = self._get_connection()
|
||||
try:
|
||||
@@ -1878,7 +1878,7 @@ class EnterpriseManager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def list_retention_jobs(self, policy_id: str, limit: int = 100) -> List[DataRetentionJob]:
|
||||
def list_retention_jobs(self, policy_id: str, limit: int = 100) -> list[DataRetentionJob]:
|
||||
"""列出数据保留任务"""
|
||||
conn = self._get_connection()
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user