def save(self, mn_client=None, cn_client=None, **kwargs): """ Save this object referred to by this pid. """ if self.pid is None: raise Exception("Missing pid") if mn_client is None: mn_client = utils.get_d1_mn_client() if cn_client is None: cn_client = utils.get_d1_cn_client() pkg_xml = self._serialize("xml", mn_client) if not pkg_xml: raise Exception("Couldn't serialize object.") algorithm = configuration.checksum_alg hash_fcn = util.get_checksum_calculator_by_dataone_designator(algorithm) hash_fcn.update(pkg_xml) checksum = hash_fcn.hexdigest() sysmeta = utils.create_system_metadata(self.pid, len(pkg_xml), checksum, algorithm, RDFXML_FORMATID, **kwargs) flo = StringIO.StringIO(pkg_xml) # Save all the objects. if self.scimeta and self.scimeta.dirty: self._create_or_update(mn_client, cn_client, self.scimeta) for scidata_pid in self.scidata_dict.keys(): scidata = self.scidata_dict.get(scidata_pid) if scidata and scidata.dirty: self._create_or_update(mn_client, cn_client, scidata) response = mn_client.create(pid=self.pid, obj=flo, sysmeta=sysmeta) if response is None: return None else: self.original_pid = self.pid if self.scimeta: self.scimeta.dirty = False if self.scidata_dict: for scidata in self.scidata_dict.values(): scidata.dirty = False return response.value()
def run_pkg_test(): configuration.mn_url = "https://mn-demo-9.test.dataone.org/knb/d1/mn" configuration.cn_url = "https://cn-stage-2.test.dataone.org/cn" cn_client = utils.get_d1_cn_client() mn_client = utils.get_d1_mn_client() pid = "dakoop_test_pkg603" meta_pid = "dakoop_cadwsap003" meta_fname = "/vistrails/local_packages/dataone/package_data/cadwsap-s2910001-001.xml" meta_format = "FGDC-STD-001-1998" data_list = [ ( "dakoop_cadwsap_main003", "/vistrails/local_packages/dataone/package_data/cadwsap-s2910001-001-main.csv", "text/csv", ), ( "dakoop_cadwsap_vuln003", "/vistrails/local_packages/dataone/package_data/cadwsap-s2910001-001-vuln.csv", "text/csv", ), ] pkg = DataPackage(pid) sysmeta_kwargs = { "format_id": meta_format, "submitter": "dakoop", "owner": "dakoop", "orig_mn": configuration.mn_url, "auth_mn": configuration.mn_url, } pkg.scimeta_add(meta_pid, meta_fname, **sysmeta_kwargs) for (data_pid, data_fname, data_format) in data_list: sysmeta_kwargs["format_id"] = data_format pkg.scidata_add(data_pid, data_fname, **sysmeta_kwargs) del sysmeta_kwargs["format_id"] pkg.save(mn_client, cn_client, **sysmeta_kwargs)