Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Django 3 support #368

Open
wants to merge 25 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
d35f5ef
Introduce extra_restriction-based queries.
spectras Dec 12, 2015
0dbfd85
Prevent creation of translation-less objects.
spectras Dec 25, 2015
fe776a0
Change language_code attribute to never load a translation, and retur…
spectras Nov 18, 2016
650916a
Change translation introspection API: remove model methods and add re…
spectras Nov 20, 2016
49d45e1
Add docstrings and harmonize file structure
spectras Nov 21, 2016
83d9364
Make AUTOLOAD_TRANSLATIONS False by default
spectras Dec 2, 2016
e1b9727
Update documentation
spectras Dec 2, 2016
7d2c199
Fixes for use with Django master branch - includes unavoidable Foreig…
spectras Sep 17, 2017
bad608d
Hvad2 will not support for python 2 and Django 1.*
spectras Sep 17, 2017
8680d67
Switch translation cache to using the field cache API for internal hv…
spectras Sep 17, 2017
c1beccf
Add django 2.0 additional get_path_info hint
spectras Dec 1, 2017
5bf1a01
Update admin form for django 2.1
spectras Nov 18, 2018
2005f09
Update travis versions
spectras Nov 18, 2018
c067021
Fix mysql tests collation
spectras Nov 18, 2018
da1cbe8
Release version 2.0.0 beta
spectras Nov 20, 2018
0d10285
Force UTF-8 when reading README.rst
ktosiek Jan 3, 2019
b77b4c1
Fix compatibility with Django2
May 29, 2019
8d6a4c5
Add support for Django2+; optimize imports
May 31, 2019
b43a3d4
Bump version 2.0.1
Amanit Apr 9, 2020
8c453ba
Patch zh fallback
yakky May 28, 2020
f6e53ff
Internal 2.0.2 release
yakky May 28, 2020
e23c1a2
Relax django dependency
yakky Aug 26, 2020
2608b3e
Release 2.0.3
yakky Aug 26, 2020
79a2333
Django 3 support
nichoski Feb 19, 2022
f86b397
Fixed complex_filter method to work with Django 3.2
nichoski Sep 2, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Make AUTOLOAD_TRANSLATIONS False by default
spectras committed May 20, 2017
commit 83d9364184f742a9d31c14b97f664b49b6b614fa
2 changes: 1 addition & 1 deletion hvad/settings.py
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@
'LANGUAGES': djsettings.LANGUAGES,
'FALLBACK_LANGUAGES': None, # dynamic default
'TABLE_NAME_FORMAT': '%s_translation',
'AUTOLOAD_TRANSLATIONS': True,
'AUTOLOAD_TRANSLATIONS': False,
'USE_DEFAULT_QUERYSET': False,
}

37 changes: 25 additions & 12 deletions hvad/tests/query.py
Original file line number Diff line number Diff line change
@@ -422,6 +422,19 @@ def test_in_bulk(self):
def test_untranslated_in_bulk(self):
pk1 = self.normal_id[1]
with translation.override('ja'):
with self.assertNumQueries(1):
result = Normal.objects.untranslated().in_bulk([pk1])
self.assertCountEqual((pk1,), result)
with self.assertNumQueries(0):
self.assertEqual(result[pk1].shared_field, NORMAL[1].shared_field)
with self.assertNumQueries(0):
self.assertRaises(AttributeError, getattr, result[pk1], 'translated_field')
with self.assertNumQueries(0):
self.assertIs(result[pk1].language_code, None)

def test_untranslated_in_bulk_autoload(self):
pk1 = self.normal_id[1]
with self.settings(HVAD={'AUTOLOAD_TRANSLATIONS': True}), translation.override('ja'):
with self.assertNumQueries(1):
result = Normal.objects.untranslated().in_bulk([pk1])
self.assertCountEqual((pk1,), result)
@@ -532,29 +545,29 @@ def test_simple(self):
self.assertEqual(ja.shared_field, NORMAL[1].shared_field)
self.assertEqual(ja.translated_field, NORMAL[1].translated_field['ja'])

def test_cached_autoload(self):
# get the english instance
def test_cached_no_autoload(self):
en = Normal.objects.untranslated().prefetch_related('translations').get()
with self.assertNumQueries(0):
ja_trans = en.translations.get_language('ja')

# get the japanese *combined*
ja = Normal.objects.language('ja').get(pk=en.pk)

self.assertEqual(en.shared_field, NORMAL[1].shared_field)
self.assertEqual(en.translated_field, NORMAL[1].translated_field['en'])
self.assertRaises(AttributeError, getattr, ja_trans, 'shared_field')
self.assertEqual(ja_trans.translated_field, NORMAL[1].translated_field['ja'])
self.assertRaises(AttributeError, getattr, en, 'translated_field') # no autoload => error
self.assertEqual(ja.shared_field, NORMAL[1].shared_field)
self.assertEqual(ja.translated_field, NORMAL[1].translated_field['ja'])

def test_cached_no_autoload(self):
with self.settings(HVAD={'AUTOLOAD_TRANSLATIONS': False}):
def test_cached_autoload(self):
with self.settings(HVAD={'AUTOLOAD_TRANSLATIONS': True}):
# get the english instance
en = Normal.objects.untranslated().prefetch_related('translations').get()
with self.assertNumQueries(0):
ja_trans = en.translations.get_language('ja')

# get the japanese *combined*
ja = Normal.objects.language('ja').get(pk=en.pk)

self.assertEqual(en.shared_field, NORMAL[1].shared_field)
self.assertRaises(AttributeError, getattr, en, 'translated_field') # no autoload => error
self.assertEqual(en.translated_field, NORMAL[1].translated_field['en'])
self.assertRaises(AttributeError, getattr, ja_trans, 'shared_field')
self.assertEqual(ja_trans.translated_field, NORMAL[1].translated_field['ja'])
self.assertEqual(ja.shared_field, NORMAL[1].shared_field)
self.assertEqual(ja.translated_field, NORMAL[1].translated_field['ja'])

31 changes: 14 additions & 17 deletions hvad/tests/related.py
Original file line number Diff line number Diff line change
@@ -67,13 +67,19 @@ def test_relation(self):
en = Normal.objects.language('en').get(pk=self.normal_id[1])
ja = Normal.objects.language('ja').get(pk=self.normal_id[1])

with translation.override('en'):
related = Standard.objects.get(pk=self.standard_id[1])
self.assertEqual(related.normal.pk, en.pk)
self.assertEqual(related.normal.shared_field, en.shared_field)
self.assertRaises(AttributeError, getattr, related.normal, 'translated_field')
self.assertTrue(related in en.standards.all())

with self.settings(HVAD={'AUTOLOAD_TRANSLATIONS': True}), translation.override('en'):
related = Standard.objects.get(pk=self.standard_id[1])
self.assertEqual(related.normal.pk, en.pk)
self.assertEqual(related.normal.shared_field, en.shared_field)
self.assertEqual(related.normal.translated_field, en.translated_field)
self.assertTrue(related in en.standards.all())
with translation.override('ja'):
with self.settings(HVAD={'AUTOLOAD_TRANSLATIONS': True}), translation.override('ja'):
related = Standard.objects.get(pk=self.standard_id[1])
self.assertEqual(related.normal.pk, ja.pk)
self.assertEqual(related.normal.shared_field, ja.shared_field)
@@ -88,16 +94,16 @@ def test_num_queries(self):
self.assertEqual(related.normal.pk, en.pk)
with self.assertNumQueries(0):
self.assertEqual(related.normal.shared_field, en.shared_field)
with self.assertNumQueries(1):
self.assertEqual(related.normal.translated_field, en.translated_field)
with self.assertNumQueries(0):
self.assertRaises(AttributeError, getattr, related.normal, 'translated_field')

def test_lookup_by_pk(self):
en = Normal.objects.language('en').get(pk=self.normal_id[1])
by_pk = Standard.objects.get(normal__pk=en.pk)
with translation.override('en'):
self.assertEqual(by_pk.normal.pk, en.pk)
self.assertEqual(by_pk.normal.shared_field, en.shared_field)
self.assertEqual(by_pk.normal.translated_field, en.translated_field)
self.assertRaises(AttributeError, getattr, by_pk.normal, 'translated_field')
self.assertTrue(by_pk in en.standards.all())

def test_lookup_by_shared_field(self):
@@ -106,7 +112,7 @@ def test_lookup_by_shared_field(self):
with translation.override('en'):
self.assertEqual(by_shared_field.normal.pk, en.pk)
self.assertEqual(by_shared_field.normal.shared_field, en.shared_field)
self.assertEqual(by_shared_field.normal.translated_field, en.translated_field)
self.assertRaises(AttributeError, getattr, by_shared_field.normal, 'translated_field')
self.assertTrue(by_shared_field in en.standards.all())

def test_lookup_by_translated_field(self):
@@ -118,7 +124,7 @@ def test_lookup_by_translated_field(self):
)
self.assertEqual(by_translated_field.normal.pk, en.pk)
self.assertEqual(by_translated_field.normal.shared_field, en.shared_field)
self.assertEqual(by_translated_field.normal.translated_field, en.translated_field)
self.assertRaises(AttributeError, getattr, by_translated_field.normal, 'translated_field')
self.assertTrue(by_translated_field in en.standards.all())

def test_lookup_by_translated_field_requires_translation_aware_manager(self):
@@ -140,7 +146,7 @@ def test_lookup_by_translated_field_using_q_objects(self):
by_translated_field = translation_aware_manager.get(q)
self.assertEqual(by_translated_field.normal.pk, en.pk)
self.assertEqual(by_translated_field.normal.shared_field, en.shared_field)
self.assertEqual(by_translated_field.normal.translated_field, en.translated_field)
self.assertRaises(AttributeError, getattr, by_translated_field.normal, 'translated_field')
self.assertTrue(by_translated_field in en.standards.all())

def test_filter_by_shared_field(self):
@@ -153,9 +159,6 @@ def test_filter_by_shared_field(self):
shared_fields = [obj.normal.shared_field for obj in by_shared_field]
expected_fields = [en.shared_field]
self.assertEqual(shared_fields, expected_fields)
translated_fields = [obj.normal.translated_field for obj in by_shared_field]
expected_fields = [en.translated_field]
self.assertEqual(translated_fields, expected_fields)
for obj in by_shared_field:
self.assertTrue(obj in en.standards.all())

@@ -190,9 +193,6 @@ def test_filter_by_translated_field(self):
shared_fields = [obj.normal.shared_field for obj in by_translated_field]
expected_fields = [en.shared_field]
self.assertEqual(shared_fields, expected_fields)
translated_fields = [obj.normal.translated_field for obj in by_translated_field]
expected_fields = [en.translated_field]
self.assertEqual(translated_fields, expected_fields)
for obj in by_translated_field:
self.assertTrue(obj in en.standards.all())

@@ -214,9 +214,6 @@ def test_filter_by_translated_field_using_q_objects(self):
shared_fields = [obj.normal.shared_field for obj in by_translated_field]
expected_fields = [en.shared_field]
self.assertEqual(shared_fields, expected_fields)
translated_fields = [obj.normal.translated_field for obj in by_translated_field]
expected_fields = [en.translated_field]
self.assertEqual(translated_fields, expected_fields)
for obj in by_translated_field:
self.assertTrue(obj in en.standards.all())