[Epydoc-commits] SF.net SVN: epydoc: [1533] trunk/epydoc/src/epydoc/docwriter/xlink.py
Brought to you by:
edloper
|
From: <dva...@us...> - 2007-02-19 19:51:00
|
Revision: 1533
http://svn.sourceforge.net/epydoc/?rev=1533&view=rev
Author: dvarrazzo
Date: 2007-02-19 11:50:59 -0800 (Mon, 19 Feb 2007)
Log Message:
-----------
- Using Epydoc logger to report index file parsing errors.
- More robust index file parsing.
Modified Paths:
--------------
trunk/epydoc/src/epydoc/docwriter/xlink.py
Modified: trunk/epydoc/src/epydoc/docwriter/xlink.py
===================================================================
--- trunk/epydoc/src/epydoc/docwriter/xlink.py 2007-02-19 01:23:58 UTC (rev 1532)
+++ trunk/epydoc/src/epydoc/docwriter/xlink.py 2007-02-19 19:50:59 UTC (rev 1533)
@@ -79,6 +79,8 @@
from docutils.parsers.rst import roles
from docutils import nodes, utils
+from epydoc import log
+
class UrlGenerator:
"""
Generate URL from an object name.
@@ -199,6 +201,11 @@
Prefix portion for the URL's returned by `get_url()`.
"""
+ self._filename = None
+ """
+ Not very important: only for logging.
+ """
+
def get_url(self, name):
cname = self.get_canonical_name(name)
url = self._exact_matches.get(cname, None)
@@ -206,13 +213,13 @@
# go for a partial match
vals = self._partial_names.get(cname)
- if len(vals) == 1:
- url = self._exact_matches[vals[0]]
-
- elif not vals:
+ if vals is None:
raise IndexError(
"no object named '%s' found" % (name))
+ elif len(vals) == 1:
+ url = self._exact_matches[vals[0]]
+
else:
raise self.IndexAmbiguous(
"found %d objects that '%s' may refer to: %s"
@@ -240,16 +247,27 @@
f : `str` or file
a file name or file-like object fron which read the index.
"""
+ self._filename = str(f)
+
if isinstance(f, basestring):
- f = file(f)
+ f = open(f)
self.load_records(self._iter_tuples(f))
def _iter_tuples(self, f):
"""Iterate on a file returning 2-tuples."""
- for row in f:
- yield row.rstrip().split('\t', 1)
+ for nrow, row in enumerate(f):
+ # skip blank lines
+ row = row.rstrip()
+ if not row: continue
+ rec = row.split('\t', 2)
+ if len(rec) == 2:
+ yield rec
+ else:
+ log.warning("invalid row in '%s' row %d: '%s'"
+ % (self._filename, nrow+1, row))
+
def load_records(self, records):
"""
Read a sequence of pairs name -> url and populate the internal maps.
@@ -261,8 +279,9 @@
for name, url in records:
cname = self.get_canonical_name(name)
if not cname:
- # Have to decide how to warn.
- raise NotImplementedError("WARNING NAME NOT VALID")
+ log.warning("invalid object name in '%s': '%s'"
+ % (self._filename, name))
+ continue
self._exact_matches[name] = url
self._exact_matches[cname] = url
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|