Browse Source

Refactor Request : Do not use function + _candidate_user instead of _user_candidate

Guénaël Muller 6 years ago
parent
commit
edfaf1c491
1 changed files with 85 additions and 84 deletions
  1. 85 84
      tracim/lib/utils/request.py

+ 85 - 84
tracim/lib/utils/request.py View File

@@ -42,7 +42,7 @@ class TracimRequest(Request):
42 42
 
43 43
         # User found from request headers, content, distinct from authenticated
44 44
         # user
45
-        self._user_candidate = None  # type: User
45
+        self._candidate_user = None  # type: User
46 46
 
47 47
         # INFO - G.M - 18-05-2018 - Close db at the end of the request
48 48
         self.add_finished_callback(self._cleanup)
@@ -56,7 +56,7 @@ class TracimRequest(Request):
56 56
         :return: Workspace of the request
57 57
         """
58 58
         if self._current_workspace is None:
59
-            self.current_workspace = get_workspace(self.current_user, self)
59
+            self.current_workspace = self._get_workspace(self.current_user, self)
60 60
         return self._current_workspace
61 61
 
62 62
     @current_workspace.setter
@@ -78,7 +78,7 @@ class TracimRequest(Request):
78 78
         Get user from authentication mecanism.
79 79
         """
80 80
         if self._current_user is None:
81
-            self.current_user = get_auth_safe_user(self)
81
+            self.current_user = self._get_auth_safe_user(self)
82 82
         return self._current_user
83 83
 
84 84
     @current_user.setter
@@ -98,9 +98,9 @@ class TracimRequest(Request):
98 98
         can help user to know about who one page is about in
99 99
         a similar way as current_workspace.
100 100
         """
101
-        if self._user_candidate is None:
102
-            self.candidate_user = get_candidate_user(self)
103
-        return self._user_candidate
101
+        if self._candidate_user is None:
102
+            self.candidate_user = self._get_candidate_user(self)
103
+        return self._candidate_user
104 104
 
105 105
     def _cleanup(self, request: 'TracimRequest') -> None:
106 106
         """
@@ -118,86 +118,87 @@ class TracimRequest(Request):
118 118
 
119 119
     @candidate_user.setter
120 120
     def candidate_user(self, user: User) -> None:
121
-        if self._user_candidate is not None:
121
+        if self._candidate_user is not None:
122 122
             raise ImmutableAttribute(
123 123
                 "Can't modify already setted candidate_user"
124 124
             )
125
-        self._user_candidate = user
126
-###
127
-# Utils for TracimRequest
128
-###
125
+        self._candidate_user = user
129 126
 
127
+    ###
128
+    # Utils for TracimRequest
129
+    ###
130 130
 
131
-def get_candidate_user(
132
-        request: TracimRequest
133
-) -> User:
134
-    """
135
-    Get candidate user
136
-    :param request: pyramid request
137
-    :return: user found from header/body
138
-    """
139
-    app_config = request.registry.settings['CFG']
140
-    uapi = UserApi(None, session=request.dbsession, config=app_config)
141
-
142
-    try:
143
-        login = None
144
-        if 'user_id' in request.matchdict:
145
-            login = request.matchdict['user_id']
146
-        if not login:
147
-            raise UserNotFoundInTracimRequest('You request a candidate user but the context not permit to found one')  # nopep8
148
-        user = uapi.get_one(login)
149
-    except UserNotFoundInTracimRequest as exc:
150
-        raise UserDoesNotExist('User {} not found'.format(login)) from exc
151
-    return user
152
-
153
-
154
-def get_auth_safe_user(
155
-        request: TracimRequest,
156
-) -> User:
157
-    """
158
-    Get current pyramid authenticated user from request
159
-    :param request: pyramid request
160
-    :return: current authenticated user
161
-    """
162
-    app_config = request.registry.settings['CFG']
163
-    uapi = UserApi(None, session=request.dbsession, config=app_config)
164
-    try:
165
-        login = request.authenticated_userid
166
-        if not login:
167
-            raise UserNotFoundInTracimRequest('You request a current user but the context not permit to found one')  # nopep8
168
-        user = uapi.get_one_by_email(login)
169
-    except (UserDoesNotExist, UserNotFoundInTracimRequest) as exc:
170
-        raise NotAuthenticated('User {} not found'.format(login)) from exc
171
-    return user
172
-
173
-
174
-def get_workspace(
175
-        user: User,
176
-        request: TracimRequest
177
-) -> Workspace:
178
-    """
179
-    Get current workspace from request
180
-    :param user: User who want to check the workspace
181
-    :param request: pyramid request
182
-    :return: current workspace
183
-    """
184
-    workspace_id = ''
185
-    try:
186
-        if 'workspace_id' in request.matchdict:
187
-            workspace_id = request.matchdict['workspace_id']
188
-        if not workspace_id:
189
-            raise WorkspaceNotFound('No workspace_id property found in request')
190
-        wapi = WorkspaceApi(
191
-            current_user=user,
192
-            session=request.dbsession,
193
-            config=request.registry.settings['CFG']
194
-        )
195
-        workspace = wapi.get_one(workspace_id)
196
-    except JSONDecodeError:
197
-        raise WorkspaceNotFound('Bad json body')
198
-    except NoResultFound:
199
-        raise WorkspaceNotFound(
200
-            'Workspace {} does not exist '
201
-            'or is not visible for this user'.format(workspace_id)
202
-        )
203
-    return workspace
131
+    def _get_candidate_user(
132
+            self,
133
+            request: 'TracimRequest',
134
+    ) -> User:
135
+        """
136
+        Get candidate user
137
+        :param request: pyramid request
138
+        :return: user found from header/body
139
+        """
140
+        app_config = request.registry.settings['CFG']
141
+        uapi = UserApi(None, session=request.dbsession, config=app_config)
142
+
143
+        try:
144
+            login = None
145
+            if 'user_id' in request.matchdict:
146
+                login = request.matchdict['user_id']
147
+            if not login:
148
+                raise UserNotFoundInTracimRequest('You request a candidate user but the context not permit to found one')  # nopep8
149
+            user = uapi.get_one(login)
150
+        except UserNotFoundInTracimRequest as exc:
151
+            raise UserDoesNotExist('User {} not found'.format(login)) from exc
152
+        return user
153
+
154
+    def _get_auth_safe_user(
155
+            self,
156
+            request: 'TracimRequest',
157
+    ) -> User:
158
+        """
159
+        Get current pyramid authenticated user from request
160
+        :param request: pyramid request
161
+        :return: current authenticated user
162
+        """
163
+        app_config = request.registry.settings['CFG']
164
+        uapi = UserApi(None, session=request.dbsession, config=app_config)
165
+        try:
166
+            login = request.authenticated_userid
167
+            if not login:
168
+                raise UserNotFoundInTracimRequest('You request a current user but the context not permit to found one')  # nopep8
169
+            user = uapi.get_one_by_email(login)
170
+        except (UserDoesNotExist, UserNotFoundInTracimRequest) as exc:
171
+            raise NotAuthenticated('User {} not found'.format(login)) from exc
172
+        return user
173
+
174
+    def _get_workspace(
175
+            self,
176
+            user: User,
177
+            request: 'TracimRequest'
178
+    ) -> Workspace:
179
+        """
180
+        Get current workspace from request
181
+        :param user: User who want to check the workspace
182
+        :param request: pyramid request
183
+        :return: current workspace
184
+        """
185
+        workspace_id = ''
186
+        try:
187
+            if 'workspace_id' in request.matchdict:
188
+                workspace_id = request.matchdict['workspace_id']
189
+            if not workspace_id:
190
+                raise WorkspaceNotFound('No workspace_id property found in request')
191
+            wapi = WorkspaceApi(
192
+                current_user=user,
193
+                session=request.dbsession,
194
+                config=request.registry.settings['CFG']
195
+            )
196
+            workspace = wapi.get_one(workspace_id)
197
+        except JSONDecodeError:
198
+            raise WorkspaceNotFound('Bad json body')
199
+        except NoResultFound:
200
+            raise WorkspaceNotFound(
201
+                'Workspace {} does not exist '
202
+                'or is not visible for this user'.format(workspace_id)
203
+            )
204
+        return workspace