Przeglądaj źródła

better userlib with get_user_with_context method

Guénaël Muller 6 lat temu
rodzic
commit
5f96a06110

+ 17 - 46
tracim/lib/core/user.py Wyświetl plik

@@ -21,68 +21,44 @@ class UserApi(object):
21 21
     def _base_query(self):
22 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 33
         return user
42 34
 
43 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 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 45
         Get one user by email
66 46
         :param email: Email of the user
67
-        :param in_context: Return User or UserInContext Object
68 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 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 57
         Get current_user
80
-        :param in_context:
81
-        :return:
82 58
         """
83 59
         if not self._user:
84 60
             raise UserNotExist()
85
-        return self._get_correct_user_type(self._user, in_context)
61
+        return self._user
86 62
 
87 63
     def get_all(self) -> typing.Iterable[User]:
88 64
         return self._session.query(User).order_by(User.display_name).all()
@@ -97,23 +73,18 @@ class UserApi(object):
97 73
         except:
98 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 78
         Authenticate user with email and password, raise AuthenticationFailed
107 79
         if uncorrect.
108 80
         :param email: email of the user
109 81
         :param password: cleartext password of the user
110
-        :param in_context:
111 82
         :return: User who was authenticated.
112 83
         """
113 84
         try:
114 85
             user = self.get_one_by_email(email)
115 86
             if user.validate_password(password):
116
-                return self._get_correct_user_type(user, in_context=in_context)
87
+                return user
117 88
             else:
118 89
                 raise BadUserPassword()
119 90
         except (BadUserPassword, NoResultFound):

+ 8 - 18
tracim/tests/library/test_user_api.py Wyświetl plik

@@ -86,46 +86,36 @@ class TestUserApi(DefaultTest):
86 86
         one = api.get_one(u.user_id)
87 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 90
         user = User(email='admin@tracim.tracim')
91 91
         api = UserApi(
92 92
             current_user=None,
93 93
             session=self.session,
94 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 97
         assert isinstance(new_user, UserInContext)
109
-        assert user != new_user
110 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 101
         user = User(email='admin@tracim.tracim')
114 102
         api = UserApi(
115 103
             current_user=user,
116 104
             session=self.session,
117 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 112
         api = UserApi(
123 113
             current_user=None,
124 114
             session=self.session,
125 115
             config=self.config,
126 116
         )
127 117
         with pytest.raises(UserNotExist):
128
-            api.get_current()
118
+            api.get_current_user()
129 119
 
130 120
     def test_unit__authenticate_user___ok__nominal_case(self):
131 121
         api = UserApi(

+ 2 - 1
tracim/views/core_api/session_controller.py Wyświetl plik

@@ -62,7 +62,8 @@ class SessionController(Controller):
62 62
             session=request.dbsession,
63 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 68
     def bind(self, configurator: Configurator):
68 69