Thread: [Epydoc-commits] SF.net SVN: epydoc: [1259] trunk/epydoc/src/epydoc/docintrospecter.py
Brought to you by:
edloper
From: <ed...@us...> - 2006-08-21 09:28:20
|
Revision: 1259 Author: edloper Date: 2006-08-21 02:28:11 -0700 (Mon, 21 Aug 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1259&view=rev Log Message: ----------- Fixed SF bug [ 1475000 ] --show-sourcecode ignored. The .pyc filename was being used as module.filename, and so the html writer was concluding that there wasn't a file to write code from. Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2006-08-21 09:16:55 UTC (rev 1258) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2006-08-21 09:28:11 UTC (rev 1259) @@ -225,6 +225,8 @@ try: module_doc.filename = unicode(module.__file__) except KeyboardInterrupt: raise except: pass + if module_doc.filename is not UNKNOWN: + module_doc.filename = py_src_filename(module_doc.filename) # If this is just a preliminary introspection, then don't do # anything else. (Typically this is true if this module was This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-08-21 10:13:38
|
Revision: 1262 Author: edloper Date: 2006-08-21 03:13:34 -0700 (Mon, 21 Aug 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1262&view=rev Log Message: ----------- - Fixed bug in introspection when the current directory contained a module with the same name as the module we want to introspect in a different directory. Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2006-08-21 09:48:17 UTC (rev 1261) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2006-08-21 10:13:34 UTC (rev 1262) @@ -822,7 +822,9 @@ # Add the current directory to sys.path, in case they're trying to # import a module by name that resides in the current directory. - sys.path.insert(0, '') + # But add it to the end -- otherwise, the explicit directory added + # in get_value_from_filename might get overwritten + sys.path.append('') # Supress input and output. (These get restored when we restore # sys to old_sys). This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-08-21 10:33:59
|
Revision: 1265 Author: edloper Date: 2006-08-21 03:33:55 -0700 (Mon, 21 Aug 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1265&view=rev Log Message: ----------- - Don't crash if __bases__ doesn't contain a list; instead, issue a warning and ignore the base list. Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2006-08-21 10:15:08 UTC (rev 1264) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2006-08-21 10:33:55 UTC (rev 1265) @@ -367,17 +367,23 @@ # Record the class's base classes; and add the class to its # base class's subclass lists. if hasattr(cls, '__bases__'): - class_doc.bases = [] - for base in cls.__bases__: - basedoc = introspect_docs(base) - class_doc.bases.append(basedoc) - basedoc.subclasses.append(class_doc) + try: bases = list(cls.__bases__) + except: + bases = None + log.warning("Class '%s' defines __bases__, but it does not " + "contain an iterable; ignoring base list." + % cls.__name__) + if bases is not None: + class_doc.bases = [] + for base in bases: + basedoc = introspect_docs(base) + class_doc.bases.append(basedoc) + basedoc.subclasses.append(class_doc) - bases = list(cls.__bases__) - bases.reverse() - for base in bases: - if hasattr(base, '__dict__'): - base_children.update(base.__dict__) + bases.reverse() + for base in bases: + if hasattr(base, '__dict__'): + base_children.update(base.__dict__) # Record the class's local variables. class_doc.variables = {} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-08-21 11:34:20
|
Revision: 1270 Author: edloper Date: 2006-08-21 04:34:12 -0700 (Mon, 21 Aug 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1270&view=rev Log Message: ----------- - Fixed bug in introspect_module from recent checkin -- catch and ignore ValueError's from py_src_filename when trying to find the src filename of a module. Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2006-08-21 11:24:09 UTC (rev 1269) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2006-08-21 11:34:12 UTC (rev 1270) @@ -226,7 +226,8 @@ except KeyboardInterrupt: raise except: pass if module_doc.filename is not UNKNOWN: - module_doc.filename = py_src_filename(module_doc.filename) + try: module_doc.filename = py_src_filename(module_doc.filename) + except ValueError: pass # If this is just a preliminary introspection, then don't do # anything else. (Typically this is true if this module was This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-08-29 20:32:29
|
Revision: 1327 Author: edloper Date: 2006-08-29 13:32:24 -0700 (Tue, 29 Aug 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1327&view=rev Log Message: ----------- Fixed SF bug [ 1546630 ] epydoc chokes on wicked tuple subclass, which was caused because inspect.isclass() returned true for *any* object that appeared to have a __bases__ attribute; including objects that just override __getattr__ to always return a value. The fix replaces inspect.isclass() with a new isclass(obj) function that just checks if isinstance(obj, (TypeType,ClassType)). Hopefully this won't break introspection for any magic class-like objects people are using. Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2006-08-25 07:55:50 UTC (rev 1326) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2006-08-29 20:32:24 UTC (rev 1327) @@ -504,6 +504,18 @@ # Helper functions #//////////////////////////////////////////////////////////// +def isclass(object): + """ + Return true if the given object is a class. In particular, return + true if object is an instance of C{types.TypeType} or of + C{types.ClassType}. This is used instead of C{inspect.isclass()}, + because the latter returns true for objects that are not classes + (in particular, it returns true for any object that has a + C{__bases__} attribute, including objects that define + C{__getattr__} to always return a value). + """ + return isinstance(object, (TypeType, ClassType)) + def get_docstring(value): """ Return the docstring for the given value; or C{None} if it @@ -623,7 +635,7 @@ """ if inspect.ismodule(value): return DottedName(value.__name__) - elif inspect.isclass(value): + elif isclass(value): return DottedName(value.__module__) elif (inspect.ismethod(value) and value.im_self is not None and value.im_class is ClassType): # class method. @@ -702,7 +714,7 @@ def is_staticmethod(v): return isinstance(v, staticmethod) def is_property(v): return isinstance(v, property) register_introspecter(inspect.ismodule, introspect_module, priority=20) -register_introspecter(inspect.isclass, introspect_class, priority=24) +register_introspecter(isclass, introspect_class, priority=24) register_introspecter(inspect.isroutine, introspect_routine, priority=28) register_introspecter(is_property, introspect_property, priority=30) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2006-09-11 13:45:24
|
Revision: 1385 http://svn.sourceforge.net/epydoc/?rev=1385&view=rev Author: dvarrazzo Date: 2006-09-11 06:45:12 -0700 (Mon, 11 Sep 2006) Log Message: ----------- - Replaced a "!= None" test with an "is not None" Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2006-09-11 13:42:10 UTC (rev 1384) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2006-09-11 13:45:12 UTC (rev 1385) @@ -246,7 +246,7 @@ # Create a VariableDoc for the child, and introspect its # value if it's defined in this module. container = get_containing_module(child) - if container != None and container == module_doc.canonical_name: + if container is not None and container == module_doc.canonical_name: # Local variable. child_val_doc = introspect_docs(child, context=module_doc) child_var_doc = VariableDoc(name=child_name, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2006-09-13 03:04:05
|
Revision: 1387 http://svn.sourceforge.net/epydoc/?rev=1387&view=rev Author: dvarrazzo Date: 2006-09-12 20:04:00 -0700 (Tue, 12 Sep 2006) Log Message: ----------- - Added a filter to remove the class vtable generated by Pyrex for extension modules. Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2006-09-11 16:12:51 UTC (rev 1386) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2006-09-13 03:04:00 UTC (rev 1387) @@ -299,7 +299,8 @@ #: A list of class variables that should not be included in a #: class's API documentation. UNDOCUMENTED_CLASS_VARS = ( - '__doc__', '__module__', '__dict__', '__weakref__', '__slots__') + '__doc__', '__module__', '__dict__', '__weakref__', '__slots__', + '__pyx_vtable__') def introspect_class(cls, class_doc): """ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2006-09-13 03:24:43
|
Revision: 1388 http://svn.sourceforge.net/epydoc/?rev=1388&view=rev Author: dvarrazzo Date: 2006-09-12 20:24:38 -0700 (Tue, 12 Sep 2006) Log Message: ----------- - member_descriptor attributes are recognized as property. Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2006-09-13 03:04:00 UTC (rev 1387) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2006-09-13 03:24:38 UTC (rev 1388) @@ -715,15 +715,26 @@ register_introspecter(inspect.isroutine, introspect_routine, priority=28) register_introspecter(is_property, introspect_property, priority=30) +# Register getset_descriptor as a property try: import array - attribute = type(array.array.typecode) + getset_type = type(array.array.typecode) del array - def is_attribute(v): return isinstance(v, attribute) - register_introspecter(is_attribute, introspect_property, priority=32) + def is_getset(v): return isinstance(v, getset_type) + register_introspecter(is_getset, introspect_property, priority=32) except: pass +# Register member_descriptor as a property +try: + import datetime + member_type = type(datetime.timedelta.days) + del datetime + def is_member(v): return isinstance(v, member_type) + register_introspecter(is_member, introspect_property, priority=34) +except: + pass + #//////////////////////////////////////////////////////////// # Import support #//////////////////////////////////////////////////////////// This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-01-17 21:19:51
|
Revision: 1414 http://svn.sourceforge.net/epydoc/?rev=1414&view=rev Author: edloper Date: 2007-01-17 13:19:47 -0800 (Wed, 17 Jan 2007) Log Message: ----------- Fixed SF bug #1620947: don't assume that classes define __name__. Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2007-01-17 20:54:02 UTC (rev 1413) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2007-01-17 21:19:47 UTC (rev 1414) @@ -345,7 +345,7 @@ bases = None log.warning("Class '%s' defines __bases__, but it does not " "contain an iterable; ignoring base list." - % cls.__name__) + % getattr(cls, '__name__', '??')) if bases is not None: class_doc.bases = [] for base in bases: @@ -360,8 +360,8 @@ # Record the class's local variables. class_doc.variables = {} - private_prefix = '_%s__' % cls.__name__ if hasattr(cls, '__dict__'): + private_prefix = '_%s__' % getattr(cls, '__name__', '<none>') for child_name, child in cls.__dict__.items(): if (child_name in base_children and base_children[child_name] == child): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2007-01-28 20:58:52
|
Revision: 1425 http://svn.sourceforge.net/epydoc/?rev=1425&view=rev Author: dvarrazzo Date: 2007-01-28 12:58:50 -0800 (Sun, 28 Jan 2007) Log Message: ----------- - Added an optional 'module_name' parameter to the introspection functions. It can be used to detect the docstring encoding where introspection can't work, such as in properties docstrings. - Encoding properly detected in properties docstrings (SF bug #1631759) Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2007-01-28 20:20:17 UTC (rev 1424) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2007-01-28 20:58:50 UTC (rev 1425) @@ -64,7 +64,7 @@ ###################################################################### def introspect_docs(value=None, name=None, filename=None, context=None, - is_script=False): + is_script=False, module_name=None): """ Generate the API documentation for a specified object by introspecting Python values, and return it as a L{ValueDoc}. The @@ -85,6 +85,9 @@ documentation for the specified object. @param context: The API documentation for the class of module that contains C{value} (if available). + @param module_name: The name of the module where the value is defined. + Useful to retrieve the docstring encoding if there is no way to + detect the module by introspection (such as in properties) """ if value is None and name is not None and filename is None: value = get_value_from_name(DottedName(name)) @@ -113,7 +116,7 @@ # Introspect the value. _introspected_values[pyid] = True introspect_func = _get_introspecter(value) - introspect_func(value, val_doc) + introspect_func(value, val_doc, module_name=module_name) # Set canonical name, if it was given if val_doc.canonical_name is UNKNOWN and name is not None: @@ -176,7 +179,7 @@ '__builtins__', '__doc__', '__all__', '__file__', '__path__', '__name__', '__extra_epydoc_fields__', '__docformat__') -def introspect_module(module, module_doc, preliminary=False): +def introspect_module(module, module_doc, module_name=None, preliminary=False): """ Add API documentation information about the module C{module} to C{module_doc}. @@ -248,7 +251,8 @@ container = get_containing_module(child) if container is not None and container == module_doc.canonical_name: # Local variable. - child_val_doc = introspect_docs(child, context=module_doc) + child_val_doc = introspect_docs(child, context=module_doc, + module_name=dotted_name) child_var_doc = VariableDoc(name=child_name, value=child_val_doc, is_imported=False, @@ -302,7 +306,7 @@ '__doc__', '__module__', '__dict__', '__weakref__', '__slots__', '__pyx_vtable__') -def introspect_class(cls, class_doc): +def introspect_class(cls, class_doc, module_name=None): """ Add API documentation information about the class C{cls} to C{class_doc}. @@ -372,7 +376,8 @@ if child_name in UNDOCUMENTED_CLASS_VARS: continue #try: child = getattr(cls, child_name) #except: continue - val_doc = introspect_docs(child, context=class_doc) + val_doc = introspect_docs(child, context=class_doc, + module_name=module_name) var_doc = VariableDoc(name=child_name, value=val_doc, container=class_doc, docs_extracted_by='introspecter') @@ -384,7 +389,7 @@ # Routine Introspection #//////////////////////////////////////////////////////////// -def introspect_routine(routine, routine_doc): +def introspect_routine(routine, routine_doc, module_name=None): """Add API documentation information about the function C{routine} to C{routine_doc} (specializing it to C{Routine_doc}).""" routine_doc.specialize_to(RoutineDoc) @@ -447,13 +452,13 @@ # Property Introspection #//////////////////////////////////////////////////////////// -def introspect_property(prop, prop_doc): +def introspect_property(prop, prop_doc, module_name=None): """Add API documentation information about the property C{prop} to C{prop_doc} (specializing it to C{PropertyDoc}).""" prop_doc.specialize_to(PropertyDoc) # Record the property's docstring. - prop_doc.docstring = get_docstring(prop) + prop_doc.docstring = get_docstring(prop, module_name=module_name) # Record the property's access functions. if hasattr(prop, 'fget'): @@ -467,7 +472,7 @@ # Generic Value Introspection #//////////////////////////////////////////////////////////// -def introspect_other(val, val_doc): +def introspect_other(val, val_doc, module_name=None): """Specialize val_doc to a C{GenericValueDoc} and return it.""" val_doc.specialize_to(GenericValueDoc) return val_doc @@ -513,7 +518,7 @@ " may have been changed.") return False -def get_docstring(value): +def get_docstring(value, module_name=None): """ Return the docstring for the given value; or C{None} if it does not have a docstring. @@ -527,7 +532,8 @@ elif isinstance(docstring, str): try: return unicode(docstring, 'ascii') except UnicodeDecodeError: - module_name = get_containing_module(value) + if module_name is None: + module_name = get_containing_module(value) if module_name is not None: try: module = get_value_from_name(module_name) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2007-01-29 01:11:50
|
Revision: 1427 http://svn.sourceforge.net/epydoc/?rev=1427&view=rev Author: dvarrazzo Date: 2007-01-28 17:11:49 -0800 (Sun, 28 Jan 2007) Log Message: ----------- - Fixed signature for `get_canonical_name()`. Not looking for `UNKNOWN` caused bug while introspecting packages such as twisted and maybe caused the SF bug #1560974. Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2007-01-29 00:14:38 UTC (rev 1426) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2007-01-29 01:11:49 UTC (rev 1427) @@ -570,7 +570,7 @@ classes; methods of non-nested classes; and some class methods of non-nested classes. - @rtype: L{DottedName} or C{None} + @rtype: L{DottedName} or C{UNKNOWN} """ if not hasattr(value, '__name__'): return UNKNOWN @@ -588,12 +588,12 @@ value.im_class is ClassType and not value.__name__.startswith('<')): # class method. class_name = get_canonical_name(value.im_self) - if class_name is None: return UNKNOWN + if class_name is UNKNOWN: return UNKNOWN dotted_name = DottedName(class_name, value.__name__) elif (inspect.ismethod(value) and not value.__name__.startswith('<')): class_name = get_canonical_name(value.im_class) - if class_name is None: return UNKNOWN + if class_name is UNKNOWN: return UNKNOWN dotted_name = DottedName(class_name, value.__name__) elif (isinstance(value, FunctionType) and not value.__name__.startswith('<')): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2007-02-04 03:12:26
|
Revision: 1432 http://svn.sourceforge.net/epydoc/?rev=1432&view=rev Author: dvarrazzo Date: 2007-02-03 19:12:25 -0800 (Sat, 03 Feb 2007) Log Message: ----------- - Fixed encoding propagation to class children when the class is being introspected as another class base. Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2007-02-04 02:57:23 UTC (rev 1431) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2007-02-04 03:12:25 UTC (rev 1432) @@ -362,6 +362,11 @@ if hasattr(base, '__dict__'): base_children.update(base.__dict__) + # The module name is not defined if the class is being introspected + # as another class base. + if module_name is None and class_doc.defining_module is not None: + module_name = class_doc.defining_module.canonical_name + # Record the class's local variables. class_doc.variables = {} if hasattr(cls, '__dict__'): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2007-02-04 15:46:16
|
Revision: 1434 http://svn.sourceforge.net/epydoc/?rev=1434&view=rev Author: dvarrazzo Date: 2007-02-04 07:46:13 -0800 (Sun, 04 Feb 2007) Log Message: ----------- - Also check for an `UNKNOWN` defining module, which doesn't happen to have a canonical name... Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2007-02-04 04:03:48 UTC (rev 1433) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2007-02-04 15:46:13 UTC (rev 1434) @@ -364,7 +364,7 @@ # The module name is not defined if the class is being introspected # as another class base. - if module_name is None and class_doc.defining_module is not None: + if module_name is None and class_doc.defining_module not in (None, UNKNOWN): module_name = class_doc.defining_module.canonical_name # Record the class's local variables. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-02-13 08:22:45
|
Revision: 1469 http://svn.sourceforge.net/epydoc/?rev=1469&view=rev Author: edloper Date: 2007-02-13 00:22:43 -0800 (Tue, 13 Feb 2007) Log Message: ----------- - Fixed docstring typo Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2007-02-13 08:22:28 UTC (rev 1468) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2007-02-13 08:22:43 UTC (rev 1469) @@ -512,7 +512,7 @@ def is_future_feature(object): """ - Return True if C{object} results from a C{from __future__ import feature"} + Return True if C{object} results from a C{from __future__ import feature} statement. """ # Guard from unexpected implementation changes of the __future__ module. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-02-14 03:48:36
|
Revision: 1494 http://svn.sourceforge.net/epydoc/?rev=1494&view=rev Author: edloper Date: 2007-02-13 19:48:35 -0800 (Tue, 13 Feb 2007) Log Message: ----------- - Added clear_cache() Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2007-02-14 03:47:07 UTC (rev 1493) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2007-02-14 03:48:35 UTC (rev 1494) @@ -59,6 +59,14 @@ """A record which values we've introspected, encoded as a dictionary from pyid to C{bool}.""" +def clear_cache(): + """ + Discard any cached C{APIDoc} values that have been computed for + introspected values. + """ + _valuedoc_cache.clear() + _introspected_values.clear() + ###################################################################### ## Introspection ###################################################################### This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-02-14 08:37:02
|
Revision: 1501 http://svn.sourceforge.net/epydoc/?rev=1501&view=rev Author: edloper Date: 2007-02-14 00:36:59 -0800 (Wed, 14 Feb 2007) Log Message: ----------- - Added preliminary support for zope2 and zope3 introspection. Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2007-02-14 06:15:18 UTC (rev 1500) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2007-02-14 08:36:59 UTC (rev 1501) @@ -514,8 +514,17 @@ C{__bases__} attribute, including objects that define C{__getattr__} to always return a value). """ - return isinstance(object, (TypeType, ClassType)) + return isinstance(object, tuple(_CLASS_TYPES)) +_CLASS_TYPES = set([TypeType, ClassType]) +"""A list of types that should be treated as classes.""" + +def register_class_type(typ): + """Add a type to the lists of types that should be treated as + classes. By default, this list contains C{TypeType} and + C{ClassType}.""" + _CLASS_TYPES.add(typ) + __future_check_works = None def is_future_feature(object): @@ -598,7 +607,7 @@ if isinstance(value, ModuleType): dotted_name = DottedName(value.__name__) - elif isinstance(value, (ClassType, TypeType)): + elif isclass(value): if value.__module__ == '__builtin__': dotted_name = DottedName(value.__name__) else: @@ -961,10 +970,39 @@ xreadlines = readlines _dev_null = _DevNull() +###################################################################### +## Zope InterfaceClass +###################################################################### +try: + from zope.interface.interface import InterfaceClass as _ZopeInterfaceClass + register_class_type(_ZopeInterfaceClass) +except: + pass +###################################################################### +## Zope Extension classes +###################################################################### +try: + # Register type(ExtensionClass.ExtensionClass) + from ExtensionClass import ExtensionClass as _ExtensionClass + _ZopeType = type(_ExtensionClass) + def _is_zope_type(val): + return isinstance(val, _ZopeType) + register_introspecter(_is_zope_type, introspect_class) + # Register ExtensionClass.*MethodType + from ExtensionClass import PythonMethodType as _ZopeMethodType + from ExtensionClass import ExtensionMethodType as _ZopeCMethodType + def _is_zope_method(val): + return isinstance(val, (_ZopeMethodType, _ZopeCMethodType)) + register_introspecter(_is_zope_method, introspect_routine) +except: + pass + + + # [xx] 0 # hm.. otherwise the following gets treated as a docstring! ouch! This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-09-21 23:11:40
|
Revision: 1602 http://epydoc.svn.sourceforge.net/epydoc/?rev=1602&view=rev Author: edloper Date: 2007-09-21 16:11:25 -0700 (Fri, 21 Sep 2007) Log Message: ----------- fixed __all__ for classes (sf bug 1758565) Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2007-09-21 22:51:53 UTC (rev 1601) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2007-09-21 23:11:25 UTC (rev 1602) @@ -332,10 +332,10 @@ class_doc.docstring = get_docstring(cls) # Record the class's __all__ attribute (public names). + public_names = None if hasattr(cls, '__all__'): try: - public_names = [str(name) for name in cls.__all__] - class_doc.public_names = public_names + public_names = set([str(name) for name in cls.__all__]) except KeyboardInterrupt: raise except: pass @@ -394,13 +394,13 @@ if child_name.startswith(private_prefix): child_name = child_name[len(private_prefix)-2:] if child_name in UNDOCUMENTED_CLASS_VARS: continue - #try: child = getattr(cls, child_name) - #except: continue val_doc = introspect_docs(child, context=class_doc, module_name=module_name) var_doc = VariableDoc(name=child_name, value=val_doc, container=class_doc, docs_extracted_by='introspecter') + if public_names is not None: + var_doc.is_public = (child_name in public_names) class_doc.variables[child_name] = var_doc return class_doc This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-09-23 04:11:53
|
Revision: 1609 http://epydoc.svn.sourceforge.net/epydoc/?rev=1609&view=rev Author: edloper Date: 2007-09-22 21:11:50 -0700 (Sat, 22 Sep 2007) Log Message: ----------- - Attempt to fix sf bug 1671154 Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2007-09-23 03:40:08 UTC (rev 1608) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2007-09-23 04:11:50 UTC (rev 1609) @@ -211,6 +211,7 @@ # anything else. (Typically this is true if this module was # imported, but is not included in the set of modules we're # documenting.) + module_doc.variables = {} if preliminary: return # Record the module's docstring This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-09-25 21:37:09
|
Revision: 1645 http://epydoc.svn.sourceforge.net/epydoc/?rev=1645&view=rev Author: edloper Date: 2007-09-25 14:35:17 -0700 (Tue, 25 Sep 2007) Log Message: ----------- - Moved the code that checks for submodules that are shadowed by vars in their containing package(s) -- this is now done inside get_canonical_name(). This ensures that it's always done -- previously, this could get skipped if a module had already been introspected & put into the cache before docbuilder tried to build the docs for the module. - Apparently, inspect.findsource has a bug that can cause it to raise IndexError sometimes (not sure exactly when). If it does, then catch the error, and print a warning, but don't die. Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2007-09-25 18:42:40 UTC (rev 1644) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2007-09-25 21:35:17 UTC (rev 1645) @@ -116,6 +116,10 @@ # If we've already introspected this value, then simply return # its ValueDoc from our cache. if pyid in _introspected_values: + # If the file is a script, then adjust its name. + if is_script and filename is not None: + _valuedoc_cache[pyid].canonical_name = DottedName( + munge_script_name(str(filename))) return _valuedoc_cache[pyid] # Create an initial value doc for this value & add it to the cache. @@ -130,11 +134,7 @@ if val_doc.canonical_name is UNKNOWN and name is not None: val_doc.canonical_name = DottedName(name) - # If we were given a filename, but didn't manage to get a - # canonical name, then the module defined by the given file - # must be shadowed by a variable in its parent package(s). - # E.g., this happens with `curses.wrapper`. Add a "'" to - # the end of the name to distinguish it from the variable. + # If the file is a script, then adjust its name. if is_script and filename is not None: val_doc.canonical_name = DottedName(munge_script_name(str(filename))) @@ -606,7 +606,21 @@ # Get the name via introspection. if isinstance(value, ModuleType): - dotted_name = DottedName(value.__name__, strict=strict) + try: + dotted_name = DottedName(value.__name__, strict=strict) + # If the module is shadowed by a variable in its parent + # package(s), then add a prime mark to the end, to + # differentiate it from the variable that shadows it. + if verify_name(value, dotted_name) is UNKNOWN: + log.warning("Module %s is shadowed by a variable with " + "the same name." % shadowed_name) + # Note -- this return bypasses verify_name check: + return DottedName(value.__name__+"'") + except DottedName.InvalidDottedName: + # Name is not a valid Python identifier -- treat as script. + if hasattr(value, '__file__'): + filename = '%s' % value.__str__ + dotted_name = DottedName(munge_script_name(filename)) elif isclass(value): if value.__module__ == '__builtin__': @@ -945,6 +959,9 @@ return lineno + 1 except IOError: pass except TypeError: pass + except IndexError: + log.warning('inspect.findsource(%s) raised IndexError' + % api_doc.canonical_name) return None class _DevNull: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-09-25 21:39:55
|
Revision: 1646 http://epydoc.svn.sourceforge.net/epydoc/?rev=1646&view=rev Author: edloper Date: 2007-09-25 14:37:57 -0700 (Tue, 25 Sep 2007) Log Message: ----------- - Fixed typo Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2007-09-25 21:35:17 UTC (rev 1645) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2007-09-25 21:37:57 UTC (rev 1646) @@ -613,7 +613,7 @@ # differentiate it from the variable that shadows it. if verify_name(value, dotted_name) is UNKNOWN: log.warning("Module %s is shadowed by a variable with " - "the same name." % shadowed_name) + "the same name." % dotted_name) # Note -- this return bypasses verify_name check: return DottedName(value.__name__+"'") except DottedName.InvalidDottedName: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-09-25 22:06:17
|
Revision: 1647 http://epydoc.svn.sourceforge.net/epydoc/?rev=1647&view=rev Author: edloper Date: 2007-09-25 15:06:15 -0700 (Tue, 25 Sep 2007) Log Message: ----------- - When checking if a module's vars are imported or not, use the version of the module name with any primes stripped out (primes are added if a submodule is shadowed by its package's vars). Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2007-09-25 21:37:57 UTC (rev 1646) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2007-09-25 22:06:15 UTC (rev 1647) @@ -232,6 +232,7 @@ dotted_name = module_doc.canonical_name if dotted_name is UNKNOWN: dotted_name = DottedName(module.__name__) + name_without_primes = DottedName(str(dotted_name).replace("'", "")) # Record the module's parent package, if it has one. if len(dotted_name) > 1: @@ -267,7 +268,7 @@ # value if it's defined in this module. container = get_containing_module(child) if ((container is not None and - container == module_doc.canonical_name) or + container == name_without_primes) or (public_names is not None and child_name in public_names)): # Local variable. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2008-03-31 03:22:54
|
Revision: 1810 http://epydoc.svn.sourceforge.net/epydoc/?rev=1810&view=rev Author: edloper Date: 2008-03-30 20:22:51 -0700 (Sun, 30 Mar 2008) Log Message: ----------- - When introspecting the variables in a module, assume that all variables whose values are modules are imported. Modified Paths: -------------- trunk/epydoc/src/epydoc/docintrospecter.py Modified: trunk/epydoc/src/epydoc/docintrospecter.py =================================================================== --- trunk/epydoc/src/epydoc/docintrospecter.py 2008-03-05 18:40:49 UTC (rev 1809) +++ trunk/epydoc/src/epydoc/docintrospecter.py 2008-03-31 03:22:51 UTC (rev 1810) @@ -267,10 +267,11 @@ # Create a VariableDoc for the child, and introspect its # value if it's defined in this module. container = get_containing_module(child) - if ((container is not None and - container == name_without_primes) or - (public_names is not None and - child_name in public_names)): + if (((container is not None and + container == name_without_primes) or + (public_names is not None and + child_name in public_names)) + and not inspect.ismodule(child)): # Local variable. child_val_doc = introspect_docs(child, context=module_doc, module_name=dotted_name) @@ -279,7 +280,8 @@ is_imported=False, container=module_doc, docs_extracted_by='introspecter') - elif container is None or module_doc.canonical_name is UNKNOWN: + elif ((container is None or module_doc.canonical_name is UNKNOWN) + and not inspect.ismodule(child)): # Don't introspect stuff "from __future__" if is_future_feature(child): continue This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |