From e3318658a5425995e79c444c7eb2bd88df1b604d Mon Sep 17 00:00:00 2001 From: Eugene Prikazchikov Date: Sat, 9 Dec 2017 20:40:57 +0300 Subject: [PATCH 1/6] Update Loader class to up-to-date template loader API load_template_sources is deprecated in Django 1.9 ad removed in Django2.0 see https://docs.djangoproject.com/en/1.9/releases/1.9/#template-loader-apis-have-changed --- dbtemplates/loader.py | 21 ++++++++++++++++----- dbtemplates/test_cases.py | 2 +- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/dbtemplates/loader.py b/dbtemplates/loader.py index 015d9a9..086a38b 100644 --- a/dbtemplates/loader.py +++ b/dbtemplates/loader.py @@ -1,6 +1,6 @@ from django.contrib.sites.models import Site from django.db import router -from django.template import TemplateDoesNotExist +from django.template import Origin, TemplateDoesNotExist from django.template.loaders.base import Loader as BaseLoader from dbtemplates.models import Template @@ -19,13 +19,24 @@ class Loader(BaseLoader): """ is_usable = True - def load_and_store_template(self, template_name, cache_key, site, **params): + def get_template_sources(self, template_name, template_dirs=None): + yield Origin( + name=template_name, + template_name=template_name, + loader=self, + ) + + def get_contents(self, origin): + content, _ = self._load_template_source(origin.template_name) + return content + + def _load_and_store_template(self, template_name, cache_key, site, **params): template = Template.objects.get(name__exact=template_name, **params) db = router.db_for_read(Template, instance=template) display_name = 'dbtemplates:%s:%s:%s' % (db, template_name, site.domain) return set_and_return(cache_key, template.content, display_name) - def load_template_source(self, template_name, template_dirs=None): + def _load_template_source(self, template_name, template_dirs=None): # The logic should work like this: # * Try to find the template in the cache. If found, return it. # * Now check the cache if a lookup for the given template @@ -61,11 +72,11 @@ class Loader(BaseLoader): # Not marked as not-found, move on... try: - return self.load_and_store_template(template_name, cache_key, + return self._load_and_store_template(template_name, cache_key, site, sites__in=[site.id]) except (Template.MultipleObjectsReturned, Template.DoesNotExist): try: - return self.load_and_store_template(template_name, cache_key, + return self._load_and_store_template(template_name, cache_key, site, sites__isnull=True) except (Template.MultipleObjectsReturned, Template.DoesNotExist): pass diff --git a/dbtemplates/test_cases.py b/dbtemplates/test_cases.py index b13f3f0..d864242 100644 --- a/dbtemplates/test_cases.py +++ b/dbtemplates/test_cases.py @@ -42,7 +42,7 @@ class DbTemplatesTestCase(TestCase): loader.template_source_loaders = None settings.TEMPLATE_LOADERS = self.old_template_loaders - def test_basiscs(self): + def test_basics(self): self.assertEqual(list(self.t1.sites.all()), [self.site1]) self.assertTrue("base" in self.t1.content) self.assertEqual(list(Template.objects.filter(sites=self.site1)), From 18afb50582f5a175fd85d00ee41747a9bf9c455f Mon Sep 17 00:00:00 2001 From: Eugene Prikazchikov Date: Sat, 9 Dec 2017 20:43:44 +0300 Subject: [PATCH 2/6] Remove django 1.8 from tox.ini --- tox.ini | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tox.ini b/tox.ini index cfeb8a6..39ac9b6 100644 --- a/tox.ini +++ b/tox.ini @@ -6,7 +6,7 @@ envlist = flake8-py27, flake8-py35, readme-py27, - py{27,34,35}-dj{18,19,110} + py{27,34,35}-dj{19,110} py{27,34,35,36}-dj111 py{34,35,36}-dj20 @@ -21,7 +21,6 @@ setenv = DJANGO_SETTINGS_MODULE = dbtemplates.test_settings deps = -rrequirements/tests.txt - dj18: Django<1.9 dj19: Django<1.10 dj110: Django<1.11 dj111: Django<2.0 From 1c80410a5b8bcce4cfc0637568d905de661597f8 Mon Sep 17 00:00:00 2001 From: Eugene Prikazchikov Date: Sat, 9 Dec 2017 21:38:42 +0300 Subject: [PATCH 3/6] Update get_template_source utility function to use up-to-date template API --- dbtemplates/utils/template.py | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/dbtemplates/utils/template.py b/dbtemplates/utils/template.py index 8fd74be..662b4f6 100644 --- a/dbtemplates/utils/template.py +++ b/dbtemplates/utils/template.py @@ -1,6 +1,5 @@ from django.template import (Template, TemplateDoesNotExist, TemplateSyntaxError) -from importlib import import_module def get_loaders(): @@ -17,20 +16,13 @@ def get_template_source(name): if loader.__module__.startswith('dbtemplates.'): # Don't give a damn about dbtemplates' own loader. continue - module = import_module(loader.__module__) - load_template_source = getattr( - module, 'load_template_source', None) - if load_template_source is None: - load_template_source = loader.load_template_source - try: - source, origin = load_template_source(name) + for origin in loader.get_template_sources(name): + try: + source = loader.get_contents(origin) + except (NotImplementedError, TemplateDoesNotExist): + continue if source: return source - except NotImplementedError: - pass - except TemplateDoesNotExist: - pass - return None def check_template_syntax(template): From 34e34b72593ea5035269ce67d4ea207dcdcf50c9 Mon Sep 17 00:00:00 2001 From: Eugene Prikazchikov Date: Thu, 13 Sep 2018 23:37:41 +0300 Subject: [PATCH 4/6] Add renderer parameter to CodeMirrorTextArea.render According to django2.1 --- dbtemplates/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbtemplates/admin.py b/dbtemplates/admin.py index c18f96d..9860cef 100644 --- a/dbtemplates/admin.py +++ b/dbtemplates/admin.py @@ -29,7 +29,7 @@ class CodeMirrorTextArea(forms.Textarea): settings.DBTEMPLATES_MEDIA_PREFIX, 'css/editor.css')]) js = [posixpath.join(settings.DBTEMPLATES_MEDIA_PREFIX, 'js/codemirror.js')] - def render(self, name, value, attrs=None): + def render(self, name, value, attrs=None, renderer=None): result = [] result.append( super(CodeMirrorTextArea, self).render(name, value, attrs)) From 9cce7cd03ba98f0735dd38bc5d25b77024fbf207 Mon Sep 17 00:00:00 2001 From: Eugene Prikazchikov Date: Mon, 1 Oct 2018 10:51:11 +0300 Subject: [PATCH 5/6] Update tox.ini to support Python3.7 --- .travis.yml | 1 + tox.ini | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 913a87f..834778f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ python: - '3.4' - '3.5' - '3.6' +- '3.7' sudo: false cache: pip install: diff --git a/tox.ini b/tox.ini index 39ac9b6..4592f40 100644 --- a/tox.ini +++ b/tox.ini @@ -4,11 +4,12 @@ usedevelop = True minversion = 1.8 envlist = flake8-py27, - flake8-py35, + flake8-py37, readme-py27, - py{27,34,35}-dj{19,110} + readme-py37, py{27,34,35,36}-dj111 - py{34,35,36}-dj20 + py{34,35,36,37}-dj20 + py{34,35,36,37}-dj21 [testenv] basepython = @@ -16,15 +17,15 @@ basepython = py34: python3.4 py35: python3.5 py36: python3.6 + py37: python3.7 usedevelop = true setenv = DJANGO_SETTINGS_MODULE = dbtemplates.test_settings deps = - -rrequirements/tests.txt - dj19: Django<1.10 - dj110: Django<1.11 + -r requirements/tests.txt dj111: Django<2.0 dj20: Django<2.1 + dj21: Django<2.2 djmaster: https://github.com/django/django/archive/master.tar.gz#egg=django commands = @@ -36,11 +37,15 @@ commands = commands = python setup.py check -r -s deps = readme_renderer +[testenv:readme-py37] +commands = python setup.py check -r -s +deps = readme_renderer + [testenv:flake8-py27] commands = flake8 dbtemplates deps = flake8 -[testenv:flake8-py35] +[testenv:flake8-py37] commands = flake8 dbtemplates deps = flake8 From c2009596efbf003ef100674e7b5d10aa0190127f Mon Sep 17 00:00:00 2001 From: Eugene Prikazchikov Date: Mon, 1 Oct 2018 11:20:33 +0300 Subject: [PATCH 6/6] Add workaround to make Python3.7 in Travis work properly --- .travis.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 834778f..24869bf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,13 @@ python: - '3.4' - '3.5' - '3.6' -- '3.7' +# Enable 3.7 without globally enabling sudo and dist: xenial for other build jobs +# See https://github.com/travis-ci/travis-ci/issues/9815 +matrix: + include: + - python: 3.7 + dist: xenial + sudo: true sudo: false cache: pip install: