From b81bae4c4491b669ec4ec4ae7dbc9a619ddfcb49 Mon Sep 17 00:00:00 2001 From: furion <_@furion.me> Date: Mon, 8 May 2017 10:14:56 +0200 Subject: [PATCH] [api] shared api/db methods --- hive/db/methods.py | 22 +++++++++++++++++++++- hive/indexer/cli.py | 7 ++----- hive/server/methods.py | 24 ++++++++++++++++++++++++ hive/server/serve.py | 9 +++++---- setup.py | 1 - 5 files changed, 52 insertions(+), 11 deletions(-) diff --git a/hive/db/methods.py b/hive/db/methods.py index b559bb2b3..0d8f00034 100644 --- a/hive/db/methods.py +++ b/hive/db/methods.py @@ -1,8 +1,13 @@ from funcy.seqs import first from hive.db import conn -from sqlalchemy import text +from hive.db.schema import ( + hive_follows, +) +from sqlalchemy import text, select +# generic +# ------- def query(sql): res = conn.execute(text(sql).execution_options(autocommit=False)) return res @@ -18,3 +23,18 @@ def query_one(sql): def db_last_block(): return query_one("SELECT MAX(num) FROM hive_blocks") or 0 + +# api specific +# ------------ +def get_followers(account: str, skip: int, limit: int, db=conn): + q = select([hive_follows]). \ + where(hive_follows.c.following == account). \ + skip(skip).limit(limit) + return db.execute(q) + + +def get_following(account: str, skip: int, limit: int, db=conn): + q = select([hive_follows]). \ + where(hive_follows.c.follower == account). \ + skip(skip).limit(limit) + return db.execute(q) diff --git a/hive/indexer/cli.py b/hive/indexer/cli.py index 660e5e5ea..cfbc7b176 100644 --- a/hive/indexer/cli.py +++ b/hive/indexer/cli.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- import click -import click_spinner from click import echo from hive.indexer.core import sync_from_file, sync_from_steemd, head_state from prettytable import PrettyTable @@ -20,16 +19,14 @@ def indexer(): def index_from_file(filename): """import blocks from steemd""" echo('Loading blocks from %s...' % filename) - with click_spinner.spinner(): - sync_from_file(filename) + sync_from_file(filename) @indexer.command(name='from-steemd') def index_from_steemd(): """import blocks from .json.lst file""" echo('Loading blocks from steemd...') - with click_spinner.spinner(): - sync_from_steemd() + sync_from_steemd() @indexer.command(name='show-status') diff --git a/hive/server/methods.py b/hive/server/methods.py index e69de29bb..58060549e 100644 --- a/hive/server/methods.py +++ b/hive/server/methods.py @@ -0,0 +1,24 @@ +from hive.db.methods import ( + get_followers, + get_following, +) + + +def api_get_followers(db, bottle, app, params): + _ = bottle, app + return get_followers( + account=params.get('account'), + skip=params.get('skip'), + limit=params.get('limit'), + db=db, + ) + + +def api_get_following(db, bottle, app, params): + _ = bottle, app + return get_following( + account=params.get('account'), + skip=params.get('skip'), + limit=params.get('limit'), + db=db, + ) diff --git a/hive/server/serve.py b/hive/server/serve.py index 43e03a584..91a66da10 100644 --- a/hive/server/serve.py +++ b/hive/server/serve.py @@ -5,17 +5,17 @@ import os from datetime import datetime import bottle +import hive.server.methods as rpcmethods from bottle import abort from bottle_errorsrest import ErrorsRestPlugin from bottle_sqlalchemy import Plugin from hive.db.schema import metadata as hive_metadata from hive.indexer.core import db_last_block, head_state +from hive.sbds.jsonrpc import register_endpoint +from hive.sbds.sbds_json import ToStringJSONEncoder from sqlalchemy import create_engine from steem.steemd import Steemd -from hive.sbds.sbds_json import ToStringJSONEncoder -from hive.sbds.jsonrpc import register_endpoint - logger = logging.getLogger(__name__) app = bottle.Bottle() @@ -81,11 +81,12 @@ jsonrpc = register_endpoint(path='/', app=app, namespace='hive') json_rpc_methods = { 'head_state': head_state, + 'get_followers': rpcmethods.get_followers, + 'get_following': rpcmethods.get_following, } for method_name, fn_call in json_rpc_methods.items(): jsonrpc.register_method(method=fn_call, method_name=method_name) - # WSGI application # ---------------- application = app diff --git a/setup.py b/setup.py index 5aef802a4..99ee8d720 100644 --- a/setup.py +++ b/setup.py @@ -32,7 +32,6 @@ setup( 'sqlalchemy', 'mysqlclient', 'click', - 'click-spinner', 'funcy', 'toolz', 'maya', -- GitLab