From 935d6067d30b891d6d0c5d7bd7bd2579af5c6536 Mon Sep 17 00:00:00 2001 From: Taras Lehinevych Date: Thu, 21 Jun 2018 21:30:46 +0300 Subject: [PATCH 1/3] fix travis badge and version in doc --- docs/source/conf.py | 6 +++--- docs/source/index.rst | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index ca9544e..b4a62ba 100755 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -20,7 +20,7 @@ import sys sys.path.insert(0, os.path.abspath('../..')) from datetime import datetime - +from mediawikiapi.version import __version__ as version # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. @@ -57,9 +57,9 @@ # built documents. # # The short X.Y version. -version = u'1.1' +# version = u'1.1.2' # The full version, including alpha/beta/rc tags. -release = u'1.0' +release = u'1.0.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/source/index.rst b/docs/source/index.rst index d7a3a80..f02b3c8 100755 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -12,7 +12,7 @@ Release v\ |version|. :target: https://pypi.python.org/pypi/mediawikiapi .. image:: https://travis-ci.org/lehinevych/MediaWikiAPI.svg?branch=master - :target: https://travis-ci.org/leginevych/MediaWikiAPI + :target: https://travis-ci.org/lehinevych/MediaWikiAPI .. image:: https://img.shields.io/github/issues/lehinevych/MediaWikiAPI.svg :target: https://github.com/lehinevych/MediaWikiAPI/issues From ca53b929a5953049f672a9e2e72f3bd83119698a Mon Sep 17 00:00:00 2001 From: Taras Lehinevych Date: Fri, 22 Jun 2018 11:41:42 +0300 Subject: [PATCH 2/3] add category members --- mediawikiapi/mediawikiapi.py | 68 +++++++++++++++++++++++++++--------- tests/page_test.py | 12 ++++++- tests/request_mock_data.py | 6 ++-- 3 files changed, 66 insertions(+), 20 deletions(-) diff --git a/mediawikiapi/mediawikiapi.py b/mediawikiapi/mediawikiapi.py index deee673..cfc19f9 100755 --- a/mediawikiapi/mediawikiapi.py +++ b/mediawikiapi/mediawikiapi.py @@ -212,24 +212,58 @@ def page(self, title=None, pageid=None, auto_suggest=True, redirect=True, preloa raise ValueError("Either a title or a pageid must be specified") def languages(self): - ''' - List all the currently supported language prefixes (usually ISO language code). - - Can be inputted to WikipediaPage.conf to change the Mediawiki that `wikipedia` requests - results from. - - Returns: dict of : pairs. To get just a list of prefixes, - use `wikipedia.languages().keys()`. - ''' - response = self.session.request({ - 'meta': 'siteinfo', - 'siprop': 'languages' - }, self.config) - languages = response['query']['languages'] - return { - lang['code']: lang['*'] - for lang in languages + ''' + List all the currently supported language prefixes (usually ISO language code). + + Can be inputted to WikipediaPage.conf to change the Mediawiki that `wikipedia` requests + results from. + + Returns: dict of : pairs. To get just a list of prefixes, + use `wikipedia.languages().keys()`. + ''' + response = self.session.request({ + 'meta': 'siteinfo', + 'siprop': 'languages' + }, self.config) + languages = response['query']['languages'] + return { + lang['code']: lang['*'] + for lang in languages + } + + def category_members(self, title=None, pageid=None, cmlimit=10, cmtype='page'): + ''' + Get list of page titles belonging to a category. + Keyword arguments: + + * title - category title. Cannot be used together with "pageid" + * pageid - page id of category page. Cannot be used together with "title" + * cmlimit - the maximum number of titles to return + * cmtype - which type of page to include. ("page", "subcat", or "file") + ''' + if title is not None and pageid is not None: + raise ValueError("Please specify only a category or only a pageid, only one param can be specified") + elif title is not None: + query_params = { + 'list': 'categorymembers', + 'cmtitle': 'Category:{}'.format(title), + 'cmlimit': str(cmlimit), + 'cmtype': cmtype } + elif pageid is not None: + query_params = { + 'list': 'categorymembers', + 'cmpageid': str(pageid), + 'cmlimit': str(cmlimit), + 'cmtype': cmtype + } + else: + raise ValueError("Either a category or a pageid must be specified") + + response = self.session.request(query_params, self.config) + if 'error' in response: + raise ValueError(response['error'].get('info')) + return [member['title'] for member in response['query']['categorymembers']] def donate(self): ''' diff --git a/tests/page_test.py b/tests/page_test.py index d1317f1..b3e3994 100755 --- a/tests/page_test.py +++ b/tests/page_test.py @@ -31,7 +31,6 @@ def test_redirect_true(self): def test_redirect_false(self): """Test that page raises an error on a redirect when redirect == False.""" mp = api.page("Template:cn", auto_suggest=False, redirect=False) - # self.assertRaises(mediawikiapi.RedirectError, mp) self.assertIsInstance(mp, mediawikiapi.WikipediaPage) def test_redirect_no_normalization(self): @@ -189,3 +188,14 @@ def test_pageprops(self): """Test pageprops of a page""" self.assertEqual(self.celtuce.pageprops, mock_data['data']["celtuce.pageprops"]) self.assertEqual(self.cyclone.pageprops, mock_data['data']["cyclone.pageprops"]) + + def test_category_members(self): + """Test category members""" + self.assertEqual(api.category_members(title='Physics'), mock_data['data']["category_members_physics"]) + self.assertEqual(api.category_members(pageid=692318), mock_data['data']["category_members_physics"]) + with self.assertRaises(ValueError): + api.category_members(title='Wikipedia', pageid=6923181) + with self.assertRaises(ValueError): + api.category_members(pageid=6923181) + with self.assertRaises(ValueError): + api.category_members(title='') diff --git a/tests/request_mock_data.py b/tests/request_mock_data.py index 0d9e270..6c2afec 100755 --- a/tests/request_mock_data.py +++ b/tests/request_mock_data.py @@ -79,8 +79,8 @@
  • ^ a b c "Celtuce, 'Wo Sun'". seedaholic.com. Retrieved 28 January 2017. 
  • -