[Happydoc-checkins] CVS: HappyDoc3/happydoclib scanner.py,1.4,1.5
Brought to you by:
doughellmann,
krlosaqp
From: Doug H. <dou...@us...> - 2002-12-01 22:35:23
|
Update of /cvsroot/happydoc/HappyDoc3/happydoclib In directory sc8-pr-cvs1:/tmp/cvs-serv27320/happydoclib Modified Files: scanner.py Log Message: Make the parsing code driven by mimetype, and move it here from the main application class. Index: scanner.py =================================================================== RCS file: /cvsroot/happydoc/HappyDoc3/happydoclib/scanner.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** scanner.py 17 Nov 2002 16:19:59 -0000 1.4 --- scanner.py 1 Dec 2002 22:35:19 -0000 1.5 *************** *** 59,62 **** --- 59,63 ---- # import glob + import mimetypes import os import re *************** *** 66,69 **** --- 67,72 ---- # Import Local modules # + import happydoclib + from happydoclib.status import statusMessage from happydoclib.trace import trace *************** *** 72,75 **** --- 75,84 ---- # + # + # Initialize extensions for mimetypes that we know about but which are + # not standard. + # + mimetypes.types_map['.stx'] = 'text/x-structured' + class PackageTree(UserDict.UserDict): """Tree of package information. *************** *** 79,82 **** --- 88,97 ---- """ + parser_mapping = { + 'text/x-python' : 'parsePythonInput', + 'text/plain' : 'parsePlainTextInput', + 'text/x-structured' : 'parseStructuredTextInput', + } + def __init__(self, parent, name): trace.into('PackageTree', '__init__', *************** *** 85,91 **** --- 100,112 ---- ) UserDict.UserDict.__init__(self) + self.parent = parent + self.name = os.path.basename(name) + trace.write('self.name=%s' % self.name) self.canonical_name = name + + self.mimetype = mimetypes.guess_type(name) + trace.outof() return *************** *** 93,97 **** def __repr__(self): base_str = UserDict.UserDict.__repr__(self) ! return '<Scanner %s: %s>' % (self.getName(), base_str) def getParent(self): --- 114,210 ---- def __repr__(self): base_str = UserDict.UserDict.__repr__(self) ! return '<%s %s: %s>' % (self.__class__.__name__, self.getName(), base_str) ! ! def parsePythonInput(self): ! trace.into('PackageTree', 'parsePythonInput') ! # ! # Derive the filename for this module. ! # ! filename = self.getInputFilename() ! statusMessage('Parsing: %s' % filename) ! ! # ! # Figure out if there is a parent node for the ! # documentation suite. ! # ! package_parent = self.getParent() ! if package_parent and hasattr(package_parent, 'module_info'): ! docs_parent = package_parent.module_info ! else: ! docs_parent = None ! ! trace.writeVar(docs_parent=docs_parent) ! ! docs = happydoclib.parseinfo.getDocs( ! parent=docs_parent, ! fileName=filename, ! ) ! ! self.module_info = docs ! ! trace.outof() ! return ! ! def parsePlainTextInput(self): ! trace.into('PackageTree', 'parsePlainTextInput', ! ) ! # ! # Derive the filename for this module. ! # ! filename = self.getInputFilename() ! trace.writeVar(filename=filename) ! ! statusMessage('Importing preformatted file: %s' % filename) ! ! #f = open(filename, 'rt') ! #body = f.read() ! #f.close() ! ! #packageTreeNode.preformatted_text = body ! ! trace.outof() ! return ! ! def parseStructuredTextInput(self): ! trace.into('PackageTree', 'parseStructuredTextInput') ! self.parsePlainTextInput() ! trace.outof() ! return ! ! def getMimeType(self): ! """Returns the mimetype setting for this node. ! """ ! return self.mimetype ! ! def parseInput(self): ! """Get whatever information is appropriate from the input file. ! """ ! trace.into('PackageTree', 'parseInput') ! ! if os.path.isdir(self.getInputFilename()): ! trace.write('directory') ! trace.outof() ! return ! ! mimetype, encoding = self.getMimeType() ! try: ! parse_method_name = self.parser_mapping[mimetype] ! except KeyError: ! # ! # Don't know what to do with this file. ! # ! statusMessage('Not parsing input %s with mimetype %s' % ( ! self.getInputFilename(), ! mimetype, ! )) ! else: ! # ! # Call the parse method ! # ! parse_method = getattr(self, parse_method_name) ! parse_method() ! ! trace.outof() ! return def getParent(self): *************** *** 118,122 **** --- 231,238 ---- and ending with this node. """ + trace.into('PackageTree', 'getPath', useCanonicalName=useCanonicalName) + parent = self.getParent() + trace.writeVar(parent=parent) if parent: parent_path = parent.getPath(useCanonicalName=useCanonicalName) *************** *** 124,134 **** --- 240,282 ---- parent_path = () + trace.writeVar(parent_path=parent_path) + if useCanonicalName: name = self.getCanonicalName() else: name = self.getName() + path = parent_path + (name,) + + trace.outof(path) return path + def getInputFilename(self): + """Returns the original input filename that created the node. + """ + trace.into('PackageTree', 'getInputFilename') + + node_path = self.getPath(1) + trace.writeVar(node_path=node_path) + filename = apply(os.path.join, node_path) + trace.writeVar(filename=filename) + + trace.outof(filename) + return filename + + def getRelativeFilename(self): + """Returns the filename relative to the root of the input area. + """ + trace.into('PackageTree', 'getRelativeFilename') + + node_path = self.getPath() + trace.writeVar(node_path=node_path) + filename = apply(os.path.join, node_path) + trace.writeVar(filename=filename) + + trace.outof(filename) + return filename + + def addSubNode(self, name): """Insert a child node under this node. *************** *** 159,168 **** """ ! def __init__(self, inputDirectories, ignorePatterns=[]): self._ignore_patterns = ignorePatterns self._ignore_res = [ re.compile(ip) for ip in ignorePatterns ] self._package_trees = [] ! for dir_name in inputDirectories: if not os.path.exists(dir_name): --- 307,324 ---- """ ! def __init__(self, ! inputDirectories, ! ignorePatterns=[], ! includeComments=1, ! ): self._ignore_patterns = ignorePatterns self._ignore_res = [ re.compile(ip) for ip in ignorePatterns ] + self._include_comments = includeComments self._package_trees = [] ! ! # ! # Scan ! # for dir_name in inputDirectories: if not os.path.exists(dir_name): *************** *** 172,176 **** if tree: self._package_trees.append(tree) ! return --- 328,345 ---- if tree: self._package_trees.append(tree) ! ! # ! # Parse ! # ! self._parsePackageTree() ! return ! ! def _parseOne(self, packageTreeNode): ! packageTreeNode.parseInput() ! return ! ! def _parsePackageTree(self): ! for package_tree in self.getPackageTrees(): ! package_tree.walk(self._parseOne) return *************** *** 205,209 **** tree = parent.addSubNode(package_tree_name) else: ! tree = PackageTree(parent, directoryName) # --- 374,378 ---- tree = parent.addSubNode(package_tree_name) else: ! tree = PackageTree(None, directoryName) # *************** *** 232,233 **** --- 401,411 ---- """ return self._package_trees + + def walk(self, callback): + """Walk the PackageTree, calling the callback at each node. + """ + trees = self.getPackageTrees() + for tree in trees: + tree.walk(callback) + return + |