コード例 #1
0
 def test_query_order_by_col_not_in_result__183(self):
     test_collection_size = 8
     test_collection_path = '/{0}/home/{1}/testcoln_for_col_not_in_result'.format(
         self.sess.zone, self.sess.username)
     c1 = c2 = None
     try:
         c1 = helpers.make_test_collection(self.sess,
                                           test_collection_path + "1",
                                           obj_count=test_collection_size)
         c2 = helpers.make_test_collection(self.sess,
                                           test_collection_path + "2",
                                           obj_count=test_collection_size)
         d12 = [
             sorted([d.id for d in c.data_objects])
             for c in sorted((c1, c2), key=lambda c: c.id)
         ]
         query = self.sess.query(DataObject).filter(
             Like(Collection.name,
                  test_collection_path + "_")).order_by(Collection.id)
         q12 = list(map(lambda res: res[DataObject.id], query))
         self.assertTrue(d12[0] +
                         d12[1] == sorted(q12[:test_collection_size]) +
                         sorted(q12[test_collection_size:]))
     finally:
         if c1: c1.remove(recurse=True, force=True)
         if c2: c2.remove(recurse=True, force=True)
コード例 #2
0
    def test_query_data_name_and_id_no_columns(self):
        '''Same test as above, but without providing query columns to parse results.
        Result columns are retrieved by index 0..n
        '''

        # make a test collection larger than MAX_SQL_ROWS (number of files)
        test_collection_size = 3*MAX_SQL_ROWS
        test_collection_path = '/{0}/home/{1}/test_collection'.format(self.session.zone, self.session.username)
        self.test_collection = helpers.make_test_collection(
            self.session, test_collection_path, obj_count=test_collection_size)

        # make specific query
        sql = "select DATA_NAME, DATA_ID from R_DATA_MAIN join R_COLL_MAIN using (COLL_ID) where COLL_NAME = '{test_collection_path}'".format(**locals())
        alias = 'list_data_name_id'
        query = SpecificQuery(self.session, sql, alias)

        # register query in iCAT
        query.register()

        # run query and check results
        for i, result in enumerate(query):
            self.assertIn('test', result[0])
            self.assertIsNotNone(result[1])
        self.assertEqual(i, test_collection_size - 1)

        # unregister query
        query.remove()

        # remove test collection
        self.test_collection.remove(recurse=True, force=True)
コード例 #3
0
    def test_query_data_name_and_id(self):
        # make a test collection larger than MAX_SQL_ROWS (number of files)
        test_collection_size = 3*MAX_SQL_ROWS
        test_collection_path = '/{0}/home/{1}/test_collection'.format(self.session.zone, self.session.username)
        self.test_collection = helpers.make_test_collection(
            self.session, test_collection_path, obj_count=test_collection_size)

        # make specific query
        sql = "select DATA_NAME, DATA_ID from R_DATA_MAIN join R_COLL_MAIN using (COLL_ID) where COLL_NAME = '{test_collection_path}'".format(**locals())
        alias = 'list_data_name_id'
        columns = [DataObject.name, DataObject.id]
        query = SpecificQuery(self.session, sql, alias, columns)

        # register query in iCAT
        query.register()

        # run query and check results
        for i, result in enumerate(query):
            self.assertIn('test', result[DataObject.name])
            self.assertIsNotNone(result[DataObject.id])
        self.assertEqual(i, test_collection_size - 1)

        # unregister query
        query.remove()

        # remove test collection
        self.test_collection.remove(recurse=True, force=True)
コード例 #4
0
ファイル: query_test.py プロジェクト: trel/python-irodsclient
 def test_query_on_AVU_times(self):
     test_collection_path = '/{zone}/home/{user}/test_collection'.format( zone = self.sess.zone, user = self.sess.username)
     testColl = helpers.make_test_collection(self.sess, test_collection_path, obj_count = 1)
     testData =  testColl.data_objects[0]
     testResc =  self.sess.resources.get('demoResc')
     testUser =  self.sess.users.get(self.sess.username)
     objects =    { 'r': testResc, 'u': testUser, 'c':testColl, 'd':testData }
     object_IDs = { sfx:obj.id for sfx,obj in objects.items() }
     tables =  { 'r': (Resource, ResourceMeta),
                 'u': (User, UserMeta),
                 'd': (DataObject, DataObjectMeta),
                 'c': (Collection, CollectionMeta)  }
     try:
         str_number_incr = lambda str_numbers : str(1+max([0]+[int(n) if n.isdigit() else 0 for n in str_numbers]))
         AVU_unique_incr = lambda obj,suffix='' : ( 'a_'+suffix,
                                                    'v_'+suffix,
                                                    str_number_incr(avu.units for avu in obj.metadata.items()) )
         before = datetime.utcnow()
         time.sleep(1.5)
         for suffix,obj in objects.items(): obj.metadata.add( *AVU_unique_incr(obj,suffix) )
         after = datetime.utcnow()
         for suffix, tblpair in tables.items():
             self.sess.query( *tblpair ).filter(tblpair[1].modify_time <= after )\
                                        .filter(tblpair[1].modify_time > before )\
                                        .filter(tblpair[0].id == object_IDs[suffix] ).one()
             self.sess.query( *tblpair ).filter(tblpair[1].create_time <= after )\
                                        .filter(tblpair[1].create_time > before )\
                                        .filter(tblpair[0].id == object_IDs[suffix] ).one()
     finally:
         for obj in objects.values():
             for avu in obj.metadata.items(): obj.metadata.remove(avu)
         testColl.remove(recurse=True,force=True)
         helpers.remove_unused_metadata( self.sess )
コード例 #5
0
    def test_query_data_name_and_id_no_columns(self):
        '''Same test as above, but without providing query columns to parse results.
        Result columns are retrieved by index 0..n
        '''

        # make a test collection larger than MAX_SQL_ROWS (number of files)
        test_collection_size = 3*MAX_SQL_ROWS
        test_collection_path = '/{0}/home/{1}/test_collection'.format(self.session.zone, self.session.username)
        self.test_collection = helpers.make_test_collection(
            self.session, test_collection_path, obj_count=test_collection_size)

        # make specific query
        sql = "select data_name, data_id from r_data_main join r_coll_main using (coll_id) where coll_name = '{test_collection_path}'".format(**locals())
        alias = 'list_data_name_id'
        query = SpecificQuery(self.session, sql, alias)

        # register query in iCAT
        query.register()

        # run query and check results
        for i, result in enumerate(query.get_results()):
            self.assertIn('test', result[0])
            self.assertIsNotNone(result[1])
        self.assertEqual(i, test_collection_size - 1)

        # unregister query
        query.remove()

        # remove test collection
        self.test_collection.remove(recurse=True, force=True)
コード例 #6
0
    def test_query_data_name_and_id(self):
        # make a test collection larger than MAX_SQL_ROWS (number of files)
        test_collection_size = 3*MAX_SQL_ROWS
        test_collection_path = '/{0}/home/{1}/test_collection'.format(self.session.zone, self.session.username)
        self.test_collection = helpers.make_test_collection(
            self.session, test_collection_path, obj_count=test_collection_size)

        # make specific query
        sql = "select data_name, data_id from r_data_main join r_coll_main using (coll_id) where coll_name = '{test_collection_path}'".format(**locals())
        alias = 'list_data_name_id'
        columns = [DataObject.name, DataObject.id]
        query = SpecificQuery(self.session, sql, alias, columns)

        # register query in iCAT
        query.register()

        # run query and check results
        for i, result in enumerate(query.get_results()):
            self.assertIn('test', result[DataObject.name])
            self.assertIsNotNone(result[DataObject.id])
        self.assertEqual(i, test_collection_size - 1)

        # unregister query
        query.remove()

        # remove test collection
        self.test_collection.remove(recurse=True, force=True)
コード例 #7
0
    def setUp(self):
        self.sess = helpers.make_session()

        # Create test collection
        self.coll_path = '/{}/home/{}/test_dir'.format(self.sess.zone, self.sess.username)
        self.obj_count = 2500
        self.coll = helpers.make_test_collection(
            self.sess, self.coll_path, self.obj_count)
コード例 #8
0
 def setUpClass(cls):
     # once only (before all tests), set up large collection
     print("Creating a large collection...", file=sys.stderr)
     with helpers.make_session() as sess:
         # Create test collection
         cls.coll_path = '/{}/home/{}/test_dir'.format(
             sess.zone, sess.username)
         cls.obj_count = 2500
         cls.coll = helpers.make_test_collection(sess, cls.coll_path,
                                                 cls.obj_count)
コード例 #9
0
ファイル: query_test.py プロジェクト: trel/python-irodsclient
        def __enter__(self): # - prepare for context block ("with" statement)

            self.test_collection = helpers.make_test_collection( self.session, self.coll_path, obj_count=self.num_objects)
            q_params = (Collection.name, DataObject.name)

            if self.nAVUs > 0:

                # - set the AVUs on the collection's objects:
                for data_obj_path in map(lambda d:d[Collection.name]+"/"+d[DataObject.name],
                                         self.session.query(*q_params).filter(Collection.name == self.test_collection.path)):
                    data_obj = self.session.data_objects.get(data_obj_path)
                    for key in (str(x) for x in py3_range(self.nAVUs)):
                        data_obj.metadata[key] = iRODSMeta(key, "1")

                # - in subsequent test searches, match on each AVU of every data object in the collection:
                q_params += (DataObjectMeta.name,)

            # - The "with" statement receives, as context variable, a zero-arg function to build the query
            return lambda : self.session.query( *q_params ).filter( Collection.name == self.test_collection.path)
コード例 #10
0
    def setUp(self):
        self.sess = helpers.make_session_from_config()

        # Create test collection
        self.coll = helpers.make_test_collection(self.sess, self.coll_path,
                                                 self.obj_count)
コード例 #11
0
    def setUp(self):
        self.sess = helpers.make_session_from_config()

        # Create test collection
        self.coll = helpers.make_test_collection(
            self.sess, self.coll_path, self.obj_count)