diff --git a/alembic.ini b/alembic.ini deleted file mode 100644 index 1e43ca64c68a9e4948ee5611c934d34298a3416e..0000000000000000000000000000000000000000 --- a/alembic.ini +++ /dev/null @@ -1,85 +0,0 @@ -# A generic, single database configuration. - -[alembic] -# path to migration scripts -script_location = alembic - -# template used to generate migration files -# file_template = %%(rev)s_%%(slug)s - -# timezone to use when rendering the date -# within the migration file as well as the filename. -# string value is passed to dateutil.tz.gettz() -# leave blank for localtime -# timezone = - -# max length of characters to apply to the -# "slug" field -# truncate_slug_length = 40 - -# set to 'true' to run the environment during -# the 'revision' command, regardless of autogenerate -# revision_environment = false - -# set to 'true' to allow .pyc and .pyo files without -# a source .py file to be detected as revisions in the -# versions/ directory -# sourceless = false - -# version location specification; this defaults -# to alembic/versions. When using multiple version -# directories, initial revisions must be specified with --version-path -# version_locations = %(here)s/bar %(here)s/bat alembic/versions - -# the output encoding used when revision files -# are written from script.py.mako -# output_encoding = utf-8 - -sqlalchemy.url = postgresql://hive:aMom3ieBieh9Ish0huiY2eGhreiThu7j@localhost/hive - - -[post_write_hooks] -# post_write_hooks defines scripts or Python functions that are run -# on newly generated revision scripts. See the documentation for further -# detail and examples - -# format using "black" - use the console_scripts runner, against the "black" entrypoint -# hooks=black -# black.type=console_scripts -# black.entrypoint=black -# black.options=-l 79 - -# Logging configuration -[loggers] -keys = root,sqlalchemy,alembic - -[handlers] -keys = console - -[formatters] -keys = generic - -[logger_root] -level = WARN -handlers = console -qualname = - -[logger_sqlalchemy] -level = WARN -handlers = -qualname = sqlalchemy.engine - -[logger_alembic] -level = INFO -handlers = -qualname = alembic - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = NOTSET -formatter = generic - -[formatter_generic] -format = %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %H:%M:%S diff --git a/alembic/README b/alembic/README deleted file mode 100644 index 98e4f9c44effe479ed38c66ba922e7bcc672916f..0000000000000000000000000000000000000000 --- a/alembic/README +++ /dev/null @@ -1 +0,0 @@ -Generic single-database configuration. \ No newline at end of file diff --git a/alembic/env.py b/alembic/env.py deleted file mode 100644 index 70518a2eef734a8fffcd787cfa397309469f8e76..0000000000000000000000000000000000000000 --- a/alembic/env.py +++ /dev/null @@ -1,77 +0,0 @@ -from logging.config import fileConfig - -from sqlalchemy import engine_from_config -from sqlalchemy import pool - -from alembic import context - -# this is the Alembic Config object, which provides -# access to the values within the .ini file in use. -config = context.config - -# Interpret the config file for Python logging. -# This line sets up loggers basically. -fileConfig(config.config_file_name) - -# add your model's MetaData object here -# for 'autogenerate' support -# from myapp import mymodel -# target_metadata = mymodel.Base.metadata -target_metadata = None - -# other values from the config, defined by the needs of env.py, -# can be acquired: -# my_important_option = config.get_main_option("my_important_option") -# ... etc. - - -def run_migrations_offline(): - """Run migrations in 'offline' mode. - - This configures the context with just a URL - and not an Engine, though an Engine is acceptable - here as well. By skipping the Engine creation - we don't even need a DBAPI to be available. - - Calls to context.execute() here emit the given string to the - script output. - - """ - url = config.get_main_option("sqlalchemy.url") - context.configure( - url=url, - target_metadata=target_metadata, - literal_binds=True, - dialect_opts={"paramstyle": "named"}, - ) - - with context.begin_transaction(): - context.run_migrations() - - -def run_migrations_online(): - """Run migrations in 'online' mode. - - In this scenario we need to create an Engine - and associate a connection with the context. - - """ - connectable = engine_from_config( - config.get_section(config.config_ini_section), - prefix="sqlalchemy.", - poolclass=pool.NullPool, - ) - - with connectable.connect() as connection: - context.configure( - connection=connection, target_metadata=target_metadata - ) - - with context.begin_transaction(): - context.run_migrations() - - -if context.is_offline_mode(): - run_migrations_offline() -else: - run_migrations_online() diff --git a/alembic/script.py.mako b/alembic/script.py.mako deleted file mode 100644 index 2c0156303a8df3ffdc9de87765bf801bf6bea4a5..0000000000000000000000000000000000000000 --- a/alembic/script.py.mako +++ /dev/null @@ -1,24 +0,0 @@ -"""${message} - -Revision ID: ${up_revision} -Revises: ${down_revision | comma,n} -Create Date: ${create_date} - -""" -from alembic import op -import sqlalchemy as sa -${imports if imports else ""} - -# revision identifiers, used by Alembic. -revision = ${repr(up_revision)} -down_revision = ${repr(down_revision)} -branch_labels = ${repr(branch_labels)} -depends_on = ${repr(depends_on)} - - -def upgrade(): - ${upgrades if upgrades else "pass"} - - -def downgrade(): - ${downgrades if downgrades else "pass"} diff --git a/alembic/versions/bf9df12d4f01_jsalyers_update_some_indexes.py b/alembic/versions/bf9df12d4f01_jsalyers_update_some_indexes.py deleted file mode 100644 index d9623345bbbbc9a33fb20f0ecacb4dda532f3607..0000000000000000000000000000000000000000 --- a/alembic/versions/bf9df12d4f01_jsalyers_update_some_indexes.py +++ /dev/null @@ -1,26 +0,0 @@ -"""jsalyers-update-some-indexes - -Revision ID: bf9df12d4f01 -Revises: -Create Date: 2020-05-04 15:54:28.863707 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'bf9df12d4f01' -down_revision = None -branch_labels = None -depends_on = None - - -def upgrade(): - op.create_index('hive_posts_cache_author_permlink_idx', 'hive_posts_cache', ['author', 'permlink']) - op.create_index('hive_posts_cache_post_id_author_permlink_idx', 'hive_posts_cache', ['post_id', 'author', 'permlink']) - - -def downgrade(): - op.drop_index('hive_posts_cache_author_permlink_idx') - op.drop_index('hive_posts_cache_post_id_author_permlink_idx') diff --git a/build.sh b/build.sh deleted file mode 100755 index 1b2bfebd9bef7206cd286d21699f7eec72b7c42b..0000000000000000000000000000000000000000 --- a/build.sh +++ /dev/null @@ -1,9 +0,0 @@ -echo Build started on `date` -export IMAGE_TAG=`git ls-remote --heads origin | grep $(git rev-parse HEAD) | cut -d / -f 3` -if [ "$IMAGE_TAG" = "master" ] ; then export IMAGE_TAG=latest ; fi -export REPO_PATH=`git rev-parse --show-toplevel` -export REPO_NAME=`basename $REPO_PATH` -export IMAGE_REPO_NAME="hive/$REPO_NAME" -export SOURCE_COMMIT=`git rev-parse HEAD` -echo Building branch $IMAGE_TAG from $IMAGE_REPO_NAME -docker build . -t $IMAGE_REPO_NAME:$IMAGE_TAG --build-arg SOURCE_COMMIT="${SOURCE_COMMIT}" --build-arg DOCKER_TAG="${IMAGE_TAG}" diff --git a/hive/server/condenser_api/cursor.py b/hive/server/condenser_api/cursor.py index 1b3fa5caa7c3aab810a0b715c30372fe19481e0f..2e3b42ba437f74b92b74d46987daad292bb51928 100644 --- a/hive/server/condenser_api/cursor.py +++ b/hive/server/condenser_api/cursor.py @@ -166,30 +166,28 @@ async def pids_by_query(db, sort, start_author, start_permlink, limit, tag): where.append("post_id IN (%s)" % sql) start_id = None - if start_permlink and start_author: - sql = "%s <= (SELECT %s FROM %s WHERE post_id = (SELECT post_id FROM hive_posts_cache WHERE author = :start_author AND permlink= :start_permlink))" + if start_permlink: + start_id = await _get_post_id(db, start_author, start_permlink) + if not start_id: + return [] + + sql = "%s <= (SELECT %s FROM %s WHERE post_id = :start_id)" where.append(sql % (field, field, table)) - columns = ['hive_posts_cache.post_id', 'hive_posts_cache.author', 'hive_posts_cache.permlink', - 'hive_posts_cache.title', 'hive_posts_cache.body', 'hive_posts_cache.category', - 'hive_posts_cache.depth', 'hive_posts_cache.promoted', - 'hive_posts_cache.payout', 'hive_posts_cache.payout_at', 'hive_posts_cache.is_paidout', - 'hive_posts_cache.children', 'hive_posts_cache.votes', 'hive_posts_cache.created_at', - 'hive_posts_cache.updated_at', 'hive_posts_cache.rshares', 'hive_posts_cache.raw_json', - 'hive_posts_cache.json'] - sql = ("SELECT %s FROM %s WHERE %s ORDER BY %s DESC LIMIT :limit" - % (', '.join(columns), table, ' AND '.join(where), field)) + sql = ("SELECT post_id FROM %s WHERE %s ORDER BY %s DESC LIMIT :limit" + % (table, ' AND '.join(where), field)) - #return await db.query_col(sql, tag=tag, start_id=start_id, limit=limit) - return [sql, tag, start_id, limit] + return await db.query_col(sql, tag=tag, start_id=start_id, limit=limit) async def pids_by_blog(db, account: str, start_author: str = '', start_permlink: str = '', limit: int = 20): """Get a list of post_ids for an author's blog.""" + account_id = await _get_account_id(db, account) + seek = '' start_id = None - if start_permlink and start_author: + if start_permlink: start_id = await _get_post_id(db, start_author, start_permlink) if not start_id: return [] diff --git a/hive/server/condenser_api/methods.py b/hive/server/condenser_api/methods.py index fd76750eedb690028821863169506b8d21b7b548..fe0a5bb9cf730659f0430aa8c888eca5e98795f2 100644 --- a/hive/server/condenser_api/methods.py +++ b/hive/server/condenser_api/methods.py @@ -4,7 +4,6 @@ from functools import wraps import hive.server.condenser_api.cursor as cursor from hive.server.condenser_api.objects import load_posts, load_posts_reblogs, resultset_to_posts -from hive.server.condenser_api.objects import _mute_votes, _condenser_post_object from hive.server.common.helpers import ( ApiError, return_error_info, @@ -14,7 +13,6 @@ from hive.server.common.helpers import ( valid_offset, valid_limit, valid_follow_type) -from hive.server.common.mutes import Mutes # pylint: disable=too-many-arguments,line-too-long,too-many-lines @@ -103,34 +101,12 @@ async def get_content(context, author: str, permlink: str): db = context['db'] valid_account(author) valid_permlink(permlink) - - sql = """ - ---get_content - SELECT hive_posts_cache.post_id, hive_posts_cache.author, hive_posts_cache.permlink, - hive_posts_cache.title, hive_posts_cache.body, hive_posts_cache.category, hive_posts_cache.depth, - hive_posts_cache.promoted, hive_posts_cache.payout, hive_posts_cache.payout_at, - hive_posts_cache.is_paidout, hive_posts_cache.children, hive_posts_cache.votes, - hive_posts_cache.created_at, hive_posts_cache.updated_at, hive_posts_cache.rshares, - hive_posts_cache.raw_json, hive_posts_cache.json, hive_accounts.reputation AS author_rep - FROM hive_posts_cache JOIN hive_accounts ON (hive_posts_cache.author = hive_accounts.name) - JOIN hive_posts ON (hive_posts_cache.post_id = hive_posts.id) - WHERE hive_posts_cache.author = :author AND hive_posts_cache.permlink = :permlink AND NOT hive_posts.is_deleted - """ - - result = await db.query_all(sql, author=author, permlink=permlink) - result = dict(result[0]) - post = _condenser_post_object(result, 0) - post['active_votes'] = _mute_votes(post['active_votes'], Mutes.all()) - - assert post, 'post was not found in cache' - return post - - #post_id = await cursor.get_post_id(db, author, permlink) - #if not post_id: - # return {'id': 0, 'author': '', 'permlink': ''} - #posts = await load_posts(db, [post_id]) - #assert posts, 'post was not found in cache' - #return posts[0] + post_id = await cursor.get_post_id(db, author, permlink) + if not post_id: + return {'id': 0, 'author': '', 'permlink': ''} + posts = await load_posts(db, [post_id]) + assert posts, 'post was not found in cache' + return posts[0] @return_error_info @@ -140,9 +116,7 @@ async def get_content_replies(context, author: str, permlink: str): valid_account(author) valid_permlink(permlink) - sql = """ - --get_content_replies - SELECT post_id, author, permlink, title, body, category, depth, + sql = """SELECT post_id, author, permlink, title, body, category, depth, promoted, payout, payout_at, is_paidout, children, votes, created_at, updated_at, rshares, raw_json, json FROM hive_posts_cache WHERE post_id IN ( @@ -182,37 +156,6 @@ def nested_query_compat(function): return function(*args, **kwargs) return wrapper -@return_error_info -@nested_query_compat -async def get_discussions_by(discussion_type, context, start_author: str = '', - start_permlink: str = '', limit: int = 20, - tag: str = None, truncate_body: int = 0, - filter_tags: list = None): - """ Common implementation for get_discussions_by calls """ - assert not filter_tags, 'filter tags not supported' - assert discussion_type in ['trending', 'hot', 'created', 'promoted', - 'payout', 'payout_comments'], 'invalid discussion type' - - db = context['db'] - query_information = await cursor.pids_by_query( - db, - discussion_type, - valid_account(start_author, allow_empty=True), - valid_permlink(start_permlink, allow_empty=True), - valid_limit(limit, 100), - valid_tag(tag, allow_empty=True)) - - assert len(query_information) == 4, 'generated query is malformed, aborting' - sql = query_information[0] - sql = "---get_discussions_by_" + discussion_type + "\r\n" + sql - sql_tag = query_information[1] - sql_start_id = query_information[2] - sql_limit = query_information[3] - - result = await db.query_all(sql, tag=sql_tag, start_id=sql_start_id, limit=sql_limit, start_author=start_author, start_permlink=start_permlink) - posts = await resultset_to_posts(db=db, resultset=result, truncate_body=0) - return posts - @return_error_info @nested_query_compat @@ -221,9 +164,14 @@ async def get_discussions_by_trending(context, start_author: str = '', start_per truncate_body: int = 0, filter_tags: list = None): """Query posts, sorted by trending score.""" assert not filter_tags, 'filter_tags not supported' - results = await get_discussions_by('trending', context, start_author, start_permlink, - limit, tag, truncate_body, filter_tags) - return results + ids = await cursor.pids_by_query( + context['db'], + 'trending', + valid_account(start_author, allow_empty=True), + valid_permlink(start_permlink, allow_empty=True), + valid_limit(limit, 100), + valid_tag(tag, allow_empty=True)) + return await load_posts(context['db'], ids, truncate_body=truncate_body) @return_error_info @@ -233,9 +181,14 @@ async def get_discussions_by_hot(context, start_author: str = '', start_permlink truncate_body: int = 0, filter_tags: list = None): """Query posts, sorted by hot score.""" assert not filter_tags, 'filter_tags not supported' - results = await get_discussions_by('hot', context, start_author, start_permlink, - limit, tag, truncate_body, filter_tags) - return results + ids = await cursor.pids_by_query( + context['db'], + 'hot', + valid_account(start_author, allow_empty=True), + valid_permlink(start_permlink, allow_empty=True), + valid_limit(limit, 100), + valid_tag(tag, allow_empty=True)) + return await load_posts(context['db'], ids, truncate_body=truncate_body) @return_error_info @@ -245,9 +198,14 @@ async def get_discussions_by_promoted(context, start_author: str = '', start_per truncate_body: int = 0, filter_tags: list = None): """Query posts, sorted by promoted amount.""" assert not filter_tags, 'filter_tags not supported' - results = await get_discussions_by('promoted', context, start_author, start_permlink, - limit, tag, truncate_body, filter_tags) - return results + ids = await cursor.pids_by_query( + context['db'], + 'promoted', + valid_account(start_author, allow_empty=True), + valid_permlink(start_permlink, allow_empty=True), + valid_limit(limit, 100), + valid_tag(tag, allow_empty=True)) + return await load_posts(context['db'], ids, truncate_body=truncate_body) @return_error_info @@ -257,9 +215,14 @@ async def get_discussions_by_created(context, start_author: str = '', start_perm truncate_body: int = 0, filter_tags: list = None): """Query posts, sorted by creation date.""" assert not filter_tags, 'filter_tags not supported' - results = await get_discussions_by('created', context, start_author, start_permlink, - limit, tag, truncate_body, filter_tags) - return results + ids = await cursor.pids_by_query( + context['db'], + 'created', + valid_account(start_author, allow_empty=True), + valid_permlink(start_permlink, allow_empty=True), + valid_limit(limit, 100), + valid_tag(tag, allow_empty=True)) + return await load_posts(context['db'], ids, truncate_body=truncate_body) @return_error_info @@ -270,46 +233,14 @@ async def get_discussions_by_blog(context, tag: str = None, start_author: str = """Retrieve account's blog posts, including reblogs.""" assert tag, '`tag` cannot be blank' assert not filter_tags, 'filter_tags not supported' - valid_account(tag) - valid_account(start_author, allow_empty=True) - valid_permlink(start_permlink, allow_empty=True) - valid_limit(limit, 100) - - sql = """ - ---get_discussions_by_blog - SELECT hive_posts_cache.post_id, hive_posts_cache.author, hive_posts_cache.permlink, - hive_posts_cache.title, hive_posts_cache.body, hive_posts_cache.category, hive_posts_cache.depth, - hive_posts_cache.promoted, hive_posts_cache.payout, hive_posts_cache.payout_at, - hive_posts_cache.is_paidout, hive_posts_cache.children, hive_posts_cache.votes, - hive_posts_cache.created_at, hive_posts_cache.updated_at, hive_posts_cache.rshares, - hive_posts_cache.raw_json, hive_posts_cache.json, hive_accounts.reputation AS author_rep - FROM hive_posts_cache JOIN hive_accounts ON (hive_posts_cache.author = hive_accounts.name) - JOIN hive_posts ON (hive_posts_cache.post_id = hive_posts.id) - WHERE NOT hive_posts.is_deleted AND hive_posts_cache.post_id IN - (SELECT post_id FROM hive_feed_cache JOIN hive_accounts ON (hive_feed_cache.account_id = hive_accounts.id) WHERE hive_accounts.name = :author) - """ - if start_author and start_permlink != '': - sql += """ - AND hive_posts_cache.created_at <= (SELECT created_at from hive_posts_cache where author = :start_author AND permlink = :start_permlink) - """ - - sql += """ - ORDER BY hive_posts_cache.created_at DESC - LIMIT :limit - """ - - db = context['db'] - result = await db.query_all(sql, author=tag, start_author=start_author, start_permlink=start_permlink, limit=limit) - posts_by_id = [] - - for row in result: - row = dict(row) - post = _condenser_post_object(row, truncate_body=truncate_body) - post['active_votes'] = _mute_votes(post['active_votes'], Mutes.all()) - #posts_by_id[row['post_id']] = post - posts_by_id.append(post); + ids = await cursor.pids_by_blog( + context['db'], + valid_account(tag), + valid_account(start_author, allow_empty=True), + valid_permlink(start_permlink, allow_empty=True), + valid_limit(limit, 100)) + return await load_posts(context['db'], ids, truncate_body=truncate_body) - return posts_by_id @return_error_info @nested_query_compat @@ -327,18 +258,6 @@ async def get_discussions_by_feed(context, tag: str = None, start_author: str = valid_limit(limit, 100)) return await load_posts_reblogs(context['db'], res, truncate_body=truncate_body) - #valid_account(start_author, allow_empty=True) - #valid_account(tag) - #valid_permlink(start_permlink, allow_empty=True) - #valid_limit(limit, 100) - - #sql = """ - # - #""" - - #if start_permlink and start_author: - - @return_error_info @nested_query_compat @@ -348,45 +267,12 @@ async def get_discussions_by_comments(context, start_author: str = None, start_p """Get comments by made by author.""" assert start_author, '`start_author` cannot be blank' assert not filter_tags, 'filter_tags not supported' - valid_account(start_author) - valid_permlink(start_permlink, allow_empty=True) - valid_limit(limit, 100) - - sql = """ - ---get_discussions_by_comments - SELECT hive_posts_cache.post_id, hive_posts_cache.author, hive_posts_cache.permlink, - hive_posts_cache.title, hive_posts_cache.body, hive_posts_cache.category, hive_posts_cache.depth, - hive_posts_cache.promoted, hive_posts_cache.payout, hive_posts_cache.payout_at, - hive_posts_cache.is_paidout, hive_posts_cache.children, hive_posts_cache.votes, - hive_posts_cache.created_at, hive_posts_cache.updated_at, hive_posts_cache.rshares, - hive_posts_cache.raw_json, hive_posts_cache.json, hive_accounts.reputation AS author_rep - FROM hive_posts_cache JOIN hive_accounts ON (hive_posts_cache.author = hive_accounts.name) - JOIN hive_posts ON (hive_posts_cache.post_id = hive_posts.id) - WHERE hive_posts_cache.author = :start_author AND hive_posts_cache.depth > 0 - AND NOT hive_posts.is_deleted - """ - - if start_permlink: - sql += """ - AND hive_posts_cache.post_id <= (SELECT hive_posts_cache.post_id FROM - hive_posts_cache WHERE permlink = :start_permlink AND author=:start_author) - """ - - sql += """ - ORDER BY hive_posts_cache.post_id DESC, depth LIMIT :limit - """ - - posts = [] - db = context['db'] - result = await db.query_all(sql, start_author=start_author, start_permlink=start_permlink, limit=limit) - - for row in result: - row = dict(row) - post = _condenser_post_object(row, truncate_body=truncate_body) - post['active_votes'] = _mute_votes(post['active_votes'], Mutes.all()) - posts.append(post) - - return posts + ids = await cursor.pids_by_account_comments( + context['db'], + valid_account(start_author), + valid_permlink(start_permlink, allow_empty=True), + valid_limit(limit, 100)) + return await load_posts(context['db'], ids, truncate_body=truncate_body) @return_error_info @@ -395,22 +281,6 @@ async def get_replies_by_last_update(context, start_author: str = None, start_pe limit: int = 20, truncate_body: int = 0): """Get all replies made to any of author's posts.""" assert start_author, '`start_author` cannot be blank' - #valid_account(start_author) - #valid_permlink(start_permlink, allow_empty=True) - #valid_limit(limit, 100) - - #sql = """ - # SELECT hive_posts_cache.post_id, hive_posts_cache.author, hive_posts_cache.permlink, - # hive_posts_cache.title, hive_posts_cache.body, hive_posts_cache.category, hive_posts_cache.depth, - # hive_posts_cache.promoted, hive_posts_cache.payout, hive_posts_cache.payout_at, - # hive_posts_cache.is_paidout, hive_posts_cache.children, hive_posts_cache.votes, - # hive_posts_cache.created_at, hive_posts_cache.updated_at, hive_posts_cache.rshares, - # hive_posts_cache.raw_json, hive_posts_cache.json, hive_accounts.reputation AS author_rep - # FROM hive_posts_cache JOIN hive_accounts ON (hive_posts_cache.author = hive_accounts.name) - # JOIN hive_posts ON (hive_posts_cache.post_id = hive_posts.id) - # - #""" - ids = await cursor.pids_by_replies_to_account( context['db'], valid_account(start_author), @@ -445,9 +315,14 @@ async def get_post_discussions_by_payout(context, start_author: str = '', start_ limit: int = 20, tag: str = None, truncate_body: int = 0): """Query top-level posts, sorted by payout.""" - results = await get_discussions_by('payout', context, start_author, start_permlink, - limit, tag, truncate_body) - return results + ids = await cursor.pids_by_query( + context['db'], + 'payout', + valid_account(start_author, allow_empty=True), + valid_permlink(start_permlink, allow_empty=True), + valid_limit(limit, 100), + valid_tag(tag, allow_empty=True)) + return await load_posts(context['db'], ids, truncate_body=truncate_body) @return_error_info @@ -457,9 +332,14 @@ async def get_comment_discussions_by_payout(context, start_author: str = '', sta truncate_body: int = 0): """Query comments, sorted by payout.""" # pylint: disable=invalid-name - results = await get_discussions_by('payout_comments', context, start_author, start_permlink, - limit, tag, truncate_body) - return results + ids = await cursor.pids_by_query( + context['db'], + 'payout_comments', + valid_account(start_author, allow_empty=True), + valid_permlink(start_permlink, allow_empty=True), + valid_limit(limit, 100), + valid_tag(tag, allow_empty=True)) + return await load_posts(context['db'], ids, truncate_body=truncate_body) @return_error_info diff --git a/hive/server/db.py b/hive/server/db.py index d6d81e73f22c8de8b51f5cea3823ad3bab5d0a35..e7608b4b6b12fb96ec02eeeeff4b67f81ebfd4f3 100644 --- a/hive/server/db.py +++ b/hive/server/db.py @@ -10,7 +10,6 @@ from aiopg.sa import create_engine from hive.utils.stats import Stats logging.getLogger('sqlalchemy.engine').setLevel(logging.WARNING) -logging.FileHandler('hive_database_timer.log') log = logging.getLogger(__name__) def sqltimer(function): diff --git a/hive/utils/account.py b/hive/utils/account.py index 6502f5aa61ba1b427b630b621da17ad50182a420..caf38307c378d39473ae3d997d762462679bc768 100644 --- a/hive/utils/account.py +++ b/hive/utils/account.py @@ -41,8 +41,6 @@ def safe_profile_metadata(account): website = None if website and not _valid_url_proto(website): website = 'http://' + website - if website and len(website) > 100: - website = None if profile_image and not _valid_url_proto(profile_image): profile_image = None diff --git a/hive/utils/stats.py b/hive/utils/stats.py index e5705007496df317c21c36c79860ce854707e41c..fc7d3a5543196e5d08658efeb25726a3b5a14a8a 100644 --- a/hive/utils/stats.py +++ b/hive/utils/stats.py @@ -6,10 +6,7 @@ import logging from time import perf_counter as perf from hive.utils.system import colorize, peak_usage_mb -file_handler = logging.FileHandler('database_timer.log') -file_handler.setLevel(logging.INFO) log = logging.getLogger(__name__) -log.addHandler(file_handler) def _normalize_sql(sql, maxlen=180): """Collapse whitespace and middle-truncate if needed.""" @@ -119,7 +116,6 @@ class DbStats(StatsAbstract): def check_timing(self, call, ms, batch_size): """Warn if any query is slower than defined threshold.""" - log.warning("[SQL][%dms] %s", ms, call) if ms > self.SLOW_QUERY_MS: out = "[SQL][%dms] %s" % (ms, call[:250]) log.warning(colorize(out)) diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index b7dd598b2b2833b437cf02861d2dc32202a6026d..0000000000000000000000000000000000000000 --- a/requirements.txt +++ /dev/null @@ -1,79 +0,0 @@ -aiocache==0.11.1 -aiohttp==3.6.2 -aiopg==1.0.0 -apply-defaults==0.1.4 -asn1crypto==0.24.0 -async-timeout==3.0.1 -attrs==19.3.0 -Automat==0.6.0 -certifi==2020.4.5.1 -chardet==3.0.4 -click==6.7 -colorama==0.3.7 -command-not-found==0.3 -ConfigArgParse==1.2 -configobj==5.0.6 -constantly==15.1.0 -cryptography==2.1.4 -dateparser==0.7.4 -distro-info===0.18ubuntu0.18.04.1 -funcsigs==1.0.2 -funcy==1.14 --e git+git@gitlab.syncad.com:blocktrades/hivemind.git@ca1cccc0dbc4d78fdfe009afc251f7ee760b6847#egg=hivemind -httplib2==0.9.2 -humanize==2.3.0 -hyperlink==17.3.1 -idna==2.9 -idna-ssl==1.1.0 -incremental==16.10.1 -iotop==0.6 -Jinja2==2.10 -jsonrpcserver==4.0.1 -jsonschema==2.6.0 -keyring==10.6.0 -keyrings.alt==3.0 -language-selector==0.1 -Mako==1.1.2 -Markdown==2.4.1 -MarkupSafe==1.1.1 -maya==0.6.1 -multidict==4.7.5 -netifaces==0.10.4 -PAM==0.4.2 -pdoc==0.3.2 -pendulum==2.1.0 -psycopg2-binary==2.8.5 -pyasn1==0.4.2 -pyasn1-modules==0.2.1 -pycrypto==2.6.1 -pygobject==3.26.1 -pyOpenSSL==17.5.0 -pyserial==3.4 -python-apt==1.6.5+ubuntu0.2 -python-dateutil==2.8.1 -python-debian==0.1.32 -pytz==2019.3 -pytzdata==2019.3 -pyxdg==0.25 -PyYAML==3.12 -regex==2020.4.4 -requests==2.18.4 -requests-unixsocket==0.1.5 -SecretStorage==2.3.1 -service-identity==16.0.0 -six==1.14.0 -snaptime==0.2.4 -SQLAlchemy==1.3.15 -ssh-import-id==5.7 -systemd-python==234 -toolz==0.10.0 -Twisted==17.9.0 -typing-extensions==3.7.4.2 -tzlocal==2.0.0 -ufw==0.36 -ujson==2.0.3 -unattended-upgrades==0.1 -urllib3==1.25.8 -virtualenv==15.1.0 -yarl==1.4.2 -zope.interface==4.3.2