1
1
from astroid import MANAGER , scoped_nodes , nodes , inference_tip
2
+ from pylint_django import utils
2
3
3
4
4
5
_STR_FIELDS = ('CharField' , 'SlugField' , 'URLField' , 'TextField' , 'EmailField' ,
@@ -24,34 +25,36 @@ def is_model_or_form_field(cls):
24
25
def apply_type_shim (cls , context = None ):
25
26
26
27
if cls .name in _STR_FIELDS :
27
- base_node = scoped_nodes .builtin_lookup ('str' )
28
+ base_nodes = scoped_nodes .builtin_lookup ('str' )
28
29
elif cls .name in _INT_FIELDS :
29
- base_node = scoped_nodes .builtin_lookup ('int' )
30
+ base_nodes = scoped_nodes .builtin_lookup ('int' )
30
31
elif cls .name in _BOOL_FIELDS :
31
- base_node = scoped_nodes .builtin_lookup ('bool' )
32
+ base_nodes = scoped_nodes .builtin_lookup ('bool' )
32
33
elif cls .name == 'FloatField' :
33
- base_node = scoped_nodes .builtin_lookup ('float' )
34
+ base_nodes = scoped_nodes .builtin_lookup ('float' )
34
35
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' )
36
37
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' )
43
39
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' )
45
41
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' )
47
43
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' )
49
45
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' )
51
47
else :
52
48
return iter ([cls ])
53
49
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 )
55
58
56
59
57
60
def add_transforms (manager ):
0 commit comments