Skip to content

Commit 47ff1a2

Browse files
committed
Release version 1.7.0
1 parent 017c311 commit 47ff1a2

21 files changed

Lines changed: 135 additions & 350 deletions

.travis.yml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ python:
77
env:
88
- DJANGO=django==1.7.11 DRF=3.3.1 DATABASE_URL=mysql://root@localhost/test
99
- DJANGO=django==1.7.11 DRF=3.3.1 DATABASE_URL=postgres://postgres@localhost/test
10-
- DJANGO=django==1.8.14 DRF=3.3.1 DATABASE_URL=mysql://root@localhost/test
11-
- DJANGO=django==1.8.14 DRF=3.3.1 DATABASE_URL=postgres://postgres@localhost/test
12-
- DJANGO=django==1.9.9 DRF=3.3.1 DATABASE_URL=mysql://root@localhost/test
13-
- DJANGO=django==1.9.9 DRF=3.3.1 DATABASE_URL=postgres://postgres@localhost/test
14-
- DJANGO=django==1.10.1 DRF=3.3.3 DATABASE_URL=mysql://root@localhost/test
15-
- DJANGO=django==1.10.1 DRF=3.3.3 DATABASE_URL=postgres://postgres@localhost/test
10+
- DJANGO=django==1.8.17 DRF=3.3.1 DATABASE_URL=mysql://root@localhost/test
11+
- DJANGO=django==1.8.17 DRF=3.3.1 DATABASE_URL=postgres://postgres@localhost/test
12+
- DJANGO=django==1.9.12 DRF=3.3.1 DATABASE_URL=mysql://root@localhost/test
13+
- DJANGO=django==1.9.12 DRF=3.3.1 DATABASE_URL=postgres://postgres@localhost/test
14+
- DJANGO=django==1.10.5 DRF=3.5.3 DATABASE_URL=mysql://root@localhost/test
15+
- DJANGO=django==1.10.5 DRF=3.5.3 DATABASE_URL=postgres://postgres@localhost/test
1616

1717
sudo: false
1818
install:
@@ -30,13 +30,13 @@ after_success:
3030
matrix:
3131
exclude:
3232
- python: 3.3
33-
env: DJANGO=django==1.9.9 DRF=3.3.1 DATABASE_URL=mysql://root@localhost/test
33+
env: DJANGO=django==1.9.12 DRF=3.3.1 DATABASE_URL=mysql://root@localhost/test
3434
- python: 3.3
35-
env: DJANGO=django==1.9.9 DRF=3.3.1 DATABASE_URL=postgres://postgres@localhost/test
35+
env: DJANGO=django==1.9.12 DRF=3.3.1 DATABASE_URL=postgres://postgres@localhost/test
3636
- python: 3.3
37-
env: DJANGO=django==1.10.1 DRF=3.3.3 DATABASE_URL=mysql://root@localhost/test
37+
env: DJANGO=django==1.10.5 DRF=3.5.3 DATABASE_URL=mysql://root@localhost/test
3838
- python: 3.3
39-
env: DJANGO=django==1.10.1 DRF=3.3.3 DATABASE_URL=postgres://postgres@localhost/test
39+
env: DJANGO=django==1.10.5 DRF=3.5.3 DATABASE_URL=postgres://postgres@localhost/test
4040
- python: 3.5
4141
env: DJANGO=django==1.7.11 DRF=3.3.1 DATABASE_URL=mysql://root@localhost/test
4242
- python: 3.5

README.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,8 @@ to continue the development.
130130

131131
.. |package| image:: https://badge.fury.io/py/django-hvad.svg
132132
:target: https://pypi.python.org/pypi/django-hvad
133-
.. |build| image:: https://secure.travis-ci.org/KristianOellegaard/django-hvad.png?branch=master
134-
.. |coverage| image:: https://coveralls.io/repos/KristianOellegaard/django-hvad/badge.png
133+
.. |build| image:: https://secure.travis-ci.org/KristianOellegaard/django-hvad.svg?branch=master
134+
.. |coverage| image:: https://coveralls.io/repos/KristianOellegaard/django-hvad/badge.svg
135135
:target: https://coveralls.io/r/KristianOellegaard/django-hvad
136136

137137
.. _documentation: http://django-hvad.readthedocs.org/

docs/conf.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@
4444
project = u'django-hvad'
4545
copyright = u'2011-2015, Kristian Øllegaard, Jonas Obrist & contributors'
4646

47-
version = '1.6'
48-
release = '1.6.0'
47+
version = '1.7'
48+
release = '1.7.0'
4949

5050

5151
# The name of the Pygments (syntax highlighting) style to use.

docs/public/quickstart.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ descriptions and information about who wrote the description::
2424
author = models.CharField(max_length=255)
2525
2626
translations = TranslatedFields(
27-
description = models.TextField(),
28-
description_author = models.CharField(max_length=255),
27+
description=models.TextField(),
28+
description_author=models.CharField(max_length=255),
2929
)
3030
3131
def __unicode__(self):

docs/public/release_notes.rst

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ Release Notes
33
#############
44

55
*****************************
6-
1.7.0 - upcoming release
6+
1.7.0 - current release
77
*****************************
88

9+
Released on February 8, 2017
10+
911
New features:
1012

1113
- Support for :meth:`~django.db.models.query.QuerySet.defer` and
@@ -34,7 +36,7 @@ Fixes:
3436
change forms. — :issue:`317`.
3537

3638
*****************************
37-
1.6.0 - current release
39+
1.6.0
3840
*****************************
3941

4042
Released on September 6, 2016

hvad/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
__version__ = '1.6.0'
2-
VERSION = (1, 6, 0)
1+
__version__ = '1.7.0'
2+
VERSION = (1, 7, 0)

hvad/admin.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,13 @@
33
import warnings
44
from django.conf import settings
55
from django.contrib.admin.options import ModelAdmin, csrf_protect_m, InlineModelAdmin
6-
if django.VERSION >= (1, 7):
7-
from django.contrib.admin.utils import (flatten_fieldsets, unquote,
8-
get_deleted_objects)
9-
else: #pragma: no cover
10-
from django.contrib.admin.util import (flatten_fieldsets, unquote,
11-
get_deleted_objects)
6+
from django.contrib.admin.utils import flatten_fieldsets, unquote, get_deleted_objects
127
from django.contrib.contenttypes.models import ContentType
138
from django.core.exceptions import PermissionDenied, ValidationError
149
from django.core.urlresolvers import reverse
1510
from django.db import router, transaction
1611
from django.forms.models import model_to_dict
17-
if django.VERSION >= (1, 7):
18-
from django.forms.utils import ErrorList
19-
else: #pragma: no cover
20-
from django.forms.util import ErrorList
12+
from django.forms.utils import ErrorList
2113
from django.http import Http404, HttpResponseRedirect, QueryDict
2214
from django.shortcuts import render
2315
from django.template import TemplateDoesNotExist

hvad/descriptors.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
from django.db.models.fields import FieldDoesNotExist
33
from django.utils.translation import get_language
44
from hvad.utils import get_translation, set_cached_translation, get_cached_translation
5-
if django.VERSION >= (1, 7):
6-
from django.apps import registry
5+
from django.apps import registry
76

87
class BaseDescriptor(object):
98
"""
@@ -38,16 +37,12 @@ def __init__(self, opts, name):
3837

3938
def __get__(self, instance, instance_type=None):
4039
if not instance:
41-
if django.VERSION >= (1, 7) and not registry.apps.ready: #pragma: no cover
40+
if not registry.apps.ready: #pragma: no cover
4241
raise AttributeError('Attribute not available until registry is ready.')
43-
# Don't raise an attribute error so we can use it in admin.
44-
try:
45-
if django.VERSION >= (1, 8):
46-
return self.opts.translations_model._meta.get_field(self.name).default
47-
else:
48-
return self.opts.translations_model._meta.get_field_by_name(self.name)[0].default
49-
except FieldDoesNotExist as e: #pragma: no cover (django 1.6 before models loaded)
50-
raise AttributeError(*e.args)
42+
if django.VERSION >= (1, 8):
43+
return self.opts.translations_model._meta.get_field(self.name).default
44+
else:
45+
return self.opts.translations_model._meta.get_field_by_name(self.name)[0].default
5146
return getattr(self.translation(instance), self.name)
5247

5348
def __set__(self, instance, value):

hvad/forms.py

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@
66
from django.forms.models import (ModelForm, BaseModelForm, ModelFormMetaclass,
77
fields_for_model, model_to_dict, construct_instance, BaseInlineFormSet, BaseModelFormSet,
88
modelform_factory, inlineformset_factory, ALL_FIELDS)
9-
if django.VERSION >= (1, 7):
10-
from django.forms.utils import ErrorList
11-
else: #pragma: no cover
12-
from django.forms.util import ErrorList
9+
from django.forms.utils import ErrorList
1310
from django.forms.widgets import Select
1411
from django.utils.translation import get_language, ugettext as _
1512
from hvad.compat import with_metaclass
@@ -203,16 +200,9 @@ def save(self, commit=True):
203200
return super(BaseTranslatableModelForm, self).save(commit=commit)
204201

205202

206-
if django.VERSION >= (1, 7):
207-
class TranslatableModelForm(with_metaclass(TranslatableModelFormMetaclass,
208-
BaseTranslatableModelForm)):
209-
pass
210-
else: #pragma: no cover
211-
# Older django version have buggy metaclass
212-
class TranslatableModelForm(with_metaclass(TranslatableModelFormMetaclass,
213-
BaseTranslatableModelForm, ModelForm)):
214-
__metaclass__ = TranslatableModelFormMetaclass # Django 1.4 compatibility
215-
203+
class TranslatableModelForm(with_metaclass(TranslatableModelFormMetaclass,
204+
BaseTranslatableModelForm)):
205+
pass
216206

217207
#=============================================================================
218208

hvad/manager.py

Lines changed: 15 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -427,8 +427,7 @@ def _add_language_filter(self):
427427
))
428428
else:
429429
masteratt = self.model._meta.get_field('master').attname
430-
nullable = ({'nullable': True} if django.VERSION >= (1, 7) else
431-
{'nullable': True, 'outer_if_first': True})
430+
nullable = {'nullable': True}
432431
alias = self.query.join((self.query.get_initial_alias(), self.model._meta.db_table,
433432
((masteratt, masteratt),)),
434433
join_field=BetterTranslationsField(languages, master=masteratt),
@@ -441,15 +440,7 @@ def _add_language_filter(self):
441440

442441
else:
443442
language_code = self._language_code or get_language()
444-
for _, field_name in where_node_children(self.query.where):
445-
if field_name == 'language_code':
446-
# remove in 1.4
447-
raise RuntimeError(
448-
'Overriding language_code in get() or filter() is no longer supported. '
449-
'Please set the language in Model.objects.language() instead, '
450-
'or use language("all") to do manual filtering on languages.')
451-
else:
452-
self.query.add_filter(('language_code', language_code))
443+
self.query.add_filter(('language_code', language_code))
453444
self._add_select_related(language_code)
454445

455446
# if queryset is about to use the model's default ordering, we
@@ -572,13 +563,12 @@ def iterator(self):
572563
yield obj
573564

574565
def create(self, **kwargs):
575-
if 'language_code' in kwargs:
576-
if self._language_code is not None:
577-
# remove in 1.4
578-
raise RuntimeError('Overriding language_code in create() is no longer allowed. '
579-
'Please set the language with language() instead.')
580-
else:
566+
if 'language_code' not in kwargs:
581567
kwargs['language_code'] = self._language_code or get_language()
568+
elif self._language_code is not None:
569+
raise ValueError('Overriding language_code in create() is not allowed. '
570+
'Please set the language with language() instead.')
571+
582572
if kwargs['language_code'] == 'all':
583573
raise ValueError('Cannot create an object with language \'all\'')
584574
obj = self.shared_model(**kwargs)
@@ -622,13 +612,12 @@ def get_or_create(self, **kwargs):
622612
params = dict([(k, v) for k, v in kwargs.items() if '__' not in k])
623613
params.update(defaults)
624614

625-
if 'language_code' in params:
626-
if self._language_code is not None:
627-
# remove in 1.4
628-
raise RuntimeError('Overriding language_code in get_or_create() is no longer allowed. '
629-
'Please set the language in Model.objects.language() instead.')
630-
else:
615+
if 'language_code' not in params:
631616
params['language_code'] = self._language_code or get_language()
617+
elif self._language_code is not None:
618+
raise ValueError('Overriding language_code in get_or_create() is not allowed. '
619+
'Please set the language with language() instead.')
620+
632621
if params['language_code'] == 'all':
633622
raise ValueError('Cannot create an object with language \'all\'')
634623

@@ -644,7 +633,6 @@ def get_or_create(self, **kwargs):
644633
except self.model.DoesNotExist:
645634
raise exc_info[1]
646635

647-
@minimumDjangoVersion(1, 7)
648636
def update_or_create(self, defaults=None, **kwargs):
649637
raise NotImplementedError()
650638

@@ -758,10 +746,8 @@ def select_related(self, *fields):
758746
'you must provide a list of fields.')
759747
if fields == (None,):
760748
self._raw_select_related = []
761-
elif django.VERSION >= (1, 7): # in newer versions, calls are cumulative
749+
else:
762750
self._raw_select_related.extend(fields)
763-
else: #pragma: no cover # in older versions, they overwrite each other
764-
self._raw_select_related = list(fields)
765751
return self
766752

767753
def complex_filter(self, filter_obj):
@@ -985,8 +971,7 @@ def iterator(self):
985971
True
986972
))
987973
else:
988-
nullable = ({'nullable': True} if django.VERSION >= (1, 7) else
989-
{'nullable': True, 'outer_if_first': True})
974+
nullable = {'nullable': True}
990975
alias1 = qs.query.join((qs.query.get_initial_alias(), tmodel._meta.db_table,
991976
((qs.model._meta.pk.attname, masteratt),)),
992977
join_field=getattr(qs.model, taccessor).related.field.rel,
@@ -1053,10 +1038,7 @@ def _make_queryset(self, klass, core_filters):
10531038
core_filters tells whether the queryset will bypass RelatedManager
10541039
mechanics and therefore needs to reapply the filters on its own.
10551040
'''
1056-
if django.VERSION >= (1, 7):
1057-
qs = klass(self.model, using=self.db, hints=self._hints)
1058-
else:
1059-
qs = klass(self.model, using=self.db) #pragma: no cover
1041+
qs = klass(self.model, using=self.db, hints=self._hints)
10601042
core_filters = getattr(self, 'core_filters', None) if core_filters else None
10611043
if core_filters:
10621044
qs = qs._next_is_sticky().filter(**core_filters)

0 commit comments

Comments
 (0)