同步操作将从 cutself/proj 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#coding=gbk"""ufns : useful utils"""# import ctypesimport greenletimport osimport sys# default_encoding = 'gbk'# if sys.getdefaultencoding() != default_encoding:# reload(sys)# sys.setdefaultencoding(default_encoding)#--------------------------log system----------------------------------------Log_trace = 0Log_debug = 1Log_info = 2Log_warning = 3Log_error = 4Log_fatal = 5_logLvlInfo_ = ["[trace] ", "[debug] ", "[info] ", "[warning] ", "[error] ", "[fatal] "]_logFile_ = Nonedef SetLogFile(fileName, mode = "w"):global _logFile__logFile_ = open(fileName, mode)_logStackSize_ = 0def LogPush():global _logStackSize__logStackSize_ += 1def LogPop():global _logStackSize_if _logStackSize_ > 0:_logStackSize_ -= 1def LogStackClr():global _logStackSize__logStackSize_ = 0def LogStack(fn):def f(*args, **kwargs):global _logStackSize_old = _logStackSize_try:LogPush()return fn(*args, **kwargs)finally:_logStackSize_ = oldreturn fdef Log(lvl, *infos):info = " " * _logStackSize_info += _logLvlInfo_[lvl]info += "%s " * len(infos) % infosprint infoif _logFile_:info += "\n"_logFile_.write(info)_logFile_.flush()def LogTrace(*infos):return Log(Log_trace, *infos)def LogDebug(*infos):return Log(Log_debug, *infos)def LogInfo(*infos):return Log(Log_info, *infos)def LogWarning(*infos):return Log(Log_warning, *infos)def LogError(*infos):return Log(Log_error, *infos)def LogFatal(*infos):return Log(Log_fatal, *infos)#------------------------------------------------------------------class Serialize(object):def __init__(self, *args, **kwargs):# 只能判断第一个参数,第一个参数是dict的时候,有的类型也会有第二个参数,比如StrucOp.MemOpif len(args) != 0 and isinstance(args[0], dict):self._InitDict(*args, **kwargs)else:self._InitOrd(*args, **kwargs)# def __new__(cls, *args, **kwargs):# o = object.__new__(cls, *args, **kwargs)# o.__Init_(*args, **kwargs)# return odef __repr__(self):v = {}self._BuildDict(v)BuildDictFromObj(v, self)return repr(v)#只需要关注下面这三个函数def _InitOrd(self, *args):passdef _InitDict(self, d):passdef _BuildDict(self, d):passdef WriteToFile(self, fileName):ObjToFile(fileName, self)def PrintDbgInfo(self):passclass ProxyBase(Serialize):_impl_ = Nonedef _InitOrd(self, impl):self._impl_ = impldef __getattr__(self, item):# if not self._impl_:# return object.__getattr__(self, item)return getattr(self._impl_, item)def __setattr__(self, key, value):if hasattr(self._impl_, key):setattr(self._impl_, key, value)else:object.__setattr__(self, key, value)class MultiIterCall(Serialize):"""组合模式,多个迭代调用,类似itertools.chain,但MultiIterCall可在调用阶段接收任意参数,而itertools.chain只能在初始化时传入参数。"""def _InitDict(self, d):self._fns_ = [BuildObj(x) for x in d["_fns_"]]def _InitOrd(self, *fns):self._fns_ = []for item in fns:self.Add(item)def _BuildDict(self, d):d["_fns_"] = self._fns_def __call__(self, *args, **kwargs):for impl in self._fns_:for res in impl(*args, **kwargs):yield resdef Add(self, fn):if fn is None:returnself._fns_.append(fn)def AddFromFile(self, fileName):self.Add(ObjFromFile(fileName))def AddFromFiles(self, dir, subFileName):for f in IterDirFiles(dir, subFileName):self.AddFromFile(f)@LogStackdef PrintDbgInfo(self):LogDebug("#---------------%s开始--------------" % self.__class__.__name__)LogDebug("总个数:", len(self._fns_))for i in self._fns_:i.PrintDbgInfo()LogDebug("#---------------%s结束--------------" % self.__class__.__name__)def ItemSize(self):return len(self._fns_)class ObjChain(object):def __init__(self, *objs):self.__dict__["__obj_"] = objsdef __getattr__(self, item):for i in self.__dict__["__obj_"]:if hasattr(i, item):return getattr(i, item)return object.__getattr__(self, item)def __setattr__(self, key, value):for i in self.__dict__["__obj_"]:if hasattr(i, key):setattr(i, key, value)breakclass Dict(dict):"""优先设置自身"""def __init__(self, d):dict.__init__(self, {})self.__other_ = ddef __getitem__(self, item):if not self.__other_ or self.has_key(item):return dict.__getitem__(self, item)return self.__other_[item]def __setitem__(self, key, value):if not self.__other_ or self.has_key(key):dict.__setitem__(self, key, value)else:if self.__other_.has_key(key):self.__other_[key] = valueelse:dict.__setitem__(self, key, value)class Dicts(dict):"""优先设置自身"""def __init__(self, *dicts):dict.__init__(self, {})self.__others_ = dictsdef __getitem__(self, item):if not self.__others_ or self.has_key(item):return dict.__getitem__(self, item)for i in self.__others_:if i.has_key(item):return i[item]return dict.__getitem__(self, item)def __setitem__(self, key, value):if not self.__others_ or self.has_key(key):dict.__setitem__(self, key, value)else:for i in self.__others_:if i.has_key(key):i[key] = valuebreakelse:dict.__setitem__(self, key, value)def ClsDicts(cls):dicts = [cls.__dict__]for i in cls.__bases__:dicts += ClsDicts(i)return dictsdef ObjDicts(obj):dicts = [obj.__dict__]dicts += ClsDicts(obj.__class__)return dicts_execStdFns_ = compile("""def SetRes(res):global __res___res_ = res""", '', 'exec');def Exec(str, l = None, g = None):"""globals()得到的是当前模块,而不是调用者的模块,若想引用调用者的模块,请在调用时用globals()。若g是None,则默认全局作用域便只有d;若g为字典,则索引范围是:先d后g。若l是None,则定义的全局函数和变量均在d字典中,否则定义在l中。"""d = Dict(g)d["__res_"] = Noneglobal _execStdFns_exec(_execStdFns_, d, None)exec(str, d, l)return d["__res_"]def Execs(str, l = None, *g):"""look Exec"""glo = [x for x in g if x is not None]if len(glo) <= 0:d = Dicts()else:d = Dicts(*glo)d["__res_"] = Noneglobal _execStdFns_exec(_execStdFns_, d, None)exec(str, d, l)return d["__res_"]def ExecsAtObj(str, obj, l = None, *g):dicts = ObjDicts(obj)dicts += list(g)return Execs(str, obj, l, *dicts)class ExecEnv:def __init__(self, obj, l = None, *g):dicts = ObjDicts(obj)dicts += list(g)glo = [x for x in dicts if x is not None]if len(glo) <= 0:self.d = Dicts()else:self.d = Dicts(*glo)self.l = lglobal _execStdFns_exec (_execStdFns_, self.d, None)def __call__(self, str):self.d["__res_"] = Noneexec (str, self.d, self.l)return self.d["__res_"]class ValueRange:def __init__(self, begin=0, end=0):assert end >= beginself.begin_ = beginself.end_ = enddef IsInRange(self, value):return value >= self.begin_ and value < self.end_def OffsetToBegin(self, value):return value - self.begin_def Size(self):return self.end_ - self.begin_def ExistIntersection(self, rhs):"""是否存在交集"""if self.begin_ < rhs.begin_:if self.end_ > rhs.begin_:return Trueelse:if rhs.end_ > self.begin_:return Truereturn Falsedef IsProximity(self, rhs):"""是否相邻"""if rhs.begin_ - self.end_ == 0:return Trueif self.begin_ - rhs.end_ == 0:return Truereturn Falsedef CalcIntersection(self, rhs):"""计算交集"""res = ValueRange()if self.begin_ < rhs.begin_:if self.end_ > rhs.begin_:res.begin_ = rhs.begin_if self.end_ > rhs.end_:res.end_ = rhs.end_else:res.end_ = self.end_else:if rhs.end_ > self.begin_:res.begin_ = self.begin_if rhs.end_ > self.end_:res.end_ = self.end_else:res.end_ = rhs.end_return resdef CalcUnion(self, rhs):"""计算交集"""res = ValueRange()res.begin_ = min(self.begin_, rhs.begin_)res.end_ = max(self.end_, rhs.end_)return resdef __repr__(self):return "%x, %x" % (self.begin_, self.end_)def BasicTypes():return (int, long, basestring, float, dict, tuple, list, bool)def FilterTypes(types):return lambda v: isinstance(v, types)def LookObj(obj, filter_ = FilterTypes(BasicTypes()), beg = "__"):for i in dir(obj):if i.startswith(beg):continuev = getattr(obj, i)if filter_:if filter_(v):yield (i, v)else:yield i, vdef singleton(cls):instances = {}def _singleton(*args, **kw):if cls not in instances:instances[cls] = cls(*args, **kw)return instances[cls]return _singletondef BuildDictFromObj(d, o):d["__name__"] = o.__module__ + "." + o.__class__.__name__def BuildObjFromDict(d, g):name = d["__name__"]cls = eval(name, g)if cls is None:assert False, "BuildObjFromDict失败,name:%s" % namereturnreturn cls(d)def DefGlobal():return globals()def BuildObj(p):if p is None:returng = DefGlobal()if isinstance(p, dict):return BuildObjFromDict(p, g)elif isinstance(p, basestring):return BuildObjFromDict(eval(p, g), g)else:assert False, "BuildObj构建目标类型为:%s" % type(p)#Glet : greenletdef GletParentSwitch(*args, **kwargs):glet = greenlet.getcurrent()if glet and glet.parent:return True, glet.parent.switch(*args, **kwargs)return (False,)def Gbk2Utf8(str):if not str:returnstr = str.decode('gbk')return str.encode('utf-8')def Utf82Gbk(str):if not str:returnstr = str.decode('utf-8')return str.encode('gbk')def StrFromUStr(str):return Utf82Gbk(str)def ObjToUStr(obj):return Gbk2Utf8(repr(obj))def ObjFromUStr(str):return BuildObj(Utf82Gbk(str))def ObjFromFile(strFileName):f = open(strFileName, "r")try:return BuildObj(f.read())finally:f.close()def ObjToFile(strFileName, obj):f = open(strFileName, "w")try:f.write(repr(obj))finally:f.close()def IterDirFiles(dir, subFileName):for dirpath, dirnames, filenames in os.walk(dir):for f in filenames:# fname = os.path.splitext(f) #把文件名转换成元组(fileName, 后缀名)if f.find(subFileName) >= 0:yield os.path.join(dirpath, f)def FindFirstDirFile(dir, subFileName):for f in IterDirFiles(dir, subFileName):return fdef NormalPathCase(p):p = os.path.normpath(p)return os.path.normcase(p)def CurFileDir():path = sys.path[-1]if os.path.isdir(path):return pathelif os.path.isfile(path):return os.path.dirname(path)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。