Hello PywikibotCommitWatcher,
I'd like you to do a code review. Please visit
https://gerrit.wikimedia.org/r/237622
to review the following change.
Change subject: Add _isempty caching attribute to Page ......................................................................
Add _isempty caching attribute to Page
Page.IsEmpty() is a somewhat heavy function and can be called several times for the same page. interwiki.py, for instance, does that. Adding the attribute _isempty allows caching of this value without the need for re-evaluation. The attribute is cleared when latest_revision_id is deleted for safety sake.
Change-Id: Ib68446a77f52f59440d9f50fef416b9bfdb39827 --- M pywikibot/page.py 1 file changed, 8 insertions(+), 5 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core refs/changes/22/237622/1
diff --git a/pywikibot/page.py b/pywikibot/page.py index 2ba2b0c..d0cd3a3 100644 --- a/pywikibot/page.py +++ b/pywikibot/page.py @@ -456,7 +456,7 @@ # * Old exceptions do not apply any more # * Deleting _revid to force reload # * Deleting _redirtarget, that info is now obsolete. - for attr in ['_redirtarget', '_getexception', '_revid']: + for attr in ['_redirtarget', '_getexception', '_revid', '_isempty']: if hasattr(self, attr): delattr(self, attr)
@@ -738,10 +738,13 @@
@rtype: bool """ - txt = self.get() - txt = textlib.removeLanguageLinks(txt, site=self.site) - txt = textlib.removeCategoryLinks(txt, site=self.site) - return len(txt) < 4 + if not hasattr(self, "_isempty"): + txt = self.get() + txt = textlib.removeLanguageLinks(txt, site=self.site) + txt = textlib.removeCategoryLinks(txt, site=self.site) + self._isempty = len(txt) < 4 + + return bool(self._isempty)
def isTalkPage(self): """Return True if this page is in any talk namespace."""
jenkins-bot has submitted this change and it was merged.
Change subject: [IMPROV] Optimize/remove unneeded calls to Page.isEmpty() ......................................................................
[IMPROV] Optimize/remove unneeded calls to Page.isEmpty()
A check for Page.isEmpty() is unnecessary as it will never be checked when it would yield True. A sequence of conditions was also optimized (quicker condition check first) when replacing links.
Change-Id: Ib68446a77f52f59440d9f50fef416b9bfdb39827 --- M scripts/interwiki.py 1 file changed, 1 insertion(+), 9 deletions(-)
Approvals: XZise: Looks good to me, approved jenkins-bot: Verified
diff --git a/scripts/interwiki.py b/scripts/interwiki.py index 1ace2bc..beaab4c 100755 --- a/scripts/interwiki.py +++ b/scripts/interwiki.py @@ -1453,14 +1453,6 @@ 'Try again with -restore.') sys.exit() iw = () - elif not page.isCategory() and page.isEmpty(): - globalvar.remove.append(unicode(page)) - if not globalvar.quiet: - pywikibot.output(u"NOTE: %s is empty; ignoring it and its interwiki links" - % page) - # Ignore the interwiki links - self.done.remove(page) - iw = ()
for link in iw: linkedPage = pywikibot.Page(link) @@ -1836,7 +1828,7 @@ except pywikibot.NoPage: pywikibot.output(u"Not editing %s: page does not exist" % page) raise SaveError(u'Page doesn't exist') - if page.isEmpty() and not page.isCategory(): + if not page.isCategory() and page.isEmpty(): pywikibot.output(u"Not editing %s: page is empty" % page) raise SaveError(u'Page is empty.')
pywikibot-commits@lists.wikimedia.org