def get_result(query, collection, projection, sort, limit, skip, exception_msg): try: cur = transactional_shim.find(collection, query, projection) if sort is None: ret = [util.deep_convert_to_unordered(i) for i in cur] ret.sort(cmp=util.mongo_compare_unordered_dict_items) elif isinstance(collection, MongoCollection): ret = copy.deepcopy([i for i in cur]) for i, val in enumerate(ret): if '_id' in val: val['_id'] = 0 ret = util.MongoModelNondeterministicList(ret, sort, limit, skip, query, projection, collection.options) # print ret else: ret = [i for i in cur.sort(sort).skip(skip).limit(limit)] for i, val in enumerate(ret): if '_id' in val: val['_id'] = 0 # print '1====', i, ret[i] return ret except pymongo.errors.OperationFailure as e: exception_msg.append('Caught PyMongo error:\n\n' ' Collection: %s\n' % str(collection) + ' Exception: %s\n' % str(e) + ' Query: %s\n' % str(query) + ' Projection: %s\n' % str(projection) + ' Sort: %s\n' % str(sort) + ' Limit: %r\n' % limit + ' Skip: %r\n' % skip) except MongoModelException as e: exception_msg.append('Caught Mongo Model error:\n\n' ' Collection: %s\n' % str(collection) + ' Exception: %s\n' % str(e) + ' Query: %s\n' % str(query) + ' Projection: %s\n' % str(projection) + ' Sort: %s\n' % str(sort) + ' Limit: %r\n' % limit + ' Skip: %r\n' % skip) return list()
def test_update(collections, verbose=False): okay = True for i in range(1, 10): update = gen.random_update(collections[0]) util.trace('debug', '\n========== Update No.', i, '==========') util.trace('debug', 'Query:', update['query']) util.trace('debug', 'Update:', str(update['update'])) util.trace('debug', 'Number results from collection: ', gen.count_query_results(collections[0], update['query'])) for item in transactional_shim.find(collections[0], update['query']): util.trace('debug', 'Find Result0:', item) exception = [] exception_msg = [] for coll in collections: try: if verbose: all = [x for x in coll.find(dict())] for item in transactional_shim.find(coll, update['query']): print 'Before update doc:', item print 'Before update coll size: ', len(all) transactional_shim.update(coll, update['query'], update['update'], upsert=update['upsert'], multi=update['multi']) if verbose: all = [x for x in coll.find(dict())] for item in coll.find(update['query']): print 'After update doc:', item print 'After update coll size: ', len(all) except pymongo.errors.OperationFailure as e: exception.append(e) exception_msg.append( util.join_n( 'Caught PyMongo error while attempting update: %s' % e[0], 'Query: %s' % update['query'], 'Update: %s' % update['update'], 'Upsert: {0}, Multi: {1}'.format( update['upsert'], update['multi']))) except MongoModelException as e: exception.append(e) exception_msg.append( util.join_n('Caught MongoModel error. Offending update(', str(update['query']), str(update['update']), str(update['upsert']), str(update['multi']), ')')) if len(exception_msg) == 1: print 'Update: ' + str(update['update']) print '\033[91m', exception[0], '\033[0m' print '\033[91m', exception_msg[0], '\033[0m' return False if not check_query(dict(), collections[0], collections[1]): print 'Update: ' + str(update['update']) return False return okay