Browse Source

better typing + pep8

Guénaël Muller 6 years ago
parent
commit
31fc4e812c
2 changed files with 29 additions and 28 deletions
  1. 21 21
      tracim/lib/utils/authorization.py
  2. 8 7
      tracim/lib/utils/request.py

+ 21 - 21
tracim/lib/utils/authorization.py View File

50
 # We prefer to use decorators
50
 # We prefer to use decorators
51
 
51
 
52
 
52
 
53
-def require_same_user_or_profile(group: int):
53
+def require_same_user_or_profile(group: int) -> typing.Callable:
54
     """
54
     """
55
     Decorator for view to restrict access of tracim request if candidate user
55
     Decorator for view to restrict access of tracim request if candidate user
56
     is distinct from authenticated user and not with high enough profile.
56
     is distinct from authenticated user and not with high enough profile.
58
     like Group.TIM_USER or Group.TIM_MANAGER
58
     like Group.TIM_USER or Group.TIM_MANAGER
59
     :return:
59
     :return:
60
     """
60
     """
61
-    def decorator(func):
61
+    def decorator(func: typing.Callable) -> typing.Callable:
62
         @functools.wraps(func)
62
         @functools.wraps(func)
63
-        def wrapper(self, context, request: 'TracimRequest'):
63
+        def wrapper(self, context, request: 'TracimRequest') -> typing.Callable:
64
             auth_user = request.current_user
64
             auth_user = request.current_user
65
             candidate_user = request.candidate_user
65
             candidate_user = request.candidate_user
66
             if auth_user.user_id == candidate_user.user_id or \
66
             if auth_user.user_id == candidate_user.user_id or \
71
     return decorator
71
     return decorator
72
 
72
 
73
 
73
 
74
-def require_profile(group: int):
74
+def require_profile(group: int) -> typing.Callable:
75
     """
75
     """
76
     Decorator for view to restrict access of tracim request if profile is
76
     Decorator for view to restrict access of tracim request if profile is
77
     not high enough
77
     not high enough
79
     like Group.TIM_USER or Group.TIM_MANAGER
79
     like Group.TIM_USER or Group.TIM_MANAGER
80
     :return:
80
     :return:
81
     """
81
     """
82
-    def decorator(func):
82
+    def decorator(func: typing.Callable) -> typing.Callable:
83
         @functools.wraps(func)
83
         @functools.wraps(func)
84
-        def wrapper(self, context, request: 'TracimRequest'):
84
+        def wrapper(self, context, request: 'TracimRequest') -> typing.Callable:
85
             user = request.current_user
85
             user = request.current_user
86
             if user.profile.id >= group:
86
             if user.profile.id >= group:
87
                 return func(self, context, request)
87
                 return func(self, context, request)
90
     return decorator
90
     return decorator
91
 
91
 
92
 
92
 
93
-def require_workspace_role(minimal_required_role: int):
93
+def require_workspace_role(minimal_required_role: int) -> typing.Callable:
94
     """
94
     """
95
     Restricts access to endpoint to minimal role or raise an exception.
95
     Restricts access to endpoint to minimal role or raise an exception.
96
     Check role for current_workspace.
96
     Check role for current_workspace.
98
     UserRoleInWorkspace.CONTRIBUTOR or UserRoleInWorkspace.READER
98
     UserRoleInWorkspace.CONTRIBUTOR or UserRoleInWorkspace.READER
99
     :return: decorator
99
     :return: decorator
100
     """
100
     """
101
-    def decorator(func):
101
+    def decorator(func: typing.Callable) -> typing.Callable:
102
         @functools.wraps(func)
102
         @functools.wraps(func)
103
-        def wrapper(self, context, request: 'TracimRequest'):
103
+        def wrapper(self, context, request: 'TracimRequest') -> typing.Callable:
104
             user = request.current_user
104
             user = request.current_user
105
             workspace = request.current_workspace
105
             workspace = request.current_workspace
106
             if workspace.get_user_role(user) >= minimal_required_role:
106
             if workspace.get_user_role(user) >= minimal_required_role:
111
     return decorator
111
     return decorator
112
 
112
 
113
 
113
 
114
-def require_candidate_workspace_role(minimal_required_role: int):
114
+def require_candidate_workspace_role(minimal_required_role: int) -> typing.Callable:  # nopep8
115
     """
115
     """
116
     Restricts access to endpoint to minimal role or raise an exception.
116
     Restricts access to endpoint to minimal role or raise an exception.
117
     Check role for candidate_workspace.
117
     Check role for candidate_workspace.
119
     UserRoleInWorkspace.CONTRIBUTOR or UserRoleInWorkspace.READER
119
     UserRoleInWorkspace.CONTRIBUTOR or UserRoleInWorkspace.READER
120
     :return: decorator
120
     :return: decorator
121
     """
121
     """
122
-    def decorator(func):
122
+    def decorator(func: typing.Callable) -> typing.Callable:
123
 
123
 
124
-        def wrapper(self, context, request: 'TracimRequest'):
124
+        def wrapper(self, context, request: 'TracimRequest') -> typing.Callable:
125
             user = request.current_user
125
             user = request.current_user
126
             workspace = request.candidate_workspace
126
             workspace = request.candidate_workspace
127
 
127
 
133
     return decorator
133
     return decorator
134
 
134
 
135
 
135
 
136
-def require_content_types(content_types: typing.List['NewContentType']):
136
+def require_content_types(content_types: typing.List['NewContentType']) -> typing.Callable:  # nopep8
137
     """
137
     """
138
     Restricts access to specific file type or raise an exception.
138
     Restricts access to specific file type or raise an exception.
139
     Check role for candidate_workspace.
139
     Check role for candidate_workspace.
140
     :param content_types: list of NewContentType object
140
     :param content_types: list of NewContentType object
141
     :return: decorator
141
     :return: decorator
142
     """
142
     """
143
-    def decorator(func):
143
+    def decorator(func: typing.Callable) -> typing.Callable:
144
         @functools.wraps(func)
144
         @functools.wraps(func)
145
-        def wrapper(self, context, request: 'TracimRequest'):
145
+        def wrapper(self, context, request: 'TracimRequest') -> typing.Callable:
146
             content = request.current_content
146
             content = request.current_content
147
             current_content_type_slug = ContentType(content.type).slug
147
             current_content_type_slug = ContentType(content.type).slug
148
-            content_types_slug = [content_type.slug for content_type in content_types]
148
+            content_types_slug = [content_type.slug for content_type in content_types]  # nopep8
149
             if current_content_type_slug in content_types_slug:
149
             if current_content_type_slug in content_types_slug:
150
                 return func(self, context, request)
150
                 return func(self, context, request)
151
             raise ContentTypeNotAllowed()
151
             raise ContentTypeNotAllowed()
156
 def require_comment_ownership_or_role(
156
 def require_comment_ownership_or_role(
157
         minimal_required_role_for_owner: int,
157
         minimal_required_role_for_owner: int,
158
         minimal_required_role_for_anyone: int,
158
         minimal_required_role_for_anyone: int,
159
-) -> None:
159
+) -> typing.Callable:
160
     """
160
     """
161
     Decorator for view to restrict access of tracim request if role is
161
     Decorator for view to restrict access of tracim request if role is
162
     not high enough and user is not owner of the current_content
162
     not high enough and user is not owner of the current_content
163
-    :param minimal_required_role_for_owner_access: minimal role for owner
163
+    :param minimal_required_role_for_owner: minimal role for owner
164
     of current_content to access to this view
164
     of current_content to access to this view
165
     :param minimal_required_role_for_anyone: minimal role for anyone to
165
     :param minimal_required_role_for_anyone: minimal role for anyone to
166
     access to this view.
166
     access to this view.
167
     :return:
167
     :return:
168
     """
168
     """
169
-    def decorator(func):
169
+    def decorator(func: typing.Callable) -> typing.Callable:
170
         @functools.wraps(func)
170
         @functools.wraps(func)
171
-        def wrapper(self, context, request: 'TracimRequest'):
171
+        def wrapper(self, context, request: 'TracimRequest') -> typing.Callable:
172
             user = request.current_user
172
             user = request.current_user
173
             workspace = request.current_workspace
173
             workspace = request.current_workspace
174
             comment = request.current_comment
174
             comment = request.current_comment
182
                 return func(self, context, request)
182
                 return func(self, context, request)
183
             raise InsufficientUserWorkspaceRole()
183
             raise InsufficientUserWorkspaceRole()
184
         return wrapper
184
         return wrapper
185
-    return decorator
185
+    return decorator

+ 8 - 7
tracim/lib/utils/request.py View File

69
         :return: Workspace of the request
69
         :return: Workspace of the request
70
         """
70
         """
71
         if self._current_workspace is None:
71
         if self._current_workspace is None:
72
-            self._current_workspace = self._get_current_workspace(self.current_user, self)
72
+            self._current_workspace = self._get_current_workspace(self.current_user, self)   # nopep8
73
         return self._current_workspace
73
         return self._current_workspace
74
 
74
 
75
     @current_workspace.setter
75
     @current_workspace.setter
103
         self._current_user = user
103
         self._current_user = user
104
 
104
 
105
     @property
105
     @property
106
-    def current_content(self) -> User:
106
+    def current_content(self) -> Content:
107
         """
107
         """
108
         Get current  content from path
108
         Get current  content from path
109
         """
109
         """
124
         self._current_content = content
124
         self._current_content = content
125
 
125
 
126
     @property
126
     @property
127
-    def current_comment(self) -> User:
127
+    def current_comment(self) -> Content:
128
         """
128
         """
129
         Get current comment from path
129
         Get current comment from path
130
         """
130
         """
145
             )
145
             )
146
         self._current_comment = content
146
         self._current_comment = content
147
     # TODO - G.M - 24-05-2018 - Find a better naming for this ?
147
     # TODO - G.M - 24-05-2018 - Find a better naming for this ?
148
+
148
     @property
149
     @property
149
     def candidate_user(self) -> User:
150
     def candidate_user(self) -> User:
150
         """
151
         """
200
             workspace: Workspace,
201
             workspace: Workspace,
201
             content: Content,
202
             content: Content,
202
             request: 'TracimRequest'
203
             request: 'TracimRequest'
203
-    ):
204
+    ) -> Content:
204
         """
205
         """
205
         Get current content from request
206
         Get current content from request
206
         :param user: User who want to check the workspace
207
         :param user: User who want to check the workspace
238
             user: User,
239
             user: User,
239
             workspace: Workspace,
240
             workspace: Workspace,
240
             request: 'TracimRequest'
241
             request: 'TracimRequest'
241
-    ):
242
+    ) -> Content:
242
         """
243
         """
243
         Get current content from request
244
         Get current content from request
244
         :param user: User who want to check the workspace
245
         :param user: User who want to check the workspace
325
             if 'workspace_id' in request.matchdict:
326
             if 'workspace_id' in request.matchdict:
326
                 workspace_id = request.matchdict['workspace_id']
327
                 workspace_id = request.matchdict['workspace_id']
327
             if not workspace_id:
328
             if not workspace_id:
328
-                raise WorkspaceNotFoundInTracimRequest('No workspace_id property found in request')
329
+                raise WorkspaceNotFoundInTracimRequest('No workspace_id property found in request')  # nopep8
329
             wapi = WorkspaceApi(
330
             wapi = WorkspaceApi(
330
                 current_user=user,
331
                 current_user=user,
331
                 session=request.dbsession,
332
                 session=request.dbsession,
357
             if 'new_workspace_id' in request.json_body:
358
             if 'new_workspace_id' in request.json_body:
358
                 workspace_id = request.json_body['new_workspace_id']
359
                 workspace_id = request.json_body['new_workspace_id']
359
             if not workspace_id:
360
             if not workspace_id:
360
-                raise WorkspaceNotFoundInTracimRequest('No new_workspace_id property found in body')
361
+                raise WorkspaceNotFoundInTracimRequest('No new_workspace_id property found in body')  # nopep8
361
             wapi = WorkspaceApi(
362
             wapi = WorkspaceApi(
362
                 current_user=user,
363
                 current_user=user,
363
                 session=request.dbsession,
364
                 session=request.dbsession,