def getDocumentationFromAutoGen(fullModulePath):

    def is_code_or_literal_block(node):
        if node.tagname != 'literal_block':
            return False
        classes = node.attributes['classes']
        if 'ipython-result' in classes:
            return True
        if 'code' in classes and 'python' in classes:
            return True
        return False


    with io.open(fullModulePath, 'r', encoding='utf-8') as f:
        contents = f.read()
    sys.stderr = NoOutput(sys.stderr)
    doctree = publish_doctree(contents)
    sys.stderr = sys.stderr.release()
    allCodeExpects = []
    lastCode = None

    for child in doctree.traverse(is_code_or_literal_block):
        childText = child.astext()
        if '#_DOCS_SHOW' in childText:
            continue
        if 'ipython-result' in child.attributes['classes']:
            childText = childText.strip()
            childText = testRunner.stripAddresses(childText, '...')
            if lastCode is not None:
                allCodeExpects.append((lastCode, childText))
                lastCode = None
        else:
            if lastCode not in (None, ""):
                allCodeExpects.append((lastCode, ""))
            lastCode = None # unneeded but clear
            childTextSplit = childText.split('\n')
            if len(childTextSplit) == 0:
                continue
            childTextArray = [childTextSplit[0]]
            matchesShow = re.search(r'\.show\((.*)\)', childTextSplit[0])
            if matchesShow is not None and not matchesShow.group(1).startswith('t'):
                childTextArray = []
            if re.search(r'.plot\(.*\)', childTextSplit[0]):
                childTextArray = []

            if '#_RAISES_ERROR' in childTextSplit[0]:
                childTextArray = []
            if childTextSplit[0].startswith('%'):
                childTextArray = []

            for l in childTextSplit[1:]: # split into multiple examples unless indented
                if '#_RAISES_ERROR' in childTextSplit[0]:
                    childTextArray = []
                elif re.search(r'.plot\(.*\)', childTextSplit[0]):
                    continue
                elif l.startswith('%'):
                    childTextArray = []
                elif l.startswith(' '):
                    matchesShow = re.search(r'\.show\((.*)\)', l)
                    if matchesShow is not None and not matchesShow.group(1).startswith('t'):
                        continue
                    else:
                        childTextArray.append(l)
                else:
                    lastCode = '\n'.join(childTextArray)
                    if lastCode not in (None, ""):
                        allCodeExpects.append((lastCode, ""))
                        lastCode = None
                    childTextArray = [l]
            lastCode = '\n'.join(childTextArray)

    return allCodeExpects
Beispiel #2
0
def getDocumentationFromAutoGen(fullModulePath):
    def is_code_or_literal_block(node):
        if node.tagname != 'literal_block':
            return False
        classes = node.attributes['classes']
        if 'ipython-result' in classes:
            return True
        if 'code' in classes and 'python' in classes:
            return True
        return False

    with io.open(fullModulePath, 'r', encoding='utf-8') as f:
        contents = f.read()
    sys.stderr = NoOutput(sys.stderr)
    doctree = publish_doctree(contents)
    sys.stderr = sys.stderr.release()
    allCodeExpects = []
    lastCode = None

    for child in doctree.traverse(is_code_or_literal_block):
        childText = child.astext()
        if '#_DOCS_SHOW' in childText:
            continue
        if 'ipython-result' in child.attributes['classes']:
            childText = childText.strip()
            childText = testRunner.stripAddresses(childText, '...')
            if lastCode is not None:
                allCodeExpects.append((lastCode, childText))
                lastCode = None
        else:
            if lastCode not in (None, ""):
                allCodeExpects.append((lastCode, ""))
            lastCode = None  # unneeded but clear
            childTextSplit = childText.split('\n')
            if len(childTextSplit) == 0:
                continue
            childTextArray = [childTextSplit[0]]
            matchesShow = re.search(r'\.show\((.*)\)', childTextSplit[0])
            if matchesShow is not None and not matchesShow.group(1).startswith(
                    't'):
                childTextArray = []
            if re.search(r'.plot\(.*\)', childTextSplit[0]):
                childTextArray = []

            if '#_RAISES_ERROR' in childTextSplit[0]:
                childTextArray = []
            if childTextSplit[0].startswith('%'):
                childTextArray = []

            for l in childTextSplit[
                    1:]:  # split into multiple examples unless indented
                if '#_RAISES_ERROR' in childTextSplit[0]:
                    childTextArray = []
                elif re.search(r'.plot\(.*\)', childTextSplit[0]):
                    continue
                elif l.startswith('%'):
                    childTextArray = []
                elif l.startswith(' '):
                    matchesShow = re.search(r'\.show\((.*)\)', l)
                    if matchesShow is not None and not matchesShow.group(
                            1).startswith('t'):
                        continue
                    else:
                        childTextArray.append(l)
                else:
                    lastCode = '\n'.join(childTextArray)
                    if lastCode not in (None, ""):
                        allCodeExpects.append((lastCode, ""))
                        lastCode = None
                    childTextArray = [l]
            lastCode = '\n'.join(childTextArray)

    return allCodeExpects