def __init__(self, tree = None): self._class_info = ODict() self._function_info = ODict() self.arglist = None if tree: self._extract_info(tree)
class SuiteInfoBase: _docstring = '' _name = '' _arglist = '' def __init__(self, tree = None): self._class_info = ODict() self._function_info = ODict() self.arglist = None if tree: self._extract_info(tree) def _extract_info(self, tree): # extract docstring if len(tree) == 2: found, vars = match(DOCSTRING_STMT_PATTERN[1], tree[1]) else: found, vars = match(DOCSTRING_STMT_PATTERN, tree[3]) if found: self._docstring = eval(vars['docstring']) # discover inner definitions for node in tree[1:]: found, vars = match(COMPOUND_STMT_PATTERN, node) if found: cstmt = vars['compound'] if cstmt[0] == symbol.funcdef: i = 1 class_method = False coords_method = False deprecated = False while i < len(cstmt) and cstmt[i][1] != 'def': if cstmt[i][1][:3] == CLASS_METHOD_PATTERN: class_method = True elif cstmt[i][1][:3] == COORDS_METHOD_PATTERN: coords_method = True elif cstmt[i][1][:3] == DEPRECATED_PATTERN: deprecated = True # LEAVE DEPRECATED FUNCTIONS OUT OF MANUAL break else: #print cstmt[i][1][:3] print ".. POPPING %s" % str(cstmt[i]) print ".. MATCHING %s" % str(cstmt[i][1][:3]) #raise i += 1 # LEAVE DEPRECATED FUNCTIONS OUT OF MANUAL if deprecated: continue if cstmt[i][1] == 'def': name = cstmt[i+1][1] self._function_info[name] = FunctionInfo(cstmt) found, vars = match(DOCSTRING_STMT_PATTERN, tree[1]) args = cstmt[i+2][2] self._function_info[name]._arglist = ParameterInfo(args) elif cstmt[0] == symbol.classdef: name = cstmt[2][1] self._class_info[name] = ClassInfo(cstmt) def get_docstring(self): return self._docstring def get_name(self): return self._name def get_class_names(self): return self._class_info.keys() def get_class_info(self, name): return self._class_info[name] def __getitem__(self, name): try: return self._class_info[name] except KeyError: return self._function_info[name]