'Return a dictionary of |Part| instances unmarshalled from
*pkg_reader*, keyed by partname. Side-effect is that each part in
*pkg_reader* is constructed using *part_factory*.'

@staticmethod
def _unmarshal_parts(pkg_reader, package, part_factory):

    parts = {}
    for (partname, content_type, reltype, blob) in pkg_reader.iter_sparts():
        parts[partname] = part_factory(partname, content_type, reltype, blob, package)
    return parts
