'Like read() but the argument must be a file-like object.
The `fp\' argument must have a `readline\' method.  Optional
second argument is the `filename\', which if not given, is
taken from fp.name.  If fp has no `name\' attribute, `<???>\' is
used.'

def readfp(self, fp, filename=None):

    if (filename is None):
        try:
            filename = fp.name
        except AttributeError:
            filename = '<???>'
    self._read(fp, filename)
