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

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

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