Esempio n. 1
0
    def test_repr(self):
        self.assertEqual('Request()', repr(Request()))
        self.assertEqual('Request({})', repr(Request({})))
        self.assertEqual('Request({})', repr(Request([{}])))
        self.assertEqual('Request(flags=4)', repr(Request(flags=4)))

        self.assertEqual('OpQuery({})', repr(OpQuery()))
        self.assertEqual('OpQuery({})', repr(OpQuery({})))
        self.assertEqual('OpQuery({})', repr(OpQuery([{}])))
        self.assertEqual('OpQuery({}, flags=SlaveOkay)',
                         repr(OpQuery(flags=4)))
        self.assertEqual('OpQuery({}, flags=SlaveOkay)',
                         repr(OpQuery({}, flags=4)))
        self.assertEqual('OpQuery({}, flags=TailableCursor|AwaitData)',
                         repr(OpQuery({}, flags=34)))

        self.assertEqual('Command({})', repr(Command()))
        self.assertEqual('Command({"foo": 1})', repr(Command('foo')))
        son = SON([('b', 1), ('a', 1), ('c', 1)])
        self.assertEqual('Command({"b": 1, "a": 1, "c": 1})',
                         repr(Command(son)))
        self.assertEqual('Command({}, flags=SlaveOkay)',
                         repr(Command(flags=4)))

        self.assertEqual('OpInsert({}, {})', repr(OpInsert([{}, {}])))
        self.assertEqual('OpInsert({}, {})', repr(OpInsert({}, {})))
Esempio n. 2
0
    def test_insert_many(self):
        collection = self.collection.with_options(
            write_concern=WriteConcern(0))

        flags = INSERT_FLAGS['ContinueOnError']
        docs = [{'_id': 1}, {'_id': 2}]
        with going(collection.insert_many, docs, ordered=False):
            self.server.receives(OpInsert(docs, flags=flags))
    def test_op_insert_manipulate_false(self):
        # Test three aspects of legacy insert with manipulate=False:
        #   1. The return value is None, [None], or [None, None] as appropriate.
        #   2. _id is not set on the passed-in document object.
        #   3. _id is not sent to server.
        server = MockupDB(auto_ismaster=True)
        server.run()
        self.addCleanup(server.stop)

        client = MongoClient(server.uri)
        self.addCleanup(client.close)

        doc = {}
        with going(client.db.coll.insert, doc, manipulate=False) as future:
            server.receives(OpInsert({'_id': absent}))
            server.receives('getlasterror').replies_to_gle()

        self.assertFalse('_id' in doc)
        self.assertIsNone(future())

        docs = [{}]  # One doc in a list.
        with going(client.db.coll.insert, docs, manipulate=False) as future:
            server.receives(OpInsert({'_id': absent}))
            server.receives('getlasterror').replies_to_gle()

        self.assertFalse('_id' in docs[0])
        self.assertEqual(future(), [None])

        docs = [{}, {}]  # Two docs.
        with going(client.db.coll.insert, docs, manipulate=False) as future:
            server.receives(OpInsert({'_id': absent}, {'_id': absent}))
            server.receives('getlasterror').replies_to_gle()

        self.assertFalse('_id' in docs[0])
        self.assertFalse('_id' in docs[1])
        self.assertEqual(future(), [None, None])
Esempio n. 4
0
 def test_insert_one(self):
     with going(self.collection.insert_one, {'_id': 1}):
         self.server.receives(OpInsert({'_id': 1}, flags=0))
Esempio n. 5
0
    def test_op_insert_manipulate_false(self):
        # Test three aspects of legacy insert with manipulate=False:
        #   1. The return value is None, [None], or [None, None] as appropriate.
        #   2. _id is not set on the passed-in document object.
        #   3. _id is not sent to server.
        server = MockupDB(auto_ismaster=True)
        server.run()
        self.addCleanup(server.stop)

        client = MongoClient(server.uri)
        self.addCleanup(client.close)

        coll = client.db.get_collection('coll',
                                        write_concern=WriteConcern(w=0))
        doc = {}
        with going(coll.insert, doc, manipulate=False) as future:
            if version_tuple >= (3, 7):
                server.receives(
                    OpMsg(SON([("insert", coll.name), ("ordered", True),
                               ("writeConcern", {
                                   "w": 0
                               }), ("documents", [{}])]),
                          flags=OP_MSG_FLAGS['moreToCome']))
            else:
                server.receives(OpInsert({'_id': absent}))

        self.assertFalse('_id' in doc)
        self.assertIsNone(future())

        docs = [{}]  # One doc in a list.
        with going(coll.insert, docs, manipulate=False) as future:
            if version_tuple >= (3, 7):
                # PyMongo 3.7 ordered bulk w:0 writes use implicit w:1.
                request = server.receives()
                request.assert_matches(
                    OpMsg(SON([("insert", coll.name), ("ordered", True),
                               ("documents", [{}])]),
                          flags=0))
                request.reply({"n": 1})
            else:
                server.receives(OpInsert({'_id': absent}))

        self.assertFalse('_id' in docs[0])
        self.assertEqual(future(), [None])

        docs = [{}, {}]  # Two docs.
        with going(coll.insert, docs, manipulate=False) as future:
            if version_tuple >= (3, 7):
                # PyMongo 3.7 ordered bulk w:0 writes use implicit w:1.
                request = server.receives()
                request.assert_matches(
                    OpMsg(SON([("insert", coll.name), ("ordered", True),
                               ("documents", [{}, {}])]),
                          flags=0))
                request.reply({"n": 2})
            else:
                server.receives(OpInsert({'_id': absent}, {'_id': absent}))

        self.assertFalse('_id' in docs[0])
        self.assertFalse('_id' in docs[1])
        self.assertEqual(future(), [None, None])