1+ from courses .models import TaskObject
12from django .shortcuts import get_object_or_404
3+ from progress .services import DBObjectStatusFilters
24from rest_framework import permissions
35from rest_framework .exceptions import PermissionDenied
46
5- from courses .models import TaskObject
6- from progress .services import DBObjectStatusFilters
77from questions .mapping import get_fields_for_answer_type , wrong_endpoint_text
88from questions .services .helpers import get_error_message_for_permissions
99
@@ -19,39 +19,63 @@ def has_permission(self, request, view):
1919 prefetch_fields_list : list [str ] = get_fields_for_answer_type (view )
2020 # Для GET запроса необходимо подягивать файлы, для POST нет.
2121 if request .method == "GET" :
22- prefetch_fields_list .extend (["content_object__files" , "popup" , "popup__file" ])
22+ prefetch_fields_list .extend (
23+ ["content_object__files" , "popup" , "popup__file" ]
24+ )
2325
24- task_status_filter = DBObjectStatusFilters ().get_task_status_filter_for_user (request .user )
25- task_skill_status = DBObjectStatusFilters ().get_task_skill_status_for_for_user (request .user )
26+ task_status_filter = DBObjectStatusFilters ().get_task_status_filter_for_user (
27+ request .user
28+ )
29+ task_skill_status = DBObjectStatusFilters ().get_task_skill_status_for_for_user (
30+ request .user
31+ )
2632
2733 try :
2834 request_task_object : TaskObject = get_object_or_404 (
29- (TaskObject .objects
30- .prefetch_related (* prefetch_fields_list )
31- .filter (task_skill_status & task_status_filter )),
35+ (
36+ TaskObject .objects .prefetch_related (* prefetch_fields_list ).filter (
37+ task_skill_status & task_status_filter
38+ )
39+ ),
3240 id = task_object_id ,
3341 )
3442 except AttributeError as e :
3543 error_message = str (e .args ).lower ()
36- if "cannot find" in error_message and "is an invalid parameter to prefetch_related()" in error_message :
44+ if (
45+ "cannot find" in error_message
46+ and "is an invalid parameter to prefetch_related()" in error_message
47+ ):
3748 request_question = (
38- TaskObject .objects .prefetch_related ("content_object" ).get (id = task_object_id ).content_object
49+ TaskObject .objects .prefetch_related ("content_object" )
50+ .get (id = task_object_id )
51+ .content_object
52+ )
53+ needed_model_class , gotten_model_class = wrong_endpoint_text (
54+ request_question , view
55+ )
56+ error_message = get_error_message_for_permissions (
57+ needed_model_class , gotten_model_class
3958 )
40- needed_model_class , gotten_model_class = wrong_endpoint_text (request_question , view )
41- error_message = get_error_message_for_permissions (needed_model_class , gotten_model_class )
4259 raise PermissionDenied (error_message )
4360 else :
4461 raise AttributeError (str (e ))
4562 request_question = request_task_object .content_object
46- needed_model_class , gotten_model_class = wrong_endpoint_text (request_question , view )
47- if isinstance (request_question , view .expected_question_model ) and needed_model_class == gotten_model_class :
63+ needed_model_class , gotten_model_class = wrong_endpoint_text (
64+ request_question , view
65+ )
66+ if (
67+ isinstance (request_question , view .expected_question_model )
68+ and needed_model_class == gotten_model_class
69+ ):
4870 # Установка атрибутов класса представления, чтобы повторно не дергать БД с запросом.
4971 view .task = request_task_object .task
5072 view .request_task_object = request_task_object
5173 view .task_object_id = task_object_id
5274 view .request_question = request_question
5375 return True
54- error_message = get_error_message_for_permissions (needed_model_class , gotten_model_class )
76+ error_message = get_error_message_for_permissions (
77+ needed_model_class , gotten_model_class
78+ )
5579 raise PermissionDenied (error_message )
5680
5781
@@ -63,22 +87,35 @@ class SimpleCheckQuestionTypePermission(permissions.BasePermission):
6387
6488 def has_permission (self , request , view ):
6589 task_object_id = view .kwargs .get ("task_obj_id" )
66- task_status_filter = DBObjectStatusFilters ().get_task_status_filter_for_user (request .user )
67- task_skill_status = DBObjectStatusFilters ().get_task_skill_status_for_for_user (request .user )
90+ task_status_filter = DBObjectStatusFilters ().get_task_status_filter_for_user (
91+ request .user
92+ )
93+ task_skill_status = DBObjectStatusFilters ().get_task_skill_status_for_for_user (
94+ request .user
95+ )
6896 request_task_object : TaskObject = get_object_or_404 (
69- (TaskObject .objects
70- .prefetch_related ("content_object" )
71- .filter (task_skill_status & task_status_filter )),
97+ (
98+ TaskObject .objects .prefetch_related ("content_object" ).filter (
99+ task_skill_status & task_status_filter
100+ )
101+ ),
72102 id = task_object_id ,
73103 )
74104 request_question = request_task_object .content_object
75- needed_model_class , gotten_model_class = wrong_endpoint_text (request_question , view )
76- if isinstance (request_question , view .expected_question_model ) and needed_model_class == gotten_model_class :
105+ needed_model_class , gotten_model_class = wrong_endpoint_text (
106+ request_question , view
107+ )
108+ if (
109+ isinstance (request_question , view .expected_question_model )
110+ and needed_model_class == gotten_model_class
111+ ):
77112 # Установка атрибутов класса представления, чтобы повторно не дергать БД с запросом.
78113 view .task = request_task_object .task
79114 view .request_task_object = request_task_object
80115 view .task_object_id = task_object_id
81116 view .request_question = request_question
82117 return True
83- error_message = get_error_message_for_permissions (needed_model_class , gotten_model_class )
118+ error_message = get_error_message_for_permissions (
119+ needed_model_class , gotten_model_class
120+ )
84121 raise PermissionDenied (error_message )
0 commit comments