feat: 新增SnakeCaseUtil工具类,将原CamelCaseUtil工具类的camel_to_snake函数迁移至SnakeCaseUtil工具类
This commit is contained in:
@@ -3,7 +3,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
|||||||
from module_admin.entity.do.log_do import SysOperLog, SysLogininfor
|
from module_admin.entity.do.log_do import SysOperLog, SysLogininfor
|
||||||
from module_admin.entity.vo.log_vo import *
|
from module_admin.entity.vo.log_vo import *
|
||||||
from utils.page_util import PageUtil
|
from utils.page_util import PageUtil
|
||||||
from utils.common_util import CamelCaseUtil
|
from utils.common_util import SnakeCaseUtil
|
||||||
from datetime import datetime, time
|
from datetime import datetime, time
|
||||||
|
|
||||||
|
|
||||||
@@ -22,10 +22,10 @@ class OperationLogDao:
|
|||||||
:return: 操作日志列表信息对象
|
:return: 操作日志列表信息对象
|
||||||
"""
|
"""
|
||||||
if query_object.is_asc == 'ascending':
|
if query_object.is_asc == 'ascending':
|
||||||
order_by_column = asc(getattr(SysOperLog, CamelCaseUtil.camel_to_snake(query_object.order_by_column), None))
|
order_by_column = asc(getattr(SysOperLog, SnakeCaseUtil.camel_to_snake(query_object.order_by_column), None))
|
||||||
elif query_object.is_asc == 'descending':
|
elif query_object.is_asc == 'descending':
|
||||||
order_by_column = desc(
|
order_by_column = desc(
|
||||||
getattr(SysOperLog, CamelCaseUtil.camel_to_snake(query_object.order_by_column), None))
|
getattr(SysOperLog, SnakeCaseUtil.camel_to_snake(query_object.order_by_column), None))
|
||||||
else:
|
else:
|
||||||
order_by_column = desc(SysOperLog.oper_time)
|
order_by_column = desc(SysOperLog.oper_time)
|
||||||
query = select(SysOperLog) \
|
query = select(SysOperLog) \
|
||||||
@@ -98,10 +98,10 @@ class LoginLogDao:
|
|||||||
"""
|
"""
|
||||||
if query_object.is_asc == 'ascending':
|
if query_object.is_asc == 'ascending':
|
||||||
order_by_column = asc(
|
order_by_column = asc(
|
||||||
getattr(SysLogininfor, CamelCaseUtil.camel_to_snake(query_object.order_by_column), None))
|
getattr(SysLogininfor, SnakeCaseUtil.camel_to_snake(query_object.order_by_column), None))
|
||||||
elif query_object.is_asc == 'descending':
|
elif query_object.is_asc == 'descending':
|
||||||
order_by_column = desc(
|
order_by_column = desc(
|
||||||
getattr(SysLogininfor, CamelCaseUtil.camel_to_snake(query_object.order_by_column), None))
|
getattr(SysLogininfor, SnakeCaseUtil.camel_to_snake(query_object.order_by_column), None))
|
||||||
else:
|
else:
|
||||||
order_by_column = desc(SysLogininfor.login_time)
|
order_by_column = desc(SysLogininfor.login_time)
|
||||||
query = select(SysLogininfor) \
|
query = select(SysLogininfor) \
|
||||||
|
@@ -40,19 +40,8 @@ def worship():
|
|||||||
|
|
||||||
class CamelCaseUtil:
|
class CamelCaseUtil:
|
||||||
"""
|
"""
|
||||||
小驼峰形式(camelCase)与下划线形式(snake_case)互相转换工具方法
|
下划线形式(snake_case)转小驼峰形式(camelCase)工具方法
|
||||||
"""
|
"""
|
||||||
@classmethod
|
|
||||||
def camel_to_snake(cls, camel_str):
|
|
||||||
"""
|
|
||||||
小驼峰形式字符串(camelCase)转换为下划线形式字符串(snake_case)
|
|
||||||
:param camel_str: 小驼峰形式字符串
|
|
||||||
:return: 下划线形式字符串
|
|
||||||
"""
|
|
||||||
# 在大写字母前添加一个下划线,然后将整个字符串转为小写
|
|
||||||
words = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', camel_str)
|
|
||||||
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', words).lower()
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def snake_to_camel(cls, snake_str):
|
def snake_to_camel(cls, snake_str):
|
||||||
"""
|
"""
|
||||||
@@ -88,6 +77,44 @@ class CamelCaseUtil:
|
|||||||
return cls.transform_result({c.name: getattr(result, c.name) for c in result.__table__.columns})
|
return cls.transform_result({c.name: getattr(result, c.name) for c in result.__table__.columns})
|
||||||
|
|
||||||
|
|
||||||
|
class SnakeCaseUtil:
|
||||||
|
"""
|
||||||
|
小驼峰形式(camelCase)转下划线形式(snake_case)工具方法
|
||||||
|
"""
|
||||||
|
@classmethod
|
||||||
|
def camel_to_snake(cls, camel_str):
|
||||||
|
"""
|
||||||
|
小驼峰形式字符串(camelCase)转换为下划线形式字符串(snake_case)
|
||||||
|
:param camel_str: 小驼峰形式字符串
|
||||||
|
:return: 下划线形式字符串
|
||||||
|
"""
|
||||||
|
# 在大写字母前添加一个下划线,然后将整个字符串转为小写
|
||||||
|
words = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', camel_str)
|
||||||
|
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', words).lower()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def transform_result(cls, result):
|
||||||
|
"""
|
||||||
|
针对不同类型将下划线形式(snake_case)批量转换为小驼峰形式(camelCase)方法
|
||||||
|
:param result: 输入数据
|
||||||
|
:return: 小驼峰形式结果
|
||||||
|
"""
|
||||||
|
if result is None:
|
||||||
|
return result
|
||||||
|
# 如果是字典,直接转换键
|
||||||
|
elif isinstance(result, dict):
|
||||||
|
return {cls.camel_to_snake(k): v for k, v in result.items()}
|
||||||
|
# 如果是一组字典或其他类型的列表,遍历列表进行转换
|
||||||
|
elif isinstance(result, list):
|
||||||
|
return [cls.transform_result(row) if isinstance(row, (dict, Row)) else (cls.transform_result({c.name: getattr(row, c.name) for c in row.__table__.columns}) if row else row) for row in result]
|
||||||
|
# 如果是sqlalchemy的Row实例,遍历Row进行转换
|
||||||
|
elif isinstance(result, Row):
|
||||||
|
return [cls.transform_result(row) if isinstance(row, dict) else (cls.transform_result({c.name: getattr(row, c.name) for c in row.__table__.columns}) if row else row) for row in result]
|
||||||
|
# 如果是其他类型,如模型实例,先转换为字典
|
||||||
|
else:
|
||||||
|
return cls.transform_result({c.name: getattr(result, c.name) for c in result.__table__.columns})
|
||||||
|
|
||||||
|
|
||||||
def bytes2human(n, format_str="%(value).1f%(symbol)s"):
|
def bytes2human(n, format_str="%(value).1f%(symbol)s"):
|
||||||
"""Used by various scripts. See:
|
"""Used by various scripts. See:
|
||||||
http://goo.gl/zeJZl
|
http://goo.gl/zeJZl
|
||||||
|
Reference in New Issue
Block a user