Skip to content

Commit d1e3663

Browse files
jmaroederatodorov
authored andcommitted
Adding tests and transforms for DurationField
Original PR: pylint-dev#99 Fixes pylint-dev#95
1 parent e9975b5 commit d1e3663

File tree

5 files changed

+27
-1
lines changed

5 files changed

+27
-1
lines changed

pylint_django/transforms/fields.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ def apply_type_shim(cls, context=None): # noqa
4545
base_nodes = MANAGER.ast_from_module_name('datetime').lookup('time')
4646
elif cls.name == 'DateField':
4747
base_nodes = MANAGER.ast_from_module_name('datetime').lookup('date')
48+
elif cls.name == 'DurationField':
49+
base_nodes = MANAGER.ast_from_module_name('datetime').lookup('timedelta')
4850
elif cls.name == 'ManyToManyField':
4951
base_nodes = MANAGER.ast_from_module_name('django.db.models.query').lookup('QuerySet')
5052
elif cls.name in ('ImageField', 'FileField'):

pylint_django/transforms/transforms/django_db_models_fields.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,12 @@ def __new__(cls, verbose_name=None, name=None, auto_now=False,
110110
pass
111111

112112

113+
class DurationField(datetime.timedelta, django_fields.DurationField):
114+
if PY3:
115+
def __new__(cls, verbose_name=None, name=None, **kwargs):
116+
pass
117+
118+
113119
# -------
114120
# misc
115121

pylint_django/transforms/transforms/django_forms_fields.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,13 @@ def __new__(cls, input_formats=None, *args, **kwargs):
101101
pass
102102

103103

104-
# --------
104+
class DurationField(datetime.timedelta, django_fields.DurationField):
105+
if PY3:
106+
def __new__(cls, *args, **kwargs):
107+
pass
108+
109+
110+
# --------
105111
# choice
106112

107113
class ChoiceField(object, django_fields.ChoiceField):

test/input/func_noerror_form_fields.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class ManyFieldsForm(forms.Form):
1515
datetimefield = forms.DateTimeField(auto_now_add=True)
1616
datefield = forms.DateField(auto_now_add=True)
1717
decimalfield = forms.DecimalField(max_digits=5, decimal_places=2)
18+
durationfield = forms.DurationField()
1819
emailfield = forms.EmailField()
1920
filefield = forms.FileField(name='test_file', upload_to='test')
2021
filepathfield = forms.FilePathField(path='/some/path')
@@ -57,6 +58,11 @@ def datefield_tests(self):
5758
def decimalfield_tests(self):
5859
print(self.decimalfield.adjusted())
5960

61+
def durationfield_tests(self):
62+
now = datetime.now()
63+
print(now - self.durationfield)
64+
print(self.durationfield.total_seconds())
65+
6066
def filefield_tests(self):
6167
print(self.filefield)
6268
print(self.imagefield)

test/input/func_noerror_model_fields.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class LotsOfFieldsModel(models.Model):
1818
datetimefield = models.DateTimeField(auto_now_add=True)
1919
datefield = models.DateField(auto_now_add=True)
2020
decimalfield = models.DecimalField(max_digits=5, decimal_places=2)
21+
durationfield = models.DurationField()
2122
emailfield = models.EmailField()
2223
filefield = models.FileField(name='test_file', upload_to='test')
2324
filepathfield = models.FilePathField()
@@ -69,6 +70,11 @@ def datefield_tests(self):
6970
def decimalfield_tests(self):
7071
print(self.decimalfield.compare(Decimal('1.4')))
7172

73+
def durationfield_tests(self):
74+
now = datetime.now()
75+
print(now - self.durationfield)
76+
print(self.durationfield.total_seconds())
77+
7278
def filefield_tests(self):
7379
print(self.filefield.file)
7480
print(self.imagefield.file)

0 commit comments

Comments
 (0)