Thread: [Epydoc-commits] SF.net SVN: epydoc: [1672] trunk/epydoc/src/epydoc/docbuilder.py (Page 2)
Brought to you by:
edloper
From: <ed...@us...> - 2008-01-29 03:53:54
|
Revision: 1672 http://epydoc.svn.sourceforge.net/epydoc/?rev=1672&view=rev Author: edloper Date: 2008-01-28 19:53:51 -0800 (Mon, 28 Jan 2008) Log Message: ----------- - Fixed sourceforge bug #1837874 -- fix_self_shadowing_var was setting canonical_name to a tuple by accident. - Fixed typo introduced by previous svn checkin in _inherit_info() - Made warning for introspector/parser disagreements about submodules a little prettier. Modified Paths: -------------- trunk/epydoc/src/epydoc/docbuilder.py Modified: trunk/epydoc/src/epydoc/docbuilder.py =================================================================== --- trunk/epydoc/src/epydoc/docbuilder.py 2008-01-29 02:55:49 UTC (rev 1671) +++ trunk/epydoc/src/epydoc/docbuilder.py 2008-01-29 03:53:51 UTC (rev 1672) @@ -1015,7 +1015,9 @@ n2 = sorted([m.canonical_name for m in v2]) if (n1 != n2) and (n2 != []): log.warning('Introspector & parser disagree about submodules ' - 'for %s: %s vs %s' % (path, n1, n2)) + 'for %s: (%s) vs (%s)' % (path, + ', '.join(str(n) for n in n1), + ', '.join(str(n) for n in n2))) return v1 + [m for m in v2 if m.canonical_name not in n1] return v1 @@ -1184,7 +1186,7 @@ return # If we couldn't find the actual value, use an unreachable name. - name = _unreachable_name_for(var_doc.value, docindex) + name, score = _unreachable_name_for(var_doc.value, docindex) log.warning('%s shadows itself -- using %s instead' % (varname, name)) var_doc.value.canonical_name = name @@ -1282,7 +1284,7 @@ # If the new variable has a docstring, then don't inherit # anything, even if the docstring is blank. if var_doc.docstring not in (None, UNKNOWN): - inerited_attribs = set() + inherited_attribs = set() else: inherited_attribs = set(_INHERITED_ATTRIBS) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2008-01-29 19:37:53
|
Revision: 1681 http://epydoc.svn.sourceforge.net/epydoc/?rev=1681&view=rev Author: edloper Date: 2008-01-29 11:37:51 -0800 (Tue, 29 Jan 2008) Log Message: ----------- - Changed warning when introspector & parser disagree about submodules to an info log statement. Modified Paths: -------------- trunk/epydoc/src/epydoc/docbuilder.py Modified: trunk/epydoc/src/epydoc/docbuilder.py =================================================================== --- trunk/epydoc/src/epydoc/docbuilder.py 2008-01-29 17:28:22 UTC (rev 1680) +++ trunk/epydoc/src/epydoc/docbuilder.py 2008-01-29 19:37:51 UTC (rev 1681) @@ -1028,10 +1028,10 @@ n1 = sorted([m.canonical_name for m in v1]) n2 = sorted([m.canonical_name for m in v2]) if (n1 != n2) and (n2 != []): - log.warning('Introspector & parser disagree about submodules ' - 'for %s: (%s) vs (%s)' % (path, - ', '.join(str(n) for n in n1), - ', '.join(str(n) for n in n2))) + log.info('Introspector & parser disagree about submodules ' + 'for %s: (%s) vs (%s)' % (path, + ', '.join(str(n) for n in n1), + ', '.join(str(n) for n in n2))) return v1 + [m for m in v2 if m.canonical_name not in n1] return v1 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2008-01-29 21:07:30
|
Revision: 1682 http://epydoc.svn.sourceforge.net/epydoc/?rev=1682&view=rev Author: edloper Date: 2008-01-29 13:06:38 -0800 (Tue, 29 Jan 2008) Log Message: ----------- - Removed generator expression (for compatibility with py2.3) Modified Paths: -------------- trunk/epydoc/src/epydoc/docbuilder.py Modified: trunk/epydoc/src/epydoc/docbuilder.py =================================================================== --- trunk/epydoc/src/epydoc/docbuilder.py 2008-01-29 19:37:51 UTC (rev 1681) +++ trunk/epydoc/src/epydoc/docbuilder.py 2008-01-29 21:06:38 UTC (rev 1682) @@ -1030,8 +1030,8 @@ if (n1 != n2) and (n2 != []): log.info('Introspector & parser disagree about submodules ' 'for %s: (%s) vs (%s)' % (path, - ', '.join(str(n) for n in n1), - ', '.join(str(n) for n in n2))) + ', '.join([str(n) for n in n1]), + ', '.join([str(n) for n in n2]))) return v1 + [m for m in v2 if m.canonical_name not in n1] return v1 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2008-01-29 22:17:43
|
Revision: 1683 http://epydoc.svn.sourceforge.net/epydoc/?rev=1683&view=rev Author: edloper Date: 2008-01-29 14:17:39 -0800 (Tue, 29 Jan 2008) Log Message: ----------- - Fixed bug that prevented overridden methods from inerhiting info - Expanded special case of overridden extension methods to cover the cases where the overriding or overriden method have type method_descriptor. Modified Paths: -------------- trunk/epydoc/src/epydoc/docbuilder.py Modified: trunk/epydoc/src/epydoc/docbuilder.py =================================================================== --- trunk/epydoc/src/epydoc/docbuilder.py 2008-01-29 21:06:38 UTC (rev 1682) +++ trunk/epydoc/src/epydoc/docbuilder.py 2008-01-29 22:17:39 UTC (rev 1683) @@ -1294,8 +1294,7 @@ # that shadows var_doc. But if class_doc's var is # local, then record the fact that it overrides # var_doc. - elif (class_doc.variables[name].container==class_doc and - class_doc.variables[name].overrides is UNKNOWN): + elif class_doc.variables[name].container==class_doc: class_doc.variables[name].overrides = var_doc _inherit_info(class_doc.variables[name]) @@ -1304,6 +1303,8 @@ 'type_descr', 'arg_descrs', 'arg_types', 'return_descr', 'return_type', 'exception_descrs'] +_method_descriptor = type(list.append) + def _inherit_info(var_doc): """ Copy any relevant documentation information from the variable that @@ -1313,25 +1314,25 @@ src_val = var_doc.overrides.value val_doc = var_doc.value - # If the new variable has a docstring, then don't inherit - # anything, even if the docstring is blank. - if var_doc.docstring not in (None, UNKNOWN): - inherited_attribs = set() - else: - inherited_attribs = set(_INHERITED_ATTRIBS) - # Special case: if the source value and target values are both c # extension methods, and the target value's signature is not # specified, then inherit the source value's signature. if (isinstance(val_doc, RoutineDoc) and isinstance(src_val, RoutineDoc) and - inspect.isbuiltin(val_doc.pyval) and - inspect.isbuiltin(src_val.pyval) and + (inspect.isbuiltin(val_doc.pyval) or + isinstance(val_doc.pyval, _method_descriptor)) and + (inspect.isbuiltin(src_val.pyval) or + isinstance(src_val.pyval, _method_descriptor)) and val_doc.all_args() in (['...'], UNKNOWN) and src_val.all_args() not in (['...'], UNKNOWN)): - inherited_attribs.update(['posargs', 'posarg_defaults', 'vararg', - 'kwarg', 'return_type']) + for attrib in ['posargs', 'posarg_defaults', 'vararg', + 'kwarg', 'return_type']: + setattr(val_doc, attrib, getattr(src_val, attrib)) + # If the new variable has a docstring, then don't inherit + # anything, even if the docstring is blank. + if var_doc.docstring not in (None, UNKNOWN): + return # [xx] Do I want a check like this:? # # If it's a method and the signature doesn't match well enough, # # then give up. @@ -1346,7 +1347,7 @@ # return # Inherit attributes! - for attrib in inherited_attribs: + for attrib in _INHERITED_ATTRIBS: if (hasattr(var_doc, attrib) and hasattr(src_var, attrib) and getattr(src_var, attrib) not in (None, UNKNOWN)): setattr(var_doc, attrib, getattr(src_var, attrib)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2008-01-31 00:34:12
|
Revision: 1697 http://epydoc.svn.sourceforge.net/epydoc/?rev=1697&view=rev Author: edloper Date: 2008-01-30 16:33:47 -0800 (Wed, 30 Jan 2008) Log Message: ----------- - When parsing a file for documentation, if an IOError or OSError is encountered then issue an error message rather than crashing. E.g., this occurs if a permission issue prevents epydoc from reading a python source file. (sf bug 1883053) Modified Paths: -------------- trunk/epydoc/src/epydoc/docbuilder.py Modified: trunk/epydoc/src/epydoc/docbuilder.py =================================================================== --- trunk/epydoc/src/epydoc/docbuilder.py 2008-01-30 18:47:21 UTC (rev 1696) +++ trunk/epydoc/src/epydoc/docbuilder.py 2008-01-31 00:33:47 UTC (rev 1697) @@ -547,10 +547,8 @@ try: parse_doc = parse_docs( filename=filename, context=parent_docs[1]) - except ParseError, e: + except (ParseError, ImportError, IOError, OSError), e: parse_error = str(e) - except ImportError, e: - parse_error = str(e) # Report any errors we encountered. _report_errors(filename, introspect_doc, parse_doc, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2008-02-19 16:51:23
|
Revision: 1730 http://epydoc.svn.sourceforge.net/epydoc/?rev=1730&view=rev Author: edloper Date: 2008-02-19 08:51:20 -0800 (Tue, 19 Feb 2008) Log Message: ----------- - If we're using introspection, then import everything that we plan to document before we start introspecting anything. This can be important if one module modifies another. The bug that inspired this fix was sf bug #1896919. Modified Paths: -------------- trunk/epydoc/src/epydoc/docbuilder.py Modified: trunk/epydoc/src/epydoc/docbuilder.py =================================================================== --- trunk/epydoc/src/epydoc/docbuilder.py 2008-02-19 16:49:16 UTC (rev 1729) +++ trunk/epydoc/src/epydoc/docbuilder.py 2008-02-19 16:51:20 UTC (rev 1730) @@ -70,6 +70,7 @@ import sys, os, os.path, __builtin__, imp, re, inspect from epydoc.apidoc import * from epydoc.docintrospecter import introspect_docs +from epydoc.docintrospecter import get_value_from_filename, get_value_from_name from epydoc.docparser import parse_docs, ParseError from epydoc.docstringparser import parse_docstring from epydoc import log @@ -203,7 +204,12 @@ return None # Get the basic docs for each item. + log.start_progress('Building documentation') + if introspect: + # Import everything before we introspect anything. + _import_docs_from_items(items, options) doc_pairs = _get_docs_from_items(items, options) + log.end_progress() # Merge the introspection & parse docs. if options.parse and options.introspect: @@ -317,13 +323,67 @@ log.progress(float(i)/len(val_docs), val_doc.canonical_name) #///////////////////////////////////////////////////////////////// +# Pre-Import +#///////////////////////////////////////////////////////////////// + +def _import_docs_from_items(items, options): + for item in items: + # Make sure the item's module is imported. + if isinstance(item, basestring): + if os.path.isfile(item): + _do_import(item, options) + elif is_package_dir(item): + pkg = os.path.abspath(os.path.join(item, '__init__.py')) + val = _do_import(pkg, options) + if options.add_submodules and inspect.ismodule(val): + _import_docs_from_package(val, options) + elif is_pyname(item): + if options.must_introspect(item): + val = get_value_from_name(item) + if options.add_submodules and inspect.ismodule(val): + _import_docs_from_package(val, options) + +def _import_docs_from_package(pkg, options): + subpackage_filenames = set() + module_filenames = {} + pkg_path = getattr(pkg, '__path__', ()) + for subdir in pkg_path: + if os.path.isdir(subdir): + for name in os.listdir(subdir): + filename = os.path.join(subdir, name) + if is_module_file(filename): + basename = os.path.splitext(filename)[0] + if os.path.split(basename)[1] != '__init__': + module_filenames[basename] = filename + elif is_package_dir(filename): + subpackage_filenames.add(os.path.join(filename, + '__init__.py')) + + for filename in module_filenames.values(): + _do_import(filename, options, pkg.__name__) + for subpackage_filename in subpackage_filenames: + subpackage = _do_import(subpackage_filename, options, pkg.__name__) + if inspect.ismodule(subpackage): + _import_docs_from_package(subpackage, options) + +def _do_import(filename, options, parent=None): + filename = os.path.abspath(filename) + modulename = os.path.splitext(os.path.split(filename)[1])[0] + if modulename == '__init__': + modulename = os.path.split(os.path.split(filename)[0])[1] + if parent: + modulename = DottedName(parent, modulename) + if options.must_introspect(modulename): + log.progress(0, 'Importing %s' % modulename) + #log.debug('importing %r (%s)' % (filename, modulename)) + return get_value_from_filename(filename) + +#///////////////////////////////////////////////////////////////// # Documentation Generation #///////////////////////////////////////////////////////////////// def _get_docs_from_items(items, options): - - # Start the progress bar. - log.start_progress('Building documentation') + # Used to estimate progress when there are packages: progress_estimator = _ProgressEstimator(items) # Check for duplicate item names. @@ -397,7 +457,6 @@ doc_pairs += _get_docs_from_submodules( item, doc_pairs[-1], options, progress_estimator) - log.end_progress() return doc_pairs def _get_docs_from_pyobject(obj, options, progress_estimator): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2008-02-23 20:52:37
|
Revision: 1768 http://epydoc.svn.sourceforge.net/epydoc/?rev=1768&view=rev Author: edloper Date: 2008-02-23 12:52:35 -0800 (Sat, 23 Feb 2008) Log Message: ----------- - When pre-importing modules, catch any ImportError exceptions, and ignore them for now -- we'll report them during documentation generation. Modified Paths: -------------- trunk/epydoc/src/epydoc/docbuilder.py Modified: trunk/epydoc/src/epydoc/docbuilder.py =================================================================== --- trunk/epydoc/src/epydoc/docbuilder.py 2008-02-23 20:48:06 UTC (rev 1767) +++ trunk/epydoc/src/epydoc/docbuilder.py 2008-02-23 20:52:35 UTC (rev 1768) @@ -339,9 +339,11 @@ _import_docs_from_package(val, options) elif is_pyname(item): if options.must_introspect(item): - val = get_value_from_name(item) - if options.add_submodules and inspect.ismodule(val): - _import_docs_from_package(val, options) + try: + val = get_value_from_name(item) + if options.add_submodules and inspect.ismodule(val): + _import_docs_from_package(val, options) + except ImportError, e: pass def _import_docs_from_package(pkg, options): subpackage_filenames = set() @@ -376,7 +378,8 @@ if options.must_introspect(modulename): log.progress(0, 'Importing %s' % modulename) #log.debug('importing %r (%s)' % (filename, modulename)) - return get_value_from_filename(filename) + try: return get_value_from_filename(filename) + except ImportError, e: return None #///////////////////////////////////////////////////////////////// # Documentation Generation This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |