alkaid_release_platform/core/defines.py

86 lines
2.1 KiB
Python
Raw Normal View History

from enum import Enum
import json
class ReleasePhase(str, Enum):
ENV = "PhaseEnv"
CONFIG = "PhaseConfig"
BUILD = "PhaseBuild"
CHECK = "PhaseCheck"
PACKAGE = "PhasePackage"
VERIFY = "PhaseVerify"
class ProcessStep(str, Enum):
"""
ReleaseFlow中每个阶段的几个执行步骤顺序执行
"""
PRE = "Pre"
PROCESS = "Process"
POST = "Post"
class ReleaseErr(Exception):
"""Release tool专用异常基类包含错误信息和上下文"""
def __init__(self, message: str, ctx: dict = None):
self.message = message
self.ctx = ctx or {}
super().__init__(message)
def __str__(self):
return f"{self.message} (context: {self.ctx})" if self.ctx else self.message
class Dict(dict):
"""
一个字典支持点号访问从xxx[xxx][xxx] 的方式转化为 xxx.xxx.xxx 的形式访问字典中的值
如果key不存在返回一个空的字典
"""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 将字典中的所有值递归转换为 Dict
for key, value in self.items():
if isinstance(value, dict):
self[key] = Dict(value)
@classmethod
def from_dict(cls, data: dict) -> "Dict":
"""
从普通字典创建一个 Dict 对象
:param data: 要转换的字典
:return: Dict 对象
"""
return cls(data)
def __getattr__(self, key):
if key in self:
value = self[key]
# 如果值是字典,递归转换为 Dict
if isinstance(value, dict):
return Dict(value)
return value
# 如果key不存在返回None
# return Dict()
raise AttributeError(f"In object not found '{key}'")
def __setattr__(self, key, value):
self[key] = value
def __str__(self):
string = json.dumps(self, indent=4)
return string
def __repr__(self):
return self.__str__()
class List(list):
def __str__(self):
return json.dumps(self, indent=4)
def __repr__(self):
return self.__str__()