'Read the HDU from a file.  Normally an HDU should be opened with
:func:`open` which reads the entire HDU list in a FITS file.  But this
method is still provided for symmetry with :func:`writeto`.
Parameters
fileobj : file object or file-like object
Input FITS file.  The file\'s seek pointer is assumed to be at the
beginning of the HDU.
checksum : bool
If `True`, verifies that both ``DATASUM`` and ``CHECKSUM`` card
values (when present in the HDU header) match the header and data
of all HDU\'s in the file.
ignore_missing_end : bool
Do not issue an exception when opening a file that is missing an
``END`` card in the last header.'

@classmethod
def readfrom(cls, fileobj, checksum=False, ignore_missing_end=False, **kwargs):

    if (not isinstance(fileobj, _File)):
        fileobj = _File(fileobj)
    hdu = cls._readfrom_internal(fileobj, checksum=checksum, ignore_missing_end=ignore_missing_end, **kwargs)
    fileobj.seek((hdu._data_offset + hdu._data_size), os.SEEK_SET)
    return hdu
