'Return a string repr for this expression that CITDL processing
can handle.
CITDL is no panacea -- it is meant to provide simple delayed type
determination. As a result, many complicated expressions cannot
be handled. If the expression is not with CITDL\'s scope, then None
is returned.'

def _getCITDLExprRepr(self, node, _level=0):

    s = None
    if isinstance(node, ast.Name):
        s = node.name
    elif isinstance(node, ast.Const):
        s = repr(node.value)
    elif isinstance(node, ast.Getattr):
        exprRepr = self._getCITDLExprRepr(node.expr, (_level + 1))
        if (exprRepr is None):
            pass
        else:
            s = '.'.join([exprRepr, node.attrname])
    elif isinstance(node, ast.List):
        s = '[]'
    elif isinstance(node, ast.Tuple):
        s = '()'
    elif (hasattr(ast, 'Set') and isinstance(node, ast.Set)):
        s = 'set()'
    elif isinstance(node, ast.Dict):
        s = '{}'
    elif isinstance(node, ast.CallFunc):
        if (_level != 0):
            pass
        else:
            s = self._getCITDLExprRepr(node.node, (_level + 1))
            if (s is not None):
                s += '()'
    return s
