jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/358236 )
Change subject: [IMPR] Add exception for -namepace option
......................................................................
[IMPR] Add exception for -namepace option
- -namespace option can be used to exclude namespaces by a preleading "not:"
Example:
-ns:not:2,3 uses all namespaces of a given site except User and
User talk namespaces.
You may use ns:not: multiple times:
-ns:not:File
-ns:not:7
This excludes both File and File talk
You may mix normal namespace filter with not-filter
-ns:1,2,3,4,5,6
-ns:not:File
enables namespaces 1-5 only
- tests added
Bug: T167580
Change-Id: Ibe434d0e9f70b6e7bd97516cd64e1de0f6a98ab5
---
M pywikibot/pagegenerators.py
M tests/pagegenerators_tests.py
2 files changed, 72 insertions(+), 1 deletion(-)
Approvals:
Merlijn van Deen: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/pagegenerators.py b/pywikibot/pagegenerators.py
index c4be421..6690176 100644
--- a/pywikibot/pagegenerators.py
+++ b/pywikibot/pagegenerators.py
@@ -149,6 +149,11 @@
-ns:0,2,4
-ns:Help,MediaWiki
+ You may use a preleading "not" to exclude the namespace.
+ Examples:
+ -ns:not:2,3
+ -ns:not:Help,File
+
If used with -newpages/-random/-randomredirect,
-namespace/ns must be provided before
-newpages/-random/-randomredirect.
@@ -767,7 +772,19 @@
if not value:
value = pywikibot.input(
u'What namespace are you filtering on?')
- self._namespaces += value.split(",")
+ NOT_KEY = 'not:'
+ if value.startswith(NOT_KEY):
+ value = value[len(NOT_KEY):]
+ resolve = self.site.namespaces.resolve
+ not_ns = set(resolve(value.split(',')))
+ if not self._namespaces:
+ self._namespaces = list(
+ set(self.site.namespaces.values()) - not_ns)
+ else:
+ self._namespaces = list(
+ set(resolve(self._namespaces)) - not_ns)
+ else:
+ self._namespaces += value.split(",")
return True
elif arg == '-limit':
if not value:
diff --git a/tests/pagegenerators_tests.py b/tests/pagegenerators_tests.py
index 6eaca83..919f241 100755
--- a/tests/pagegenerators_tests.py
+++ b/tests/pagegenerators_tests.py
@@ -658,6 +658,60 @@
gf = pagegenerators.GeneratorFactory(site=self.get_site())
self.assertRaises(UnknownExtension, gf.handleArg, '-ql:2')
+ def test_one_excluded_namespaces(self):
+ """Test one excluded namespaces."""
+ gf = pagegenerators.GeneratorFactory(site=self.get_site())
+ gf.handleArg('-ns:not:2')
+ ns = set(range(16))
+ ns.remove(2)
+ self.assertTrue(ns.issubset(gf.namespaces))
+
+ def test_two_excluded_namespaces(self):
+ """Test two excluded namespaces."""
+ gf = pagegenerators.GeneratorFactory(site=self.get_site())
+ gf.handleArg('-ns:not:2')
+ gf.handleArg('-ns:not:Talk')
+ ns = set(range(16))
+ ns.remove(2)
+ ns.remove(1)
+ self.assertTrue(ns.issubset(gf.namespaces))
+
+ def test_two_excluded_named_namespaces(self):
+ """Test two excluded named namespaces."""
+ gf = pagegenerators.GeneratorFactory(site=self.get_site())
+ gf.handleArg('-ns:not:Talk,File')
+ ns = set(range(16))
+ ns.remove(1)
+ ns.remove(6)
+ self.assertTrue(ns.issubset(gf.namespaces))
+
+ def test_two_excluded_numeric_namespaces(self):
+ """Test two excluded namespaces delimited by
colon."""
+ gf = pagegenerators.GeneratorFactory(site=self.get_site())
+ gf.handleArg('-ns:not:1,6')
+ ns = set(range(16))
+ ns.remove(1)
+ ns.remove(6)
+ self.assertTrue(ns.issubset(gf.namespaces))
+
+ def test_mixed_namespaces_with_exclusion(self):
+ """Test mixed namespaces with exclusion."""
+ gf = pagegenerators.GeneratorFactory(site=self.get_site())
+ gf.handleArg('-ns:not:2,File')
+ gf.handleArg('-ns:not:3,4,5')
+ gf.handleArg('-ns:6,7')
+ ns = set(range(16))
+ for i in range(2, 6):
+ ns.remove(i)
+ self.assertTrue(ns.issubset(gf.namespaces))
+
+ def test_given_namespaces_with_exclusion(self):
+ """Test mixed namespaces with exclusion."""
+ gf = pagegenerators.GeneratorFactory(site=self.get_site())
+ gf.handleArg('-ns:1,2,3,4,5')
+ gf.handleArg('-ns:not:User')
+ self.assertEqual(gf.namespaces, set([1, 3, 4, 5]))
+
class TestItemClaimFilterPageGenerator(WikidataTestCase):
--
To view, visit
https://gerrit.wikimedia.org/r/358236
To unsubscribe, visit
https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ibe434d0e9f70b6e7bd97516cd64e1de0f6a98ab5
Gerrit-PatchSet: 2
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Magul <tomasz.magulski(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: jenkins-bot <>