Skip to content

Commit 3199fab

Browse files
committed
Add django 1.11 compatibility
1 parent 8f74720 commit 3199fab

File tree

11 files changed

+165
-4
lines changed

11 files changed

+165
-4
lines changed

.coveragerc

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[run]
2+
source = preview_image_widget
3+
omit =
4+
*/tests/*
5+
*/apps.py

manage.py

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/usr/bin/env python
2+
import os
3+
import sys
4+
5+
if __name__ == "__main__":
6+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "preview_image_widget.tests.testsettings")
7+
from django.core.management import execute_from_command_line
8+
execute_from_command_line(sys.argv)

preview_image_widget/__init__.py

Whitespace-only changes.

preview_image_widget/apps.py

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from django.apps import AppConfig
2+
3+
4+
class MenuAppConfig(AppConfig):
5+
name = 'preview_image_widget'
6+
label = 'preview_image_widget'
7+
verbose_name = 'Preview Image Widget'

preview_image_widget/tests/__init__.py

Whitespace-only changes.
+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#coding: utf-8
2+
3+
import django
4+
from django.conf import settings
5+
from django.test import TestCase
6+
7+
from preview_image_widget.widgets import PreviewImageWidget
8+
from preview_image_widget.tests.utils import render_django110, render_django111
9+
10+
11+
class TestSimpleImageWidget(TestCase):
12+
def setUp(self):
13+
super(TestSimpleImageWidget, self).setUp()
14+
self.widget = PreviewImageWidget()
15+
self.image = 'static/img/no-user.png'
16+
self.preview_url = settings.MEDIA_URL + self.image
17+
self.args = {
18+
'name': 'image',
19+
'value': self.image,
20+
'attrs': {
21+
'preview_image_widget': 1,
22+
'data-preview': self.preview_url
23+
}
24+
}
25+
if django.VERSION >= (1, 11, 0):
26+
self.render_method = render_django111
27+
self.args.update({
28+
'widget': self.widget
29+
})
30+
else:
31+
self.render_method = render_django110
32+
33+
def tearDown(self):
34+
super(TestSimpleImageWidget, self).tearDown()
35+
del self.widget
36+
37+
def test_widget(self):
38+
"""
39+
Tests the widget render
40+
"""
41+
html_expected = self.render_method(**self.args)
42+
self.assertEqual(self.widget.render('image', self.image), html_expected)
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
DATABASES = {
2+
'default': {
3+
'ENGINE': 'django.db.backends.sqlite3',
4+
'NAME': ':memory:',
5+
},
6+
}
7+
SECRET_KEY = "r4dy"
8+
9+
INSTALLED_APPS = [
10+
'preview_image_widget'
11+
]
12+
13+
MIDDLEWARE_CLASSES = []

preview_image_widget/tests/utils.py

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from django.forms.utils import flatatt
2+
from django.utils.html import format_html
3+
from django.utils.safestring import mark_safe
4+
5+
try:
6+
from django.forms.renderers import get_default_renderer
7+
except ImportError:
8+
def get_default_renderer():
9+
return None
10+
11+
def render_django111(**kwargs):
12+
"""
13+
Renders the widget using the django 1.11+ way
14+
:param kwargs: key word arguments with the test data
15+
:return: widget rendered
16+
"""
17+
widget = kwargs.pop("widget")
18+
renderer = get_default_renderer()
19+
context = widget.get_context(kwargs['name'], kwargs['value'], kwargs['attrs'])
20+
return mark_safe(renderer.render('django/forms/widgets/input.html', context))
21+
22+
def render_django110(**kwargs):
23+
"""
24+
Renders the widget using the django 1.11+ way
25+
:param kwargs: key word arguments with the test data
26+
:return: widget rendered
27+
"""
28+
final_attrs = {'type': 'file', 'name': kwargs['name']}
29+
final_attrs.update(kwargs['attrs'])
30+
html_expected = format_html('<input{} />', flatatt(final_attrs))
31+
return html_expected

preview_image_widget/widgets.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,9 @@ def render(self, name, value, attrs=None):
2121
"""
2222
if value:
2323
preview = {"data-preview": settings.MEDIA_URL + str(value)}
24-
if attrs:
25-
attrs.update(preview)
26-
else:
27-
attrs = preview
24+
if not attrs:
25+
attrs = {}
26+
attrs.update(preview)
2827
return super(PreviewImageWidget, self).render(name, value, attrs=attrs)
2928

3029
class Media:

requirements.txt

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
django >= 1.9+
2+
coverage

tox.ini

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
[tox]
2+
skipsdist = True
3+
envlist =
4+
py27-django18,
5+
py27-django19,
6+
py27-django110,
7+
py27-django111,
8+
py35-django18,
9+
py35-django19,
10+
py35-django110,
11+
py35-django111
12+
13+
[testenv]
14+
commands=coverage run --source=preview_image_widget manage.py test
15+
16+
[testenv:py27-django18]
17+
basepython = python2.7
18+
deps = Django==1.8.*
19+
coverage
20+
21+
[testenv:py27-django19]
22+
basepython = python2.7
23+
deps = Django==1.9.*
24+
coverage
25+
26+
[testenv:py27-django110]
27+
basepython = python2.7
28+
deps = Django==1.10.*
29+
coverage
30+
31+
[testenv:py27-django111]
32+
basepython = python2.7
33+
deps = Django==1.11.*
34+
coverage
35+
36+
[testenv:py35-django18]
37+
basepython = python3.5
38+
deps = Django==1.8.*
39+
coverage
40+
41+
[testenv:py35-django19]
42+
basepython = python3.5
43+
deps = Django==1.9.*
44+
coverage
45+
46+
[testenv:py35-django110]
47+
basepython = python3.5
48+
deps = Django==1.10.*
49+
coverage
50+
51+
[testenv:py35-django111]
52+
basepython = python3.5
53+
deps = Django==1.11.*
54+
coverage

0 commit comments

Comments
 (0)