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