Skip to content

Commit 64e81c6

Browse files
committed
feat(DateTimePicker): replace deprecated force_text and tests
1 parent 21ee924 commit 64e81c6

File tree

4 files changed

+48
-3
lines changed

4 files changed

+48
-3
lines changed

bootstrap3_datetime/widgets.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from django.forms.widgets import DateTimeInput
66
from django.utils.safestring import mark_safe
77
from django.utils.html import conditional_escape
8-
from django.utils.encoding import force_text
8+
from django.utils.encoding import force_str
99

1010

1111
class DateTimePicker(DateTimeInput):
@@ -101,7 +101,7 @@ def render(self, name, value, attrs=None, renderer=None):
101101

102102
if value != '':
103103
# Only add the 'value' attribute if a value is non-empty.
104-
input_attrs['value'] = force_text(self._format_value(value))
104+
input_attrs['value'] = force_str(self._format_value(value))
105105
input_attrs = {key: conditional_escape(val) for key, val in input_attrs.items()}
106106
if not self.picker_id:
107107
self.picker_id = (input_attrs.get('id', '') +
@@ -117,4 +117,4 @@ def render(self, name, value, attrs=None, renderer=None):
117117
js = self.js_template % dict(picker_id=picker_id, options=json.dumps(self.options or {}))
118118
else:
119119
js = ''
120-
return mark_safe(force_text(html + js))
120+
return mark_safe(force_str(html + js))

tests/legacy.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import django
2+
3+
from bootstrap3_datetime.widgets import DateTimePicker
4+
5+
6+
class DateTimePickerDjango110(DateTimePicker):
7+
def build_attrs(self, base_attrs=None, extra_attrs=None, **kwargs):
8+
if extra_attrs:
9+
base_attrs.update(extra_attrs)
10+
base_attrs.update(kwargs)
11+
return super(DateTimePickerDjango110, self).build_attrs(**base_attrs)
12+
13+
14+
def is_legacy():
15+
x,y,z = [int(v) for v in django.__version__.split(".")]
16+
return x == 1 and y < 11

tests/test_widgets.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import json
2+
3+
from legacy import DateTimePickerDjango110, is_legacy
4+
5+
from bootstrap3_datetime.widgets import DateTimePicker
6+
7+
8+
def test_rendering():
9+
options = {"pickTime": True, "format": "YYYY-MM-DD HH:mm"}
10+
widget = (DateTimePickerDjango110 if is_legacy() else DateTimePicker)(options=options)
11+
expected_output = '\n <div class="input-group date" id="_pickers">\n <input class="form-control" name="a" type="text" value="b"/>\n <span class="input-group-addon">\n <span class="glyphicon glyphicon-calendar"></span>\n </span>\n </div>\n <script>\n (function(window) {\n var callback = function() {\n $(function(){$("#_pickers:has(input:not([readonly],[disabled]))").datetimepicker(%s);});\n };\n if(window.addEventListener)\n window.addEventListener("load", callback, false);\n else if (window.attachEvent)\n window.attachEvent("onload", callback);\n else window.onload = callback;\n })(window);\n </script>'
12+
assert widget.render("a", "b", {}) == expected_output % json.dumps(options)

tox.ini

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[tox]
2+
envlist =
3+
{py27}-{django10,django111}
4+
{py39}-{django10,django111,django20,django30,django40}
5+
6+
[testenv]
7+
commands =
8+
pytest
9+
deps =
10+
pytest
11+
django10: django==1.10.*
12+
django111: django==1.11.*
13+
django20: django==2.0.*
14+
django30: django==3.0.*
15+
django40: django==4.0.*
16+
setenv =
17+
PYTHONPATH = {toxinidir}

0 commit comments

Comments
 (0)