def update_from_file(self, obj, file_name=None, create=False, **kwargs): assert 'dir_only' not in kwargs, 'update_from_file(): `dir_only` parameter is invalid here' # do not create if not requested if create and not self.exists(obj, **kwargs): raise ObjectNotFound() if file_name is None: file_name = self.__get_cache_path(obj, **kwargs) # put will create if necessary doi = irods.dataObjInp_t() doi.objPath = self.__get_rods_path(obj, **kwargs) doi.createMode = 0o640 doi.dataSize = os.stat(file_name).st_size doi.numThreads = 0 irods.addKeyVal(doi.condInput, irods.DEST_RESC_NAME_KW, self.default_resource) irods.addKeyVal(doi.condInput, irods.FORCE_FLAG_KW, '') # TODO: might want to VERIFY_CHKSUM_KW log.debug('update_from_file(): updating %s to %s', file_name, doi.objPath) # do the iput status = irods.rcDataObjPut(self.rods_conn, doi, file_name) assert status == 0, 'update_from_file(): iput %s failed (%s): %s' % ( doi.objPath, status, irods.strerror(status))
def update_from_file(self, obj, file_name=None, create=False, **kwargs): assert "dir_only" not in kwargs, "update_from_file(): `dir_only` parameter is invalid here" # do not create if not requested if create and not self.exists(obj, **kwargs): raise ObjectNotFound() if file_name is None: file_name = self.__get_cache_path(obj, **kwargs) # put will create if necessary doi = irods.dataObjInp_t() doi.objPath = self.__get_rods_path(obj, **kwargs) doi.createMode = 0640 doi.dataSize = os.stat(file_name).st_size doi.numThreads = 0 irods.addKeyVal(doi.condInput, irods.DEST_RESC_NAME_KW, self.default_resource) irods.addKeyVal(doi.condInput, irods.FORCE_FLAG_KW, "") # TODO: might want to VERIFY_CHKSUM_KW log.debug("update_from_file(): updating %s to %s", file_name, doi.objPath) # do the iput status = irods.rcDataObjPut(self.rods_conn, doi, file_name) assert status == 0, "update_from_file(): iput %s failed (%s): %s" % ( doi.objPath, status, irods.strerror(status), )
def close(self): for (k, c) in self.cxns.iteritems(): c.close() # upload to irods srcPath = self.cxnFiles[c] (dirn, fn) = os.path.split(srcPath) # use file/C api dataObjOprInp = irods.dataObjInp_t() dataObjOprInp.setOprType(irods.PUT_OPR) dataObjOprInp.setOpenFlags(irods.O_RDWR) targPath = self.store.coll.getCollName() + "/" + fn statbuf = os.stat(srcPath) dataObjOprInp.setCreateMode(statbuf.st_mode) dataObjOprInp.setObjPath(targPath) dataObjOprInp.setDataSize(statbuf.st_size) irods.rcDataObjPut(self.store.cxn, dataObjOprInp, srcPath) self.cxns[k] = None return None
def upload_file(self, local_path, irods_path, resource=None, overwrite=False): """Upload a file to irods return True if the file is already present""" dataObjOprInp = irods.dataObjInp_t() dataObjOprInp.oprType = irods.PUT_OPR dataObjOprInp.openFlags = irods.O_RDWR if overwrite: irods.addKeyVal(dataObjOprInp.condInput, irods.FORCE_FLAG_KW, "") if resource: irods.addKeyVal(dataObjOprInp.condInput, irods.DEST_RESC_NAME_KW, resource) dataObjOprInp.objPath = irods_path status = irods.rcDataObjPut(self.conn, dataObjOprInp, local_path) return status == irods.OVERWRITE_WITHOUT_FORCE_FLAG