Merge branch 'master' into dj111-fix
commit
89632483a7
|
|
@ -5,6 +5,7 @@
|
||||||
*.egg-info/
|
*.egg-info/
|
||||||
*.egg/
|
*.egg/
|
||||||
.coverage
|
.coverage
|
||||||
|
coverage.xml
|
||||||
.project
|
.project
|
||||||
.idea/
|
.idea/
|
||||||
.pydevproject
|
.pydevproject
|
||||||
|
|
|
||||||
154
.travis.yml
154
.travis.yml
|
|
@ -10,98 +10,98 @@ python:
|
||||||
- "3.5"
|
- "3.5"
|
||||||
- "3.6"
|
- "3.6"
|
||||||
env:
|
env:
|
||||||
- DJANGO="Django>=1.4,<1.5"
|
- TOXENV="django14"
|
||||||
- DJANGO="Django>=1.5,<1.6"
|
- TOXENV="django15"
|
||||||
- DJANGO="Django>=1.6,<1.7"
|
- TOXENV="django16"
|
||||||
- DJANGO="Django>=1.7,<1.8"
|
- TOXENV="django17"
|
||||||
- DJANGO="Django>=1.8,<1.9"
|
- TOXENV="django18"
|
||||||
- DJANGO="Django>=1.9,<1.10"
|
- TOXENV="django19"
|
||||||
- DJANGO="Django>=1.10,<1.11"
|
- TOXENV="django110"
|
||||||
- DJANGO="Django>=1.11,<1.12"
|
- TOXENV="django111"
|
||||||
- DJANGO="https://github.com/django/django/tarball/master"
|
- TOXENV="djangodev"
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
|
fast_finish: true
|
||||||
exclude:
|
exclude:
|
||||||
- python: "3.6"
|
- python: "3.6"
|
||||||
env: DJANGO="Django>=1.4,<1.5"
|
env: TOXENV="django14"
|
||||||
- python: "3.6"
|
- python: "3.6"
|
||||||
env: DJANGO="Django>=1.5,<1.6"
|
env: TOXENV="django15"
|
||||||
- python: "3.6"
|
- python: "3.6"
|
||||||
env: DJANGO="Django>=1.6,<1.7"
|
env: TOXENV="django16"
|
||||||
- python: "3.6"
|
- python: "3.6"
|
||||||
env: DJANGO="Django>=1.7,<1.8"
|
env: TOXENV="django17"
|
||||||
- python: "3.6"
|
- python: "3.6"
|
||||||
env: DJANGO="Django>=1.8,<1.9"
|
env: TOXENV="django18"
|
||||||
- python: "3.6"
|
- python: "3.6"
|
||||||
env: DJANGO="Django>=1.9,<1.10"
|
env: TOXENV="django19"
|
||||||
- python: "3.6"
|
- python: "3.6"
|
||||||
env: DJANGO="Django>=1.10,<1.11"
|
env: TOXENV="django110"
|
||||||
|
|
||||||
- python: "3.5"
|
- python: "3.5"
|
||||||
env: DJANGO="Django>=1.4,<1.5"
|
env: TOXENV="django14"
|
||||||
- python: "3.5"
|
- python: "3.5"
|
||||||
env: DJANGO="Django>=1.5,<1.6"
|
env: TOXENV="django15"
|
||||||
- python: "3.5"
|
- python: "3.5"
|
||||||
env: DJANGO="Django>=1.6,<1.7"
|
env: TOXENV="django16"
|
||||||
- python: "3.5"
|
- python: "3.5"
|
||||||
env: DJANGO="Django>=1.7,<1.8"
|
env: TOXENV="django17"
|
||||||
|
|
||||||
- python: "3.4"
|
- python: "3.4"
|
||||||
env: DJANGO="Django>=1.4,<1.5"
|
env: TOXENV="django14"
|
||||||
- python: "3.4"
|
- python: "3.4"
|
||||||
env: DJANGO="Django>=1.9,<1.10"
|
env: TOXENV="django19"
|
||||||
- python: "3.4"
|
- python: "3.4"
|
||||||
env: DJANGO="Django>=1.10,<1.11"
|
env: TOXENV="django110"
|
||||||
- python: "3.4"
|
- python: "3.4"
|
||||||
env: DJANGO="Django>=1.11,<1.12"
|
env: TOXENV="django111"
|
||||||
|
|
||||||
- python: "3.3"
|
- python: "3.3"
|
||||||
env: DJANGO="Django>=1.4,<1.5"
|
env: TOXENV="django14"
|
||||||
- python: "3.3"
|
- python: "3.3"
|
||||||
env: DJANGO="Django>=1.9,<1.10"
|
env: TOXENV="django19"
|
||||||
- python: "3.3"
|
- python: "3.3"
|
||||||
env: DJANGO="Django>=1.10,<1.11"
|
env: TOXENV="django110"
|
||||||
- python: "3.3"
|
- python: "3.3"
|
||||||
env: DJANGO="Django>=1.11,<1.12"
|
env: TOXENV="django111"
|
||||||
- python: "3.3"
|
- python: "3.3"
|
||||||
env: DJANGO="https://github.com/django/django/tarball/master"
|
env: TOXENV="djangodev"
|
||||||
|
|
||||||
- python: "3.2"
|
- python: "3.2"
|
||||||
env: DJANGO="Django>=1.4,<1.5"
|
env: TOXENV="django14"
|
||||||
- python: "3.2"
|
- python: "3.2"
|
||||||
env: DJANGO="Django>=1.9,<1.10"
|
env: TOXENV="django19"
|
||||||
- python: "3.2"
|
- python: "3.2"
|
||||||
env: DJANGO="Django>=1.10,<1.11"
|
env: TOXENV="django110"
|
||||||
- python: "3.2"
|
- python: "3.2"
|
||||||
env: DJANGO="Django>=1.11,<1.12"
|
env: TOXENV="django111"
|
||||||
- python: "3.2"
|
- python: "3.2"
|
||||||
env: DJANGO="https://github.com/django/django/tarball/master"
|
env: TOXENV="djangodev"
|
||||||
|
|
||||||
|
- python: "2.6"
|
||||||
|
env: TOXENV="django17"
|
||||||
|
- python: "2.6"
|
||||||
|
env: TOXENV="django18"
|
||||||
|
- python: "2.6"
|
||||||
|
env: TOXENV="django19"
|
||||||
|
- python: "2.6"
|
||||||
|
env: TOXENV="django110"
|
||||||
|
- python: "2.6"
|
||||||
|
env: TOXENV="django111"
|
||||||
|
- python: "2.6"
|
||||||
|
env: TOXENV="djangodev"
|
||||||
|
|
||||||
- python: "2.6"
|
|
||||||
env: DJANGO="Django>=1.7,<1.8"
|
|
||||||
- python: "2.6"
|
|
||||||
env: DJANGO="Django>=1.8,<1.9"
|
|
||||||
- python: "2.6"
|
|
||||||
env: DJANGO="Django>=1.9,<1.10"
|
|
||||||
- python: "2.6"
|
|
||||||
env: DJANGO="Django>=1.10,<1.11"
|
|
||||||
- python: "2.6"
|
|
||||||
env: DJANGO="Django>=1.11,<1.12"
|
|
||||||
- python: "2.6"
|
|
||||||
env: DJANGO="https://github.com/django/django/tarball/master"
|
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- env: DJANGO="https://github.com/django/django/tarball/master"
|
- env: TOXENV="djangodev"
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- pip install codecov
|
- pip install codecov coverage==3.6 tox
|
||||||
|
|
||||||
install:
|
|
||||||
- pip install -q $DJANGO coverage==3.6
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- coverage run --source=polymorphic runtests.py
|
- tox
|
||||||
|
|
||||||
after_success:
|
after_success:
|
||||||
|
- coverage xml -i
|
||||||
- codecov
|
- codecov
|
||||||
|
|
||||||
branches:
|
branches:
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
.. image:: https://travis-ci.org/django-polymorphic/django-polymorphic.png?branch=master
|
.. image:: https://travis-ci.org/django-polymorphic/django-polymorphic.svg?branch=master
|
||||||
:target: http://travis-ci.org/django-polymorphic/django-polymorphic
|
:target: http://travis-ci.org/django-polymorphic/django-polymorphic
|
||||||
.. image:: https://img.shields.io/pypi/v/django-polymorphic.svg
|
.. image:: https://img.shields.io/pypi/v/django-polymorphic.svg
|
||||||
:target: https://pypi.python.org/pypi/django-polymorphic/
|
:target: https://pypi.python.org/pypi/django-polymorphic/
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,8 @@ def _polymorhic_iterator(queryset, base_iter):
|
||||||
base_result_objects = []
|
base_result_objects = []
|
||||||
reached_end = False
|
reached_end = False
|
||||||
|
|
||||||
|
# Make sure the base iterator is read in chunks instead of
|
||||||
|
# reading it completely, in case our caller read only a few objects.
|
||||||
for i in range(Polymorphic_QuerySet_objects_per_request):
|
for i in range(Polymorphic_QuerySet_objects_per_request):
|
||||||
try:
|
try:
|
||||||
o = next(base_iter)
|
o = next(base_iter)
|
||||||
|
|
@ -47,17 +49,17 @@ def _polymorhic_iterator(queryset, base_iter):
|
||||||
reached_end = True
|
reached_end = True
|
||||||
break
|
break
|
||||||
|
|
||||||
real_results = queryset._get_real_instances(base_result_objects)
|
real_results = queryset._get_real_instances(base_result_objects)
|
||||||
|
|
||||||
for o in real_results:
|
for o in real_results:
|
||||||
yield o
|
yield o
|
||||||
|
|
||||||
if reached_end:
|
if reached_end:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
if django.VERSION >= (1, 9):
|
if django.VERSION >= (1, 9):
|
||||||
|
# We ignore this on django < 1.9, as ModelIterable didn't yet exist.
|
||||||
from django.db.models.query import ModelIterable
|
from django.db.models.query import ModelIterable
|
||||||
|
|
||||||
class PolymorphicModelIterable(ModelIterable):
|
class PolymorphicModelIterable(ModelIterable):
|
||||||
|
|
@ -115,8 +117,9 @@ class PolymorphicQuerySet(QuerySet):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(PolymorphicQuerySet, self).__init__(*args, **kwargs)
|
super(PolymorphicQuerySet, self).__init__(*args, **kwargs)
|
||||||
if django.VERSION >= (1, 9):
|
if django.VERSION >= (1, 9):
|
||||||
|
# On django < 1.9 we override the iterator() method instead
|
||||||
self._iterable_class = PolymorphicModelIterable
|
self._iterable_class = PolymorphicModelIterable
|
||||||
# init our queryset object member variables
|
|
||||||
self.polymorphic_disabled = False
|
self.polymorphic_disabled = False
|
||||||
# A parallel structure to django.db.models.query.Query.deferred_loading,
|
# A parallel structure to django.db.models.query.Query.deferred_loading,
|
||||||
# which we maintain with the untranslated field names passed to
|
# which we maintain with the untranslated field names passed to
|
||||||
|
|
@ -460,8 +463,22 @@ class PolymorphicQuerySet(QuerySet):
|
||||||
return resultlist
|
return resultlist
|
||||||
|
|
||||||
if django.VERSION < (1, 9):
|
if django.VERSION < (1, 9):
|
||||||
# Before Django 1.9 ModelIterable functionality was implemented in `iterator` method
|
# On django 1.9+, we can define self._iterator_class instead of iterator()
|
||||||
def iterator(self):
|
def iterator(self):
|
||||||
|
"""
|
||||||
|
This function is used by Django 1.8 and earlier for all object retrieval.
|
||||||
|
By overriding it, we modify the objects that this queryset returns
|
||||||
|
when it is evaluated (or its get method or other object-returning methods are called).
|
||||||
|
|
||||||
|
Here we do the same as::
|
||||||
|
|
||||||
|
base_result_objects = list(super(PolymorphicQuerySet, self).iterator())
|
||||||
|
real_results = self._get_real_instances(base_result_objects)
|
||||||
|
for o in real_results: yield o
|
||||||
|
|
||||||
|
but it requests the objects in chunks from the database,
|
||||||
|
with Polymorphic_QuerySet_objects_per_request per chunk
|
||||||
|
"""
|
||||||
base_iter = super(PolymorphicQuerySet, self).iterator()
|
base_iter = super(PolymorphicQuerySet, self).iterator()
|
||||||
|
|
||||||
# disabled => work just like a normal queryset
|
# disabled => work just like a normal queryset
|
||||||
|
|
|
||||||
11
tox.ini
11
tox.ini
|
|
@ -5,14 +5,13 @@ envlist=
|
||||||
py32-django{15,16,17,18},
|
py32-django{15,16,17,18},
|
||||||
py33-django{15,16,17,18},
|
py33-django{15,16,17,18},
|
||||||
py34-django{15,16,17,18,19,110,111},
|
py34-django{15,16,17,18,19,110,111},
|
||||||
py35-django{18,19,110,111}
|
py35-django{18,19,110,111,dev},
|
||||||
py35-django{18,19,110,111},
|
py36-django{111,dev},
|
||||||
py36-django{111},
|
|
||||||
# py33-django-dev,
|
|
||||||
docs,
|
docs,
|
||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
deps =
|
deps =
|
||||||
|
coverage == 3.6
|
||||||
django14: Django >= 1.4, < 1.5
|
django14: Django >= 1.4, < 1.5
|
||||||
django15: Django >= 1.5, < 1.6
|
django15: Django >= 1.5, < 1.6
|
||||||
django16: Django >= 1.6, < 1.7
|
django16: Django >= 1.6, < 1.7
|
||||||
|
|
@ -21,9 +20,9 @@ deps =
|
||||||
django19: Django >= 1.9, < 1.10
|
django19: Django >= 1.9, < 1.10
|
||||||
django110: Django >= 1.10, < 1.11
|
django110: Django >= 1.10, < 1.11
|
||||||
django111: Django >= 1.11, < 1.12
|
django111: Django >= 1.11, < 1.12
|
||||||
django-dev: https://github.com/django/django/tarball/master
|
djangodev: https://github.com/django/django/tarball/master
|
||||||
commands=
|
commands=
|
||||||
python runtests.py
|
coverage run --source polymorphic runtests.py
|
||||||
|
|
||||||
[testenv:docs]
|
[testenv:docs]
|
||||||
deps=Sphinx
|
deps=Sphinx
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue