Example #1
0
    def get(self, path, local_path = None, num_threads = DEFAULT_NUMBER_OF_THREADS, **options):
        """
        Get a reference to the data object at the specified `path'.

        Only download the object if the local_path is a string (specifying
        a path in the local filesystem to use as a destination file).
        """
        parent = self.sess.collections.get(irods_dirname(path))

        # TODO: optimize
        if local_path:
            self._download(path, local_path, num_threads = num_threads, **options)

        query = self.sess.query(DataObject)\
            .filter(DataObject.name == irods_basename(path))\
            .filter(DataObject.collection_id == parent.id)\
            .add_keyword(kw.ZONE_KW, path.split('/')[1])

        if hasattr(self.sess,'ticket__'):
            query = query.filter(Collection.id != 0) # a no-op, but necessary because CAT_SQL_ERR results if the ticket
                                                     # is for a DataObject and we don't explicitly join to Collection

        results = query.all() # get up to max_rows replicas
        if len(results) <= 0:
            raise ex.DataObjectDoesNotExist()
        return iRODSDataObject(self, parent, results)
Example #2
0
    def _check_object(self, object_name):

        def _not_found():
            result = Result(ObjectType.DATAOBJECT, object_name,
                            "", Status.NOT_FOUND, {})
            self.formatter(result)
            return

        try:
            collection = self.session.collections.get(
                irods_dirname(object_name))
            objects = self.session.query(DataObject, Collection.name).filter(
                DataObject.name == irods_basename(object_name)).filter(
                DataObject.collection_id == collection.id).all()
        except (iexc.NoResultFound, iexc.CollectionDoesNotExist):
            _not_found()
            return

        if len(objects) == 0:
            _not_found()
            return

        results_found = False

        for object in objects:
            if self._is_local_resource(object[DataObject.resource_name]):
                object_checker = ObjectChecker(object, object[DataObject.path])
                result = object_checker.get_result()
                results_found = True

        if not results_found:
            result = Result(ObjectType.DATAOBJECT, object_name,
                            "", Status.NO_LOCAL_REPLICA, {})

        self.formatter(result)
Example #3
0
    def get(self, path, file=None, **options):
        parent = self.sess.collections.get(irods_dirname(path))

        # TODO: optimize
        if file:
            self._download(path, file, **options)

        query = self.sess.query(DataObject)\
            .filter(DataObject.name == irods_basename(path))\
            .filter(DataObject.collection_id == parent.id)
        results = query.all()  # get up to max_rows replicas
        if len(results) <= 0:
            raise ex.DataObjectDoesNotExist()
        return iRODSDataObject(self, parent, results)
    def get(self, path, file=None, **options):
        parent = self.sess.collections.get(irods_dirname(path))

        # TODO: optimize
        if file:
            self._download(path, file, **options)

        query = self.sess.query(DataObject)\
            .filter(DataObject.name == irods_basename(path))\
            .filter(DataObject.collection_id == parent.id)
        results = query.all() # get up to max_rows replicas
        if len(results) <= 0:
            raise ex.DataObjectDoesNotExist()
        return iRODSDataObject(self, parent, results)
Example #5
0
    def get(self, path, file=None, **options):
        parent = self.sess.collections.get(irods_dirname(path))

        # TODO: optimize
        if file:
            self._download(path, file, **options)

        query = self.sess.query(DataObject)\
            .filter(DataObject.name == irods_basename(path))\
            .filter(DataObject.collection_id == parent.id)\
            .add_keyword(kw.ZONE_KW, path.split('/')[1])

        results = query.all()  # get up to max_rows replicas
        if len(results) <= 0:
            raise ex.DataObjectDoesNotExist()
        # workaround incompatibility of irodsclient-0.8.2 and iRODS server 3.x
        for r in results:
            if DataObject.resc_hier not in r:
                r[DataObject.resc_hier] = None
        return iRODSDataObject(self, parent, results)
Example #6
0
    def get(self,
            path,
            local_path=None,
            num_threads=DEFAULT_NUMBER_OF_THREADS,
            **options):
        parent = self.sess.collections.get(irods_dirname(path))

        # TODO: optimize
        if local_path:
            self._download(path,
                           local_path,
                           num_threads=num_threads,
                           **options)

        query = self.sess.query(DataObject)\
            .filter(DataObject.name == irods_basename(path))\
            .filter(DataObject.collection_id == parent.id)\
            .add_keyword(kw.ZONE_KW, path.split('/')[1])

        results = query.all()  # get up to max_rows replicas
        if len(results) <= 0:
            raise ex.DataObjectDoesNotExist()
        return iRODSDataObject(self, parent, results)
Example #7
0
 def data_access_query(self, path):
     cn = irods_dirname(path)
     dn = irods_basename(path)
     return self.sess.query(DataObject,
                            DataAccess).filter(Collection.name == cn,
                                               DataObject.name == dn)