Exemplo n.º 1
0
 def delete_collection(self, irods_collection):
     """Delete a collection in iRODS
     irods_collection : path (str)"""
     collInp = irods.collInp_t()
     irods.addKeyVal(collInp.condInput, irods.RECURSIVE_OPR__KW, "")
     collInp.collName = irods_collection
     return irods.rcRmColl(self.conn, collInp, 0)
Exemplo n.º 2
0
    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))
Exemplo n.º 3
0
    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),
        )
Exemplo n.º 4
0
 def download_files(self, irods_files, targPath, overwrite=False):
     """Download a list of files from irods to a local directory
     irods_files : list of tuples (collection, file, resource)
     targPath : local path
     If some files already exist in the local directory and if the overwrite
     option is not set then a structure is returned, the caller will then
     have to define a strategy."""
     dataObjOprInp = irods.dataObjInp_t()
     dataObjOprInp.openFlags = irods.O_RDONLY
     if overwrite:
         irods.addKeyVal(dataObjOprInp.condInput, irods.FORCE_FLAG_KW, "")
     already_there = []
     for (collection, irods_file, resource) in irods_files:
         if resource:
             irods.addKeyVal(dataObjOprInp.condInput,
                             irods.RESC_NAME_KW,
                             resource)
         dataObjOprInp.objPath = collection + '/' + irods_file
         status = irods.rcDataObjGet(self.conn,
                                     dataObjOprInp,
                                     targPath + os.sep + irods_file)
         # If the file is already present we catch the error
         if status == irods.OVERWRITE_WITHOUT_FORCE_FLAG:
             already_there.append((collection, irods_file, resource))
     return already_there
Exemplo n.º 5
0
 def new_collection(self, irods_path):
     """Make a new directory in iRods"""
     collCreateInp = irods.collInp_t()
     irods.addKeyVal(collCreateInp.condInput,
                     irods.RECURSIVE_OPR__KW,
                     "")
     collCreateInp.collName = irods_path
     status = irods.rcCollCreate(self.conn, collCreateInp)
     return status
Exemplo n.º 6
0
 def delete_file(self, path, resc=None):
     """Delete a file in iRODS
     path : irods path (str)
     resc : Resource"""
     dataObjInp = irods.dataObjInp_t()
     dataObjInp.openFlags = irods.O_RDONLY
     if resc:
         d = irods.getFileInfo(path, resc)
         irods.addKeyVal(dataObjInp.condInput,
                         irods.REPL_NUM_KW,
                         d['data_repl_num'])
     dataObjInp.objPath = path
     status = irods.rcDataObjUnlink(self.conn, dataObjInp)
     return status
Exemplo n.º 7
0
 def delete_files(self, irods_files):
     """Delete a list of files from iRODS
     irods_files : list of tuples (collection, file, resource)"""
     dataObjInp = irods.dataObjInp_t()
     dataObjInp.openFlags = irods.O_RDONLY
     st = []
     for (collection, irods_file, resource) in irods_files:
         d = irods.getFileInfo(self.conn, collection, irods_file, resource)
         irods.addKeyVal(dataObjInp.condInput,
                         irods.REPL_NUM_KW,
                         d['data_repl_num'])
         dataObjInp.objPath = collection + '/' + irods_file
         status = irods.rcDataObjUnlink(self.conn, dataObjInp)
         st.append(status)
     return st
Exemplo n.º 8
0
 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
Exemplo n.º 9
0
 def download_file(self, irods_path, local_path, resource=None,
                 overwrite=False):
     """Download a file from irods to a local directory
     - irods_files : list of tuples (collection, file, resource)
     - local path
     - resource
     - overwrite the exisiting file if it exists"""
     dataObjOprInp = irods.dataObjInp_t()
     dataObjOprInp.openFlags = irods.O_RDONLY
     if overwrite:
         irods.addKeyVal(dataObjOprInp.condInput, irods.FORCE_FLAG_KW, "")
     if resource:
         irods.addKeyVal(dataObjOprInp.condInput, irods.RESC_NAME_KW,
                         resource)
     dataObjOprInp.objPath = irods_path
     status = irods.rcDataObjGet(self.conn, dataObjOprInp, local_path)
     return status == irods.OVERWRITE_WITHOUT_FORCE_FLAG
Exemplo n.º 10
0
 def create(self, obj, **kwargs):
     if not self.exists( obj, **kwargs ):
         rods_path = self.__get_rods_path( obj, **kwargs )
         log.debug( 'create(): %s', rods_path )
         dir_only = kwargs.get( 'dir_only', False )
         # short circuit collection creation since most of the time it will
         # be the root collection which already exists
         collection_path = rods_path if dir_only else path_dirname( rods_path )
         if collection_path != self.root_collection_path:
             self.__mkcolls( collection_path )
         if not dir_only:
             # rcDataObjCreate is used instead of the irodsOpen wrapper so
             # that we can prevent overwriting
             doi = irods.dataObjInp_t()
             doi.objPath = rods_path
             doi.createMode = 0o640
             doi.dataSize = 0  # 0 actually means "unknown", although literally 0 would be preferable
             irods.addKeyVal( doi.condInput, irods.DEST_RESC_NAME_KW, self.default_resource )
             status = irods.rcDataObjCreate( self.rods_conn, doi )
             assert status >= 0, 'create(): rcDataObjCreate() failed: %s: %s: %s' % ( rods_path, status, irods.strerror( status ) )
Exemplo n.º 11
0
 def create(self, obj, **kwargs):
     if not self.exists( obj, **kwargs ):
         rods_path = self.__get_rods_path( obj, **kwargs )
         log.debug( 'create(): %s', rods_path )
         dir_only = kwargs.get( 'dir_only', False )
         # short circuit collection creation since most of the time it will
         # be the root collection which already exists
         collection_path = rods_path if dir_only else path_dirname( rods_path )
         if collection_path != self.root_collection_path:
             self.__mkcolls( collection_path )
         if not dir_only:
             # rcDataObjCreate is used instead of the irodsOpen wrapper so
             # that we can prevent overwriting
             doi = irods.dataObjInp_t()
             doi.objPath = rods_path
             doi.createMode = 0o640
             doi.dataSize = 0  # 0 actually means "unknown", although literally 0 would be preferable
             irods.addKeyVal( doi.condInput, irods.DEST_RESC_NAME_KW, self.default_resource )
             status = irods.rcDataObjCreate( self.rods_conn, doi )
             assert status >= 0, 'create(): rcDataObjCreate() failed: %s: %s: %s' % ( rods_path, status, irods.strerror( status ) )
Exemplo n.º 12
0
 def replicate_file(self, file_info, dst_resource):
     """Replicate a file in irods
     file_info : (collection, file, resource)
     dst_resource : str"""
     (collection, irods_file, src_resource) = file_info
     dataObjInp = irods.dataObjInp_t()
     d = irods.getFileInfo(self.conn, collection, irods_file, src_resource)
     cond_inp = dataObjInp.condInput
     irods.addKeyVal(cond_inp, irods.REPL_NUM_KW, d['data_repl_num'])
     irods.addKeyVal(cond_inp, irods.RESC_NAME_KW, src_resource)
     irods.addKeyVal(cond_inp, irods.DEST_RESC_NAME_KW, dst_resource)
     dataObjInp.objPath = collection + '/' + irods_file
     status = irods.rcDataObjRepl(self.conn, dataObjInp)
     return status