コード例 #1
0
ファイル: api.py プロジェクト: cztchoice/vim-awesome
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,
    })
コード例 #2
0
ファイル: api.py プロジェクト: 0x73/vim-awesome
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,
    })
コード例 #3
0
ファイル: api.py プロジェクト: cztchoice/vim-awesome
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)
コード例 #4
0
ファイル: api.py プロジェクト: 0x73/vim-awesome
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)
コード例 #5
0
ファイル: api.py プロジェクト: cztchoice/vim-awesome
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']})
コード例 #6
0
ファイル: api.py プロジェクト: vim-awesome/vim-awesome
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
    })
コード例 #7
0
ファイル: api.py プロジェクト: 0x73/vim-awesome
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']
    })
コード例 #8
0
ファイル: api.py プロジェクト: cztchoice/vim-awesome
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']})
コード例 #9
0
ファイル: api.py プロジェクト: vim-awesome/vim-awesome
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']})
コード例 #10
0
ファイル: api.py プロジェクト: 0x73/vim-awesome
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']
    })
コード例 #11
0
ファイル: api.py プロジェクト: vim-awesome/vim-awesome
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,
    })
コード例 #12
0
ファイル: api.py プロジェクト: 0x73/vim-awesome
def get_tags():
    tags = r.table('tags').filter({}).run(r_conn())
    return api_util.jsonify(list(tags))
コード例 #13
0
ファイル: api.py プロジェクト: cztchoice/vim-awesome
def get_categories():
    return api_util.jsonify(get_all_categories_cached())
コード例 #14
0
ファイル: api.py プロジェクト: cztchoice/vim-awesome
def get_tags():
    tags = r.table('tags').filter({}).run(r_conn())
    return api_util.jsonify(list(tags))
コード例 #15
0
ファイル: api.py プロジェクト: vim-awesome/vim-awesome
def get_submitted_plugin_by_id(id):
    plugin = db.submitted_plugins.get_by_id(id)
    return api_util.jsonify({'plugin': plugin})
コード例 #16
0
ファイル: api.py プロジェクト: vim-awesome/vim-awesome
def reject_submitted_plugin_by_id(id):
    db.submitted_plugins.reject(id)
    return api_util.jsonify({'msg': 'Rejected.'})
コード例 #17
0
ファイル: api.py プロジェクト: 0x73/vim-awesome
def get_categories():
    return api_util.jsonify(get_all_categories_cached())
コード例 #18
0
ファイル: api.py プロジェクト: vim-awesome/vim-awesome
def session():
    return api_util.jsonify(get_jwt_claims())