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

Reply via email to