CVS commit (wiking): cms.py

Hynek Hanke hanke at devel.brailcom.org
Thu May 14 17:30:23 CEST 2009


Update of /var/lib/cvs/wiking/lib/wiking/cms
In directory devel:/tmp/cvs-serv10235

Modified Files:
	cms.py 
Log Message:
(Users.user): Accept login or uid as user identification parameter.
(Users.find_users.record_to_user): Only accept email as a parameter and
always return a list.


/var/www/hosts/cvs.freebsoft.org/src/wiking:
Index: lib/wiking/cms/cms.py
===================================================================
RCS file: /var/lib/cvs/wiking/lib/wiking/cms/cms.py,v
retrieving revision 1.164
retrieving revision 1.163
diff -u -r1.164 -r1.163
--- lib/wiking/cms/cms.py	14 May 2009 12:19:48 -0000	1.163
+++ lib/wiking/cms/cms.py	14 May 2009 15:30:21 -0000	1.164
@@ -2158,11 +2158,28 @@
     def _make_user(self, kwargs):
         return User(**kwargs)
 
-    def user(self, req, login):
-        row = self._data.get_row(login=login)
+    def user(self, req, login=None, uid=None):
+        """Return a user for given login name or uid.
+
+        Arguments:
+        login -- login name of the user
+        uid -- unique identifier of the user
+
+        Returns a User instance (defined in request.py) or None"""
+
+        # Make sure we got exactly one of {login, uid}
+        assert (login or uid) and not (login and uid)
+
+        # Get the user data from db
+        if login:
+            row = self._data.get_row(login=login)
+        elif uid:
+            row = self._data.get_row(uid=uid)
         if row is None:
             return None
-        kwargs = self._user_arguments(req, login, row)
+
+        # Convert user data into a User instance
+        kwargs = self._user_arguments(req, row['login'].value(), row)
         user = self._make_user(kwargs)
         return user
 
@@ -2173,7 +2190,7 @@
         encapsulation and doesn't work for queries based on email (it
         only returns the first user with that email, not all users).
 
-        Use find_users() instead.
+        Use user() or find_users() instead.
         """
         if isinstance(query, int):
             row = self._data.get_row(uid=query)
@@ -2186,13 +2203,10 @@
         else:
             return None
 
-    def find_users(self, req, query):
-        """Return a user for given uid or login name or a list of
-        users for given email.
-
-        Returns a User instance (defined in request.py) for ids and
-        logins or a list of User instances for emails or None if no
-        user corresponds to this criteria."""
+    def find_users(self, req, email):
+        """Returns a list of users (User instances defined in
+        request.py) who are registered with this email or None
+        if there is no such user"""
 
         def record_to_user(row):
             """Convert a user record to a User instance"""
@@ -2200,22 +2214,13 @@
             return self._make_user(kwargs)
 
         # Find the user(s) in database and store in res
-        if isinstance(query, int):
-            res = self._data.get_row(uid=query)
-        elif query.find('@') == -1:
-            res = self._data.get_row(login=query)
-        else:
-            res = self._data.get_rows(email=query)                
+        res = self._data.get_rows(email=email)
 
-        # From a (list of) record(s) in res construct a (list of) User instance(s)
+        # From a list of records in res construct a list of User instance(s)
         if res is None:
-            # Unknown query or no matches
             return None
-        elif isinstance(res, list):
-            users = [record_to_user(row) for row in res]
-        else:
-            users = record_to_user(res)
-
+        users = [record_to_user(row) for row in res]
+        
         return users
 
     def check_registration_code(self, req):




More information about the Wiking-cvs mailing list