@staticmethod
def _unmarshal_parts(pkg_reader, package, part_factory):
    """
        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*.
        """
    parts = {}
    for partname, content_type, reltype, blob in pkg_reader.iter_sparts():
        parts[partname] = part_factory(partname, content_type, reltype,
            blob, package)
    return parts
