Beispiel #1
0
    def test_GridFsObjects(self):
        """ Tests gridfs objects """
        conn = yield txmongo.MongoConnection(mongo_host, mongo_port)
        db = conn.test
        db.fs.files.remove({})  # drop all objects there first
        db.fs.chunks.remove({})
        gfs = GridFS(db)  # Default collection
        yield gfs.delete(u"test")

        _ = gfs.new_file(filename="test_1", contentType="text/plain", chunk_size=65536)
        yield conn.disconnect()
        conn = yield txmongo.MongoConnection(mongo_host, mongo_port)
        db = conn.test
        db.fs.files.remove({})  # drop all objects there first
        gfs = GridFS(db)  # Default collection
        _ = yield gfs.put(b"0xDEADBEEF", filename="test_2", contentType="text/plain",
                          chunk_size=65536)
        # disconnect
        yield conn.disconnect()

        conn = yield txmongo.MongoConnection(mongo_host, mongo_port)
        db = conn.test
        gfs = GridFS(db)  # Default collection
        _ = yield gfs.get("test_3")
        # disconnect
        yield conn.disconnect()
Beispiel #2
0
    def test_GridFsObjects(self):
        """ Tests gridfs objects """
        conn = yield txmongo.MongoConnection(mongo_host, mongo_port)
        db = conn.test
        yield self._drop_gridfs(db)
        gfs = GridFS(db)  # Default collection
        yield gfs.delete(u"test")

        _ = gfs.new_file(filename="test_1",
                         contentType="text/plain",
                         chunk_size=65536)
        yield conn.disconnect()
        conn = yield txmongo.MongoConnection(mongo_host, mongo_port)
        db = conn.test
        yield self._drop_gridfs(db)
        gfs = GridFS(db)  # Default collection
        _ = yield gfs.put(b"0xDEADBEEF",
                          filename="test_2",
                          contentType="text/plain",
                          chunk_size=65536)
        # disconnect
        yield conn.disconnect()

        conn = yield txmongo.MongoConnection(mongo_host, mongo_port)
        db = conn.test
        gfs = GridFS(db)  # Default collection
        # Missing file raises error
        yield self.assertFailure(gfs.get("test_3"), NoFile)
        # disconnect
        yield conn.disconnect()
Beispiel #3
0
    def test_GridFsIndexesCreation(self):
        """ Tests gridfs indexes creation"""
        conn = yield txmongo.MongoConnection(mongo_host, mongo_port)
        db = conn.test
        yield self._drop_gridfs(db)

        # Create a new GridFS instance should trigger indexes creation
        gfs = GridFS(db)

        # Multiple calls should return multiple defer not to mix between them
        self.assertNotEqual(gfs.indexes_created(), gfs.indexes_created())

        yield gfs.indexes_created()

        indexes = yield db.fs.files.index_information()
        self.assertTrue(
            any(key["key"] == SON([("filename", 1), ("uploadDate", 1)])
                for key in indexes.values()))

        indexes = yield db.fs.chunks.index_information()
        self.assertTrue(
            any(key["key"] == SON([("files_id", 1), ("n", 1)])
                for key in indexes.values()))

        yield conn.disconnect()
Beispiel #4
0
    def test_GridFsIteration(self):
        """ Tests gridfs iterator """
        conn = yield txmongo.MongoConnection(mongo_host, mongo_port)
        db = conn.test
        db.fs.files.remove({})  # drop all objects there first
        db.fs.chunks.remove({})
        gfs = GridFS(db)  # Default collection
        new_file = gfs.new_file(filename="testName", contentType="text/plain", length=1048576,
                                chunk_size=4096)
        yield new_file.write(b"0xDEADBEEF"*4096*2)
        yield new_file.close()
        fake_doc = {"_id": new_file._id, "name": "testName", "length": 4096*2, "chunkSize": 4096,
                    "contentType": "text/plain"}
        grid_out_file = GridOut(db.fs, fake_doc)
        iterator = GridOutIterator(grid_out_file, db.fs.chunks)
        next_it = yield next(iterator)
        self.assertEqual(len(next_it), 4096)
        _ = yield next(iterator)
        next_it = yield next(iterator)
        self.assertEqual(next_it, None)

        fake_bad_doc = {"_id": "bad_id", "name": "testName", "length": 4096*2,
                        "chunkSize": 4096, "contentType": "text/plain"}
        grid_bad_out_file = GridOut(db.fs, fake_bad_doc)
        bad_iterator = GridOutIterator(grid_bad_out_file, db.fs.chunks)
        if _version.version.major >= 15:
            with self.assertRaises(errors.CorruptGridFile):
                next_it = yield bad_iterator.next()

        # disconnect
        yield conn.disconnect()
Beispiel #5
0
    def __init__(self, mode='test'):
        '''
        Mode is one of ['test', 'development', 'production']
        '''

        # create a connection to the mongodb. None passed to trigger right away
        self.client = txmongo.MongoConnection(pool_size=100)
        self.mode = mode

        # Pick the right database
        if mode == 'development':
            self.db = self.client.development
        elif mode == 'production':
            self.db = self.client.production
        elif mode == 'test':
            self.db = self.client.test
        else:
            raise SyntaxError(
                "Mode must be one of ['development', 'production', 'test']. the input "
                + mode + " is invalid.")

        # Pull refs for easier access later (and to declare them for anyone reading this)
        self.users = self.db.users
        self.chutes = self.db.chutes

        self.routerInstances = self.db.routerInstances
        self.chuteInstances = self.db.chuteInstances
Beispiel #6
0
def example():
    mongo = yield txmongo.MongoConnection()

    foo = mongo.foo  # `foo` database
    test = foo.test  # `test` collection

    idx = filter.sort(filter.ASCENDING("something") + filter.DESCENDING("else"))
    print "IDX:", idx

    result = yield test.create_index(idx)
    print "create_index:", result

    result = yield test.index_information()
    print "index_information:", result

    result = yield test.drop_index(idx)
    print "drop_index:", result

    # Geohaystack example
    geoh_idx = filter.sort(filter.GEOHAYSTACK("loc") + filter.ASCENDING("type"))
    print "IDX:", geoh_idx
    result = yield test.create_index(geoh_idx, **{'bucketSize':1})
    print "index_information:", result

    result = yield test.drop_index(geoh_idx)
    print "drop_index:", result

    # 2D geospatial index
    geo_idx = filter.sort(filter.GEO2D("pos"))
    print "IDX:", geo_idx
    result = yield test.create_index(geo_idx, **{ 'min':-100, 'max':100 })
    print "index_information:", result

    result = yield test.drop_index(geo_idx)
    print "drop_index:", result
Beispiel #7
0
def example():
    mongo = yield txmongo.MongoConnection()

    foo = mongo.foo  # `foo` database
    test = foo.test  # `test` collection

    yield test.insert({"src": "Twitter", "content": "bla bla"}, safe=True)
    yield test.insert({"src": "Twitter", "content": "more data"}, safe=True)
    yield test.insert({
        "src": "Wordpress",
        "content": "blog article 1"
    },
                      safe=True)
    yield test.insert({
        "src": "Wordpress",
        "content": "blog article 2"
    },
                      safe=True)
    yield test.insert({
        "src": "Wordpress",
        "content": "some comments"
    },
                      safe=True)

    result = yield test.group(keys=["src"],
                              initial={"count": 0},
                              reduce="function(obj,prev){prev.count++;}")

    print "result:", result
    def test_MongoOperations(self):
        """ Tests mongo operations """
        conn = yield txmongo.MongoConnection(mongo_host, mongo_port)
        test = conn.foo.test
        
        # insert
        doc = {"foo":"bar", "items":[1, 2, 3]}
        yield test.insert(doc, safe=True)
        result = yield test.find_one(doc)
        self.assertEqual(result.has_key("_id"), True)
        self.assertEqual(result["foo"], "bar")
        self.assertEqual(result["items"], [1, 2, 3])
        
        # insert preserves object id
        doc.update({'_id': objectid.ObjectId()})
        yield test.insert(doc, safe=True)
        result = yield test.find_one(doc)
        self.assertEqual(result.get('_id'), doc.get('_id'))
        self.assertEqual(result["foo"], "bar")
        self.assertEqual(result["items"], [1, 2, 3])

        # update
        yield test.update({"_id":result["_id"]}, {"$set":{"one":"two"}}, safe=True)
        result = yield test.find_one({"_id":result["_id"]})
        self.assertEqual(result["one"], "two")

        # delete
        yield test.remove(result["_id"], safe=True)

        # disconnect
        yield conn.disconnect()
Beispiel #9
0
    def handle_request(self, request):
        try:
            username = request.args['user'][0]
            cxn = yield txmongo.MongoConnection()
            # Don't yield the user query
            user_defer = cxn.pycon.users.find_one({'name': username})

            # Go ahead with the translation regardless of 
            # whether we find a user.
            input_str = request.args['data'][0]
            from txtranslator import TranslatorClient
            client = TranslatorClient(SVC_HOST, SVC_PORT)
            output_defer = client.translate2(input_str)

            # Wait until we have both results.
            output_str = yield output_defer
            user = yield user_defer

            if user:
                request.write("%s: %s" % (str(user['name']), output_str))
            else:
                request.write("User '%s' not found!" % username)
        except Exception, err:
            print err
            request.write(resource.ErrorPage(500, "Internal Server Error.", err).render(request))
Beispiel #10
0
    def test_Properties(self):
        conn = txmongo.MongoConnection(mongo_host, mongo_port)
        db = conn.mydb
        coll = db.mycol

        try:
            # names
            self.assertEqual(db.name, u"mydb")
            self.assertEqual(coll.name, u"mycol")
            self.assertEqual(coll.full_name, u"mydb.mycol")
            self.assertEqual(coll.subcoll.name, u"mycol.subcoll")
            self.assertEqual(coll.subcoll.full_name, u"mydb.mycol.subcoll")

            # database
            self.assertTrue(coll.database is db)

            # Write concern
            w2 = coll.with_options(write_concern=WriteConcern(w=2))
            dbw2 = database.Database(conn, "mydb", write_concern=WriteConcern(w=2))
            self.assertEqual(w2.write_concern, WriteConcern(w=2))
            self.assertEqual(dbw2.write_concern, WriteConcern(w=2))

            # Connection
            self.assertTrue(db.connection is conn)
        finally:
            yield conn.disconnect()
Beispiel #11
0
 def _getConnection(self):
     if self._connection:
         return self._connection
     else:
         if self.pool:
             return txmongo.MongoConnectionPool()
         else:
             return txmongo.MongoConnection()
 def test_MongoObjects(self):
     """ Tests creating mongo objects """
     conn = yield txmongo.MongoConnection(mongo_host, mongo_port)
     mydb = conn.mydb
     self.assertEqual(isinstance(mydb, database.Database), True)
     mycol = mydb.mycol
     self.assertEqual(isinstance(mycol, collection.Collection), True)
     yield conn.disconnect()
Beispiel #13
0
def example():
    mongo = yield txmongo.MongoConnection()

    foo = mongo.foo  # `foo` database
    test = foo.test  # `test` collection

    result = yield test.drop(safe=True)
    print result
 def test_MongoConnection(self):
     # MongoConnection returns deferred, which gets MongoAPI
     conn = txmongo.MongoConnection(mongo_host, mongo_port)
     self.assertEqual(isinstance(conn, defer.Deferred), True)
     rapi = yield conn
     self.assertEqual(isinstance(rapi, txmongo.MongoAPI), True)
     disconnected = yield rapi.disconnect()
     self.assertEqual(disconnected, True)
 def test_lazyMongoConnectionPool(self):
     # lazyMongoConnection returns MongoAPI
     rapi = txmongo.MongoConnection(
         hosts=['%s:%d' % (mongo_host, mongo_port)], pool_size=2, lazy=True)
     self.assertEqual(isinstance(rapi, txmongo.MongoAPI), True)
     yield rapi._connected
     disconnected = yield rapi.disconnect()
     self.assertEqual(disconnected, True)
Beispiel #16
0
 def test_GridFileObjects(self):
     """ Tests gridfs objects """
     conn = yield txmongo.MongoConnection(mongo_host, mongo_port)
     db = conn.test
     db.fs.files.remove({})  # drop all objects there first
     db.fs.chunks.remove({})
     self.assertRaises(TypeError, GridFS, None)
     _ = GridFS(db)  # Default collection
     self.assertRaises(TypeError, GridIn, None)
     with GridIn(db.fs, filename="test_with", contentType="text/plain", chunk_size=1024):
         pass
     grid_in_file = GridIn(db.fs, filename="test_1", contentType="text/plain",
                           content_type="text/plain", chunk_size=65536, length=1048576,
                           upload_date="20150101")
     self.assertFalse(grid_in_file.closed)
     if _version.version.major >= 15:
         with self.assertRaises(TypeError):
             yield grid_in_file.write(1)
         with self.assertRaises(TypeError):
             yield grid_in_file.write(u"0xDEADBEEF")
         with self.assertRaises(AttributeError):
             _ = grid_in_file.test
     grid_in_file.test = 1
     yield grid_in_file.write(b"0xDEADBEEF")
     yield grid_in_file.write(b"0xDEADBEEF"*1048576)
     fake_doc = {"_id": "test_id", "length": 1048576, "filename": "test",
                 "upload_date": "20150101"}
     self.assertRaises(TypeError, GridOut, None, None)
     grid_out_file = GridOut(db.fs, fake_doc)
     if _version.version.major >= 15:
         with self.assertRaises(AttributeError):
             _ = grid_out_file.testing
     self.assertEqual("test", grid_out_file.filename)
     self.assertEqual(0, grid_out_file.tell())
     grid_out_file.seek(1024)
     self.assertEqual(1024, grid_out_file.tell())
     grid_out_file.seek(1024, os.SEEK_CUR)
     self.assertEqual(2048, grid_out_file.tell())
     grid_out_file.seek(0, os.SEEK_END)
     self.assertEqual(1048576, grid_out_file.tell())
     self.assertRaises(IOError, grid_out_file.seek, 0, 4)
     self.assertRaises(IOError, grid_out_file.seek, -1)
     self.assertTrue("'_id': 'test_id'" in repr(grid_out_file))
     self.assertTrue("20150101", grid_in_file.upload_date)
     yield grid_in_file.writelines([b"0xDEADBEEF", b"0xDEADBEAF"])
     yield grid_in_file.close()
     if _version.version.major >= 15:
         with self.assertRaises(AttributeError):
             grid_in_file.length = 1
     self.assertEqual(1, grid_in_file.test)
     if _version.version.major >= 15:
         with self.assertRaises(AttributeError):
             _ = grid_in_file.test_none
     self.assertTrue(grid_in_file.closed)
     if _version.version.major >= 15:
         with self.assertRaises(ValueError):
             yield grid_in_file.write(b"0xDEADBEEF")
     yield conn.disconnect()
Beispiel #17
0
    def render_GET(self, request):
        error_str = validate_params(request, ('user', 'data'))
        if error_str: return error_str

        mongo_defer = txmongo.MongoConnection()
        mongo_defer.addCallback(mongocxn_callback, request)
        mongo_defer.addErrback(mongocxn_errback, request)

        return NOT_DONE_YET
 def test_MongoConnectionPool(self):
     # MongoConnectionPool returns deferred, which gets MongoAPI
     conn = txmongo.MongoConnection(
         hosts=['%s:%d' % (mongo_host, mongo_port)], pool_size=2)
     self.assertEqual(isinstance(conn, defer.Deferred), True)
     rapi = yield conn
     self.assertEqual(isinstance(rapi, txmongo.MongoAPI), True)
     disconnected = yield rapi.disconnect()
     self.assertEqual(disconnected, True)
Beispiel #19
0
 def init_database(self):
     self.mongo = yield txmongo.MongoConnection(
         host=self.setting.DATA_MONGO_HOST,
         port=self.setting.DATA_MONGO_PORT)
     self.redis = yield txredisapi.Connection(
         host=self.setting.QUEUE_REDIS_HOST,
         port=self.setting.QUEUE_REDIS_PORT)
     #yield self.mongo.admin.authenticate("root", "chenfuzhi")
     defer.returnValue(True)
Beispiel #20
0
def main():
    mongo = yield txmongo.MongoConnection()

    admin = yield mongo.mydb.users.find_one({"u":"cyclone"})
    if admin:
        print "user 'cyclone' with password 'cyclone' already exists: %s" % admin["_id"]
    else:
        objid = yield mongo.mydb.users.insert({"u":"cyclone", "p":hashlib.md5("cyclone").hexdigest()}, safe=True)
        print "user 'cyclone' with password 'cyclone' has been created: %s" % objid
def example():
    mongo = yield txmongo.MongoConnection()

    foo = mongo.foo  # `foo` database
    test = foo.test  # `test` collection

    # insert some data
    for x in xrange(10000):
        result = yield test.insert({"something": x * time.time()}, safe=True)
        print result
Beispiel #22
0
def example():
    mongo = yield txmongo.MongoConnection()

    foo = mongo.foo  # `foo` database
    test = foo.test  # `test` collection

    # fetch some documents
    docs = yield test.find(limit=10)
    for doc in docs:
        print doc
Beispiel #23
0
    def test_GridFsOperations(self):
        """ Tests gridfs operations """
        conn = yield txmongo.MongoConnection(mongo_host, mongo_port)
        db = conn.test
        # Drop files first TODO: iterate through files and delete them
        yield self._drop_gridfs(db)

        # Don't forget to disconnect
        self.addCleanup(self._disconnect, conn)
        try:
            in_file = StringIO(b"Test input string")
            out_file = StringIO()
        except Exception as e:
            self.fail("Failed to create memory files for testing: %s" % e)

        g_out = None

        try:
            # Tests writing to a new gridfs file
            gfs = GridFS(db)  # Default collection
            if twisted_version.major >= 15:
                with self.assertRaises(NoFile):
                    yield gfs.get_last_version("optest")

            g_in = gfs.new_file(
                filename="optest", contentType="text/plain",
                chunk_size=65536)  # non-default chunk size used
            # yielding to ensure writes complete before we close and close before we try to read
            yield g_in.write(in_file.read())
            yield g_in.close()

            # Tests reading from an existing gridfs file
            g_out = yield gfs.get_last_version("optest")
            data = yield g_out.read()
            out_file.write(data)
            _id = g_out._id
        except Exception as e:
            self.fail("Failed to communicate with the GridFS. " +
                      "Is MongoDB running? %s" % e)
        else:
            self.assertEqual(in_file.getvalue(), out_file.getvalue(),
                             "Could not read the value from writing an input")
        finally:
            in_file.close()
            out_file.close()
            if g_out:
                g_out.close()

        listed_files = yield gfs.list()
        self.assertEqual(
            ["optest"], listed_files,
            "`optest` is the only expected file and we received %s" %
            listed_files)

        yield gfs.delete(_id)
 def test_GridFsOperations(self):
     """ Tests gridfs operations """
     conn = yield txmongo.MongoConnection(mongo_host, mongo_port)
     db = conn.test
     collection = db.fs
     
     # Don't forget to disconnect
     self.addCleanup(self._disconnect, conn)
     try:
         in_file = StringIO("Test input string")
         out_file = StringIO()
     except Exception, e:
         self.fail("Failed to create memory files for testing: %s" % e)
Beispiel #25
0
    def instatll(self):
        try:

            self.mongo = yield txmongo.MongoConnection(
                host=self.setting.DATA_MONGO_HOST,
                port=self.setting.DATA_MONGO_PORT)
            self.redis = yield txredisapi.Connection(
                host=self.setting.QUEUE_REDIS_HOST,
                port=self.setting.QUEUE_REDIS_PORT)
            yield self.mongo.admin.authenticate("root", "chenfuzhi")

            defer.returnValue(True)
        except Exception, e:
            defer.returnValue(False)
def example():
    mongo = yield txmongo.MongoConnection()

    foo = mongo.foo  # `foo` database
    test = foo.test  # `test` collection

    # create the filter
    f = txmongo.filter.sort(txmongo.filter.DESCENDING("something"))
    #f += txmongo.filter.hint(txmongo.filter.DESCENDING("myindex"))
    #f += txmongo.filter.explain()

    # fetch some documents
    docs = yield test.find(limit=10, filter=f)
    for n, doc in enumerate(docs):
        print n, doc
 def test_GridFsObjects(self):
     """ Tests gridfs objects """
     conn = yield txmongo.MongoConnection(mongo_host, mongo_port)
     db = conn.test
     collection = db.fs
     
     gfs = gridfs.GridFS(db) # Default collection
     
     gridin = GridIn(collection, filename='test', contentType="text/plain",
                     chunk_size=2**2**2**2)
     new_file = gfs.new_file(filename='test2', contentType="text/plain",
                     chunk_size=2**2**2**2)
     
     # disconnect
     yield conn.disconnect()
Beispiel #28
0
def example():
    mongo = yield txmongo.MongoConnection()

    foo = mongo.foo  # `foo` database
    test = foo.test  # `test` collection

    # insert
    yield test.insert({"foo": "bar", "name": "bla"}, safe=True)

    # update
    result = yield test.update({"foo": "bar"}, {"$set": {
        "name": "john doe"
    }},
                               safe=True)
    print "result:", result
Beispiel #29
0
    def test_GridFsIndexesCreation(self):
        """ Tests gridfs indexes creation"""
        conn = yield txmongo.MongoConnection(mongo_host, mongo_port)
        db = conn.test
        yield self._drop_gridfs(db)

        # Create a new GridFS instance should trigger indexes creation
        gfs = GridFS(db)

        # Multiple calls should return multiple defer not to mix between them
        self.assertNotEqual(gfs.indexes_created(), gfs.indexes_created())

        yield gfs.indexes_created()

        yield conn.disconnect()
def example():
    mongo = yield txmongo.MongoConnection()

    foo = mongo.foo  # `foo` database
    test = foo.test  # `test` collection

    # insert
    result = yield test.insert({"foo":"bar", "name":"bla"}, safe=True)
    print "insert result:", result

    # update
    result = yield test.update({"foo":"bar"}, {"$set": {"name":"john doe"}}, safe=True)
    print "update result:", result

    # find and modify
    spec1 = {"query": {"foo":"bar"},
             "update": {"$set": {"name": "findAndModify collection"}},
             "new": True, }
    result = yield test.runCommand("findAndModify", test.name, **spec1)
    print "findAndModify via collection.runCommand updated doc:", result
    
    spec2 = {"query": {"foo":"bar"},
             "update": {"$set": {"name": "findAndModify database"}},
             "new": True, }
    result = yield foo.command("findAndModify", test.name, **spec2)
    print "findAndModify via database.command updated doc:", result
    
    result = yield test.findAndModify(query = {"foo":"bar"},
                                      update = {"$set": {"name": "findAndModify method"}},
                                      **{"new": True} )
    print "findAndModify via collection method updated doc:", result
    
    result = yield test.findAndModify(query = {"foo":"barsert new"},
                                      update = {"$set": {"name": "findAndModify upsert"}},
                                      upsert = True,
                                      **{"new": True} )
    print "findAndModify via collection method upserted doc:", result

    result = yield test.findAndModify(query = {"foo":"barsert old"},
                                      update = {"$set": {"name": "findAndModify upsert"}},
                                      upsert = True, )
    print "findAndModify via collection method result (old doc):", result

    result = yield foo.command("profile", -1)
    print "profile level:", result

    result = yield foo.command("ping")
    print "ping:", result