Nschaaf has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/330868 )

Change subject: (in progress) generic UI
......................................................................

(in progress) generic UI

Bug: T153443
Change-Id: Ie673c83ecfc76dffa037ea9c8331ad9ff712ed99
---
M recommendation/api/api.py
M recommendation/api/external_data/wikidata.py
M recommendation/data/recommendation.ini
M recommendation/data/recommendation.wsgi
R recommendation/web/static/rec-disclaimer.tag
R recommendation/web/static/rec-input.tag
R recommendation/web/static/rec-preview.tag
R recommendation/web/static/rec-recommendations.tag
R recommendation/web/static/rec-title.tag
M recommendation/web/templates/index.html
R recommendation/web/tool.py
M setup.py
12 files changed, 46 insertions(+), 39 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/research/recommendation-api 
refs/changes/68/330868/1

diff --git a/recommendation/api/api.py b/recommendation/api/api.py
index 3fc427e..4d27c29 100644
--- a/recommendation/api/api.py
+++ b/recommendation/api/api.py
@@ -5,7 +5,7 @@
 from flask_restplus import fields
 
 from recommendation.api import helper
-from recommendation.web import gapfinder
+from recommendation.web import tool
 
 api = helper.build_api('types', __name__, url_prefix='/types')
 
@@ -25,7 +25,7 @@
     def get(self):
         types = []
         for blue in flask.current_app.iter_blueprints():
-            if type(blue) is flask.Blueprint and blue not in (api.blueprint, 
gapfinder.gapfinder):
+            if type(blue) is flask.Blueprint and blue not in (api.blueprint, 
tool.gapfinder):
                 types.append(TypeSpec(
                     name=blue.name,
                     spec_path=flask.url_for(blue.name + '.spec')
diff --git a/recommendation/api/external_data/wikidata.py 
b/recommendation/api/external_data/wikidata.py
index 389216b..c3edd72 100644
--- a/recommendation/api/external_data/wikidata.py
+++ b/recommendation/api/external_data/wikidata.py
@@ -1,6 +1,7 @@
 import collections
 import logging
 import itertools
+from multiprocessing import dummy as multiprocessing
 
 from recommendation.utils import configuration
 from recommendation.api.external_data import fetcher
@@ -45,13 +46,19 @@
 
 def chunk_query_for_parameter(params, parameter, values):
     chunk_size = configuration.get_config_int('external_api_parameters', 
'wikidata_chunk_size')
-    items = []
 
+    param_groups = []
     for group in itertools.zip_longest(*[iter(values)] * chunk_size):
-        params[parameter] = '|'.join(item for item in group if item is not 
None)
-        items += query(params)
+        p = params.copy()
+        p[parameter] = '|'.join(item for item in group if item is not None)
+        param_groups.append(p)
 
-    return items
+    if param_groups:
+        with multiprocessing.Pool(processes=len(param_groups)) as pool:
+            result = pool.map(query, param_groups)
+        return list(itertools.chain(*result))
+    else:
+        return []
 
 
 def get_items_in_source_missing_in_target_by_titles(source, target, titles):
diff --git a/recommendation/data/recommendation.ini 
b/recommendation/data/recommendation.ini
index 09f2965..a5efceb 100644
--- a/recommendation/data/recommendation.ini
+++ b/recommendation/data/recommendation.ini
@@ -60,7 +60,7 @@
 embedding_path = /etc/recommendation/mini_embedding
 minimum_similarity = 0.5
 
-[gapfinder]
+[tool]
 resource_path = /srv/recommendation/resources
 default_search = related_articles
 
diff --git a/recommendation/data/recommendation.wsgi 
b/recommendation/data/recommendation.wsgi
index a7c9b51..9ad6481 100644
--- a/recommendation/data/recommendation.wsgi
+++ b/recommendation/data/recommendation.wsgi
@@ -3,7 +3,7 @@
 from recommendation.api.types.translation import translation
 from recommendation.api.types.related_articles import related_articles
 from recommendation.api import api
-from recommendation.web import gapfinder
+from recommendation.web import tool
 from recommendation.utils import logger
 
 logger.initialize_logging()
@@ -13,7 +13,7 @@
 app.register_blueprint(translation.api.blueprint)
 app.register_blueprint(translation.legacy.blueprint)
 app.register_blueprint(related_articles.api.blueprint)
-app.register_blueprint(gapfinder.gapfinder)
+app.register_blueprint(tool.tool)
 app.config['RESTPLUS_VALIDATE'] = True
 app.config['RESTPLUS_MASK_SWAGGER'] = False
 application = app
diff --git a/recommendation/web/static/gf-disclaimer.tag 
b/recommendation/web/static/rec-disclaimer.tag
similarity index 97%
rename from recommendation/web/static/gf-disclaimer.tag
rename to recommendation/web/static/rec-disclaimer.tag
index 342152d..d43aa76 100644
--- a/recommendation/web/static/gf-disclaimer.tag
+++ b/recommendation/web/static/rec-disclaimer.tag
@@ -1,4 +1,4 @@
-<gf-disclaimer>
+<rec-disclaimer>
     <div class="container-fluid" if={!hasDismissedDisclaimer()}>
         <div class="row">
             <div class="alert alert-info alert-dismissible fade in m-b-0" 
role="alert">
@@ -32,4 +32,4 @@
             document.cookie = 'dismissedDisclaimer=1';
         };
     </script>
-</gf-disclaimer>
\ No newline at end of file
+</rec-disclaimer>
diff --git a/recommendation/web/static/gf-input.tag 
b/recommendation/web/static/rec-input.tag
similarity index 99%
rename from recommendation/web/static/gf-input.tag
rename to recommendation/web/static/rec-input.tag
index 30e1d85..a8c63c8 100644
--- a/recommendation/web/static/gf-input.tag
+++ b/recommendation/web/static/rec-input.tag
@@ -1,4 +1,4 @@
-<gf-input>
+<rec-input>
     <form onsubmit={submitRequest}>
         <div class="gf-selector-container">
             <a class="btn btn-secondary gf-selector-source" name="from">
@@ -29,7 +29,7 @@
         </div>
     </div>
     <div class={invisible: fetching || error}>
-        <gf-articles></gf-articles>
+        <rec-recommendations></rec-recommendations>
     </div>
 
     <script>
@@ -95,7 +95,7 @@
                     self.error = true;
                     self.update();
                 } else {
-                    riot.mount('gf-articles', {
+                    riot.mount('rec-recommendations', {
                         articles: articles,
                         source: mappedSource,
                         target: mappedTarget
@@ -374,4 +374,4 @@
         };
 
     </script>
-</gf-input>
+</rec-input>
diff --git a/recommendation/web/static/gf-preview.tag 
b/recommendation/web/static/rec-preview.tag
similarity index 99%
rename from recommendation/web/static/gf-preview.tag
rename to recommendation/web/static/rec-preview.tag
index 4d41dcf..6e9f9e3 100644
--- a/recommendation/web/static/gf-preview.tag
+++ b/recommendation/web/static/rec-preview.tag
@@ -1,4 +1,4 @@
-<gf-preview>
+<rec-preview>
     <div id="previewModal" class="modal fade" role="dialog" tabindex="-1">
         <div class="modal-dialog modal-lg" role="document">
             <div class="modal-content">
@@ -172,4 +172,4 @@
         });
     </script>
 
-</gf-preview>
+</rec-preview>
diff --git a/recommendation/web/static/gf-articles.tag 
b/recommendation/web/static/rec-recommendations.tag
similarity index 98%
rename from recommendation/web/static/gf-articles.tag
rename to recommendation/web/static/rec-recommendations.tag
index bf2c063..a25ee41 100644
--- a/recommendation/web/static/gf-articles.tag
+++ b/recommendation/web/static/rec-recommendations.tag
@@ -1,4 +1,4 @@
-<gf-articles>
+<rec-recommendations>
     <div class="gf-all-suggestions-container">
         <div each={articles} class="gf-suggestion-container">
             <div class="gf-suggestion-image"
@@ -122,7 +122,7 @@
         }
 
         preview (e) {
-            riot.mount('gf-preview', {
+            riot.mount('rec-preview', {
                 articles: self.articles,
                 title: e.item.title,
                 from: self.source,
@@ -149,4 +149,4 @@
         });
     </script>
 
-</gf-articles>
+</rec-recommendations>
diff --git a/recommendation/web/static/gf-title.tag 
b/recommendation/web/static/rec-title.tag
similarity index 99%
rename from recommendation/web/static/gf-title.tag
rename to recommendation/web/static/rec-title.tag
index daaa984..5a7abcd 100644
--- a/recommendation/web/static/gf-title.tag
+++ b/recommendation/web/static/rec-title.tag
@@ -1,4 +1,4 @@
-<gf-title>
+<rec-title>
     <div class="gf-title-container dropdown">
         <span class="gf-icon gf-icon-lightbulb"></span>
         <span class="gf-title-display-secondary" 
data-i18n="title-wikipedia">Wikipedia</span>
@@ -71,4 +71,4 @@
             </div>
         </div>
     </div>
-</gf-title>
+</rec-title>
diff --git a/recommendation/web/templates/index.html 
b/recommendation/web/templates/index.html
index 705caf2..c3eae58 100644
--- a/recommendation/web/templates/index.html
+++ b/recommendation/web/templates/index.html
@@ -14,16 +14,16 @@
         <link rel="stylesheet" href="{{ url_for('.static', 
filename='suggest-searches/wm-typeahead.css') }}">
     </head>
     <body>
-        <gf-disclaimer></gf-disclaimer>
-        <gf-title></gf-title>
-        <gf-input></gf-input>
-        <gf-preview></gf-preview>
+        <rec-disclaimer></rec-disclaimer>
+        <rec-title></rec-title>
+        <rec-input></rec-input>
+        <rec-preview></rec-preview>
 
-        <script src="{{ url_for('.static', filename='gf-disclaimer.tag') }}" 
type="riot/tag"></script>
-        <script src="{{ url_for('.static', filename='gf-title.tag') }}" 
type="riot/tag"></script>
-        <script src="{{ url_for('.static', filename='gf-input.tag') }}" 
type="riot/tag"></script>
-        <script src="{{ url_for('.static', filename='gf-articles.tag') }}" 
type="riot/tag"></script>
-        <script src="{{ url_for('.static', filename='gf-preview.tag') }}" 
type="riot/tag"></script>
+        <script src="{{ url_for('.static', filename='rec-disclaimer.tag') }}" 
type="riot/tag"></script>
+        <script src="{{ url_for('.static', filename='rec-title.tag') }}" 
type="riot/tag"></script>
+        <script src="{{ url_for('.static', filename='rec-input.tag') }}" 
type="riot/tag"></script>
+        <script src="{{ url_for('.static', filename='rec-recommendations.tag') 
}}" type="riot/tag"></script>
+        <script src="{{ url_for('.static', filename='rec-preview.tag') }}" 
type="riot/tag"></script>
         <script src="{{ url_for('.static', filename='gf-create.tag') }}" 
type="riot/tag"></script>
 
         <script src="{{ url_for('.static', filename='cookies.js') }}"></script>
@@ -76,7 +76,7 @@
                 translationPath: '{{ url_for('translation.v1_article') }}'
             };
 
-            riot.mount('gf-disclaimer, gf-title, gf-input');
+            riot.mount('rec-disclaimer, rec-title, rec-input');
 
             function updateLanguage(language) {
                 var i18n = $.i18n();
diff --git a/recommendation/web/gapfinder.py b/recommendation/web/tool.py
similarity index 63%
rename from recommendation/web/gapfinder.py
rename to recommendation/web/tool.py
index 8c94f77..27f6d0b 100644
--- a/recommendation/web/gapfinder.py
+++ b/recommendation/web/tool.py
@@ -4,11 +4,11 @@
 from recommendation.utils import configuration
 from recommendation.utils import language_pairs
 
-gapfinder = Blueprint('gapfinder', __name__, template_folder='templates', 
static_folder='static',
-                      static_url_path='/static/gapfinder')
+tool = Blueprint('tool', __name__, template_folder='templates', 
static_folder='static',
+                 static_url_path='/static/tool')
 
 
[email protected]('/')
[email protected]('/')
 def home():
     s = request.args.get('s')
     t = request.args.get('t')
@@ -24,10 +24,10 @@
         seed=seed,
         search=search,
         event_logger_url=configuration.get_config_value('endpoints', 
'event_logger'),
-        default_search=configuration.get_config_value('gapfinder', 
'default_search')
+        default_search=configuration.get_config_value('tool', 'default_search')
     )
 
 
[email protected]('/static/resource/<path:filename>')
[email protected]('/static/resource/<path:filename>')
 def resource(filename):
-    return send_from_directory(configuration.get_config_value('gapfinder', 
'resource_path'), filename=filename)
+    return send_from_directory(configuration.get_config_value('tool', 
'resource_path'), filename=filename)
diff --git a/setup.py b/setup.py
index 2d25626..37e8099 100644
--- a/setup.py
+++ b/setup.py
@@ -2,7 +2,7 @@
 
 setup(
     name='recommendation',
-    version='0.1.6',
+    version='0.2.0',
     url='https://github.com/wikimedia/research-recommendation-api',
     license='Apache Software License',
     maintainer='Wikimedia Research',

-- 
To view, visit https://gerrit.wikimedia.org/r/330868
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie673c83ecfc76dffa037ea9c8331ad9ff712ed99
Gerrit-PatchSet: 1
Gerrit-Project: research/recommendation-api
Gerrit-Branch: master
Gerrit-Owner: Nschaaf <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to