def get_plugins(): RESULTS_PER_PAGE = 20 page = int(request.args.get('page', 1)) search = request.args.get('query', '') results = get_search_index_cached() if search: tokens = [t.lower() for t in sorted(search.split())] results, tokens = _apply_category_filters(results, tokens) results, tokens = _apply_tag_filters(results, tokens) results = _apply_keyword_filters(results, tokens) count = len(results) total_pages = (count + RESULTS_PER_PAGE - 1) / RESULTS_PER_PAGE # ceil results = results[((page - 1) * RESULTS_PER_PAGE):(page * RESULTS_PER_PAGE)] return api_util.jsonify({ 'plugins': results, 'total_pages': total_pages, 'total_results': count, 'results_per_page': RESULTS_PER_PAGE, })
def get_plugins(): RESULTS_PER_PAGE = 20 page = int(request.args.get('page', 1)) search = request.args.get('query', '') results = get_search_index_cached() if search: tokens = [t.lower() for t in sorted(search.split())] results, tokens = _apply_category_filters(results, tokens) results, tokens = _apply_tag_filters(results, tokens) results = _apply_keyword_filters(results, tokens) count = len(results) total_pages = (count + RESULTS_PER_PAGE - 1) / RESULTS_PER_PAGE # ceil results = results[((page - 1) * RESULTS_PER_PAGE): (page * RESULTS_PER_PAGE)] return api_util.jsonify({ 'plugins': results, 'total_pages': total_pages, 'total_results': count, 'results_per_page': RESULTS_PER_PAGE, })
def get_plugin(slug): plugin = r.table('plugins').get(slug).run(r_conn()) if plugin: return api_util.jsonify(db.plugins.to_json(plugin)) else: return api_util.api_not_found('No plugin with slug %s' % slug)
def update_plugin_tags(slug): data = json.loads(flask.request.data) plugin = r.table('plugins').get(slug).run(r_conn()) if not plugin: return api_util.api_not_found('No plugin with slug %s' % slug) db.plugins.update_tags(plugin, data['tags']) return api_util.jsonify({'tags': plugin['tags']})
def submit_login(): username = flask.request.form.get('username') password = flask.request.form.get('password') user = db.users.find(username) if not user or not check_password_hash(user.get('password'), password): return api_util.jsonify({'msg': 'Username or password is wrong.'}), 400 token = create_access_token(identity=username, user_claims={ 'username': username, 'role': user['role'] }, expires_delta=datetime.timedelta(days=30)) return api_util.jsonify({ 'username': username, 'role': user['role'], 'token': token })
def update_plugin_tags(slug): data = json.loads(flask.request.data) plugin = r.table('plugins').get(slug).run(r_conn()) if not plugin: return api_util.api_not_found('No plugin with slug %s' % slug) db.plugins.update_tags(plugin, data['tags']) return api_util.jsonify({ 'tags': plugin['tags'] })
def update_plugin_category(slug, category): plugin = r.table('plugins').get(slug).run(r_conn()) if not plugin: return api_util.api_not_found('No plugin with slug %s' % slug) if not category in [c['id'] for c in get_all_categories_cached()]: return api_util.api_bad_request('No such category %s' % category) # TODO(david): Also update search index (stale cache) plugin['category'] = category r.table('plugins').update(plugin).run(r_conn()) return api_util.jsonify({'category': plugin['category']})
def approve_submitted_plugin_by_id(id): plugin = db.submitted_plugins.get_by_id(id) if not plugin.get('github-link') and not plugin.get('vimorg-link'): return api_util.jsonify({'msg': 'No valid github or vimorg link'}), 400 result = {} repo_data = {} if plugin.get('github-link'): github_data, repo = github.get_all_info_from_url(plugin['github-link']) repo_data = repo if github_data: result = dict(result, **github_data) if plugin.get('vimorg-link'): vimorg_data = vimorg.get_all_info_from_url_and_name( plugin['vimorg-link'], plugin['name']) if vimorg_data: result = dict(result, **vimorg_data) if not result: return api_util.jsonify({ 'msg': 'Unable to find any valid information from github or vimorg' }), 400 jwt_claims = get_jwt_claims() result['approved_by'] = jwt_claims['username'] db.plugins.add_scraped_data(result, repo_data, { 'category': plugin['category'], 'tags': plugin['tags'] }) db.submitted_plugins.approve_and_enable_scraping(id, result) # Clear cache so newly added package appears in search cache.clear() return api_util.jsonify({'msg': 'Approved.', 'name': plugin['name']})
def update_plugin_category(slug, category): plugin = r.table('plugins').get(slug).run(r_conn()) if not plugin: return api_util.api_not_found('No plugin with slug %s' % slug) if not category in [c['id'] for c in get_all_categories_cached()]: return api_util.api_bad_request('No such category %s' % category) # TODO(david): Also update search index (stale cache) plugin['category'] = category r.table('plugins').update(plugin).run(r_conn()) return api_util.jsonify({ 'category': plugin['category'] })
def get_submitted_plugins(): RESULTS_PER_PAGE = 50 page = int(request.args.get('page', 1)) results = db.submitted_plugins.get_list() count = len(results) total_pages = (count + RESULTS_PER_PAGE - 1) / RESULTS_PER_PAGE # ceil results = results[((page - 1) * RESULTS_PER_PAGE):(page * RESULTS_PER_PAGE)] return api_util.jsonify({ 'plugins': results, 'current_page': page, 'total_pages': total_pages, 'total_results': count, 'results_per_page': RESULTS_PER_PAGE, })
def get_tags(): tags = r.table('tags').filter({}).run(r_conn()) return api_util.jsonify(list(tags))
def get_categories(): return api_util.jsonify(get_all_categories_cached())
def get_submitted_plugin_by_id(id): plugin = db.submitted_plugins.get_by_id(id) return api_util.jsonify({'plugin': plugin})
def reject_submitted_plugin_by_id(id): db.submitted_plugins.reject(id) return api_util.jsonify({'msg': 'Rejected.'})
def session(): return api_util.jsonify(get_jwt_claims())