P1 通用查询:auth/managers.py 新增 20 个查询方法(Role/Company/Department/Position/Menu/Tenant 六个 Manager);auth/ram.py 新增 RAMManager.ListPolicyResourceUUIDs;stats/manager.py 新增 StatsManager.ListAutoResetConfigs。 P2 App 体系:models.py 新增 App/TenantApp/CompanyApp/UserApp/AppConfig 五个 managed=False 镜像模型,字段与业务侧逐一对齐。 P3 工具下沉:新增 config.py 配置注入层与 money/json_encoder/celery_utils/exception_handler/redis_lock/ip_filter/storage/datetime_utils/string_utils 九个工具模块;model_utils.UUIDObj 增加 PascalCase 别名 Str/Bytes/UUID 与模块级转换函数。 同时移除 commission/stats/CashBook 镜像模型的重复索引声明,消除 Django models.E030。
25 lines
501 B
Python
25 lines
501 B
Python
import datetime
|
|
|
|
|
|
def UTCNow():
|
|
return datetime.datetime.utcnow()
|
|
|
|
|
|
def ELTTokenExpiry(days=30):
|
|
return UTCNow() + datetime.timedelta(days=days)
|
|
|
|
|
|
def FormatDateTime(dt):
|
|
if dt is None:
|
|
return None
|
|
if isinstance(dt, datetime.datetime):
|
|
return dt.isoformat()
|
|
return str(dt)
|
|
|
|
|
|
def IsTokenExpired(end_time):
|
|
if end_time is None:
|
|
return True
|
|
naive = end_time.replace(tzinfo=None) if hasattr(end_time, 'tzinfo') else end_time
|
|
return UTCNow() > naive
|