Beispiel #1
0
    def __init__(self, database_url=None, loop=None, http_host=None, http_port=None):
        super().__init__(database_url=database_url, loop=loop)
        self.host = http_host
        self.port = http_port

        self.web_app = web.Application(loop=self.loop)
        self.api_methods = AsyncMethods()
        self.web_app.router.add_post('/', self.handle_api)
        self.web_app.router.add_get('/.well-known/healthcheck.json',
                                    self.healthcheck_handler)
        self.web_app.router.add_get('/health', self.healthcheck_handler)
        self.api_methods.add(
            api_get_notifications,
            'yo.get_db_notifications')
        self.api_methods.add(api_mark_read,
                             'yo.mark_read')
        self.api_methods.add(api_mark_unread,
                             'yo.mark_unread')
        self.api_methods.add(api_mark_shown,
                             'yo.mark_shown')
        self.api_methods.add(api_mark_unshown,
                             'yo.mark_unshown')
        self.api_methods.add(api_get_transports,
                             'yo.get_transports')
        self.api_methods.add(api_set_transports,
                             'yo.set_transports')
        self.api_methods.add(self.api_healthcheck, 'health')
Beispiel #2
0
 def start_test_server(cls, env, master_server):
     methods = AsyncMethods()
     for method in public_methods.values():
         methods.add(method)
     for method in private_methods.values():
         methods.add(method)
     server = cls(env, master_server, env.cluster_config.JSON_RPC_PORT, methods)
     server.start()
     return server
Beispiel #3
0
    def __init__(self, env, master_server: MasterServer, port, methods: AsyncMethods):
        self.loop = asyncio.get_event_loop()
        self.port = port
        self.env = env
        self.master = master_server
        self.counters = dict()

        # Bind RPC handler functions to this instance
        self.handlers = AsyncMethods()
        for rpc_name in methods:
            func = methods[rpc_name]
            self.handlers[rpc_name] = func.__get__(self, self.__class__)
Beispiel #4
0
def build_methods():
    """Register all supported hive_api/condenser_api.calls."""
    # pylint: disable=expression-not-assigned
    methods = AsyncMethods()

    [
        methods.add(method, 'hive.' + method.__name__) for method in (
            hive_api.db_head_state,
            hive_api.payouts_total,
            hive_api.payouts_last_24h,
            hive_api.get_accounts,
            hive_api.get_accounts_ac,
            # --- disabled until #92
            #hive_api.get_followers,
            #hive_api.get_following,
            #hive_api.get_follow_count,
            #hive_api.get_user_feed,
            #hive_api.get_blog_feed,
            #hive_api.get_discussions_by_sort_and_tag,
            #hive_api.get_related_posts,
        )
    ]

    [
        methods.add(method, 'condenser_api.' + method.__name__) for method in (
            condenser_api.get_followers,
            condenser_api.get_following,
            condenser_api.get_follow_count,
            condenser_api.get_content,
            condenser_api.get_content_replies,
            condenser_api_get_state,
            condenser_api_get_trending_tags,
            condenser_api.get_discussions_by_trending,
            condenser_api.get_discussions_by_hot,
            condenser_api.get_discussions_by_promoted,
            condenser_api.get_discussions_by_created,
            condenser_api.get_discussions_by_blog,
            condenser_api.get_discussions_by_feed,
            condenser_api.get_discussions_by_comments,
            condenser_api.get_replies_by_last_update,
            condenser_api.get_discussions_by_author_before_date,
            condenser_api.get_blog,
            condenser_api.get_blog_entries,
        )
    ]

    methods.add(condenser_api_call)

    return methods
Beispiel #5
0
    def __init__(self, config=None, db=None):

        self.config = config
        self.db = db
        self.services = {}
        self.service_tasks = {}
        self.loop = asyncio.get_event_loop()
        self.web_app = web.Application(loop=self.loop)
        self.web_app['config'] = {
            'yo_config': self.config,
            'yo_db': self.db,
            'yo_app': self
        }
        self.api_methods = AsyncMethods()
        self.running = False
Beispiel #6
0
def build_methods():
    """Build a map of all supported hive_api/condenser_api calls."""
    methods = AsyncMethods()

    hive_methods = (
        hive_api.db_head_state,
        # --- disabled until #92
        #hive_api.get_followers,
        #hive_api.get_following,
        #hive_api.get_follow_count,
        #hive_api.get_user_feed,
        #hive_api.get_blog_feed,
        #hive_api.get_discussions_by_sort_and_tag,
        #hive_api.get_related_posts,
        # ---
        hive_api.payouts_total,
        hive_api.payouts_last_24h,
    )
    for method in hive_methods:
        methods.add(method)
        #methods.add(method, 'hive.' + method.__name__) #test jussi-ns w/o jussi

    condenser_methods = (
        condenser_api.call,
        condenser_api.get_followers,
        condenser_api.get_following,
        condenser_api.get_follow_count,
        condenser_api.get_discussions_by_trending,
        condenser_api.get_discussions_by_hot,
        condenser_api.get_discussions_by_promoted,
        condenser_api.get_discussions_by_created,
        condenser_api.get_discussions_by_blog,
        condenser_api.get_discussions_by_feed,
        condenser_api.get_discussions_by_comments,
        condenser_api.get_replies_by_last_update,
        condenser_api.get_content,
        condenser_api.get_content_replies,
        condenser_api.get_state,
    )
    for method in condenser_methods:
        # todo: unclear if appbase uses condenser_api.call vs call.condenser_api
        methods.add(method, 'condenser_api.' + method.__name__)

        # todo: temporary non-appbase endpoint (remove once appbase is in prod)
        methods.add(method, method.__name__)

    return methods
Beispiel #7
0
def run(host=None,
        port=None,
        database_url=None,
        database_extra=None,
        app_extra=None,
        **kwargs):
    app_extra = app_extra or dict()

    # layout basic aiohttp config and context
    app = web.Application()
    app['config'] = dict()
    if kwargs:
        app['config'].update(**kwargs)
    app['config']['database_url'] = database_url
    app['config']['database_extra'] = database_extra
    app['db'] = None  # this will be defined by init_pg at app startup

    # register app lifecycle callbacks
    app.on_startup.append(init_pg)
    app.on_cleanup.append(on_cleanup)

    # register app routes
    app.router.add_post('/', handle_api)
    app.router.add_get('/.well-known/healthcheck.json', healthcheck_handler)
    app.router.add_get('/health', healthcheck_handler)

    # create jsonrpc method dispatcher
    jsonrpc_methods = AsyncMethods()

    # register jsonrpc methods with dispatcher
    jsonrpc_methods.add(api_healthcheck, 'sbds.health')
    # TODO add additional methods here

    # add jsonrpc method dispatcher to aiohttp app context
    app['jsonrpc_methods_dispatcher'] = jsonrpc_methods

    # run aiohttp webapp
    web.run_app(app, host=host, port=port, **app_extra)
Beispiel #8
0
Datei: app.py Projekt: arpwv/yo
    def __init__(self, config=None, db=None):

        self.config = config
        self.db = db
        self.services = {}
        self.service_tasks = {}
        self.loop = asyncio.get_event_loop()
        self.web_app = web.Application(loop=self.loop)
        self.api_methods = AsyncMethods()
        self.running = False
        self.web_app.router.add_post('/', self.handle_api)
        self.web_app.router.add_get('/.well-known/healthcheck.json',
                                    self.healthcheck_handler)

        self.api_methods.add(yo.api_methods.api_get_notifications,
                             'yo.get_db_notifications')
        self.api_methods.add(yo.api_methods.api_mark_read, 'yo.mark_read')
        self.api_methods.add(yo.api_methods.api_mark_unread, 'yo.mark_unread')
        self.api_methods.add(yo.api_methods.api_mark_shown, 'yo.mark_shown')
        self.api_methods.add(yo.api_methods.api_mark_unshown, 'yo.mark_unshown')
        self.api_methods.add(yo.api_methods.api_get_transports, 'yo.get_transports')
        self.api_methods.add(yo.api_methods.api_set_transports, 'yo.set_transports')
        self.api_methods.add(self.api_healthcheck, 'health')
Beispiel #9
0
    except Exception:
        return None


def eth_address_to_quarkchain_address_decoder(hex_str):
    eth_hex = hex_str[2:]
    if len(eth_hex) != 40:
        raise InvalidParams("Addresses must be 40 or 0 bytes long")
    full_shard_id_hex = ""
    for i in range(4):
        index = i * 10
        full_shard_id_hex += eth_hex[index:index + 2]
    return address_decoder("0x" + eth_hex + full_shard_id_hex)


public_methods = AsyncMethods()
private_methods = AsyncMethods()


# noinspection PyPep8Naming
class JSONRPCServer:
    @classmethod
    def start_public_server(cls, env, master_server):
        server = cls(env, master_server, env.cluster_config.JSON_RPC_PORT,
                     public_methods)
        server.start()
        return server

    @classmethod
    def start_private_server(cls, env, master_server):
        server = cls(
Beispiel #10
0
                hive_api.payouts_last_24h)

jrpc_condenser = (condenser_api.get_followers, condenser_api.get_following,
                  condenser_api.get_follow_count,
                  condenser_api.get_discussions_by_trending,
                  condenser_api.get_discussions_by_hot,
                  condenser_api.get_discussions_by_promoted,
                  condenser_api.get_discussions_by_created,
                  condenser_api.get_discussions_by_blog,
                  condenser_api.get_discussions_by_feed,
                  condenser_api.get_discussions_by_comments,
                  condenser_api.get_replies_by_last_update,
                  condenser_api.get_content, condenser_api.get_content_replies,
                  condenser_api.get_state)

methods = AsyncMethods()
legacy_methods = AsyncMethods()
legacy_methods.add(condenser_api.call, 'call')
methods.add(condenser_api.call, 'call')
for m in jrpc_methods:
    methods.add(m)
for m in jrpc_condenser:
    methods.add(m, 'condenser_api.' + m.__name__)
    legacy_methods.add(m)

app = web.Application()
app['config'] = dict()

app['config']['hive.MAX_BLOCK_NUM_DIFF'] = 10
app['config']['hive.MAX_DB_ROW_RESULTS'] = 100000
app['config'][
Beispiel #11
0
    condenser_api.get_follow_count,
    condenser_api.get_discussions_by_trending,
    condenser_api.get_discussions_by_hot,
    condenser_api.get_discussions_by_promoted,
    condenser_api.get_discussions_by_created,
    condenser_api.get_discussions_by_blog,
    condenser_api.get_discussions_by_feed,
    condenser_api.get_discussions_by_comments,
    condenser_api.get_replies_by_last_update,
    condenser_api.get_content,
    condenser_api.get_content_replies,
    condenser_api.get_state
)

# Register hive_api methods and (appbase) condenser_api methods
methods = AsyncMethods()
for m in hive_methods:
    methods.add(m)
    methods.add(m, 'hive_api.' + m.__name__)  # TODO: temp, for testing jussi-style path without jussi
for m in condenser_methods:
    # note: unclear if appbase expects condenser_api.call or call.condenser_api
    methods.add(m, 'condenser_api.' + m.__name__)
    methods.add(m, 'hive_api.condenser_api.' + m.__name__) # TODO: temp, for testing jussi-style path without jussi

# Register non-appbase condenser_api endpoint (remove after appbase in prod)
non_appbase_methods = AsyncMethods()
non_appbase_methods.add(condenser_api.call, 'condenser_api.non_appb.call')
non_appbase_methods.add(condenser_api.call, 'hive_api.condenser_api.non_appb.call') # TODO: temp, for testing jussi-style path without jussi
for m in condenser_methods:
    non_appbase_methods.add(m)