jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/383532 )
Change subject: [IMPR] Introduce gender() method for User class
......................................................................
[IMPR] Introduce gender() method for User class
gender tag was introduced with mw 1.16
- rewrite site.users to get "gender" and "rights" properties. We may
use
lists for the usprop porperties as well as the ususers usernames instead of
a string with values separated by "|"
- add gender method to User class. return "unknown" as a fallback for older
mw versions
- some tests added
Bug: T177916
Change-Id: I04bb67e5ce00295523b686c94bc9519a37972c22
---
M pywikibot/page.py
M pywikibot/site.py
M tests/user_tests.py
3 files changed, 41 insertions(+), 5 deletions(-)
Approvals:
Masti: Looks good to me, but someone else must approve
Strainu: Looks good to me, approved
jenkins-bot: Verified
Zoranzoki21: Looks good to me, but someone else must approve
Objections:
Mpaa: There's a problem with this change, please improve
diff --git a/pywikibot/page.py b/pywikibot/page.py
index cd8da84..d15e680 100644
--- a/pywikibot/page.py
+++ b/pywikibot/page.py
@@ -3289,6 +3289,26 @@
"""
return self.getprops(force).get('groups', [])
+ def gender(self, force=False):
+ """Return the gender of the user.
+
+ @param force: if True, forces reloading the data from API
+ @type force: bool
+ @return: return 'male', 'female', or 'unknown'
+ @rtype: str
+ """
+ return self.getprops(force).get('gender', 'unknown')
+
+ def rights(self, force=False):
+ """Return the gender of the user.
+
+ @param force: if True, forces reloading the data from API
+ @type force: bool
+ @return: return user rights
+ @rtype: list
+ """
+ return self.getprops(force).get('rights', [])
+
def getUserPage(self, subpage=u''):
"""
Return a Page object relative to this user's main page.
diff --git a/pywikibot/site.py b/pywikibot/site.py
index 5dff0df..ac20cd0 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -4914,12 +4914,14 @@
@param usernames: a list of user names
@type usernames: list, or other iterable, of unicodes
"""
- if not isinstance(usernames, basestring):
- usernames = u"|".join(usernames)
+ usprop = ['blockinfo', 'groups', 'editcount',
'registration',
+ 'emailable']
+ if MediaWikiVersion(self.version()) >= MediaWikiVersion('1.16'):
+ usprop.append('gender')
+ if MediaWikiVersion(self.version()) >= MediaWikiVersion('1.17'):
+ usprop.append('rights')
usgen = api.ListGenerator(
- "users", ususers=usernames, site=self,
- usprop="blockinfo|groups|editcount|registration|emailable"
- )
+ 'users', ususers=usernames, site=self, usprop=usprop)
return usgen
@deprecated("Site.randompages()")
diff --git a/tests/user_tests.py b/tests/user_tests.py
index 6d2940d..96b99d9 100644
--- a/tests/user_tests.py
+++ b/tests/user_tests.py
@@ -32,6 +32,7 @@
self.assertGreater(user.editCount(), 0)
self.assertFalse(user.isBlocked())
self.assertTrue(user.isEmailable())
+ self.assertEqual(user.gender(), 'unknown')
self.assertIn('userid', user.getprops())
def test_registered_user_without_timestamp(self):
@@ -42,6 +43,16 @@
self.assertIsNone(user.registration())
self.assertIsNone(user.getprops()['registration'])
self.assertGreater(user.editCount(), 0)
+ self.assertEqual(user.gender(), 'male')
+ self.assertIn('userid', user.getprops())
+
+ def test_female_user(self):
+ """Test female user."""
+ user = User(self.site, 'Alraunenstern')
+ self.assertTrue(user.isRegistered())
+ self.assertFalse(user.isAnonymous())
+ self.assertGreater(user.editCount(), 0)
+ self.assertEqual(user.gender(), 'female')
self.assertIn('userid', user.getprops())
def test_anonymous_user(self):
@@ -53,6 +64,7 @@
self.assertTrue(user.isAnonymous())
self.assertIsNone(user.registration())
self.assertFalse(user.isEmailable())
+ self.assertEqual(user.gender(), 'unknown')
self.assertIn('invalid', user.getprops())
def test_unregistered_user(self):
@@ -64,6 +76,7 @@
self.assertFalse(user.isAnonymous())
self.assertIsNone(user.registration())
self.assertFalse(user.isEmailable())
+ self.assertEqual(user.gender(), 'unknown')
self.assertIn('missing', user.getprops())
def test_invalid_user(self):
@@ -75,6 +88,7 @@
self.assertFalse(user.isAnonymous())
self.assertIsNone(user.registration())
self.assertFalse(user.isEmailable())
+ self.assertEqual(user.gender(), 'unknown')
self.assertIn('invalid', user.getprops())
--
To view, visit
https://gerrit.wikimedia.org/r/383532
To unsubscribe, visit
https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I04bb67e5ce00295523b686c94bc9519a37972c22
Gerrit-PatchSet: 3
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Masti <mastigm(a)gmail.com>
Gerrit-Reviewer: Mpaa <mpaa.wiki(a)gmail.com>
Gerrit-Reviewer: Strainu <wiki(a)strainu.ro>
Gerrit-Reviewer: Zoranzoki21 <zorandori4444(a)gmail.com>
Gerrit-Reviewer: jenkins-bot <>