jenkins-bot has submitted this change and it was merged.

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(-)

Approvals:
  XZise: Looks good to me, approved
  jenkins-bot: Verified



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: merged
Gerrit-Change-Id: Ia4f51add0b01ab29a61c1081f8c7efb403dd2c18
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: John Vandenberg <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: XZise <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to