Merge branch '0.9'
Conflicts: .travis.yml
This commit is contained in:
		
							
								
								
									
										58
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								.travis.yml
									
									
									
									
									
								
							| @@ -6,28 +6,62 @@ python: | |||||||
|     - "2.7" |     - "2.7" | ||||||
|     - "3.2" |     - "3.2" | ||||||
|     - "3.3" |     - "3.3" | ||||||
|  |     - "3.4" | ||||||
|  |     - "pypy" | ||||||
| env: | env: | ||||||
|   - PYMONGO=dev DJANGO=1.6 |   - PYMONGO=dev DJANGO=1.6.5 | ||||||
|   - PYMONGO=dev DJANGO=1.5.8 |   - PYMONGO=dev DJANGO=1.5.8 | ||||||
|   - PYMONGO=2.5 DJANGO=1.6 |   - PYMONGO=dev DJANGO=1.4.13 | ||||||
|   - PYMONGO=2.5 DJANGO=1.5.5 |   - PYMONGO=2.5.2 DJANGO=1.6.5 | ||||||
|   - PYMONGO=2.5 DJANGO=1.4.10 |   - PYMONGO=2.5.2 DJANGO=1.5.8 | ||||||
|   - PYMONGO=3.2 DJANGO=1.6 |   - PYMONGO=2.5.2 DJANGO=1.4.13 | ||||||
|   - PYMONGO=3.2 DJANGO=1.5.5 |   - PYMONGO=2.6.3 DJANGO=1.6.5 | ||||||
|   - PYMONGO=3.3 DJANGO=1.6 |   - PYMONGO=2.6.3 DJANGO=1.5.8 | ||||||
|   - PYMONGO=3.3 DJANGO=1.5.5 |   - PYMONGO=2.6.3 DJANGO=1.4.13 | ||||||
|  |   - PYMONGO=2.7.1 DJANGO=1.6.5 | ||||||
|  |   - PYMONGO=2.7.1 DJANGO=1.5.8 | ||||||
|  |   - PYMONGO=2.7.1 DJANGO=1.4.13 | ||||||
|  |  | ||||||
|  | matrix: | ||||||
|  |     fast_finish: true | ||||||
|  |     exclude: | ||||||
|  |         - python: "3.2" | ||||||
|  |           env: PYMONGO=dev DJANGO=1.4.13 | ||||||
|  |         - python: "3.2" | ||||||
|  |           env: PYMONGO=2.5.2 DJANGO=1.4.13 | ||||||
|  |         - python: "3.2" | ||||||
|  |           env: PYMONGO=2.6.3 DJANGO=1.4.13 | ||||||
|  |         - python: "3.2" | ||||||
|  |           env: PYMONGO=2.7.1 DJANGO=1.4.13 | ||||||
|  |         - python: "3.3" | ||||||
|  |           env: PYMONGO=dev DJANGO=1.4.13 | ||||||
|  |         - python: "3.3" | ||||||
|  |           env: PYMONGO=2.5.2 DJANGO=1.4.13 | ||||||
|  |         - python: "3.3" | ||||||
|  |           env: PYMONGO=2.6.3 DJANGO=1.4.13 | ||||||
|  |         - python: "3.3" | ||||||
|  |           env: PYMONGO=2.7.1 DJANGO=1.4.13 | ||||||
|  |         - python: "3.4" | ||||||
|  |           env: PYMONGO=dev DJANGO=1.4.13 | ||||||
|  |         - python: "3.4" | ||||||
|  |           env: PYMONGO=2.5.2 DJANGO=1.4.13 | ||||||
|  |         - python: "3.4" | ||||||
|  |           env: PYMONGO=2.6.3 DJANGO=1.4.13 | ||||||
|  |         - python: "3.4" | ||||||
|  |           env: PYMONGO=2.7.1 DJANGO=1.4.13 | ||||||
| install: | install: | ||||||
|     - if [[ $TRAVIS_PYTHON_VERSION == '2.'* ]]; then cp /usr/lib/*/libz.so $VIRTUAL_ENV/lib/; fi |     - sudo apt-get install python-dev python3-dev libopenjpeg-dev zlib1g-dev libjpeg-turbo8-dev libtiff4-dev libjpeg8-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk | ||||||
|     - if [[ $TRAVIS_PYTHON_VERSION == '2.'* ]]; then pip install pil --use-mirrors ; true; fi |  | ||||||
|     - if [[ $PYMONGO == 'dev' ]]; then pip install https://github.com/mongodb/mongo-python-driver/tarball/master; true; fi |     - if [[ $PYMONGO == 'dev' ]]; then pip install https://github.com/mongodb/mongo-python-driver/tarball/master; true; fi | ||||||
|     - if [[ $PYMONGO != 'dev' ]]; then pip install pymongo==$PYMONGO --use-mirrors; true; fi |     - if [[ $PYMONGO != 'dev' ]]; then pip install pymongo==$PYMONGO; true; fi | ||||||
|  |     - pip install Django==$DJANGO | ||||||
|     - pip install https://pypi.python.org/packages/source/p/python-dateutil/python-dateutil-2.1.tar.gz#md5=1534bb15cf311f07afaa3aacba1c028b |     - pip install https://pypi.python.org/packages/source/p/python-dateutil/python-dateutil-2.1.tar.gz#md5=1534bb15cf311f07afaa3aacba1c028b | ||||||
|     - python setup.py install |     - python setup.py install | ||||||
| script: | script: | ||||||
|     - python setup.py test |     - python setup.py test | ||||||
|  |     - if [[ $TRAVIS_PYTHON_VERSION == '3.'* ]]; then 2to3 . -w; fi; | ||||||
|  |     - python benchmark.py | ||||||
| notifications: | notifications: | ||||||
|   irc: "irc.freenode.org#mongoengine" |   irc: "irc.freenode.org#mongoengine" | ||||||
| branches: | branches: | ||||||
|   only: |   only: | ||||||
|     - master |     - master | ||||||
|     - "0.9" |  | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							| @@ -191,3 +191,4 @@ that much better: | |||||||
|  * Damien Churchill (https://github.com/damoxc) |  * Damien Churchill (https://github.com/damoxc) | ||||||
|  * Jonathan Simon Prates (https://github.com/jonathansp) |  * Jonathan Simon Prates (https://github.com/jonathansp) | ||||||
|  * Thiago Papageorgiou (https://github.com/tmpapageorgiou) |  * Thiago Papageorgiou (https://github.com/tmpapageorgiou) | ||||||
|  |  * Omer Katz (https://github.com/thedrow) | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								README.rst
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								README.rst
									
									
									
									
									
								
							| @@ -29,9 +29,18 @@ setup.py install``. | |||||||
|  |  | ||||||
| Dependencies | Dependencies | ||||||
| ============ | ============ | ||||||
| - pymongo 2.5+ | - pymongo>=2.5 | ||||||
| - sphinx (optional - for documentation generation) | - sphinx (optional - for documentation generation) | ||||||
|  |  | ||||||
|  | Optional Dependencies | ||||||
|  | --------------------- | ||||||
|  | - **Django Integration:** Django>=1.4.0 for Python 2.x or PyPy and Django>=1.5.0 for Python 3.x | ||||||
|  | - **Image Fields**: Pillow>=2.0.0 or PIL (not recommended since MongoEngine is tested with Pillow) | ||||||
|  | - dateutil>=2.1.0 | ||||||
|  |  | ||||||
|  | .. note | ||||||
|  |    MongoEngine always runs it's test suite against the latest patch version of each dependecy. e.g.: Django 1.6.5 | ||||||
|  |  | ||||||
| Examples | Examples | ||||||
| ======== | ======== | ||||||
| Some simple examples of what MongoEngine code looks like:: | Some simple examples of what MongoEngine code looks like:: | ||||||
|   | |||||||
							
								
								
									
										69
									
								
								benchmark.py
									
									
									
									
									
								
							
							
						
						
									
										69
									
								
								benchmark.py
									
									
									
									
									
								
							| @@ -15,7 +15,7 @@ def cprofile_main(): | |||||||
|     class Noddy(Document): |     class Noddy(Document): | ||||||
|         fields = DictField() |         fields = DictField() | ||||||
|  |  | ||||||
|     for i in xrange(1): |     for i in range(1): | ||||||
|         noddy = Noddy() |         noddy = Noddy() | ||||||
|         for j in range(20): |         for j in range(20): | ||||||
|             noddy.fields["key" + str(j)] = "value " + str(j) |             noddy.fields["key" + str(j)] = "value " + str(j) | ||||||
| @@ -113,6 +113,7 @@ def main(): | |||||||
|     4.68946313858 |     4.68946313858 | ||||||
|     ---------------------------------------------------------------------------------------------------- |     ---------------------------------------------------------------------------------------------------- | ||||||
|     """ |     """ | ||||||
|  |     print("Benchmarking...") | ||||||
|  |  | ||||||
|     setup = """ |     setup = """ | ||||||
| from pymongo import MongoClient | from pymongo import MongoClient | ||||||
| @@ -127,7 +128,7 @@ connection = MongoClient() | |||||||
| db = connection.timeit_test | db = connection.timeit_test | ||||||
| noddy = db.noddy | noddy = db.noddy | ||||||
|  |  | ||||||
| for i in xrange(10000): | for i in range(10000): | ||||||
|     example = {'fields': {}} |     example = {'fields': {}} | ||||||
|     for j in range(20): |     for j in range(20): | ||||||
|         example['fields']["key"+str(j)] = "value "+str(j) |         example['fields']["key"+str(j)] = "value "+str(j) | ||||||
| @@ -138,10 +139,10 @@ myNoddys = noddy.find() | |||||||
| [n for n in myNoddys] # iterate | [n for n in myNoddys] # iterate | ||||||
| """ | """ | ||||||
|  |  | ||||||
|     print "-" * 100 |     print("-" * 100) | ||||||
|     print """Creating 10000 dictionaries - Pymongo""" |     print("""Creating 10000 dictionaries - Pymongo""") | ||||||
|     t = timeit.Timer(stmt=stmt, setup=setup) |     t = timeit.Timer(stmt=stmt, setup=setup) | ||||||
|     print t.timeit(1) |     print(t.timeit(1)) | ||||||
|  |  | ||||||
|     stmt = """ |     stmt = """ | ||||||
| from pymongo import MongoClient | from pymongo import MongoClient | ||||||
| @@ -150,7 +151,7 @@ connection = MongoClient() | |||||||
| db = connection.timeit_test | db = connection.timeit_test | ||||||
| noddy = db.noddy | noddy = db.noddy | ||||||
|  |  | ||||||
| for i in xrange(10000): | for i in range(10000): | ||||||
|     example = {'fields': {}} |     example = {'fields': {}} | ||||||
|     for j in range(20): |     for j in range(20): | ||||||
|         example['fields']["key"+str(j)] = "value "+str(j) |         example['fields']["key"+str(j)] = "value "+str(j) | ||||||
| @@ -161,10 +162,10 @@ myNoddys = noddy.find() | |||||||
| [n for n in myNoddys] # iterate | [n for n in myNoddys] # iterate | ||||||
| """ | """ | ||||||
|  |  | ||||||
|     print "-" * 100 |     print("-" * 100) | ||||||
|     print """Creating 10000 dictionaries - Pymongo write_concern={"w": 0}""" |     print("""Creating 10000 dictionaries - Pymongo write_concern={"w": 0}""") | ||||||
|     t = timeit.Timer(stmt=stmt, setup=setup) |     t = timeit.Timer(stmt=stmt, setup=setup) | ||||||
|     print t.timeit(1) |     print(t.timeit(1)) | ||||||
|  |  | ||||||
|     setup = """ |     setup = """ | ||||||
| from pymongo import MongoClient | from pymongo import MongoClient | ||||||
| @@ -180,7 +181,7 @@ class Noddy(Document): | |||||||
| """ | """ | ||||||
|  |  | ||||||
|     stmt = """ |     stmt = """ | ||||||
| for i in xrange(10000): | for i in range(10000): | ||||||
|     noddy = Noddy() |     noddy = Noddy() | ||||||
|     for j in range(20): |     for j in range(20): | ||||||
|         noddy.fields["key"+str(j)] = "value "+str(j) |         noddy.fields["key"+str(j)] = "value "+str(j) | ||||||
| @@ -190,13 +191,13 @@ myNoddys = Noddy.objects() | |||||||
| [n for n in myNoddys] # iterate | [n for n in myNoddys] # iterate | ||||||
| """ | """ | ||||||
|  |  | ||||||
|     print "-" * 100 |     print("-" * 100) | ||||||
|     print """Creating 10000 dictionaries - MongoEngine""" |     print("""Creating 10000 dictionaries - MongoEngine""") | ||||||
|     t = timeit.Timer(stmt=stmt, setup=setup) |     t = timeit.Timer(stmt=stmt, setup=setup) | ||||||
|     print t.timeit(1) |     print(t.timeit(1)) | ||||||
|  |  | ||||||
|     stmt = """ |     stmt = """ | ||||||
| for i in xrange(10000): | for i in range(10000): | ||||||
|     noddy = Noddy() |     noddy = Noddy() | ||||||
|     fields = {} |     fields = {} | ||||||
|     for j in range(20): |     for j in range(20): | ||||||
| @@ -208,13 +209,13 @@ myNoddys = Noddy.objects() | |||||||
| [n for n in myNoddys] # iterate | [n for n in myNoddys] # iterate | ||||||
| """ | """ | ||||||
|  |  | ||||||
|     print "-" * 100 |     print("-" * 100) | ||||||
|     print """Creating 10000 dictionaries without continual assign - MongoEngine""" |     print("""Creating 10000 dictionaries without continual assign - MongoEngine""") | ||||||
|     t = timeit.Timer(stmt=stmt, setup=setup) |     t = timeit.Timer(stmt=stmt, setup=setup) | ||||||
|     print t.timeit(1) |     print(t.timeit(1)) | ||||||
|  |  | ||||||
|     stmt = """ |     stmt = """ | ||||||
| for i in xrange(10000): | for i in range(10000): | ||||||
|     noddy = Noddy() |     noddy = Noddy() | ||||||
|     for j in range(20): |     for j in range(20): | ||||||
|         noddy.fields["key"+str(j)] = "value "+str(j) |         noddy.fields["key"+str(j)] = "value "+str(j) | ||||||
| @@ -224,13 +225,13 @@ myNoddys = Noddy.objects() | |||||||
| [n for n in myNoddys] # iterate | [n for n in myNoddys] # iterate | ||||||
| """ | """ | ||||||
|  |  | ||||||
|     print "-" * 100 |     print("-" * 100) | ||||||
|     print """Creating 10000 dictionaries - MongoEngine - write_concern={"w": 0}, cascade = True""" |     print("""Creating 10000 dictionaries - MongoEngine - write_concern={"w": 0}, cascade = True""") | ||||||
|     t = timeit.Timer(stmt=stmt, setup=setup) |     t = timeit.Timer(stmt=stmt, setup=setup) | ||||||
|     print t.timeit(1) |     print(t.timeit(1)) | ||||||
|  |  | ||||||
|     stmt = """ |     stmt = """ | ||||||
| for i in xrange(10000): | for i in range(10000): | ||||||
|     noddy = Noddy() |     noddy = Noddy() | ||||||
|     for j in range(20): |     for j in range(20): | ||||||
|         noddy.fields["key"+str(j)] = "value "+str(j) |         noddy.fields["key"+str(j)] = "value "+str(j) | ||||||
| @@ -240,13 +241,13 @@ myNoddys = Noddy.objects() | |||||||
| [n for n in myNoddys] # iterate | [n for n in myNoddys] # iterate | ||||||
| """ | """ | ||||||
|  |  | ||||||
|     print "-" * 100 |     print("-" * 100) | ||||||
|     print """Creating 10000 dictionaries - MongoEngine, write_concern={"w": 0}, validate=False, cascade=True""" |     print("""Creating 10000 dictionaries - MongoEngine, write_concern={"w": 0}, validate=False, cascade=True""") | ||||||
|     t = timeit.Timer(stmt=stmt, setup=setup) |     t = timeit.Timer(stmt=stmt, setup=setup) | ||||||
|     print t.timeit(1) |     print(t.timeit(1)) | ||||||
|  |  | ||||||
|     stmt = """ |     stmt = """ | ||||||
| for i in xrange(10000): | for i in range(10000): | ||||||
|     noddy = Noddy() |     noddy = Noddy() | ||||||
|     for j in range(20): |     for j in range(20): | ||||||
|         noddy.fields["key"+str(j)] = "value "+str(j) |         noddy.fields["key"+str(j)] = "value "+str(j) | ||||||
| @@ -256,13 +257,13 @@ myNoddys = Noddy.objects() | |||||||
| [n for n in myNoddys] # iterate | [n for n in myNoddys] # iterate | ||||||
| """ | """ | ||||||
|  |  | ||||||
|     print "-" * 100 |     print("-" * 100) | ||||||
|     print """Creating 10000 dictionaries - MongoEngine, write_concern={"w": 0}, validate=False""" |     print("""Creating 10000 dictionaries - MongoEngine, write_concern={"w": 0}, validate=False""") | ||||||
|     t = timeit.Timer(stmt=stmt, setup=setup) |     t = timeit.Timer(stmt=stmt, setup=setup) | ||||||
|     print t.timeit(1) |     print(t.timeit(1)) | ||||||
|  |  | ||||||
|     stmt = """ |     stmt = """ | ||||||
| for i in xrange(10000): | for i in range(10000): | ||||||
|     noddy = Noddy() |     noddy = Noddy() | ||||||
|     for j in range(20): |     for j in range(20): | ||||||
|         noddy.fields["key"+str(j)] = "value "+str(j) |         noddy.fields["key"+str(j)] = "value "+str(j) | ||||||
| @@ -272,11 +273,11 @@ myNoddys = Noddy.objects() | |||||||
| [n for n in myNoddys] # iterate | [n for n in myNoddys] # iterate | ||||||
| """ | """ | ||||||
|  |  | ||||||
|     print "-" * 100 |     print("-" * 100) | ||||||
|     print """Creating 10000 dictionaries - MongoEngine, force_insert=True, write_concern={"w": 0}, validate=False""" |     print("""Creating 10000 dictionaries - MongoEngine, force_insert=True, write_concern={"w": 0}, validate=False""") | ||||||
|     t = timeit.Timer(stmt=stmt, setup=setup) |     t = timeit.Timer(stmt=stmt, setup=setup) | ||||||
|     print t.timeit(1) |     print(t.timeit(1)) | ||||||
|  |  | ||||||
|  |  | ||||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||||
|     main() |     main() | ||||||
|   | |||||||
| @@ -2,6 +2,11 @@ | |||||||
| Changelog | Changelog | ||||||
| ========= | ========= | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Changes in 0.9.X - DEV | ||||||
|  | ====================== | ||||||
|  | - pypy support #673 | ||||||
|  |  | ||||||
| Changes in 0.8.7 | Changes in 0.8.7 | ||||||
| ================ | ================ | ||||||
| - Calling reload on deleted / nonexistant documents raises DoesNotExist (#538) | - Calling reload on deleted / nonexistant documents raises DoesNotExist (#538) | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								setup.py
									
									
									
									
									
								
							| @@ -51,12 +51,12 @@ CLASSIFIERS = [ | |||||||
| extra_opts = {"packages": find_packages(exclude=["tests", "tests.*"])} | extra_opts = {"packages": find_packages(exclude=["tests", "tests.*"])} | ||||||
| if sys.version_info[0] == 3: | if sys.version_info[0] == 3: | ||||||
|     extra_opts['use_2to3'] = True |     extra_opts['use_2to3'] = True | ||||||
|     extra_opts['tests_require'] = ['nose', 'coverage', 'blinker', 'jinja2==2.6', 'django>=1.5.1'] |     extra_opts['tests_require'] = ['nose', 'coverage', 'blinker', 'jinja2==2.6', 'Pillow>=2.0.0', 'django>=1.5.1'] | ||||||
|     if "test" in sys.argv or "nosetests" in sys.argv: |     if "test" in sys.argv or "nosetests" in sys.argv: | ||||||
|         extra_opts['packages'] = find_packages() |         extra_opts['packages'] = find_packages() | ||||||
|         extra_opts['package_data'] = {"tests": ["fields/mongoengine.png", "fields/mongodb_leaf.png"]} |         extra_opts['package_data'] = {"tests": ["fields/mongoengine.png", "fields/mongodb_leaf.png"]} | ||||||
| else: | else: | ||||||
|     extra_opts['tests_require'] = ['nose', 'coverage', 'blinker', 'django>=1.4.2', 'PIL', 'jinja2>=2.6', 'python-dateutil'] |     extra_opts['tests_require'] = ['nose', 'coverage', 'blinker', 'django>=1.4.2', 'Pillow>=2.0.0', 'jinja2>=2.6', 'python-dateutil'] | ||||||
|  |  | ||||||
| setup(name='mongoengine', | setup(name='mongoengine', | ||||||
|       version=VERSION, |       version=VERSION, | ||||||
| @@ -72,7 +72,7 @@ setup(name='mongoengine', | |||||||
|       long_description=LONG_DESCRIPTION, |       long_description=LONG_DESCRIPTION, | ||||||
|       platforms=['any'], |       platforms=['any'], | ||||||
|       classifiers=CLASSIFIERS, |       classifiers=CLASSIFIERS, | ||||||
|       install_requires=['pymongo>=2.5'], |       install_requires=['pymongo>=2.7'], | ||||||
|       test_suite='nose.collector', |       test_suite='nose.collector', | ||||||
|       **extra_opts |       **extra_opts | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -57,7 +57,7 @@ class InstanceTest(unittest.TestCase): | |||||||
|             date = DateTimeField(default=datetime.now) |             date = DateTimeField(default=datetime.now) | ||||||
|             meta = { |             meta = { | ||||||
|                 'max_documents': 10, |                 'max_documents': 10, | ||||||
|                 'max_size': 90000, |                 'max_size': 4096, | ||||||
|             } |             } | ||||||
|  |  | ||||||
|         Log.drop_collection() |         Log.drop_collection() | ||||||
| @@ -75,7 +75,7 @@ class InstanceTest(unittest.TestCase): | |||||||
|         options = Log.objects._collection.options() |         options = Log.objects._collection.options() | ||||||
|         self.assertEqual(options['capped'], True) |         self.assertEqual(options['capped'], True) | ||||||
|         self.assertEqual(options['max'], 10) |         self.assertEqual(options['max'], 10) | ||||||
|         self.assertEqual(options['size'], 90000) |         self.assertTrue(options['size'] >= 4096) | ||||||
|  |  | ||||||
|         # Check that the document cannot be redefined with different options |         # Check that the document cannot be redefined with different options | ||||||
|         def recreate_log_document(): |         def recreate_log_document(): | ||||||
|   | |||||||
| @@ -279,7 +279,7 @@ class FileTest(unittest.TestCase): | |||||||
|                 t.image.put(f) |                 t.image.put(f) | ||||||
|                 self.fail("Should have raised an invalidation error") |                 self.fail("Should have raised an invalidation error") | ||||||
|             except ValidationError, e: |             except ValidationError, e: | ||||||
|                 self.assertEqual("%s" % e, "Invalid image: cannot identify image file") |                 self.assertEqual("%s" % e, "Invalid image: cannot identify image file %s" % f) | ||||||
|  |  | ||||||
|         t = TestImage() |         t = TestImage() | ||||||
|         t.image.put(open(TEST_IMAGE_PATH, 'rb')) |         t.image.put(open(TEST_IMAGE_PATH, 'rb')) | ||||||
|   | |||||||
| @@ -650,7 +650,7 @@ class QuerySetTest(unittest.TestCase): | |||||||
|                 blogs.append(Blog(title="post %s" % i, posts=[post1, post2])) |                 blogs.append(Blog(title="post %s" % i, posts=[post1, post2])) | ||||||
|  |  | ||||||
|             Blog.objects.insert(blogs, load_bulk=False) |             Blog.objects.insert(blogs, load_bulk=False) | ||||||
|             self.assertEqual(q, 1)  # 1 for the insert |             self.assertEqual(q, 99)  # profiling logs each doc now :( | ||||||
|  |  | ||||||
|         Blog.drop_collection() |         Blog.drop_collection() | ||||||
|         Blog.ensure_indexes() |         Blog.ensure_indexes() | ||||||
| @@ -659,7 +659,7 @@ class QuerySetTest(unittest.TestCase): | |||||||
|             self.assertEqual(q, 0) |             self.assertEqual(q, 0) | ||||||
|  |  | ||||||
|             Blog.objects.insert(blogs) |             Blog.objects.insert(blogs) | ||||||
|             self.assertEqual(q, 2)  # 1 for insert, and 1 for in bulk fetch |             self.assertEqual(q, 100)  # 99 or insert, and 1 for in bulk fetch | ||||||
|  |  | ||||||
|         Blog.drop_collection() |         Blog.drop_collection() | ||||||
|  |  | ||||||
| @@ -3656,7 +3656,13 @@ class QuerySetTest(unittest.TestCase): | |||||||
|  |  | ||||||
|             [x for x in people] |             [x for x in people] | ||||||
|             self.assertEqual(100, len(people._result_cache)) |             self.assertEqual(100, len(people._result_cache)) | ||||||
|             self.assertEqual(None, people._len) |  | ||||||
|  |             import platform | ||||||
|  |  | ||||||
|  |             if platform.python_implementation() != "PyPy": | ||||||
|  |                 # PyPy evaluates __len__ when iterating with list comprehensions while CPython does not. | ||||||
|  |                 # This may be a bug in PyPy (PyPy/#1802) but it does not affect the behavior of MongoEngine. | ||||||
|  |                 self.assertEqual(None, people._len) | ||||||
|             self.assertEqual(q, 1) |             self.assertEqual(q, 1) | ||||||
|  |  | ||||||
|             list(people) |             list(people) | ||||||
| @@ -3943,7 +3949,7 @@ class QuerySetTest(unittest.TestCase): | |||||||
|             if qs: |             if qs: | ||||||
|                 pass |                 pass | ||||||
|  |  | ||||||
|             op = q.db.system.profile.find({"ns":  |             op = q.db.system.profile.find({"ns": | ||||||
|                 {"$ne": "%s.system.indexes" % q.db.name}})[0] |                 {"$ne": "%s.system.indexes" % q.db.name}})[0] | ||||||
|  |  | ||||||
|             self.assertFalse('$orderby' in op['query'], |             self.assertFalse('$orderby' in op['query'], | ||||||
| @@ -3969,7 +3975,7 @@ class QuerySetTest(unittest.TestCase): | |||||||
|             } |             } | ||||||
|  |  | ||||||
|         Person.drop_collection() |         Person.drop_collection() | ||||||
|          |  | ||||||
|         Person(name="B").save() |         Person(name="B").save() | ||||||
|         Person(name="C").save() |         Person(name="C").save() | ||||||
|         Person(name="A").save() |         Person(name="A").save() | ||||||
| @@ -3979,13 +3985,13 @@ class QuerySetTest(unittest.TestCase): | |||||||
|             if Person.objects: |             if Person.objects: | ||||||
|                 pass |                 pass | ||||||
|  |  | ||||||
|             op = q.db.system.profile.find({"ns":  |             op = q.db.system.profile.find({"ns": | ||||||
|                 {"$ne": "%s.system.indexes" % q.db.name}})[0] |                 {"$ne": "%s.system.indexes" % q.db.name}})[0] | ||||||
|  |  | ||||||
|             self.assertFalse('$orderby' in op['query'], |             self.assertFalse('$orderby' in op['query'], | ||||||
|                 'BaseQuerySet must remove orderby from meta in boolen test') |                 'BaseQuerySet must remove orderby from meta in boolen test') | ||||||
|  |  | ||||||
|             self.assertEqual(Person.objects.first().name, 'A')  |             self.assertEqual(Person.objects.first().name, 'A') | ||||||
|             self.assertTrue(Person.objects._has_data(), |             self.assertTrue(Person.objects._has_data(), | ||||||
|                             'Cursor has data and returned False') |                             'Cursor has data and returned False') | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user