John Vandenberg has uploaded a new change for review.
https://gerrit.wikimedia.org/r/186619
Change subject: Cache sites with a conflict
......................................................................
Cache sites with a conflict
Change-Id: I5ae3112272f260517ef68e2d8981c4b578359d23
---
M pywikibot/interwiki_graph.py
M tests/interwiki_graph_tests.py
2 files changed, 35 insertions(+), 5 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core
refs/changes/19/186619/1
diff --git a/pywikibot/interwiki_graph.py b/pywikibot/interwiki_graph.py
index 5e184a4..8bad403 100644
--- a/pywikibot/interwiki_graph.py
+++ b/pywikibot/interwiki_graph.py
@@ -7,6 +7,9 @@
__version__ = '$Id$'
#
+import collections
+import itertools
+import sys
import threading
try:
@@ -102,6 +105,32 @@
return (u'"\"%s:%s\""' % (page.site.language(),
page.title())).encode('utf-8')
+ def _octagon_site_set(self):
+ """Build a list of sites with more than one valid page."""
+ page_list = self.subject.foundIn.keys()
+ # Only track sites of normal pages
+ each_site = [
+ page.site for page in page_list
+ if page.exists() and not page.isRedirectPage()
+ ]
+
+ if sys.version_info >= (2, 7):
+ return set(x[0] for x in itertools.takewhile(
+ lambda x: x[1] > 1,
+ collections.Counter(each_site).most_common()))
+ else:
+ # collections.Counter doesnt exist in py2.6
+ all_sites = set()
+ multiple_page_sites = set()
+
+ for site in each_site:
+ if site in all_sites:
+ multiple_page_sites.add(site)
+ else:
+ all_sites.add(site)
+
+ return multiple_page_sites
+
def addNode(self, page):
"""Add a node for page."""
node = pydot.Node(self.getLabel(page), shape='rectangle')
@@ -120,11 +149,7 @@
if page.namespace() != self.subject.originPage.namespace():
node.set_color('green')
node.set_style('filled,bold')
- # if we found more than one valid page for this language:
- # TODO: Only iterate through at most 2 elements
- if len([p for p in self.subject.foundIn.keys()
- if p.site == page.site and p.exists() and
- not p.isRedirectPage()]) > 1: # noqa
+ if page.site in self.octagon_sites:
# mark conflict by octagonal node
node.set_shape('octagon')
self.graph.add_node(node)
@@ -183,6 +208,9 @@
# create empty graph
self.graph = pydot.Dot()
# self.graph.set('concentrate', 'true')
+
+ self.octagon_sites = self._octagon_site_set()
+
for page in self.subject.foundIn.keys():
# a node for each found page
self.addNode(page)
diff --git a/tests/interwiki_graph_tests.py b/tests/interwiki_graph_tests.py
index ca096f0..75eef7d 100644
--- a/tests/interwiki_graph_tests.py
+++ b/tests/interwiki_graph_tests.py
@@ -94,6 +94,8 @@
drawer = interwiki_graph.GraphDrawer(data)
+ self.assertEqual(set([en.site]), drawer._octagon_site_set())
+
drawer.createGraph()
nodes = drawer.graph.obj_dict['nodes']
--
To view, visit https://gerrit.wikimedia.org/r/186619
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I5ae3112272f260517ef68e2d8981c4b578359d23
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: John Vandenberg <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits