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