def _get_by_pid(self, pid, sysmeta=None, mn_client=None, cn_client=None):
        """ Return DataObject
        """
        if pid is None:
            raise Exception("Missing pid")

        fname = utils.get_object_by_pid(pid, resolve=True, mn_client=mn_client, cn_client=cn_client)
        if fname:
            meta = sysmeta
            if not meta:
                meta = utils.get_sysmeta_by_pid(pid, True)
            url = utils.create_get_url_for_pid(mn_client.base_url, pid)
            return DataObject(pid, False, fname, url, meta, meta.formatId, None)
        else:
            return None
    def load(self):
        """ Get the object referred to by pid and make sure it is a
            package.
        """
        if self.pid is None:
            raise Exception("Missing pid")
        sysmeta = utils.get_sysmeta_by_pid(self.pid)
        if not sysmeta:
            raise Exception('Couldn\'t find "%s" in DataONE.' % self.pid)
        if sysmeta.formatId != RDFXML_FORMATID:
            raise Exception('Package must be in RDF/XML format (not "%s").' % sysmeta.formatId)

        rdf_xml_file = utils.get_object_by_pid(self.pid)
        if not self._parse_rdf_xml(rdf_xml_file):
            raise Exception('Unable to load package "%s".' % self.pid)
        self.original_pid = self.pid
        self.sysmeta = sysmeta

        self.scimeta = self._download_object(self.scimeta)
        loaded_scidata = {}
        for pid, scidata in self.scidata_dict.iteritems():
            loaded_scidata[pid] = self._download_object(scidata)
        self.scidata_dict = loaded_scidata
        return self