Source code for ctree.util
import logging
log = logging.getLogger(__name__)
from textwrap import dedent
import ctree
import time
[docs]def singleton(cls):
instance = cls()
instance.__call__ = lambda: instance
return instance
[docs]def truncate(text):
max_display_lines = ctree.CONFIG.getint("log", "max_lines_per_source")
n_lines = len(text.splitlines())
if n_lines <= max_display_lines:
return text
else:
return dedent("""
// %d lines suppressed, only %d allowed
// consider adjusting config entry log.max_lines_per_source"""
% (n_lines, max_display_lines))
[docs]def lower_case_underscore_to_camel_case(string):
"""Convert string or unicode from lower-case underscore to camel-case"""
# use string's class to work on the string to keep its type
class_ = string.__class__
return class_.join('', map(class_.capitalize, string.split('_')))
[docs]def flatten(obj):
"""Iterator for all objects arbitrarily nested in lists."""
if isinstance(obj, (set, list)):
for gen in map(flatten, obj):
for elem in gen:
yield elem
elif isinstance(obj, (dict)):
for gen in map(flatten, obj.itervalues()):
for elem in gen:
yield elem
else:
yield obj
[docs]def enumerate_flatten(obj_or_list):
"""Iterator for all objects arbitrarily nested in lists."""
if isinstance(obj_or_list, list):
for n, gen in enumerate(map(enumerate_flatten, obj_or_list)):
for k, elem in gen:
yield (n,)+k, elem
else:
yield (), obj_or_list
[docs]def highlight(code, language='c'):
"""Syntax-highlight code using pygments, if installed."""
try:
from pygments.formatters.terminal256 import Terminal256Formatter
from pygments import highlight
except ImportError:
log.info("install pygments for syntax-highlighted output.")
return code
if language.lower() == 'llvm':
from pygments.lexers.asm import LlvmLexer as TheLexer
elif language.lower() == 'c':
from pygments.lexers.compiled import CLexer as TheLexer
elif language.lower() == 'diff':
from pygments.lexers.text import DiffLexer as TheLexer
elif language.lower() == 'ini':
from pygments.lexers.text import IniLexer as TheLexer
else:
raise ValueError("Unrecognized highlight language: %s" % language)
style = ctree.CONFIG.get('log', 'pygments_style')
return highlight(code, TheLexer(), Terminal256Formatter(style=style))
[docs]class Timer:
def __enter__(self):
self.start = time.clock()
return self
def __exit__(self, *args):
self.interval = time.clock() - self.start