Thread: [Epydoc-commits] SF.net SVN: epydoc: [1163] trunk/epydoc/src/epydoc/docstringparser.py
Brought to you by:
edloper
From: <ed...@us...> - 2006-04-05 02:28:52
|
Revision: 1163 Author: edloper Date: 2006-04-04 19:28:48 -0700 (Tue, 04 Apr 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1163&view=rev Log Message: ----------- - Fixed bug introduced by previous checkin Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2006-04-05 01:58:40 UTC (rev 1162) +++ trunk/epydoc/src/epydoc/docstringparser.py 2006-04-05 02:28:48 UTC (rev 1163) @@ -251,7 +251,7 @@ # filename of its containing module. name = api_doc.canonical_name module = api_doc.defining_module - if module is not None and module.filename not in (None, UNKNOWN): + if module != UNKNOWN and module.filename not in (None, UNKNOWN): try: filename = py_src_filename(module.filename) except: filename = module.filename else: @@ -629,7 +629,7 @@ # Find the module that defines api_doc. module = api_doc.defining_module # Look up its docformat. - if module is not None and module.docformat not in (None, UNKNOWN): + if module != UNKNOWN and module.docformat not in (None, UNKNOWN): docformat = module.docformat else: docformat = DEFAULT_DOCFORMAT This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-04-12 21:01:24
|
Revision: 1227 Author: edloper Date: 2006-04-12 14:01:16 -0700 (Wed, 12 Apr 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1227&view=rev Log Message: ----------- - Fixed traceback from sf bug #1469467 (caused when the defining_module is UNKNOWN); but this doesn't fix the underlying problem from that bug. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2006-04-12 19:53:44 UTC (rev 1226) +++ trunk/epydoc/src/epydoc/docstringparser.py 2006-04-12 21:01:16 UTC (rev 1227) @@ -260,7 +260,7 @@ # [xx] Don't report markup errors for standard builtins. if (isinstance(api_doc, ValueDoc) and api_doc != module and (api_doc.pyval in __builtin__.__dict__.values() or - (module is not None and + (module not in (None, UNKNOWN) and module.pyval in (__builtin__, exceptions)))): return This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-08-22 01:14:36
|
Revision: 1282 Author: edloper Date: 2006-08-21 18:14:31 -0700 (Mon, 21 Aug 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1282&view=rev Log Message: ----------- Fixed SF bug [ 1496737 ] Submodules cannot be @undocumented. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2006-08-22 00:53:05 UTC (rev 1281) +++ trunk/epydoc/src/epydoc/docstringparser.py 2006-08-22 01:14:31 UTC (rev 1282) @@ -441,6 +441,22 @@ if var_name_re.match(var_name): # Remove the variable from `variables`. api_doc.variables.pop(var_name, None) + # For modules, remove any submodules that match var_name_re. + if isinstance(api_doc, ModuleDoc): + removed = set([m for m in api_doc.submodules + if var_name_re.match(m.canonical_name[-1])]) + if removed: + # Remove the indicated submodules from this module. + api_doc.submodules = [m for m in api_doc.submodules + if m not in removed] + # Remove all ancestors of the indicated submodules + # from the docindex root. E.g., if module x + # declares y to be undocumented, then x.y.z should + # also be undocumented. + for elt in docindex.root[:]: + for m in removed: + if m.canonical_name.dominates(elt.canonical_name): + docindex.root.remove(elt) def process_group_field(api_doc, docindex, tag, arg, descr): """Define a group named C{arg} containing the variables whose This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-08-22 06:00:48
|
Revision: 1287 Author: edloper Date: 2006-08-21 23:00:44 -0700 (Mon, 21 Aug 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1287&view=rev Log Message: ----------- - Added a 'change log' field. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2006-08-22 05:43:19 UTC (rev 1286) +++ trunk/epydoc/src/epydoc/docstringparser.py 2006-08-22 06:00:44 UTC (rev 1287) @@ -133,6 +133,9 @@ # When was it introduced (version # or date) DocstringField(['since'], 'Since', multivalue=0), + # Changes made + DocstringField(['change', 'changed'], 'Change Log'), + # Crossreferences DocstringField(['see', 'seealso'], 'See Also', short=1), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-09-07 02:18:05
|
Revision: 1364 http://svn.sourceforge.net/epydoc/?rev=1364&view=rev Author: edloper Date: 2006-09-06 19:17:59 -0700 (Wed, 06 Sep 2006) Log Message: ----------- - Fixed bug in concatenating docstrings (descr may now be None) Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2006-09-06 23:47:17 UTC (rev 1363) +++ trunk/epydoc/src/epydoc/docstringparser.py 2006-09-07 02:17:59 UTC (rev 1364) @@ -545,7 +545,7 @@ isinstance(api_doc.container, ClassDoc)): _check(api_doc, tag, arg, expect_arg=False) api_doc.is_instvar = False - api_doc.descr = api_doc.descr.concatenate(descr) + api_doc.descr = markup.ConcatenatedDocstring(api_doc.descr, descr) api_doc.summary = descr.summary() # Otherwise, @cvar should be used in a class. @@ -563,7 +563,7 @@ _check(api_doc, tag, arg, expect_arg=False) # require that there be no other descr? api_doc.is_instvar = True - api_doc.descr = api_doc.descr.concatenate(descr) + api_doc.descr = markup.ConcatenatedDocstring(api_doc.descr, descr) api_doc.summary = descr.summary() # Otherwise, @ivar should be used in a class. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-09-07 15:56:57
|
Revision: 1369 http://svn.sourceforge.net/epydoc/?rev=1369&view=rev Author: edloper Date: 2006-09-07 08:56:54 -0700 (Thu, 07 Sep 2006) Log Message: ----------- - Check that type fields correspond to documented parameters *after* all fields have been processed. (So the user can put a @type before a corresponding @keyword.) Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2006-09-07 15:55:42 UTC (rev 1368) +++ trunk/epydoc/src/epydoc/docstringparser.py 2006-09-07 15:56:54 UTC (rev 1369) @@ -205,6 +205,10 @@ field.arg(), field.body()) except ValueError, e: field_warnings.append(str(e)) + # Check to make sure that all type parameters correspond to + # some documented parameter. + check_type_fields(api_doc, field_warnings) + # Extract a summary if api_doc.summary is None and api_doc.descr is not None: api_doc.summary = api_doc.descr.summary() @@ -526,13 +530,7 @@ if arg in api_doc.arg_types: raise ValueError(REDEFINED % ('type for '+arg)) api_doc.arg_types[arg] = descr - # Check to make sure that the documented parameter(s) are - # actually part of the function signature. - if arg not in api_doc.all_args(): - raise ValueError(BAD_PARAM % (tag, '"%s"' % arg)) - else: - raise ValueError(BAD_CONTEXT % arg) - + def process_var_field(api_doc, docindex, tag, arg, descr): _check(api_doc, tag, arg, context=ModuleDoc, expect_arg=True) for ident in re.split('[:;, ] *', arg): @@ -626,6 +624,18 @@ #{ Helper Functions ###################################################################### +def check_type_fields(api_doc, field_warnings): + """Check to make sure that all type fields correspond to some + documented parameter; if not, append a warning to field_warnings.""" + if isinstance(api_doc, RoutineDoc): + for arg in api_doc.arg_types: + if arg not in api_doc.all_args(): + for args, descr in api_doc.arg_descrs: + if arg in args: + break + else: + field_warnings.append(BAD_PARAM % ('type', '"%s"' % arg)) + def set_var_descr(api_doc, ident, descr): if ident not in api_doc.variables: api_doc.variables[ident] = VariableDoc( This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-02-07 06:21:34
|
Revision: 1439 http://svn.sourceforge.net/epydoc/?rev=1439&view=rev Author: edloper Date: 2007-02-06 22:21:26 -0800 (Tue, 06 Feb 2007) Log Message: ----------- Fixed bug where function summaries generated from return value fields would have incorrect capitalization (eg "Returns An apple") by adding a colon to make it "Returns: An apple". (sf bug #1551471) Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2007-02-06 13:40:13 UTC (rev 1438) +++ trunk/epydoc/src/epydoc/docstringparser.py 2007-02-07 06:21:26 UTC (rev 1439) @@ -437,7 +437,7 @@ # End the message block. log.end_block() -RETURN_PDS = markup.parse('Returns', markup='epytext') +RETURN_PDS = markup.parse('Returns:', markup='epytext') """A ParsedDocstring containing the text 'Returns'. This is used to construct summary descriptions for routines that have empty C{descr}, but non-empty C{return_descr}.""" 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:29
|
Revision: 1468 http://svn.sourceforge.net/epydoc/?rev=1468&view=rev Author: edloper Date: 2007-02-13 00:22:28 -0800 (Tue, 13 Feb 2007) Log Message: ----------- - Warn if @type is used in a bad context. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2007-02-13 08:21:20 UTC (rev 1467) +++ trunk/epydoc/src/epydoc/docstringparser.py 2007-02-13 08:22:28 UTC (rev 1468) @@ -641,6 +641,9 @@ if arg in api_doc.arg_types: raise ValueError(REDEFINED % ('type for '+arg)) api_doc.arg_types[arg] = descr + + else: + raise ValueError(BAD_CONTEXT % tag) def process_var_field(api_doc, docindex, tag, arg, descr): _check(api_doc, tag, arg, context=ModuleDoc, expect_arg=True) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-02-14 01:20:13
|
Revision: 1489 http://svn.sourceforge.net/epydoc/?rev=1489&view=rev Author: edloper Date: 2007-02-13 17:20:09 -0800 (Tue, 13 Feb 2007) Log Message: ----------- - Added support for extracting metadata fields from __variables__. To add a new __varaible__->field mapping, set the 'varnames' variable of the field. Currently supported __variables__ are __version__, __date__, __author__, __authors__, __license__. Feel free to add more. Currently, __variables__ are required to have string values to be considered for addition to metadata. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2007-02-14 00:34:27 UTC (rev 1488) +++ trunk/epydoc/src/epydoc/docstringparser.py 2007-02-14 01:20:09 UTC (rev 1489) @@ -31,10 +31,12 @@ import re, sys from epydoc import markup +from epydoc.markup import epytext from epydoc.apidoc import * from epydoc.docintrospecter import introspect_docstring_lineno from epydoc.util import py_src_filename from epydoc import log +import epydoc.docparser import __builtin__, exceptions ###################################################################### @@ -69,7 +71,8 @@ added. """ def __init__(self, tags, label, plural=None, - short=0, multivalue=1, takes_arg=0): + short=0, multivalue=1, takes_arg=0, + varnames=[]): if type(tags) in (list, tuple): self.tags = tuple(tags) elif type(tags) is str: @@ -81,6 +84,7 @@ self.multivalue = multivalue self.short = short self.takes_arg = takes_arg + self.varnames = varnames def __cmp__(self, other): if not isinstance(other, DocstringField): return -1 @@ -104,17 +108,21 @@ 'Deprecated', multivalue=0), # Status info - DocstringField(['version'], 'Version', multivalue=0), - DocstringField(['date'], 'Date', multivalue=0), + DocstringField(['version'], 'Version', multivalue=0, + varnames=['__version__']), + DocstringField(['date'], 'Date', multivalue=0, + varnames=['__date__']), DocstringField(['status'], 'Status', multivalue=0), # Bibliographic Info - DocstringField(['author', 'authors'], 'Author', 'Authors', short=1), + DocstringField(['author', 'authors'], 'Author', 'Authors', short=1, + varnames=['__author__', '__authors__']), DocstringField(['contact'], 'Contact', 'Contacts', short=1), DocstringField(['organization', 'org'], 'Organization', 'Organizations'), DocstringField(['copyright', '(c)'], 'Copyright', multivalue=0), - DocstringField(['license'], 'License', multivalue=0), + DocstringField(['license'], 'License', multivalue=0, + varnames=['__license__']), # Various warnings etc. DocstringField(['bug'], 'Bug', 'Bugs'), @@ -233,6 +241,11 @@ # some documented parameter. check_type_fields(api_doc, field_warnings) + # Check for special variables (e.g., __version__) + if isinstance(api_doc, NamespaceDoc): + for field in STANDARD_FIELDS + user_docfields(api_doc, docindex): + add_metadata_from_var(api_doc, field) + # Extract a summary if api_doc.summary is None and api_doc.descr is not None: api_doc.summary, api_doc.other_docs = api_doc.descr.summary() @@ -251,6 +264,33 @@ # Report any errors that occured report_errors(api_doc, docindex, parse_errors, field_warnings) +def add_metadata_from_var(api_doc, field): + if not field.multivalue: + for (f,a,d) in api_doc.metadata: + if field == f: + return # We already have a value for this metadata. + for varname in field.varnames: + # Check if api_doc has a variable w/ the given name. + if varname not in api_doc.variables: continue + if api_doc.variables[varname].value is UNKNOWN: continue + val_doc = api_doc.variables[varname].value + # Extract the value from the variable. + value = None + if val_doc.pyval is not UNKNOWN: + if isinstance(val_doc.pyval, basestring): + value = val_doc.pyval + elif val_doc.toktree is not UNKNOWN: + try: value = epydoc.docparser.parse_string(val_doc.toktree) + except KeyboardInterrupt: raise + except: pass + # If we found a value, then add it. + if value is not None: + if isinstance(value, str): + value = decode_with_backslashreplace(value) + value = epytext.ParsedEpytextDocstring( + epytext.parse_as_para(value)) + api_doc.metadata.append( (field, varname, value) ) + def initialize_api_doc(api_doc): """A helper function for L{parse_docstring()} that initializes the attributes that C{parse_docstring()} will write to.""" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-02-14 01:33:31
|
Revision: 1490 http://svn.sourceforge.net/epydoc/?rev=1490&view=rev Author: edloper Date: 2007-02-13 17:33:29 -0800 (Tue, 13 Feb 2007) Log Message: ----------- - Extendedd support for extracting metadata fields from __variables__. List & tuple values for multival fields are now supported, as are int, float, bool, and None values (for introspection only -- parsing still requires string values). Also added several more __varaibles__. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2007-02-14 01:20:09 UTC (rev 1489) +++ trunk/epydoc/src/epydoc/docstringparser.py 2007-02-14 01:33:29 UTC (rev 1490) @@ -105,7 +105,7 @@ # If it's deprecated, put that first. DocstringField(['deprecated', 'depreciated'], - 'Deprecated', multivalue=0), + 'Deprecated', multivalue=0, varnames=['__deprecated__']), # Status info DocstringField(['version'], 'Version', multivalue=0, @@ -117,10 +117,12 @@ # Bibliographic Info DocstringField(['author', 'authors'], 'Author', 'Authors', short=1, varnames=['__author__', '__authors__']), - DocstringField(['contact'], 'Contact', 'Contacts', short=1), + DocstringField(['contact'], 'Contact', 'Contacts', short=1, + varnames=['__contact__']), DocstringField(['organization', 'org'], 'Organization', 'Organizations'), - DocstringField(['copyright', '(c)'], 'Copyright', multivalue=0), + DocstringField(['copyright', '(c)'], 'Copyright', multivalue=0, + varnames=['__copyright__']), DocstringField(['license'], 'License', multivalue=0, varnames=['__license__']), @@ -274,22 +276,39 @@ if varname not in api_doc.variables: continue if api_doc.variables[varname].value is UNKNOWN: continue val_doc = api_doc.variables[varname].value - # Extract the value from the variable. - value = None + value = [] + + # Try extracting the value from the pyval. + ok_types = (basestring, int, float, bool, type(None)) if val_doc.pyval is not UNKNOWN: - if isinstance(val_doc.pyval, basestring): - value = val_doc.pyval + if isinstance(val_doc.pyval, ok_types): + value = [val_doc.pyval] + elif field.multivalue: + if isinstance(val_doc.pyval, (tuple, list)): + for elt in val_doc.pyval: + if not isinstance(elt, ok_types): break + else: + value = list(val_doc.pyval) + + # Try extracting the value from the parse tree. elif val_doc.toktree is not UNKNOWN: - try: value = epydoc.docparser.parse_string(val_doc.toktree) + try: value = [epydoc.docparser.parse_string(val_doc.toktree)] except KeyboardInterrupt: raise except: pass - # If we found a value, then add it. - if value is not None: - if isinstance(value, str): - value = decode_with_backslashreplace(value) - value = epytext.ParsedEpytextDocstring( - epytext.parse_as_para(value)) - api_doc.metadata.append( (field, varname, value) ) + if field.multivalue and not value: + try: value = epydoc.docparser.parse_string_list(val_doc.toktree) + except KeyboardInterrupt: raise + except: raise + + # Add any values that we found. + for elt in value: + if isinstance(elt, str): + elt = decode_with_backslashreplace(elt) + else: + elt = unicode(elt) + elt = epytext.ParsedEpytextDocstring( + epytext.parse_as_para(elt)) + api_doc.metadata.append( (field, varname, elt) ) def initialize_api_doc(api_doc): """A helper function for L{parse_docstring()} that initializes This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2007-02-15 19:48:37
|
Revision: 1508 http://svn.sourceforge.net/epydoc/?rev=1508&view=rev Author: dvarrazzo Date: 2007-02-15 11:48:33 -0800 (Thu, 15 Feb 2007) Log Message: ----------- - __revision__ is allowed as variable for the 'version' tag. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2007-02-15 19:42:28 UTC (rev 1507) +++ trunk/epydoc/src/epydoc/docstringparser.py 2007-02-15 19:48:33 UTC (rev 1508) @@ -109,7 +109,7 @@ # Status info DocstringField(['version'], 'Version', multivalue=0, - varnames=['__version__']), + varnames=['__version__', '__revision__']), DocstringField(['date'], 'Date', multivalue=0, varnames=['__date__']), DocstringField(['status'], 'Status', multivalue=0), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2007-03-09 23:08:25
|
Revision: 1576 http://svn.sourceforge.net/epydoc/?rev=1576&view=rev Author: dvarrazzo Date: 2007-03-09 15:08:24 -0800 (Fri, 09 Mar 2007) Log Message: ----------- - Test strengthened to avoid passing a `GenericValueDoc` to `parse_function_signature()` in case of incomplete state (which usually doesn't happen... but unusual is our business) Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2007-03-08 21:28:07 UTC (rev 1575) +++ trunk/epydoc/src/epydoc/docstringparser.py 2007-03-09 23:08:24 UTC (rev 1576) @@ -218,7 +218,7 @@ # Parse ahead the __init__ docstring for this class initvar = api_doc.variables.get('__init__') - if initvar and initvar.value not in (None, UNKNOWN): + if initvar and isinstance(initvar.value, RoutineDoc): init_api_doc = initvar.value parse_docstring(init_api_doc, docindex) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-09-23 02:44:23
|
Revision: 1607 http://epydoc.svn.sourceforge.net/epydoc/?rev=1607&view=rev Author: edloper Date: 2007-09-22 19:44:21 -0700 (Sat, 22 Sep 2007) Log Message: ----------- - Fixed sf bug 1796723 -- don't compare user objects using 'in' or '==', because they might override __cmp__ to lie or to thrown an exception; use 'is' instead. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2007-09-23 02:17:25 UTC (rev 1606) +++ trunk/epydoc/src/epydoc/docstringparser.py 2007-09-23 02:44:21 UTC (rev 1607) @@ -451,12 +451,16 @@ filename = '??' # [xx] Don't report markup errors for standard builtins. - if (isinstance(api_doc, ValueDoc) and api_doc != module and - (api_doc.pyval in __builtin__.__dict__.values() or - (module not in (None, UNKNOWN) and - module.pyval in (__builtin__, exceptions)))): - return - + # n.b. that we must use 'is' to compare pyvals here -- if we use + # 'in' or '==', then a user __cmp__ method might raise an + # exception, or lie. + if isinstance(api_doc, ValueDoc) and api_doc != module: + if module not in (None, UNKNOWN) and module.pyval is exceptions: + return + for builtin_val in __builtin__.__dict__.values(): + if builtin_val is api_doc.pyval: + return + # Get the start line of the docstring containing the error. startline = api_doc.docstring_lineno if startline in (None, UNKNOWN): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-09-23 05:32:31
|
Revision: 1611 http://epydoc.svn.sourceforge.net/epydoc/?rev=1611&view=rev Author: edloper Date: 2007-09-22 22:32:29 -0700 (Sat, 22 Sep 2007) Log Message: ----------- for function signatures in docstrings, treat the value after -> as a return type, not a return value. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2007-09-23 04:19:57 UTC (rev 1610) +++ trunk/epydoc/src/epydoc/docstringparser.py 2007-09-23 05:32:29 UTC (rev 1611) @@ -1061,7 +1061,7 @@ # Extract the return type/value from the signature if rtype: - func_doc.return_descr = markup.parse(rtype, 'plaintext') + func_doc.return_type = markup.parse(rtype, 'plaintext') # Add the self parameter, if it was specified. if selfparam: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-09-23 05:59:57
|
Revision: 1613 http://epydoc.svn.sourceforge.net/epydoc/?rev=1613&view=rev Author: edloper Date: 2007-09-22 22:59:41 -0700 (Sat, 22 Sep 2007) Log Message: ----------- parse return type from signature using the current markup language Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2007-09-23 05:58:51 UTC (rev 1612) +++ trunk/epydoc/src/epydoc/docstringparser.py 2007-09-23 05:59:41 UTC (rev 1613) @@ -192,15 +192,19 @@ # Remove leading indentation from the docstring. api_doc.docstring = unindent_docstring(api_doc.docstring) + # Decide which docformat is used by this module. + docformat = get_docformat(api_doc, docindex) + + # A list of markup errors from parsing. + parse_errors = [] + # Extract a signature from the docstring, if it has one. This # overrides any signature we got via introspection/parsing. if isinstance(api_doc, RoutineDoc): - parse_function_signature(api_doc) + parse_function_signature(api_doc, None, docformat, parse_errors) # Parse the docstring. Any errors encountered are stored as # `ParseError` objects in the errors list. - docformat = get_docformat(api_doc, docindex) - parse_errors = [] parsed_docstring = markup.parse(api_doc.docstring, docformat, parse_errors) @@ -222,7 +226,8 @@ init_api_doc = initvar.value parse_docstring(init_api_doc, docindex) - parse_function_signature(init_api_doc, api_doc) + parse_function_signature(init_api_doc, api_doc, + docformat, parse_errors) init_fields = split_init_fields(fields, field_warnings) # Process fields @@ -981,7 +986,7 @@ """A regular expression that is used to extract signatures from docstrings.""" -def parse_function_signature(func_doc, doc_source=None): +def parse_function_signature(func_doc, doc_source, docformat, parse_errors): """ Construct the signature for a builtin function or method from its docstring. If the docstring uses the standard convention @@ -1061,7 +1066,8 @@ # Extract the return type/value from the signature if rtype: - func_doc.return_type = markup.parse(rtype, 'plaintext') + func_doc.return_type = markup.parse(rtype, docformat, parse_errors, + inline=True) # Add the self parameter, if it was specified. if selfparam: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-09-23 19:25:58
|
Revision: 1623 http://epydoc.svn.sourceforge.net/epydoc/?rev=1623&view=rev Author: edloper Date: 2007-09-23 12:25:54 -0700 (Sun, 23 Sep 2007) Log Message: ----------- - fixed sf bug [ 1658475 ] weird warning with property() -- applied patch supplied by dvarrazzo. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2007-09-23 19:18:08 UTC (rev 1622) +++ trunk/epydoc/src/epydoc/docstringparser.py 2007-09-23 19:25:54 UTC (rev 1623) @@ -774,11 +774,19 @@ api_doc.return_descr = descr def process_rtype_field(api_doc, docindex, tag, arg, descr): - _check(api_doc, tag, arg, context=RoutineDoc, expect_arg=False) - if api_doc.return_type is not None: - raise ValueError(REDEFINED % 'return value type') - api_doc.return_type = descr + _check(api_doc, tag, arg, + context=(RoutineDoc, PropertyDoc), expect_arg=False) + if isinstance(api_doc, RoutineDoc): + if api_doc.return_type is not None: + raise ValueError(REDEFINED % 'return value type') + api_doc.return_type = descr + elif isinstance(api_doc, PropertyDoc): + _check(api_doc, tag, arg, expect_arg=False) + if api_doc.type_descr is not None: + raise ValueError(REDEFINED % tag) + api_doc.type_descr = descr + def process_arg_field(api_doc, docindex, tag, arg, descr): _check(api_doc, tag, arg, context=RoutineDoc, expect_arg=True) idents = re.split('[:;, ] *', arg) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-09-26 18:42:11
|
Revision: 1653 http://epydoc.svn.sourceforge.net/epydoc/?rev=1653&view=rev Author: edloper Date: 2007-09-26 11:42:09 -0700 (Wed, 26 Sep 2007) Log Message: ----------- - Fixed bug where @sort warnings were issued for vars like __author__. - Fixed bug where __author__ etc were ignored if the module docstring was empty. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2007-09-26 04:45:34 UTC (rev 1652) +++ trunk/epydoc/src/epydoc/docstringparser.py 2007-09-26 18:42:09 UTC (rev 1653) @@ -185,8 +185,12 @@ initialize_api_doc(api_doc) - # If there's no docstring, then there's nothing more to do. + # If there's no docstring, then check for special variables (e.g., + # __version__), and then return -- there's nothing else to do. if (api_doc.docstring in (None, UNKNOWN)): + if isinstance(api_doc, NamespaceDoc): + for field in STANDARD_FIELDS + user_docfields(api_doc, docindex): + add_metadata_from_var(api_doc, field) return # Remove leading indentation from the docstring. @@ -324,6 +328,9 @@ api_doc.metadata.append( (field, varname, elt) ) if var_doc.docstring in (None, UNKNOWN): del api_doc.variables[varname] + if api_doc.sort_spec is not UNKNOWN: + try: api_doc.sort_spec.remove(varname) + except ValueError: pass def initialize_api_doc(api_doc): """A helper function for L{parse_docstring()} that initializes This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2008-01-29 01:54:58
|
Revision: 1668 http://epydoc.svn.sourceforge.net/epydoc/?rev=1668&view=rev Author: edloper Date: 2008-01-28 17:54:56 -0800 (Mon, 28 Jan 2008) Log Message: ----------- Fixed sourceforge bug #1825472 -- metadata fields (such as __authors__) with multiple values were causing epydoc to die, because the code to remove it was inside a loop that got repeated once for each value: the second time through the loop, it had already been removed. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2008-01-29 01:47:51 UTC (rev 1667) +++ trunk/epydoc/src/epydoc/docstringparser.py 2008-01-29 01:54:56 UTC (rev 1668) @@ -326,12 +326,14 @@ # Add in the metadata and remove from the variables api_doc.metadata.append( (field, varname, elt) ) - if var_doc.docstring in (None, UNKNOWN): - del api_doc.variables[varname] - if api_doc.sort_spec is not UNKNOWN: - try: api_doc.sort_spec.remove(varname) - except ValueError: pass + # Remove the variable itself (unless it's documented) + if var_doc.docstring in (None, UNKNOWN): + del api_doc.variables[varname] + if api_doc.sort_spec is not UNKNOWN: + try: api_doc.sort_spec.remove(varname) + except ValueError: pass + def initialize_api_doc(api_doc): """A helper function for L{parse_docstring()} that initializes the attributes that C{parse_docstring()} will write to.""" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2008-01-29 17:14:09
|
Revision: 1676 http://epydoc.svn.sourceforge.net/epydoc/?rev=1676&view=rev Author: edloper Date: 2008-01-29 09:14:05 -0800 (Tue, 29 Jan 2008) Log Message: ----------- - Added supress_warnings param for parse_docstrings -- contains a set of apidocs for which warnings should be supressed. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2008-01-29 17:12:56 UTC (rev 1675) +++ trunk/epydoc/src/epydoc/docstringparser.py 2008-01-29 17:14:05 UTC (rev 1676) @@ -167,7 +167,7 @@ # asked to process one twice? e.g., for @include we might have to # parse the included docstring earlier than we might otherwise..?? -def parse_docstring(api_doc, docindex): +def parse_docstring(api_doc, docindex, supress_warnings=[]): """ Process the given C{APIDoc}'s docstring. In particular, populate the C{APIDoc}'s C{descr} and C{summary} attributes, and add any @@ -176,11 +176,14 @@ @param docindex: A DocIndex, used to find the containing module (to look up the docformat); and to find any user docfields defined by containing objects. + @param supress_warnings: A set of objects for which docstring + warnings should be supressed. """ if api_doc.metadata is not UNKNOWN: if not (isinstance(api_doc, RoutineDoc) and api_doc.canonical_name[-1] == '__init__'): - log.debug("%s's docstring processed twice" % api_doc.canonical_name) + log.debug("%s's docstring processed twice" % + api_doc.canonical_name) return initialize_api_doc(api_doc) @@ -228,7 +231,7 @@ initvar = api_doc.variables.get('__init__') if initvar and isinstance(initvar.value, RoutineDoc): init_api_doc = initvar.value - parse_docstring(init_api_doc, docindex) + parse_docstring(init_api_doc, docindex, supress_warnings) parse_function_signature(init_api_doc, api_doc, docformat, parse_errors) @@ -273,7 +276,13 @@ # vars/params? # Report any errors that occured - report_errors(api_doc, docindex, parse_errors, field_warnings) + if api_doc in supress_warnings: + if parse_errors or field_warnings: + log.info("Supressing docstring warnings for %s, since it " + "is not included in the documented set." % + api_doc.canonical_name) + else: + report_errors(api_doc, docindex, parse_errors, field_warnings) def add_metadata_from_var(api_doc, field): for varname in field.varnames: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2008-01-30 17:01:08
|
Revision: 1689 http://epydoc.svn.sourceforge.net/epydoc/?rev=1689&view=rev Author: edloper Date: 2008-01-30 09:01:02 -0800 (Wed, 30 Jan 2008) Log Message: ----------- - When hiding variables with @undocumented, also remove them from sort_spec. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2008-01-30 03:59:27 UTC (rev 1688) +++ trunk/epydoc/src/epydoc/docstringparser.py 2008-01-30 17:01:02 UTC (rev 1689) @@ -671,6 +671,9 @@ if var_name_re.match(var_name): # Remove the variable from `variables`. api_doc.variables.pop(var_name, None) + if api_doc.sort_spec is not UNKNOWN: + try: api_doc.sort_spec.remove(var_name) + except ValueError: pass # For modules, remove any submodules that match var_name_re. if isinstance(api_doc, ModuleDoc): removed = set([m for m in api_doc.submodules This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2008-02-13 19:19:49
|
Revision: 1715 http://epydoc.svn.sourceforge.net/epydoc/?rev=1715&view=rev Author: edloper Date: 2008-02-13 11:19:47 -0800 (Wed, 13 Feb 2008) Log Message: ----------- Fixed a bug that caused exceptions to propagate when reading a metadata variable failed. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2008-02-02 06:31:52 UTC (rev 1714) +++ trunk/epydoc/src/epydoc/docstringparser.py 2008-02-13 19:19:47 UTC (rev 1715) @@ -322,7 +322,7 @@ if field.multivalue and not value: try: value = epydoc.docparser.parse_string_list(val_doc.toktree) except KeyboardInterrupt: raise - except: raise + except: pass # Add any values that we found. for elt in value: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-09-06 19:26:01
|
Revision: 1356 http://svn.sourceforge.net/epydoc/?rev=1356&view=rev Author: edloper Date: 2006-09-06 12:25:54 -0700 (Wed, 06 Sep 2006) Log Message: ----------- - Fixed SF bug [ 1553539 ] Unknown parameter warnings do not occur -- Generate a warning if @param or @type contains an unknown parameter. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2006-09-06 19:12:18 UTC (rev 1355) +++ trunk/epydoc/src/epydoc/docstringparser.py 2006-09-06 19:25:54 UTC (rev 1356) @@ -331,6 +331,7 @@ BAD_CONTEXT = 'Invalid context for %r' REDEFINED = 'Redefinition of %s' UNKNOWN_TAG = 'Unknown field tag %r' +BAD_PARAM = '@%s for unknown parameter %s' ###################################################################### #{ Field Processing @@ -517,6 +518,10 @@ if arg in api_doc.arg_types: raise ValueError(REDEFINED % ('type for '+arg)) api_doc.arg_types[arg] = descr + # Check to make sure that the documented parameter(s) are + # actually part of the function signature. + if arg not in api_doc.all_args(): + raise ValueError(BAD_PARAM % (tag, '"%s"' % arg)) else: raise ValueError(BAD_CONTEXT % arg) @@ -578,6 +583,11 @@ _check(api_doc, tag, arg, context=RoutineDoc, expect_arg=True) idents = re.split('[:;, ] *', arg) api_doc.arg_descrs.append( (idents, descr) ) + # Check to make sure that the documented parameter(s) are + # actually part of the function signature. + bad_params = ['"%s"' % i for i in idents if i not in api_doc.all_args()] + if bad_params: + raise ValueError(BAD_PARAM % (tag, ', '.join(bad_params))) def process_kwarg_field(api_doc, docindex, tag, arg, descr): # [xx] these should -not- be checked if they exist.. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2007-03-10 00:10:35
|
Revision: 1578 http://svn.sourceforge.net/epydoc/?rev=1578&view=rev Author: dvarrazzo Date: 2007-03-09 16:10:33 -0800 (Fri, 09 Mar 2007) Log Message: ----------- - Variables don't add metadata to multivalue fields, if a value is already present. - Somewhat optimized check to test if a variable is to be used as metadata. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2007-03-09 23:26:21 UTC (rev 1577) +++ trunk/epydoc/src/epydoc/docstringparser.py 2007-03-10 00:10:33 UTC (rev 1578) @@ -267,13 +267,18 @@ report_errors(api_doc, docindex, parse_errors, field_warnings) def add_metadata_from_var(api_doc, field): - if not field.multivalue: - for (f,a,d) in api_doc.metadata: - if field == f: - return # We already have a value for this metadata. for varname in field.varnames: # Check if api_doc has a variable w/ the given name. if varname not in api_doc.variables: continue + + # Check moved here from before the for loop because we expect to + # reach rarely this point. The loop below is to be performed more than + # once only for fields with more than one varname, which currently is + # only 'author'. + for md in api_doc.metadata: + if field == md[0]: + return # We already have a value for this metadata. + var_doc = api_doc.variables[varname] if var_doc.value is UNKNOWN: continue val_doc = var_doc.value This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2007-05-10 17:45:36
|
Revision: 1589 http://svn.sourceforge.net/epydoc/?rev=1589&view=rev Author: dvarrazzo Date: 2007-05-10 10:45:21 -0700 (Thu, 10 May 2007) Log Message: ----------- - A function signature is recognized if arguments with default values are represented with whitespaces before the '=' sign. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2007-03-25 13:37:13 UTC (rev 1588) +++ trunk/epydoc/src/epydoc/docstringparser.py 2007-05-10 17:45:21 UTC (rev 1589) @@ -968,8 +968,8 @@ # The function name (must match exactly) [XX] not anymore! r'(?P<func>\w+)' + # The parameters - r'\((?P<params>(\s*\[?\s*\*{0,2}[\w\-\.]+(=.+?)?'+ - r'(\s*\[?\s*,\s*\]?\s*\*{0,2}[\w\-\.]+(=.+?)?)*\]*)?)\s*\)' + + r'\((?P<params>(\s*\[?\s*\*{0,2}[\w\-\.]+(\s*=.+?)?'+ + r'(\s*\[?\s*,\s*\]?\s*\*{0,2}[\w\-\.]+(\s*=.+?)?)*\]*)?)\s*\)' + # The return value (optional) r'(\s*(->)\s*(?P<return>\S.*?))?'+ # The end marker This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2007-09-24 15:59:47
|
Revision: 1632 http://epydoc.svn.sourceforge.net/epydoc/?rev=1632&view=rev Author: dvarrazzo Date: 2007-09-24 08:52:11 -0700 (Mon, 24 Sep 2007) Log Message: ----------- - Dropped extra paragraph in metadata values read from variables. Modified Paths: -------------- trunk/epydoc/src/epydoc/docstringparser.py Modified: trunk/epydoc/src/epydoc/docstringparser.py =================================================================== --- trunk/epydoc/src/epydoc/docstringparser.py 2007-09-24 01:36:56 UTC (rev 1631) +++ trunk/epydoc/src/epydoc/docstringparser.py 2007-09-24 15:52:11 UTC (rev 1632) @@ -318,7 +318,7 @@ else: elt = unicode(elt) elt = epytext.ParsedEpytextDocstring( - epytext.parse_as_para(elt)) + epytext.parse_as_para(elt), inline=True) # Add in the metadata and remove from the variables api_doc.metadata.append( (field, varname, elt) ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |