{0.header}\n\n\n')
TEMPLATE_V2 = ('
'
'{0.header}')
def __init__(self, text: str | None = None) -> None:
"""Initializer."""
self._text = text or ''
self._has_div = True
m = self.p_header.search(self._text)
if m:
self.ql = int(m['ql'])
self.user = m['user']
self.header = m['header']
if not m['has_div']:
self._has_div = False
else:
self.ql = ProofreadPage.NOT_PROOFREAD
self.user = ''
self.header = ''
def __str__(self) -> str:
"""Return a string representation."""
if self._has_div:
return FullHeader.TEMPLATE_V1.format(self)
return FullHeader.TEMPLATE_V2.format(self)
class ProofreadPage(pywikibot.Page):
"""ProofreadPage page used in MediaWiki ProofreadPage extension."""
WITHOUT_TEXT = 0
NOT_PROOFREAD = 1
PROBLEMATIC = 2
PROOFREAD = 3
VALIDATED = 4
PROOFREAD_LEVELS = [
WITHOUT_TEXT,
NOT_PROOFREAD,
PROBLEMATIC,
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 = '
'
close_tag = ''
p_open = re.compile(r'
')
p_close = re.compile(r'( |\n\n\n)?')
p_close_no_div = re.compile('') # V2 page format.
# Wikimedia OCR utility
_WMFOCR_CMD = ('https://ocr.wmcloud.org/api.php?engine=tesseract&'
'langs[]={lang}&image={url_image}&uselang={lang}')
# googleOCR ocr utility
_GOCR_CMD = ('https://ocr.wmcloud.org/api.php?engine=google&'
'langs[]={lang}&image={url_image}')
_MULTI_PAGE_EXT = ['djvu', 'pdf']
_WMFOCR = 'wmfOCR'
_GOOGLE_OCR = 'googleOCR'
_OCR_CMDS = {_WMFOCR: _WMFOCR_CMD, _GOOGLE_OCR: _GOCR_CMD}
_OCR_METHODS = list(_OCR_CMDS)
def __init__(self, source: PageSourceType, title: str = '') -> None:
"""Instantiate a ProofreadPage object.
:raise UnknownExtensionError: source Site has no ProofreadPage
Extension.
"""
if not isinstance(source, pywikibot.site.BaseSite):
site = source.site
else:
site = source
super().__init__(source, title)
if self.namespace() != site.proofread_page_ns:
raise ValueError(f'Page {self.title()} must belong to '
f'{site.proofread_page_ns} namespace')
# Ensure that constants are in line with Extension values.
level_list = list(self.site.proofread_levels)
if level_list != self.PROOFREAD_LEVELS:
raise ValueError(f'QLs do not match site values: {level_list} != '
f'{self.PROOFREAD_LEVELS}')
self._base, self._base_ext, self._num = self._parse_title()
self._multi_page = self._base_ext in self._MULTI_PAGE_EXT
@property
def _fmt(self) -> str:
return self._FMT % ('