[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
+
|