Merge branch 'master' into dj111-fix

fix_request_path_info
Diederik van der Boor 2017-04-26 15:53:59 +02:00 committed by GitHub
commit 89632483a7
5 changed files with 109 additions and 92 deletions

1
.gitignore vendored
View File

@ -5,6 +5,7 @@
*.egg-info/ *.egg-info/
*.egg/ *.egg/
.coverage .coverage
coverage.xml
.project .project
.idea/ .idea/
.pydevproject .pydevproject

View File

@ -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:

View File

@ -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/

View File

@ -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
View File

@ -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