jenkins-bot has submitted this change and it was merged.
Change subject: <div class="pagetext"> is now optional in ProofreadPage pages serialization ......................................................................
<div class="pagetext"> is now optional in ProofreadPage pages serialization
Detect usage of <div class="pagetext"> in ProofreadPage by looking at (preloaded) text. Parsing and page setup is then done accordingly.
Test of the old format is not possible as no site using old mode is known. If one is found, it can be addeed to test suite.
Bug: T138441, T133294 Change-Id: I292895f8edc56aa27475f9afd8732842a8e35fdc --- M pywikibot/proofreadpage.py M tests/proofreadpage_tests.py 2 files changed, 48 insertions(+), 18 deletions(-)
Approvals: John Vandenberg: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/proofreadpage.py b/pywikibot/proofreadpage.py index 6b6e684..4fdba01 100644 --- a/pywikibot/proofreadpage.py +++ b/pywikibot/proofreadpage.py @@ -12,7 +12,7 @@
""" # -# (C) Pywikibot team, 2015 +# (C) Pywikibot team, 2015-2016 # # Distributed under the terms of the MIT license. # @@ -39,21 +39,26 @@
p_header = re.compile( r'<pagequality level="(?P<ql>\d)" user="(?P<user>.*?)" />' - r'<div class="pagetext">(?P<header>.*)', + r'(?P<has_div><div class="pagetext">)?(?P<header>.*)', re.DOTALL)
- _template = ('<pagequality level="{0.ql}" user="{0.user}" />' - '<div class="pagetext">{0.header}\n\n\n') + TEMPLATE_V1 = ('<pagequality level="{0.ql}" user="{0.user}" />' + '<div class="pagetext">{0.header}\n\n\n') + TEMPLATE_V2 = ('<pagequality level="{0.ql}" user="{0.user}" />' + '{0.header}')
def __init__(self, text=None): """Constructor.""" self._text = text or '' + self._has_div = True
m = self.p_header.search(self._text) if m: self.ql = int(m.group('ql')) self.user = m.group('user') self.header = m.group('header') + if not m.group('has_div'): + self._has_div = False else: self.ql = ProofreadPage.NOT_PROOFREAD self.user = '' @@ -61,7 +66,10 @@
def __str__(self): """Return a string representation.""" - return self._template.format(self) + if self._has_div: + return FullHeader.TEMPLATE_V1.format(self) + else: + return FullHeader.TEMPLATE_V2.format(self)
class ProofreadPage(pywikibot.Page): @@ -79,6 +87,10 @@ PROOFREAD, VALIDATED, ] + + _FMT = ('{0.open_tag}{0._full_header}{0.close_tag}' + '{0._body}' + '{0.open_tag}{0._footer}%s{0.close_tag}')
open_tag = '<noinclude>' close_tag = '</noinclude>' @@ -103,6 +115,13 @@ raise ValueError('QLs do not match site values: %s != %s' % (self.site.proofread_levels.keys(), self.PROOFREAD_LEVELS)) + + @property + def _fmt(self): + if self._full_header._has_div: + return self._FMT % '</div>' + else: + return self._FMT % ''
@property def index(self): @@ -378,10 +397,7 @@
def _compose_page(self): """Compose Proofread Page text from header, body and footer.""" - fmt = ('{0.open_tag}{0._full_header}{0.close_tag}' - '{0._body}' - '{0.open_tag}{0._footer}</div>{0.close_tag}') - self._text = fmt.format(self) + self._text = self._fmt.format(self) return self._text
def _page_to_json(self): diff --git a/tests/proofreadpage_tests.py b/tests/proofreadpage_tests.py index 6087a89..18112a5 100644 --- a/tests/proofreadpage_tests.py +++ b/tests/proofreadpage_tests.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Tests for the proofreadpage module.""" # -# (C) Pywikibot team, 2015 +# (C) Pywikibot team, 2015-2016 # # Distributed under the terms of the MIT license. # @@ -106,6 +106,15 @@ 'title1': 'User:Popular Science Monthly Volume 1.djvu/12' }
+ class_pagetext_fmt = { + True: ('<div class="pagetext">\n\n\n', '</div>'), + False: ('', ''), + } + + fmt = ('<noinclude><pagequality level="1" user="{user}" />' + '{class_pagetext}</noinclude>' + '<noinclude>{references}{div_end}</noinclude>') + def test_valid_site_source(self): """Test ProofreadPage from valid Site as source.""" page = ProofreadPage(self.site, 'Page:dummy test page') @@ -167,21 +176,26 @@ def test_preload_from_not_existing_page(self): """Test ProofreadPage page decomposing/composing text.""" page = ProofreadPage(self.site, 'Page:dummy test page') + # Fetch page text to instantiate page._full_header, in order to allow + # for proper test result preparation. + page.text + class_pagetext, div = self.class_pagetext_fmt[page._full_header._has_div] self.assertEqual(page.text, - '<noinclude><pagequality level="1" user="%s" />' - '<div class="pagetext">\n\n\n</noinclude>' - '<noinclude><references/></div></noinclude>' - % self.site.username()) + self.fmt.format(user=self.site.username(), + class_pagetext=class_pagetext, + references='<references/>', + div_end=div))
def test_preload_from_empty_text(self): """Test ProofreadPage page decomposing/composing text.""" page = ProofreadPage(self.site, 'Page:dummy test page') page.text = '' + class_pagetext, div = self.class_pagetext_fmt[page._full_header._has_div] self.assertEqual(page.text, - '<noinclude><pagequality level="1" user="%s" />' - '<div class="pagetext">\n\n\n</noinclude>' - '<noinclude></div></noinclude>' - % self.site.username()) + self.fmt.format(user=self.site.username(), + class_pagetext=class_pagetext, + references='', + div_end=div))
def test_json_format(self): """Test conversion to json format."""
pywikibot-commits@lists.wikimedia.org