def get_metadata(stream, extract_cover=True): """ Return metadata as a :class:`Metadata` object """ stream.seek(0) reader = get_zip_reader(stream) opfbytes = reader.read_bytes(reader.opf_path) mi, ver, raster_cover, first_spine_item = get_metadata_from_opf(opfbytes) if extract_cover: base = posixpath.dirname(reader.opf_path) if raster_cover: raster_cover = posixpath.normpath(posixpath.join(base, raster_cover)) if first_spine_item: first_spine_item = posixpath.normpath(posixpath.join(base, first_spine_item)) try: cdata = get_cover(raster_cover, first_spine_item, reader) if cdata is not None: mi.cover_data = ('jpg', cdata) except Exception: import traceback traceback.print_exc() mi.timestamp = None return mi