86 lines
2.1 KiB
Python
86 lines
2.1 KiB
Python
|
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__()
|