jenkins-bot has submitted this change and it was merged.
Change subject: [FIX] Logentries: Use the query's site argument ......................................................................
[FIX] Logentries: Use the query's site argument
The 'title' and 'new_title' methods of LogEntry and MoveEntry both don't use the site used to generate the log entries but the default site object.
This is a breaking change as LogEntry and LogEntryFactory now require a site parameter.
Bug: T75723 Change-Id: Ia965ce5c4733f9fef84d58f556dd4b1f5d46fc8b --- M pywikibot/data/api.py M pywikibot/logentries.py 2 files changed, 12 insertions(+), 8 deletions(-)
Approvals: John Vandenberg: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/data/api.py b/pywikibot/data/api.py index 8aa97b4..0400f5d 100644 --- a/pywikibot/data/api.py +++ b/pywikibot/data/api.py @@ -1689,7 +1689,7 @@ ListGenerator.__init__(self, "logevents", **kwargs)
from pywikibot import logentries - self.entryFactory = logentries.LogEntryFactory(logtype) + self.entryFactory = logentries.LogEntryFactory(self.site, logtype)
def result(self, pagedata): return self.entryFactory.create(pagedata) diff --git a/pywikibot/logentries.py b/pywikibot/logentries.py index 5a71ad9..5b35cd8 100644 --- a/pywikibot/logentries.py +++ b/pywikibot/logentries.py @@ -37,9 +37,10 @@ # Overriden in subclasses. _expectedType = None
- def __init__(self, apidata): + def __init__(self, apidata, site): """Initialize object from a logevent dict returned by MW API.""" self.data = LogDict(apidata) + self.site = site if self._expectedType is not None and self._expectedType != self.type(): raise Error("Wrong log type! Expecting %s, received %s instead." % (self._expectedType, self.type())) @@ -59,7 +60,7 @@ def title(self): """Page on which action was performed.""" if not hasattr(self, '_title'): - self._title = pywikibot.Page(pywikibot.Link(self.data['title'])) + self._title = pywikibot.Page(self.site, self.data['title']) return self._title
def type(self): @@ -88,9 +89,9 @@
_expectedType = 'block'
- def __init__(self, apidata): + def __init__(self, apidata, site): """Constructor.""" - super(BlockEntry, self).__init__(apidata) + super(BlockEntry, self).__init__(apidata, site) # see en.wikipedia.org/w/api.php?action=query&list=logevents&letype=block&lelimit=1&lestart=2009-03-04T00:35:07Z # When an autoblock is removed, the "title" field is not a page title # ( https://bugzilla.wikimedia.org/show_bug.cgi?id=17781 ) @@ -205,7 +206,7 @@ def new_title(self): """Return page object of the new title.""" if not hasattr(self, '_new_title'): - self._new_title = pywikibot.Page(pywikibot.Link(self.data['move']['new_title'])) + self._new_title = pywikibot.Page(self.site, self.data['move']['new_title']) return self._new_title
def suppressedredirect(self): @@ -261,15 +262,18 @@ 'newusers': NewUsersEntry }
- def __init__(self, logtype=None): + def __init__(self, site, logtype=None): """ Constructor.
+ @param site: The site on which the log entries are created. + @type site: BaseSite @param logtype: The log type of the log entries, if known in advance. If None, the Factory will fetch the log entry from the data to create each object. @type logtype: (letype) str : move/block/patrol/etc... """ + self._site = site if logtype is None: self._creator = self._createFromData else: @@ -286,7 +290,7 @@
@return: LogEntry object representing logdata """ - return self._creator(logdata) + return self._creator(logdata, self._site)
@staticmethod def _getEntryClass(logtype):
pywikibot-commits@lists.wikimedia.org