Mpaa has uploaded a new change for review.
https://gerrit.wikimedia.org/r/242347
Change subject: proofreadpage.py: add IndexPage.get_page_from_number()
......................................................................
proofreadpage.py: add IndexPage.get_page_from_number()
Add an additional function to retrieve mapping info between page and
page numbers (and related tests)
Rename internal function from _get_labels() to _get_page_mappings() as
purpose is not restricted to labels only.
Fix an error in tests and errors in docstrings.
Change-Id: I9eed8035b02b7c7893eebaf68ed480a468f69293
---
M pywikibot/proofreadpage.py
M tests/proofreadpage_tests.py
2 files changed, 28 insertions(+), 8 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core
refs/changes/47/242347/1
diff --git a/pywikibot/proofreadpage.py b/pywikibot/proofreadpage.py
index a14e2f2..8873cd7 100644
--- a/pywikibot/proofreadpage.py
+++ b/pywikibot/proofreadpage.py
@@ -374,7 +374,7 @@
self._labels_from_page_number = {}
self._labels_from_page = {}
- def _get_page_labels(self):
+ def _get_page_mappings(self):
"""Associate label and number for each page linked to the index."""
self._parsed_text = self._get_parsed_page()
self._soup = BeautifulSoup(self._parsed_text, 'html.parser')
@@ -433,7 +433,7 @@
@rtype: unicode string
"""
if not self._labels_from_page:
- self._get_page_labels()
+ self._get_page_mappings()
try:
return self._labels_from_page[page]
@@ -450,7 +450,7 @@
@rtype: unicode string
"""
if not self._labels_from_page_number:
- self._get_page_labels()
+ self._get_page_mappings()
try:
return self._labels_from_page_number[page_number]
@@ -462,7 +462,7 @@
"""Helper function to get info from label."""
# Convert label to string if an integer is passed.
if not mapping_dict:
- self._get_page_labels()
+ self._get_page_mappings()
if isinstance(label, int):
label = str(label)
@@ -478,7 +478,7 @@
There is a 1-to-many correspondence (a label can be the same for
several pages).
- @return: list containing page numbers corresponding to page label.
+ @return: set containing page numbers corresponding to page label.
"""
return self._get_from_label(self._page_numbers_from_label, label)
@@ -488,6 +488,21 @@
There is a 1-to-many correspondence (a label can be the same for
several pages).
- @return: list containing pages corresponding to page label.
+ @return: set containing pages corresponding to page label.
"""
return self._get_from_label(self._pages_from_label, label)
+
+ def get_page_from_number(self, page_number):
+ """Return a page object from page number.
+
+ @param page_number: int
+ @return: page
+ @rtype: page object
+ """
+ if not self._page_from_numbers:
+ self._get_page_mappings()
+
+ try:
+ return self._page_from_numbers[page_number]
+ except KeyError:
+ raise KeyError('Invalid page number: %s.' % page_number)
diff --git a/tests/proofreadpage_tests.py b/tests/proofreadpage_tests.py
index b16ec0e..25357fa 100644
--- a/tests/proofreadpage_tests.py
+++ b/tests/proofreadpage_tests.py
@@ -345,7 +345,7 @@
# Error if page does not exists.
self.assertRaises(KeyError, index_page.get_label_from_page, None)
- def test_get_page_number(self, key):
+ def test_get_page_and_number(self, key):
"""Test IndexPage page get_page_number functions."""
data = self.sites[key]
index_page = IndexPage(self.site, self.sites[key]['index'])
@@ -380,7 +380,12 @@
n = index_page._numbers_from_page[p]
self.assertEqual(index_page._page_from_numbers[n], p)
for n in num_set:
- n = index_page._page_from_numbers[p]
+ p = index_page._page_from_numbers[n]
+ self.assertEqual(index_page._numbers_from_page[p], n)
+
+ # Test get_page_from_number.
+ for n in num_set:
+ p = index_page.get_page_from_number(n)
self.assertEqual(index_page._numbers_from_page[p], n)
def test_page_number_mapping(self, key):
--
To view, visit https://gerrit.wikimedia.org/r/242347
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9eed8035b02b7c7893eebaf68ed480a468f69293
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Mpaa <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits