Skip to content

Commit 281e9d5

Browse files
committed
pylint compliant naming convension implemented
1 parent 22c4299 commit 281e9d5

File tree

10 files changed

+121
-104
lines changed

10 files changed

+121
-104
lines changed

bootstrap_datepicker_plus/DatePickerDictionary.py

Lines changed: 0 additions & 19 deletions
This file was deleted.
Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,44 @@
1-
from .widgets import DatePickerInput
2-
from .widgets import TimePickerInput
3-
from .widgets import DateTimePickerInput
4-
from .widgets import MonthPickerInput
5-
from .widgets import YearPickerInput
1+
from bootstrap_datepicker_plus._base import BasePickerInput
2+
3+
__all__ = (
4+
'DatePickerInput',
5+
'TimePickerInput',
6+
'DateTimePickerInput',
7+
'MonthPickerInput',
8+
'YearPickerInput',
9+
)
10+
11+
12+
class DatePickerInput(BasePickerInput):
13+
picker_type = 'DATE'
14+
format = '%m/%d/%Y'
15+
format_key = 'DATE_INPUT_FORMATS'
16+
17+
18+
class TimePickerInput(BasePickerInput):
19+
picker_type = 'TIME'
20+
format = '%H:%M'
21+
format_key = 'TIME_INPUT_FORMATS'
22+
template_name = 'bootstrap_datepicker_plus/time-picker.html'
23+
24+
25+
class DateTimePickerInput(BasePickerInput):
26+
picker_type = 'DATETIME'
27+
format = '%m/%d/%Y %H:%M'
28+
format_key = 'DATETIME_INPUT_FORMATS'
29+
30+
31+
class MonthPickerInput(BasePickerInput):
32+
picker_type = 'MONTH'
33+
format = '%Y-%m-01'
34+
format_key = 'DATE_INPUT_FORMATS'
35+
36+
37+
class YearPickerInput(BasePickerInput):
38+
picker_type = 'YEAR'
39+
format = '%Y-01-01'
40+
format_key = 'DATE_INPUT_FORMATS'
41+
42+
def _link_to(self, linked_picker):
43+
yformat = self.config['options']['format'].replace('-01-01', '-12-31')
44+
self.config['options']['format'] = yformat

bootstrap_datepicker_plus/DatePickerBaseInput.py renamed to bootstrap_datepicker_plus/_base.py

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
# -*- coding: utf-8 -*-
22
from json import dumps as json_dumps
3-
from .DatePickerDictionary import DatePickerDictionary
3+
from bootstrap_datepicker_plus._helpers import (
4+
get_base_input,
5+
DatePickerDictionary,
6+
)
47

58

6-
class DatePickerBaseInput(DatePickerDictionary.get_base_input()):
9+
class BasePickerInput(get_base_input()):
710
template_name = 'bootstrap_datepicker_plus/date-picker.html'
811
picker_type = 'DATE'
912
format = '%m/%d/%Y'
@@ -22,7 +25,8 @@ class DatePickerBaseInput(DatePickerDictionary.get_base_input()):
2225
'showTodayButton': True,
2326
}
2427

25-
# source: https://github.com/tutorcruncher/django-bootstrap3-datetimepicker/blob/master/bootstrap3_datetime/widgets.py
28+
# source: https://github.com/tutorcruncher/django-bootstrap3-datetimepicker
29+
# file: /blob/31fbb09/bootstrap3_datetime/widgets.py#L33
2630
format_map = (
2731
('DDD', r'%j'),
2832
('DD', r'%d'),
@@ -41,28 +45,31 @@ class DatePickerBaseInput(DatePickerDictionary.get_base_input()):
4145

4246
class Media:
4347
js = (
44-
'https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment-with-locales.min.js',
45-
'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js',
48+
'https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/'
49+
'moment-with-locales.min.js',
50+
'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/'
51+
'4.17.47/js/bootstrap-datetimepicker.min.js',
4652
'bootstrap_datepicker_plus/js/datepicker-widget.js'
4753
)
4854
css = {'all': (
49-
'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.css',
55+
'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/'
56+
'4.17.47/css/bootstrap-datetimepicker.css',
5057
'bootstrap_datepicker_plus/css/datepicker-widget.css'
5158
), }
5259

5360
@classmethod
54-
def format_py2js(cls, format):
61+
def format_py2js(cls, datetime_format):
5562
''' convert python datetime format to moment format '''
56-
for js, py in cls.format_map:
57-
format = format.replace(py, js)
58-
return format
63+
for js_format, py_format in cls.format_map:
64+
datetime_format = datetime_format.replace(py_format, js_format)
65+
return datetime_format
5966

6067
@classmethod
61-
def format_js2py(cls, format):
68+
def format_js2py(cls, datetime_format):
6269
''' convert moment format to python datetime format '''
63-
for js, py in cls.format_map:
64-
format = format.replace(js, py)
65-
return format
70+
for js_format, py_format in cls.format_map:
71+
datetime_format = datetime_format.replace(js_format, py_format)
72+
return datetime_format
6673

6774
def __init__(self, attrs={}, format=None, options={}):
6875
self.config = self._default_config.copy()
@@ -80,7 +87,7 @@ def __init__(self, attrs={}, format=None, options={}):
8087
# Initilize
8188
if 'class' not in attrs:
8289
attrs['class'] = 'form-control'
83-
super(DatePickerBaseInput, self).__init__(attrs, format)
90+
super().__init__(attrs, format)
8491

8592
def _calculate_options(self, options):
8693
self.options_parameter = options
@@ -90,7 +97,7 @@ def _calculate_options(self, options):
9097
return _options
9198

9299
def get_context(self, name, value, attrs):
93-
context = super(DatePickerBaseInput, self).get_context(
100+
context = super().get_context(
94101
name, value, attrs)
95102
context['widget']['attrs']['dp_config'] = json_dumps(self.config)
96103
return context
@@ -123,7 +130,8 @@ def end_of(self, event_id, import_options=True):
123130
self.config['options']['format'] = backup_moment_format
124131
else:
125132
self.format = linked_picker.format
126-
# Important! See https://github.com/Eonasdan/bootstrap-datetimepicker/issues/1075
133+
# Setting useCurrent is necessary, see following issue
134+
# https://github.com/Eonasdan/bootstrap-datetimepicker/issues/1075
127135
self.config['options']['useCurrent'] = False
128136
self._link_to(linked_picker)
129137
else:
@@ -132,4 +140,4 @@ def end_of(self, event_id, import_options=True):
132140
return self
133141

134142
def _link_to(self, linked_picker):
135-
...
143+
pass

bootstrap_datepicker_plus/DateTimeBaseInputEx.py renamed to bootstrap_datepicker_plus/_compatibility.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# -*- coding: utf-8 -*-
2+
from functools import lru_cache
23
from pathlib import Path
34

45
from django.forms.widgets import DateTimeBaseInput
@@ -33,15 +34,20 @@ def engine(self):
3334
})
3435

3536

36-
class DjangoTemplatesEx(EngineMixin, BaseRenderer):
37+
class DjangoTemplateRenderer(EngineMixin, BaseRenderer):
3738
"""
3839
Load Django templates from the built-in widget templates in
3940
django/forms/templates and from apps' 'templates' directory.
4041
"""
4142
backend = DjangoTemplates
4243

4344

44-
class DateTimeBaseInputEx(DateTimeBaseInput):
45+
@lru_cache()
46+
def get_default_renderer():
47+
return DjangoTemplateRenderer()
48+
49+
50+
class CompatibleDateTimeBaseInput(DateTimeBaseInput):
4551
format = '%m/%d/%Y'
4652
format_key = 'DATE_INPUT_FORMATS'
4753
template_name = 'bootstrap_datepicker_plus/date-picker.html'
@@ -71,5 +77,5 @@ def render(self, name, value, attrs=None, renderer=None):
7177

7278
def _render(self, template_name, context, renderer=None):
7379
if renderer is None:
74-
renderer = DjangoTemplatesEx()
80+
renderer = get_default_renderer()
7581
return mark_safe(renderer.render(template_name, context))
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
def get_base_input(test=False):
2+
from django.forms.widgets import DateTimeBaseInput
3+
if 'get_context' in dir(DateTimeBaseInput) and not test:
4+
# django version 1.11 and above
5+
base_input = DateTimeBaseInput
6+
else:
7+
# django version below 1.11
8+
from bootstrap_datepicker_plus._compatibility import (
9+
CompatibleDateTimeBaseInput
10+
)
11+
base_input = CompatibleDateTimeBaseInput
12+
return base_input
13+
14+
15+
class DatePickerDictionary:
16+
_i = 0
17+
items = dict()
18+
19+
@classmethod
20+
def generate_id(cls):
21+
cls._i += 1
22+
return 'dp_%s' % cls._i

bootstrap_datepicker_plus/widgets.py

Lines changed: 0 additions & 36 deletions
This file was deleted.

tests/test_compatibility_patch.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
from django.test import SimpleTestCase
22

3-
from bootstrap_datepicker_plus.DateTimeBaseInputEx import BaseRenderer
4-
from bootstrap_datepicker_plus.DatePickerDictionary import DatePickerDictionary
5-
6-
from json import dumps as json_dumps
7-
import re
3+
from bootstrap_datepicker_plus._compatibility import BaseRenderer
4+
from bootstrap_datepicker_plus._helpers import get_base_input
85

96

107
class TestCompatibilityPatch(SimpleTestCase):
118

129
def setUp(self):
13-
self.DatePickerInputEx = DatePickerDictionary.get_base_input(True)
14-
self.dp_input = self.DatePickerInputEx()
10+
self.CompatibleDatePickerInput = get_base_input(True)
11+
self.dp_input = self.CompatibleDatePickerInput()
1512

1613
def test_raise_on_get_template(self):
1714
self.assertRaises(NotImplementedError,

tests/test_format_pyjs.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
from django.test import SimpleTestCase
22

3-
from bootstrap_datepicker_plus import DatePickerInput
3+
from bootstrap_datepicker_plus._base import BasePickerInput
44

55

66
class TestDateFormatConversion(SimpleTestCase):
77

88
def test_format_py2js(self):
9-
self.assertEqual(DatePickerInput.format_py2js(
9+
self.assertEqual(BasePickerInput.format_py2js(
1010
'%Y-%m-%d'), 'YYYY-MM-DD')
11-
self.assertEqual(DatePickerInput.format_py2js(
11+
self.assertEqual(BasePickerInput.format_py2js(
1212
'%d/%m/%Y'), 'DD/MM/YYYY')
1313

1414
def test_format_js2py(self):
15-
self.assertEqual(DatePickerInput.format_js2py(
15+
self.assertEqual(BasePickerInput.format_js2py(
1616
'YYYY-MM-DD'), '%Y-%m-%d')
17-
self.assertEqual(DatePickerInput.format_js2py(
17+
self.assertEqual(BasePickerInput.format_js2py(
1818
'DD/MM/YYYY'), '%d/%m/%Y')

tests/test_linked_inputs.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
from django.test import SimpleTestCase
22

3-
from bootstrap_datepicker_plus.DatePickerBaseInput import DatePickerBaseInput
3+
from bootstrap_datepicker_plus._base import BasePickerInput
44
from bootstrap_datepicker_plus import YearPickerInput
55

66

77
class TestLinkedInputs(SimpleTestCase):
88

99
def test_raising_error_on_no_start_of_key(self):
10-
endpicker = DatePickerBaseInput()
10+
endpicker = BasePickerInput()
1111
self.assertRaises(KeyError, lambda: endpicker.end_of('undefined'))
1212

1313
def test_format_copy(self):
14-
dp_input1 = DatePickerBaseInput(
14+
dp_input1 = BasePickerInput(
1515
format='%Y-%m-%d').start_of('format_copy')
16-
dp_input2 = DatePickerBaseInput().end_of('format_copy')
16+
dp_input2 = BasePickerInput().end_of('format_copy')
1717
self.assertEqual(dp_input1.format, '%Y-%m-%d')
1818
self.assertEqual(dp_input2.format, '%Y-%m-%d')
1919

2020
def test_format_copy_override(self):
21-
dp_input1 = DatePickerBaseInput(
21+
dp_input1 = BasePickerInput(
2222
format='%Y-%m-%d').start_of('format_copy_override')
23-
dp_input2 = DatePickerBaseInput(
23+
dp_input2 = BasePickerInput(
2424
format='%m/%d/%Y').end_of('format_copy_override')
2525
self.assertEqual(dp_input1.format, '%Y-%m-%d')
2626
self.assertEqual(dp_input2.format, '%m/%d/%Y')

tests/test_options.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
from django.test import SimpleTestCase
22

3-
from bootstrap_datepicker_plus.DatePickerBaseInput import DatePickerBaseInput
3+
from bootstrap_datepicker_plus._base import BasePickerInput
44

55

6-
class custom_input(DatePickerBaseInput):
6+
class custom_input(BasePickerInput):
77
format = '%Y-%m-%d'
88

99

1010
class TestOptionOverrides(SimpleTestCase):
1111

1212
def test_format_as_parameter(self):
13-
dp_input = DatePickerBaseInput(format='%Y-%m-%d')
13+
dp_input = BasePickerInput(format='%Y-%m-%d')
1414
self.assertEqual(dp_input.format, '%Y-%m-%d')
1515

1616
def test_format_as_option(self):
17-
dp_input = DatePickerBaseInput(options={'format': 'YYYY-MM-DD'})
17+
dp_input = BasePickerInput(options={'format': 'YYYY-MM-DD'})
1818
self.assertEqual(dp_input.format, '%Y-%m-%d')
1919

2020
def test_format_as_both(self):
21-
dp_input = DatePickerBaseInput(
21+
dp_input = BasePickerInput(
2222
format='%m/%d/%Y', options={'format': 'YYYY-MM-DD'})
2323
self.assertEqual(dp_input.format, '%Y-%m-%d')
2424

0 commit comments

Comments
 (0)