NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

dogmaLogging.py (5301B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\dogma\dogmaLogging.py
      2 import dogma.data as dogma_data
      3 try:
      4     from log import LogTraceback, LogException, LogInfo, LogNotice, LogWarn, LogError
      5 except ImportError:
      6     import logging
      7     import traceback
      8 
      9     def LogTraceback(msg, *args, **kwargs):
     10         logging.error('Traceback inbound - %s' % (msg,))
     11         logging.error(''.join(traceback.format_stack()))
     12 
     13 
     14     def LogException(msg, *args, **kwargs):
     15         logging.exception('Exception - %s' % (msg,))
     16 
     17 
     18     def __Log(logFunc, *args, **kwargs):
     19         logFunc(' '.join(('%s' % arg for arg in args)), **kwargs)
     20 
     21 
     22     def GetLogFunc(logFunc):
     23         return lambda *args, **kwargs: __Log(logFunc, *args, **kwargs)
     24 
     25 
     26     LogInfo = GetLogFunc(logging.debug)
     27     LogNotice = GetLogFunc(logging.info)
     28     LogWarn = GetLogFunc(logging.warn)
     29     LogError = GetLogFunc(logging.error)
     30 
     31 import evetypes
     32 
     33 def GetCategoryNameFromID(categoryID):
     34     string = evetypes.GetCategoryNameByCategory(categoryID, languageID='en')
     35     return plainStr(string)
     36 
     37 
     38 def GetGroupNameFromID(groupID):
     39     string = evetypes.GetGroupNameByGroup(groupID, languageID='en')
     40     return plainStr(string)
     41 
     42 
     43 def GetTypeNameFromID(typeID):
     44     string = evetypes.GetName(typeID, languageID='en')
     45     return plainStr(string)
     46 
     47 
     48 def plainStr(string):
     49     if isinstance(string, unicode):
     50         return string.encode('cp1252', errors='xmlcharrefreplace')
     51     return string
     52 
     53 
     54 def EvalArgs(context, *args):
     55     return ';'.join([ '{} = {}'.format(i, eval(i, context)) for i in args ])
     56 
     57 
     58 def FormatDictMembers(myDict, members = None):
     59     if members is None:
     60         members = myDict
     61     stringParts = [ '\n  {} : {}'.format(m, repr(myDict[m])) for m in members ]
     62     stringParts.append('\n')
     63     return ''.join(stringParts)
     64 
     65 
     66 def PrettifyString(s):
     67     indent = 0
     68     chars = []
     69     opener = '([{<'
     70     closer = ')]}>'
     71 
     72     def newline(chars, indent, INDENT_DEPTH = 2):
     73         chars.append('\n')
     74         for i in range(indent * INDENT_DEPTH):
     75             chars.append(' ')
     76 
     77     ignore_whitespace = True
     78     whitespace = ' '
     79     flush_separators = False
     80     separators = ','
     81     for c in s:
     82         if flush_separators:
     83             if c in separators:
     84                 chars.append(c)
     85                 continue
     86             else:
     87                 flush_separators = False
     88                 newline(chars, indent)
     89                 ignore_whitespace = True
     90         if ignore_whitespace and c in whitespace:
     91             continue
     92         ignore_whitespace = False
     93         if c in opener:
     94             chars.append(c)
     95             indent += 1
     96             newline(chars, indent)
     97             ignore_whitespace = True
     98         elif c in closer:
     99             indent -= 1
    100             newline(chars, indent)
    101             chars.append(c)
    102             flush_separators = True
    103         else:
    104             chars.append(c)
    105 
    106     return ''.join(chars)
    107 
    108 
    109 def DecodeID(someID):
    110     getInvItemRowFromDB = sm.GetService('i2').GetItemMx
    111     try:
    112         invItemRow = getInvItemRowFromDB(someID)
    113         isInvItem = True
    114     except:
    115         isInvItem = False
    116 
    117     if isInvItem:
    118         categoryName = GetCategoryNameFromID(invItemRow.categoryID)
    119         groupName = GetGroupNameFromID(invItemRow.groupID)
    120         typeName = GetTypeNameFromID(invItemRow.typeID)
    121         ownerID = invItemRow.ownerID
    122         locationID = invItemRow.locationID
    123         descr = 'invItem of type {}/{}/{}, ownerID {}, locationID {}'.format(categoryName, groupName, typeName, ownerID, locationID)
    124         return descr
    125     if dogma_data.is_attribute(someID):
    126         descr = "dgmattrib '{}'".format(dogma_data.get_attribute_name(someID))
    127         return descr
    128     descr = '<not an invItem or dgmattrib>'
    129     return descr
    130 
    131 
    132 def TraceReferrers(target, prefix = '', depth = 0, visited = None, breadthLimit = 5, depthLimit = 6):
    133     if depth > depthLimit:
    134         LogWarn(prefix, '-- bailing due to excess depth!')
    135         return
    136     if visited is None:
    137         visited = set()
    138     targetAddr = id(target)
    139     visited.add(targetAddr)
    140     import gc
    141     import types
    142     referrers = gc.get_referrers(target)
    143     numChildrenProcessed = 0
    144     for i in range(len(referrers)):
    145         r = referrers[i]
    146         if isinstance(r, types.FrameType):
    147             continue
    148         commonDescription = '{}{} : {} at {}'.format(prefix, str(i), type(r).__name__, id(r))
    149         if isinstance(r, dict):
    150             keys = r.keys()
    151             names = [ name for name, val in r.iteritems() if val == target ]
    152             LogWarn(commonDescription, 'via', names, 'of', keys)
    153         else:
    154             LogWarn(commonDescription)
    155         valString = str(r)
    156         if len(valString) > 200:
    157             LogWarn('  value (truncated):', valString[:200])
    158         else:
    159             LogWarn('  value:', r)
    160         if id(r) in visited:
    161             LogWarn('  -- already visited')
    162             continue
    163         if numChildrenProcessed == breadthLimit:
    164             LogWarn('  -- truncating due to breadthLimit of', breadthLimit)
    165             break
    166         referrers[i] = 'removed'
    167         TraceReferrers(r, prefix=prefix + str(i) + '.', depth=depth + 1, visited=visited, depthLimit=depthLimit)
    168         numChildrenProcessed += 1
    169 
    170 
    171 def WrappedMethod(m):
    172     return m
    173 
    174 
    175 def WrappedClass(m):
    176     return m