14
14
15
15
from django .conf import settings
16
16
from django .db import models
17
+ from django .utils .functional import cached_property
17
18
from rest_framework .exceptions import ValidationError
18
19
19
20
logger = logging .getLogger (__name__ )
@@ -36,7 +37,7 @@ def has_permission(self, user):
36
37
user .project = self .project # link for activity log
37
38
return self .project .has_permission (user )
38
39
39
- @property
40
+ @cached_property
40
41
def filepath (self ):
41
42
return self .file .name
42
43
@@ -49,10 +50,9 @@ def url(self):
49
50
50
51
@property
51
52
def format (self ):
52
- filepath = self .file .name
53
53
file_format = None
54
54
try :
55
- file_format = os .path .splitext (filepath )[- 1 ]
55
+ file_format = os .path .splitext (self . filepath )[- 1 ]
56
56
except : # noqa: E722
57
57
pass
58
58
finally :
@@ -70,7 +70,7 @@ def content(self):
70
70
return body
71
71
72
72
def read_tasks_list_from_csv (self , sep = ',' ):
73
- logger .debug ('Read tasks list from CSV file {}' .format (self .file . name ))
73
+ logger .debug ('Read tasks list from CSV file {}' .format (self .filepath ))
74
74
tasks = pd .read_csv (self .file .open (), sep = sep ).fillna ('' ).to_dict ('records' )
75
75
tasks = [{'data' : task } for task in tasks ]
76
76
return tasks
@@ -79,13 +79,13 @@ def read_tasks_list_from_tsv(self):
79
79
return self .read_tasks_list_from_csv ('\t ' )
80
80
81
81
def read_tasks_list_from_txt (self ):
82
- logger .debug ('Read tasks list from text file {}' .format (self .file . name ))
82
+ logger .debug ('Read tasks list from text file {}' .format (self .filepath ))
83
83
lines = self .content .splitlines ()
84
84
tasks = [{'data' : {settings .DATA_UNDEFINED_NAME : line }} for line in lines ]
85
85
return tasks
86
86
87
87
def read_tasks_list_from_json (self ):
88
- logger .debug ('Read tasks list from JSON file {}' .format (self .file . name ))
88
+ logger .debug ('Read tasks list from JSON file {}' .format (self .filepath ))
89
89
90
90
raw_data = self .content
91
91
# Python 3.5 compatibility fix https://docs.python.org/3/whatsnew/3.6.html#json
@@ -105,15 +105,15 @@ def read_tasks_list_from_json(self):
105
105
return tasks_formatted
106
106
107
107
def read_task_from_hypertext_body (self ):
108
- logger .debug ('Read 1 task from hypertext file {}' .format (self .file . name ))
108
+ logger .debug ('Read 1 task from hypertext file {}' .format (self .filepath ))
109
109
body = self .content
110
110
tasks = [{'data' : {settings .DATA_UNDEFINED_NAME : body }}]
111
111
return tasks
112
112
113
113
def read_task_from_uploaded_file (self ):
114
- logger .debug ('Read 1 task from uploaded file {}' .format (self .file . name ))
114
+ logger .debug ('Read 1 task from uploaded file {}' .format (self .filepath ))
115
115
if settings .CLOUD_FILE_STORAGE_ENABLED :
116
- tasks = [{'data' : {settings .DATA_UNDEFINED_NAME : self .file . name }}]
116
+ tasks = [{'data' : {settings .DATA_UNDEFINED_NAME : self .filepath }}]
117
117
else :
118
118
tasks = [{'data' : {settings .DATA_UNDEFINED_NAME : self .url }}]
119
119
return tasks
@@ -149,7 +149,7 @@ def read_tasks(self, file_as_tasks_list=True):
149
149
tasks = self .read_task_from_uploaded_file ()
150
150
151
151
except Exception as exc :
152
- raise ValidationError ('Failed to parse input file ' + self .file . name + ': ' + str (exc ))
152
+ raise ValidationError ('Failed to parse input file ' + self .filepath + ': ' + str (exc ))
153
153
return tasks
154
154
155
155
@classmethod
0 commit comments