paperDollCommonFunctions.py (2413B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\common\script\paperDoll\paperDollCommonFunctions.py 2 import logging 3 import re 4 import yaml 5 import blue 6 import log 7 import stackless 8 import telemetry 9 logger = logging.getLogger(__name__) 10 11 def WaitForAll(iterable, condition): 12 while any(map(condition, iterable)): 13 Yield(frameNice=False) 14 15 BeFrameNice() 16 17 18 def Yield(frameNice = True, ms = 15): 19 try: 20 if not stackless.current.is_main: 21 blue.synchro.Yield() 22 if frameNice: 23 return BeFrameNice(ms) 24 else: 25 return False 26 except: 27 raise 28 29 30 def BeFrameNice(ms = 15): 31 try: 32 if not stackless.current.is_main: 33 if ms < 1.0: 34 ms = 1.0 35 while blue.os.GetWallclockTimeNow() - blue.os.GetWallclockTime() > ms * 10000: 36 blue.synchro.Yield() 37 ms *= 1.02 38 39 return True 40 return False 41 except: 42 raise 43 44 45 def AddToDictList(d, key, item): 46 l = d.get(key, []) 47 l.append(item) 48 d[key] = l 49 50 51 def GetFromDictList(d, key): 52 l = d.get(key, []) 53 if type(l) != list: 54 return [] 55 return l 56 57 58 @telemetry.ZONE_FUNCTION 59 def NastyYamlLoad(yamlStr): 60 yamlStr = _replace_nasty_paper_doll_references(yamlStr) 61 instance = None 62 try: 63 blue.statistics.EnterZone('yaml.load') 64 instance = yaml.load(yamlStr, Loader=yaml.CLoader) 65 except Exception: 66 log.LogError('PaperDoll: Yaml parsing failed for data', yamlStr) 67 finally: 68 blue.statistics.LeaveZone() 69 70 return instance 71 72 73 def _replace_nasty_paper_doll_references(yaml_text): 74 global _nasty_paper_doll_reference_pattern 75 if _nasty_paper_doll_reference_pattern is None: 76 _nasty_paper_doll_reference_pattern = re.compile('!!python/object:paperDoll\\.(\\w+)') 77 replacement_template = '!!python/object:{}' 78 return _nasty_paper_doll_reference_pattern.sub(lambda match: replacement_template.format(_get_nice_paper_doll_reference(match.group(1))), yaml_text) 79 80 81 _nasty_paper_doll_reference_pattern = None 82 83 def _get_nice_paper_doll_reference(nasty_name): 84 return _nasty_paper_doll_class_map[nasty_name] 85 86 87 _nasty_paper_doll_class_map = {'AvatarPartMetaData': 'eve.common.script.paperDoll.yamlPreloader.AvatarPartMetaData', 88 'ProjectedDecal': 'eve.client.script.paperDoll.projectedDecals.ProjectedDecal'}