Example #1
0
 def task(self):
     the_bot_it_user = User(self.wiki, "Benutzer:THEbotIT")
     page: Optional[Page] = None
     for idx, (page, revision_id, ts, _) in enumerate(
             the_bot_it_user.contributions(total=10000,
                                           start=Timestamp(year=2022,
                                                           month=3,
                                                           day=26),
                                           end=Timestamp(year=2022,
                                                         month=3,
                                                         day=22))):
         if idx % 100 == 0:
             self.logger.info(f"index is {idx}")
         if idx < 700:
             continue
         last_two_reivisions: List[Revision] = list(page.revisions())[:2]
         # make sure the last edit is the potential dangerous one
         if last_two_reivisions[0]["revid"] == revision_id:
             if last_two_reivisions[0]["size"] - last_two_reivisions[1][
                     "size"] < 0:
                 if "RE:" in page.title():
                     self.logger.info(f"bad edit on {page.title()}")
                     page.text = page.getOldVersion(
                         oldid=last_two_reivisions[1]["revid"])
                     page.save(
                         f"Änderung {last_two_reivisions[0]['revid']} von [[Benutzer:THEbotIT|THEbotIT]] ([[Benutzer Diskussion:THEbotIT|Diskussion]]) rückgängig gemacht."
                     )
     self.logger.info("THE END")
 def test_registered_user(self):
     """Test registered user."""
     user = User(self.site, 'Xqt')
     with suppress_warnings('pywikibot.page.User.name', DeprecationWarning):
         self.assertEqual(user.name(), user.username)
     self.assertEqual(user.title(with_ns=False), user.username)
     self.assertTrue(user.isRegistered())
     self.assertFalse(user.isAnonymous())
     self.assertIsInstance(user.registration(), pywikibot.Timestamp)
     self.assertGreater(user.editCount(), 0)
     self.assertFalse(user.isBlocked())
     self.assertTrue(user.isEmailable())
     self.assertEqual(user.gender(), 'unknown')
     self.assertIn('userid', user.getprops())
     self.assertEqual(user.getprops()['userid'], 287832)
     self.assertEqual(user.pageid, 6927779)
     self.assertEqual(user.getUserPage(),
                      pywikibot.Page(self.site, 'Benutzer:Xqt'))
     self.assertEqual(user.getUserPage(subpage='pwb'),
                      pywikibot.Page(self.site, 'Benutzer:Xqt/pwb'))
     self.assertEqual(user.getUserTalkPage(),
                      pywikibot.Page(self.site, 'Benutzer Diskussion:Xqt'))
     self.assertEqual(
         user.getUserTalkPage(subpage='pwb'),
         pywikibot.Page(self.site, 'Benutzer Diskussion:Xqt/pwb'))
     self.assertTrue(user.is_thankable)
     contribs = user.contributions(total=10)
     self.assertLength(list(contribs), 10)
     self.assertTrue(all(
         isinstance(contrib, tuple) for contrib in contribs))
     self.assertTrue(
         all('user' in contrib and contrib['user'] == user.username
             for contrib in contribs))
     self.assertIn('user', user.groups())
     self.assertIn('edit', user.rights())
Example #3
0
 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())
Example #4
0
 def test_registered_user_without_timestamp(self):
     """Test registered user when registration timestamp is None."""
     user = User(self.site, 'Ulfb')
     self.assertTrue(user.isRegistered())
     self.assertFalse(user.isAnonymous())
     self.assertIsNone(user.registration())
     self.assertIsNone(user.getprops()['registration'])
     self.assertGreater(user.editCount(), 0)
     self.assertIn('userid', user.getprops())
Example #5
0
 def test_unregistered_user(self):
     """Test unregistered user."""
     user = User(self.site, 'This user name is not registered yet')
     self.assertEqual(user.name(), user.username)
     self.assertEqual(user.title(withNamespace=False), user.username)
     self.assertFalse(user.isRegistered())
     self.assertFalse(user.isAnonymous())
     self.assertIsNone(user.registration())
     self.assertFalse(user.isEmailable())
     self.assertIn('missing', user.getprops())
Example #6
0
 def test_anonymous_user(self):
     """Test registered user."""
     user = User(self.site, '123.45.67.89')
     self.assertEqual(user.name(), user.username)
     self.assertEqual(user.title(withNamespace=False), user.username)
     self.assertFalse(user.isRegistered())
     self.assertTrue(user.isAnonymous())
     self.assertIsNone(user.registration())
     self.assertFalse(user.isEmailable())
     self.assertIn('invalid', user.getprops())
Example #7
0
 def test_invalid_user(self):
     """Test invalid user."""
     user = User(self.site, 'Invalid char\x9f in Name')
     self.assertEqual(user.name(), user.username)
     self.assertEqual(user.title(withNamespace=False), user.username)
     self.assertFalse(user.isRegistered())
     self.assertFalse(user.isAnonymous())
     self.assertIsNone(user.registration())
     self.assertFalse(user.isEmailable())
     self.assertIn('invalid', user.getprops())
Example #8
0
 def test_registered_user(self):
     """Test registered user."""
     user = User(self.site, 'Xqt')
     self.assertEqual(user.name(), user.username)
     self.assertEqual(user.title(withNamespace=False), user.username)
     self.assertTrue(user.isRegistered())
     self.assertFalse(user.isAnonymous())
     self.assertIsInstance(user.registration(), pywikibot.Timestamp)
     self.assertGreater(user.editCount(), 0)
     self.assertFalse(user.isBlocked())
     self.assertTrue(user.isEmailable())
     self.assertIn('userid', user.getprops())
Example #9
0
 def test_unregistered_user(self):
     """Test unregistered user."""
     user = User(self.site, 'This user name is not registered yet')
     with suppress_warnings('pywikibot.page.User.name', DeprecationWarning):
         self.assertEqual(user.name(), user.username)
     self.assertEqual(user.title(withNamespace=False), user.username)
     self.assertFalse(user.isRegistered())
     self.assertFalse(user.isAnonymous())
     self.assertIsNone(user.registration())
     self.assertFalse(user.isEmailable())
     self.assertEqual(user.gender(), 'unknown')
     self.assertIn('missing', user.getprops())
 def test_logevents(self):
     """Test the User.logevents() method."""
     mysite = self.get_site()
     user = User(mysite, mysite.user())
     le = list(user.logevents(total=10))
     if not le:
         self.skipTest('User {0} has no logevents on site {1}.'.format(
             mysite.user(), mysite))
     self.assertLessEqual(len(le), 10)
     last = le[0]
     self.assertTrue(all(event.user() == user.username for event in le))
     self.assertEqual(last, user.last_event)
Example #11
0
 def test_invalid_user(self):
     """Test invalid user."""
     user = User(self.site, 'Invalid char\x9f in Name')
     with suppress_warnings('pywikibot.page.User.name', DeprecationWarning):
         self.assertEqual(user.name(), user.username)
     self.assertEqual(user.title(withNamespace=False), user.username)
     self.assertFalse(user.isRegistered())
     self.assertFalse(user.isAnonymous())
     self.assertIsNone(user.registration())
     self.assertFalse(user.isEmailable())
     self.assertEqual(user.gender(), 'unknown')
     self.assertIn('invalid', user.getprops())
Example #12
0
 def test_anonymous_user(self):
     """Test registered user."""
     user = User(self.site, '123.45.67.89')
     with suppress_warnings('pywikibot.page.User.name', DeprecationWarning):
         self.assertEqual(user.name(), user.username)
     self.assertEqual(user.title(with_ns=False), user.username)
     self.assertFalse(user.isRegistered())
     self.assertTrue(user.isAnonymous())
     self.assertIsNone(user.registration())
     self.assertFalse(user.isEmailable())
     self.assertEqual(user.gender(), 'unknown')
     self.assertIn('invalid', user.getprops())
     self.assertFalse(user.is_thankable)
Example #13
0
 def test_registered_user(self):
     """Test registered user."""
     user = User(self.site, 'Xqt')
     with suppress_warnings('pywikibot.page.User.name', DeprecationWarning):
         self.assertEqual(user.name(), user.username)
     self.assertEqual(user.title(withNamespace=False), user.username)
     self.assertTrue(user.isRegistered())
     self.assertFalse(user.isAnonymous())
     self.assertIsInstance(user.registration(), pywikibot.Timestamp)
     self.assertGreater(user.editCount(), 0)
     self.assertFalse(user.isBlocked())
     self.assertTrue(user.isEmailable())
     self.assertEqual(user.gender(), 'unknown')
     self.assertIn('userid', user.getprops())
Example #14
0
 def _thanks_for_month(self, year, month, good_data, min_actions=1):
     """Test the thanks report for a given month."""
     bot = ThanksReportBot(year=year,
                           month=month,
                           minimum_actions=min_actions)
     bot.site = pywikibot.Site(fam=self.family, code=self.code)
     (good_thankers, good_thankees_with_strings) = good_data
     good_thankees = {}
     for k, v in good_thankees_with_strings.items():
         good_thankees[User(bot.site, k)] = v
     (pulled_thankers, pulled_thankees) = bot.gather()
     self.assertDictContainsSubset(good_thankers, pulled_thankers,
                                   'Bad thankers report')
     self.assertDictContainsSubset(good_thankees, pulled_thankees,
                                   'Bad thankees report')
Example #15
0
 def test_autoblocked_user_with_namespace(self):
     """Test autoblocked user."""
     user = User(self.site, 'User:#1242976')
     self.assertEqual('#1242976', user.username)
     self.assertEqual(user.name(), user.username)
     self.assertEqual(user.title(withNamespace=False), user.username[1:])
     self.assertFalse(user.isRegistered())
     self.assertFalse(user.isAnonymous())
     self.assertIsNone(user.registration())
     self.assertFalse(user.isEmailable())
     self.assertIn('invalid', user.getprops())
     self.assertTrue(user._isAutoblock)
     self.assertRaisesRegex(AutoblockUser, 'This is an autoblock ID',
                            user.getUserPage)
     self.assertRaisesRegex(AutoblockUser, 'This is an autoblock ID',
                            user.getUserTalkPage)
 def test_contribution(self):
     """Test the User.usercontribs() method."""
     mysite = self.get_site()
     user = User(mysite, mysite.user())
     uc = list(user.contributions(total=10))
     if not uc:
         self.skipTest('User {0} has no contributions on site {1}.'.format(
             mysite.user(), mysite))
     self.assertLessEqual(len(uc), 10)
     last = uc[0]
     for contrib in uc:
         self.assertIsInstance(contrib, tuple)
         self.assertLength(contrib, 4)
         p, i, t, c = contrib
         self.assertIsInstance(p, Page)
         self.assertIsInstance(i, int)
         self.assertIsInstance(t, Timestamp)
         self.assertIsInstance(c, StringTypes)
     self.assertEqual(last, user.last_edit)
 def test_autoblocked_user_with_namespace(self):
     """Test autoblocked user."""
     # Suppress output: This is an autoblock ID, you can only use to unblock
     with patch.object(pywikibot, 'output'):
         user = User(self.site, 'User:#1242976')
     self.assertEqual('#1242976', user.username)
     with suppress_warnings('pywikibot.page.User.name is deprecated'):
         self.assertEqual(user.name(), user.username)
     self.assertEqual(user.title(with_ns=False), user.username[1:])
     self.assertFalse(user.isRegistered())
     self.assertFalse(user.isAnonymous())
     self.assertIsNone(user.registration())
     self.assertFalse(user.isEmailable())
     self.assertIn('invalid', user.getprops())
     self.assertTrue(user._isAutoblock)
     self.assertRaisesRegex(AutoblockUser, 'This is an autoblock ID',
                            user.getUserPage)
     self.assertRaisesRegex(AutoblockUser, 'This is an autoblock ID',
                            user.getUserTalkPage)
Example #18
0
 def test_autoblocked_user(self):
     """Test autoblocked user."""
     with patch.object(pywikibot, 'output') as p:
         user = User(self.site, '#1242976')
     p.assert_called_once_with(
         'This is an autoblock ID, you can only use to unblock it.')
     self.assertEqual('#1242976', user.username)
     self.assertEqual(user.title(with_ns=False), user.username[1:])
     self.assertFalse(user.isRegistered())
     self.assertFalse(user.isAnonymous())
     self.assertIsNone(user.registration())
     self.assertFalse(user.isEmailable())
     self.assertIn('invalid', user.getprops())
     self.assertTrue(user._isAutoblock)
     with self.assertRaisesRegex(AutoblockUserError,
                                 'This is an autoblock ID'):
         user.getUserPage()
     with self.assertRaisesRegex(AutoblockUserError,
                                 'This is an autoblock ID'):
         user.getUserTalkPage()
 def test_invalid_user(self):
     """Test invalid user."""
     user = User(self.site, 'Invalid char\x9f in Name')
     self._tests_unregistered_user(user)
     self.assertFalse(user.isAnonymous())
 def test_unregistered_user(self):
     """Test unregistered user."""
     user = User(self.site, 'This user name is not registered yet')
     self._tests_unregistered_user(user, prop='missing')
     self.assertFalse(user.isAnonymous())
 def test_anonymous_user(self):
     """Test registered user."""
     user = User(self.site, '123.45.67.89')
     self._tests_unregistered_user(user)
     self.assertTrue(user.isAnonymous())
Example #22
0
 def test_locked_user(self):
     """Test global lock."""
     user = User(self.site, 'TonjaHeritage2')
     self.assertTrue(user.is_locked())
 def test_bot_user(self):
     """Test bot user."""
     user = User(self.site, 'Xqbot')
     self.assertIn('bot', user.groups())
     self.assertFalse(user.is_thankable)
Example #24
0
import datetime

import pywikibot
from dateutil.relativedelta import relativedelta
from pywikibot import User


site = pywikibot.Site('ja')
sysops = []
no_edit_sysops = []
no_event_sysops = []
three_month_ago: datetime.datetime = datetime.datetime.utcnow() - relativedelta(months=3)

for s in site.allusers(group='sysop'):
    sysops.append(User(site, s['name']))

for s in sysops:
    last_edit = s.last_edit
    if last_edit and last_edit[2] < three_month_ago:
        no_edit_sysops.append(s)

for s in no_edit_sysops:
    last_event = s.last_event
    if last_event and last_event.timestamp() < three_month_ago:
        no_event_sysops.append(s)

print(no_event_sysops)
input()
Example #25
0
site = pywikibot.Site('ja')
json = {
    'sysops': [],
    'rollbackers': [],
    'eliminators': [],
    'interfaceAdmins': [],
    'lastUpdate': ''
}
rolls = [('sysop', 'sysops'), ('rollbacker', 'rollbackers'),
         ('eliminator', 'eliminators'), ('interface-admin', 'interfaceAdmins')]

for s, p in rolls:
    users = []
    for u in site.allusers(group=s):
        users.append(User(site, u['name']))

    for u in users:
        if u.username == '編集フィルター':
            continue

        try:
            last_edit = u.last_edit
            last_event = u.last_event
        except HiddenKeyError:
            pass

        data = {
            'name':
            u.username,
            'lastEditId':
 def _is_user_blocked(self, user):
     try:
         return self._user_blocks[user]
     except KeyError:
         self._user_blocks[user] = User(self._site, user).is_blocked()
         return self._user_blocks[user]