Example #1
0
 def __init__(self, tree = None):
     self._class_info = ODict()
     self._function_info = ODict()
     self.arglist = None
     if tree:
         self._extract_info(tree)
Example #2
0
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]