Skip to content

Commit 4840b73

Browse files
committed
Hackily removing ImportFrom node from AST for datetime
1 parent af6e93b commit 4840b73

File tree

1 file changed

+19
-16
lines changed

1 file changed

+19
-16
lines changed

pylint_django/transforms/fields.py

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from astroid import MANAGER, scoped_nodes, nodes, inference_tip
2+
from pylint_django import utils
23

34

45
_STR_FIELDS = ('CharField', 'SlugField', 'URLField', 'TextField', 'EmailField',
@@ -24,34 +25,36 @@ def is_model_or_form_field(cls):
2425
def apply_type_shim(cls, context=None):
2526

2627
if cls.name in _STR_FIELDS:
27-
base_node = scoped_nodes.builtin_lookup('str')
28+
base_nodes = scoped_nodes.builtin_lookup('str')
2829
elif cls.name in _INT_FIELDS:
29-
base_node = scoped_nodes.builtin_lookup('int')
30+
base_nodes = scoped_nodes.builtin_lookup('int')
3031
elif cls.name in _BOOL_FIELDS:
31-
base_node = scoped_nodes.builtin_lookup('bool')
32+
base_nodes = scoped_nodes.builtin_lookup('bool')
3233
elif cls.name == 'FloatField':
33-
base_node = scoped_nodes.builtin_lookup('float')
34+
base_nodes = scoped_nodes.builtin_lookup('float')
3435
elif cls.name == 'DecimalField':
35-
base_node = MANAGER.ast_from_module_name('decimal').lookup('Decimal')
36+
base_nodes = MANAGER.ast_from_module_name('decimal').lookup('Decimal')
3637
elif cls.name in ('SplitDateTimeField', 'DateTimeField'):
37-
base_node = MANAGER.ast_from_module_name('datetime').lookup('datetime')
38-
# XXX: for some reason, with python3, this particular line triggers a
39-
# check in the StdlibChecker for deprecated methods; one of these nodes
40-
# is an ImportFrom which has no qname() method, causing the checker
41-
# to die...
42-
base_node = (base_node[0], base_node[1][:-1])
38+
base_nodes = MANAGER.ast_from_module_name('datetime').lookup('datetime')
4339
elif cls.name == 'TimeField':
44-
base_node = MANAGER.ast_from_module_name('datetime').lookup('time')
40+
base_nodes = MANAGER.ast_from_module_name('datetime').lookup('time')
4541
elif cls.name == 'DateField':
46-
base_node = MANAGER.ast_from_module_name('datetime').lookup('date')
42+
base_nodes = MANAGER.ast_from_module_name('datetime').lookup('date')
4743
elif cls.name == 'ManyToManyField':
48-
base_node = MANAGER.ast_from_module_name('django.db.models.query').lookup('QuerySet')
44+
base_nodes = MANAGER.ast_from_module_name('django.db.models.query').lookup('QuerySet')
4945
elif cls.name in ('ImageField', 'FileField'):
50-
base_node = MANAGER.ast_from_module_name('django.core.files.base').lookup('File')
46+
base_nodes = MANAGER.ast_from_module_name('django.core.files.base').lookup('File')
5147
else:
5248
return iter([cls])
5349

54-
return iter([cls] + base_node[1])
50+
# XXX: for some reason, with python3, this particular line triggers a
51+
# check in the StdlibChecker for deprecated methods; one of these nodes
52+
# is an ImportFrom which has no qname() method, causing the checker
53+
# to die...
54+
if utils.PY3:
55+
base_nodes = [n for n in base_nodes[1] if not isinstance(n, nodes.ImportFrom)]
56+
57+
return iter([cls] + base_nodes)
5558

5659

5760
def add_transforms(manager):

0 commit comments

Comments
 (0)