John Vandenberg has uploaded a new change for review.
https://gerrit.wikimedia.org/r/236733
Change subject: Add deprecated Site.logpages; add tag to logevents
......................................................................
Add deprecated Site.logpages; add tag to logevents
logpages was the method name in compat for what is now logevents.
Add logevents support for parameter tag, which was functional in
compat.
Bug: T78107
Change-Id: Ia4f51add0b01ab29a61c1081f8c7efb403dd2c18
---
M pywikibot/site.py
M tests/site_tests.py
2 files changed, 95 insertions(+), 8 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core
refs/changes/33/236733/1
diff --git a/pywikibot/site.py b/pywikibot/site.py
index 323fcf2..0cd666f 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -4075,20 +4075,35 @@
return iugen
def logevents(self, logtype=None, user=None, page=None, namespace=None,
- start=None, end=None, reverse=False, step=None, total=None):
+ start=None, end=None, reverse=False, tag=None,
+ step=None, total=None):
"""Iterate all log entries.
@param logtype: only iterate entries of this type (see wiki
documentation for available types, which will include "block",
"protect", "rights", "delete", "upload", "move", "import",
"patrol", "merge")
+ @param logtype: basestring
@param user: only iterate entries that match this user name
+ @type user: basestring
@param page: only iterate entries affecting this page
+ @type page: Page or basestring
@param namespace: namespace to retrieve logevents from
@type namespace: int or Namespace
@param start: only iterate entries from and after this Timestamp
+ @type start: Timestamp or ISO date string
@param end: only iterate entries up to and through this Timestamp
+ @type end: Timestamp or ISO date string
@param reverse: if True, iterate oldest entries first (default: newest)
+ @type reverse: bool
+ @param tag: only iterate entries tagged with this tag
+ @type tag: basestring
+ @param step: request batch size
+ @type step: int
+ @param total: maximum number of events to iterate
+ @type total: int
+ @rtype: iterable
+
@raises KeyError: the namespace identifier was not resolved
@raises TypeError: the namespace identifier has an inappropriate
type such as bool, or an iterable with more than one namespace
@@ -4103,7 +4118,7 @@
if user is not None:
legen.request["leuser"] = user
if page is not None:
- legen.request["letitle"] = page.title(withSection=False)
+ legen.request["letitle"] = page
if start is not None:
legen.request["lestart"] = start
if end is not None:
@@ -4112,14 +4127,43 @@
legen.request["ledir"] = "newer"
if namespace:
legen.request["lenamespace"] = namespace
+ if tag:
+ # Supported in version 1.16+; earlier sites will cause APIError
+ legen.request['letag'] = tag
+
return legen
@deprecated('APISite.logevents()')
- def logpages(self, number=50, mode='', title=None, user=None, repeat=False,
+ @deprecated_args(repeat=None)
+ def logpages(self, number=50, mode=None, title=None, user=None,
namespace=[], start=None, end=None, tag=None, newer=False,
dump=False, offset=None):
- # TODO: implement using logevents
- raise NotImplementedError
+ """
+ Iterate log pages. DEPRECATED.
+
+ When dump is enabled, the raw API dict is returned.
+
+ @rtype: tuple of Page, str, int, str
+ """
+ if offset:
+ assert not start
+ assert isinstance(offset, int)
+ offset = datetime.timedelta(hours=offset)
+ start = pywikibot.Timestamp.utcnow() - offset
+
+ gen = self.logevents(logtype=mode, page=title, tag=tag,
+ user=user, namespace=namespace,
+ start=start, end=end, reverse=newer,
+ total=number)
+
+ for entry in gen:
+ if dump:
+ yield entry.data
+ else:
+ yield (entry.page(),
+ entry.user(),
+ int(entry.timestamp().totimestampformat()),
+ entry.comment())
@deprecated_args(returndict=None, nobots=None, rcshow=None, rcprop=None,
rctype='changetype', revision=None, repeat=None,
diff --git a/tests/site_tests.py b/tests/site_tests.py
index 9f304fd..525f418 100644
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -984,7 +984,17 @@
def testLogEvents(self):
"""Test the site.logevents() method."""
mysite = self.get_site()
- mainpage = self.get_mainpage()
+ for entry in mysite.logevents(user=mysite.user(), total=3):
+ self.assertEqual(entry.user(), mysite.user())
+
+
+class TestLogEvents(DefaultSiteTestCase):
+
+ """Test logevents methods."""
+
+ def test_logevents(self):
+ """Test logevents method."""
+ mysite = self.get_site()
le = list(mysite.logevents(total=10))
self.assertLessEqual(len(le), 10)
self.assertTrue(all(isinstance(entry, pywikibot.logentries.LogEntry)
@@ -993,11 +1003,18 @@
"move", "import", "patrol", "merge"):
for entry in mysite.logevents(logtype=typ, total=3):
self.assertEqual(entry.type(), typ)
+
+ def test_logevents_mainpage(self):
+ """Test logevents method on the main page."""
+ mysite = self.get_site()
+ mainpage = self.get_mainpage()
for entry in mysite.logevents(page=mainpage, total=3):
self.assertEqual(entry.page().title(), mainpage.title())
self.assertEqual(entry.page(), mainpage)
- for entry in mysite.logevents(user=mysite.user(), total=3):
- self.assertEqual(entry.user(), mysite.user())
+
+ def test_logevents_timestamp(self):
+ """Test logevents method."""
+ mysite = self.get_site()
for entry in mysite.logevents(
start=pywikibot.Timestamp.fromISOformat('2008-09-01T00:00:01Z'), total=5):
self.assertIsInstance(entry, pywikibot.logentries.LogEntry)
@@ -1031,6 +1048,32 @@
reverse=True, total=5)
+class TestLogPages(DefaultSiteTestCase, DeprecationTestCase):
+
+ """Test logpages methods."""
+
+ def test_logpages(self):
+ """Test the deprecated site.logpages() method."""
+ le = list(self.site.logpages(number=10))
+ self.assertOneDeprecation()
+ self.assertLessEqual(len(le), 10)
+ for entry in le:
+ self.assertIsInstance(entry, tuple)
+ self.assertIsInstance(entry[0], pywikibot.Page)
+ self.assertIsInstance(entry[1], basestring)
+ self.assertIsInstance(entry[2], int)
+ self.assertIsInstance(entry[3], basestring)
+
+ def test_logpages_dump(self):
+ """Test the deprecated site.logpages() method using dump mode."""
+ le = list(self.site.logpages(number=10, dump=True))
+ self.assertOneDeprecation()
+ self.assertLessEqual(len(le), 10)
+ for entry in le:
+ self.assertIsInstance(entry, dict)
+ self.assertIn('title', entry)
+
+
class TestRecentChanges(DefaultSiteTestCase):
"""Test recentchanges method."""
--
To view, visit https://gerrit.wikimedia.org/r/236733
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia4f51add0b01ab29a61c1081f8c7efb403dd2c18
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: John Vandenberg <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits