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__()
|