Browse Source

better userlib with get_user_with_context method

Guénaël Muller 6 years ago
parent
commit
5f96a06110

+ 17 - 46
tracim/lib/core/user.py View File

21
     def _base_query(self):
21
     def _base_query(self):
22
         return self._session.query(User)
22
         return self._session.query(User)
23
 
23
 
24
-    def _get_correct_user_type(
25
-            self,
26
-            user: User,
27
-            in_context: bool,
28
-    ) -> typing.Union[User, UserInContext]:
24
+    def get_user_with_context(self, user: User) -> UserInContext:
29
         """
25
         """
30
-        Choose user type object depending on in_context bool.
31
-        :param user:
32
-        :param in_context:
33
-        :return: user as User or UserInContext if in_context is True
26
+        Return UserInContext object from User
34
         """
27
         """
35
-        if in_context:
36
-            user = UserInContext(
37
-                user=user,
38
-                dbsession=self._session,
39
-                config=self._config,
40
-            )
28
+        user = UserInContext(
29
+            user=user,
30
+            dbsession=self._session,
31
+            config=self._config,
32
+        )
41
         return user
33
         return user
42
 
34
 
43
     # Getters
35
     # Getters
44
 
36
 
45
-    def get_one(
46
-            self,
47
-            user_id: int,
48
-            in_context: bool=False,
49
-    ) -> typing.Union[UserInContext, User]:
37
+    def get_one(self, user_id: int) -> User:
50
         """
38
         """
51
         Get one user by user id
39
         Get one user by user id
52
-        :param user_id:
53
-        :param in_context: Return User or UserInContext Object
54
-        :return: one user
55
         """
40
         """
56
-        user = self._base_query().filter(User.user_id == user_id).one()
57
-        return self._get_correct_user_type(user, in_context)
41
+        return self._base_query().filter(User.user_id == user_id).one()
58
 
42
 
59
-    def get_one_by_email(
60
-            self,
61
-            email: str,
62
-            in_context: bool=False,
63
-    ) -> User:
43
+    def get_one_by_email(self, email: str) -> User:
64
         """
44
         """
65
         Get one user by email
45
         Get one user by email
66
         :param email: Email of the user
46
         :param email: Email of the user
67
-        :param in_context: Return User or UserInContext Object
68
         :return: one user
47
         :return: one user
69
         """
48
         """
70
-        user = self._base_query().filter(User.email == email).one()
71
-        return self._get_correct_user_type(user, in_context)
49
+        return self._base_query().filter(User.email == email).one()
72
 
50
 
73
     # FIXME - G.M - 24-04-2018 - Duplicate method with get_one.
51
     # FIXME - G.M - 24-04-2018 - Duplicate method with get_one.
74
-    def get_one_by_id(self, id: int, in_context=False) -> User:
75
-        return self.get_one(user_id=id, in_context=in_context)
52
+    def get_one_by_id(self, id: int) -> User:
53
+        return self.get_one(user_id=id)
76
 
54
 
77
-    def get_current(self, in_context: bool=False):
55
+    def get_current_user(self) -> User:
78
         """
56
         """
79
         Get current_user
57
         Get current_user
80
-        :param in_context:
81
-        :return:
82
         """
58
         """
83
         if not self._user:
59
         if not self._user:
84
             raise UserNotExist()
60
             raise UserNotExist()
85
-        return self._get_correct_user_type(self._user, in_context)
61
+        return self._user
86
 
62
 
87
     def get_all(self) -> typing.Iterable[User]:
63
     def get_all(self) -> typing.Iterable[User]:
88
         return self._session.query(User).order_by(User.display_name).all()
64
         return self._session.query(User).order_by(User.display_name).all()
97
         except:
73
         except:
98
             return False
74
             return False
99
 
75
 
100
-    def authenticate_user(self,
101
-                          email: str,
102
-                          password: str,
103
-                          in_context=False
104
-        ) -> typing.Union[User, UserInContext]:
76
+    def authenticate_user(self, email: str, password: str) -> User:
105
         """
77
         """
106
         Authenticate user with email and password, raise AuthenticationFailed
78
         Authenticate user with email and password, raise AuthenticationFailed
107
         if uncorrect.
79
         if uncorrect.
108
         :param email: email of the user
80
         :param email: email of the user
109
         :param password: cleartext password of the user
81
         :param password: cleartext password of the user
110
-        :param in_context:
111
         :return: User who was authenticated.
82
         :return: User who was authenticated.
112
         """
83
         """
113
         try:
84
         try:
114
             user = self.get_one_by_email(email)
85
             user = self.get_one_by_email(email)
115
             if user.validate_password(password):
86
             if user.validate_password(password):
116
-                return self._get_correct_user_type(user, in_context=in_context)
87
+                return user
117
             else:
88
             else:
118
                 raise BadUserPassword()
89
                 raise BadUserPassword()
119
         except (BadUserPassword, NoResultFound):
90
         except (BadUserPassword, NoResultFound):

+ 8 - 18
tracim/tests/library/test_user_api.py View File

86
         one = api.get_one(u.user_id)
86
         one = api.get_one(u.user_id)
87
         eq_(u.user_id, one.user_id)
87
         eq_(u.user_id, one.user_id)
88
 
88
 
89
-    def test_unit__get_correct_user_type__ok__no_context(self):
89
+    def test_unit__get_user_with_context__nominal_case(self):
90
         user = User(email='admin@tracim.tracim')
90
         user = User(email='admin@tracim.tracim')
91
         api = UserApi(
91
         api = UserApi(
92
             current_user=None,
92
             current_user=None,
93
             session=self.session,
93
             session=self.session,
94
             config=self.config,
94
             config=self.config,
95
         )
95
         )
96
-        new_user = api._get_correct_user_type(user, in_context=False)
97
-        assert isinstance(new_user, User)
98
-        assert user == new_user
99
-
100
-    def test_unit__get_correct_user_type__ok__with_context(self):
101
-        user = User(email='admin@tracim.tracim')
102
-        api = UserApi(
103
-            current_user=None,
104
-            session=self.session,
105
-            config=self.config,
106
-        )
107
-        new_user = api._get_correct_user_type(user, in_context=True)
96
+        new_user = api.get_user_with_context(user)
108
         assert isinstance(new_user, UserInContext)
97
         assert isinstance(new_user, UserInContext)
109
-        assert user != new_user
110
         assert new_user.user == user
98
         assert new_user.user == user
111
 
99
 
112
-    def test_unit__get_current__ok__nominal_case(self):
100
+    def test_unit__get_current_user_ok__nominal_case(self):
113
         user = User(email='admin@tracim.tracim')
101
         user = User(email='admin@tracim.tracim')
114
         api = UserApi(
102
         api = UserApi(
115
             current_user=user,
103
             current_user=user,
116
             session=self.session,
104
             session=self.session,
117
             config=self.config,
105
             config=self.config,
118
         )
106
         )
119
-        assert api.get_current().email == 'admin@tracim.tracim'
107
+        new_user = api.get_current_user()
108
+        assert isinstance(new_user, User)
109
+        assert user == new_user
120
 
110
 
121
-    def test_unit__get_current__err__user_not_exist(self):
111
+    def test_unit__get_current_user__err__user_not_exist(self):
122
         api = UserApi(
112
         api = UserApi(
123
             current_user=None,
113
             current_user=None,
124
             session=self.session,
114
             session=self.session,
125
             config=self.config,
115
             config=self.config,
126
         )
116
         )
127
         with pytest.raises(UserNotExist):
117
         with pytest.raises(UserNotExist):
128
-            api.get_current()
118
+            api.get_current_user()
129
 
119
 
130
     def test_unit__authenticate_user___ok__nominal_case(self):
120
     def test_unit__authenticate_user___ok__nominal_case(self):
131
         api = UserApi(
121
         api = UserApi(

+ 2 - 1
tracim/views/core_api/session_controller.py View File

62
             session=request.dbsession,
62
             session=request.dbsession,
63
             config=app_config,
63
             config=app_config,
64
         )
64
         )
65
-        return uapi.get_current(in_context=True)
65
+        user = uapi.get_current_user()  # User
66
+        return uapi.get_user_with_context(user)
66
 
67
 
67
     def bind(self, configurator: Configurator):
68
     def bind(self, configurator: Configurator):
68
 
69