Skip to content
Snippets Groups Projects
Commit 3e358504 authored by Andrzej Lisak's avatar Andrzej Lisak Committed by Jason Salyers
Browse files

[ABW]: [Change] removed vote muting functionality

[Fix] get_account_reputations no longer fails with error when account_lower_bound is skipped; also added real default value for limit (1000)
[Fix] bridge_get_ranked_post_by_trends_for_observer_communities now validates observer like other functions of the same family
[Fix] all VOLATILE get_ranked_post related SQL functions turned into STABLE
parent a5f13d51
No related branches found
No related tags found
2 merge requests!456Release candidate v1 24,!370Jsalyers muting at sql level
This commit is part of merge request !370. Comments created here will be created in the context of that merge request.
...@@ -340,6 +340,7 @@ BEGIN ...@@ -340,6 +340,7 @@ BEGIN
IF __post_id <> 0 THEN IF __post_id <> 0 THEN
SELECT hp.sc_trend INTO __trending_limit FROM hive_posts hp WHERE hp.id = __post_id; SELECT hp.sc_trend INTO __trending_limit FROM hive_posts hp WHERE hp.id = __post_id;
END IF; END IF;
__account_id = find_account_id( _observer, True );
RETURN QUERY SELECT RETURN QUERY SELECT
hp.id, hp.id,
hp.author, hp.author,
...@@ -385,9 +386,8 @@ BEGIN ...@@ -385,9 +386,8 @@ BEGIN
FROM FROM
hive_posts hp1 hive_posts hp1
JOIN hive_subscriptions hs ON hp1.community_id = hs.community_id JOIN hive_subscriptions hs ON hp1.community_id = hs.community_id
JOIN hive_accounts ha ON ha.id = hs.account_id
WHERE WHERE
ha.name = _observer AND hp1.counter_deleted = 0 AND NOT hp1.is_paidout AND hp1.depth = 0 hs.account_id = __account_id AND hp1.counter_deleted = 0 AND NOT hp1.is_paidout AND hp1.depth = 0
AND ( __post_id = 0 OR hp1.sc_trend < __trending_limit OR ( hp1.sc_trend = __trending_limit AND hp1.id < __post_id ) ) AND ( __post_id = 0 OR hp1.sc_trend < __trending_limit OR ( hp1.sc_trend = __trending_limit AND hp1.id < __post_id ) )
ORDER BY hp1.sc_trend DESC, hp1.id DESC ORDER BY hp1.sc_trend DESC, hp1.id DESC
LIMIT _limit LIMIT _limit
......
...@@ -2,7 +2,6 @@ DROP FUNCTION IF EXISTS condenser_get_account_reputations; ...@@ -2,7 +2,6 @@ DROP FUNCTION IF EXISTS condenser_get_account_reputations;
CREATE OR REPLACE FUNCTION condenser_get_account_reputations( CREATE OR REPLACE FUNCTION condenser_get_account_reputations(
in _account_lower_bound VARCHAR, in _account_lower_bound VARCHAR,
in _without_lower_bound BOOLEAN,
in _limit INTEGER in _limit INTEGER
) )
RETURNS TABLE RETURNS TABLE
...@@ -19,7 +18,7 @@ BEGIN ...@@ -19,7 +18,7 @@ BEGIN
RETURN QUERY SELECT RETURN QUERY SELECT
ha.name, ha.reputation ha.name, ha.reputation
FROM hive_accounts ha FROM hive_accounts ha
WHERE _without_lower_bound OR ( ha.name >= _account_lower_bound ) WHERE ha.name >= _account_lower_bound AND ha.id != 0 -- don't include artificial empty account
ORDER BY name ORDER BY name
LIMIT _limit; LIMIT _limit;
......
...@@ -320,8 +320,6 @@ async def get_account_posts(context, sort:str, account:str, start_author:str='', ...@@ -320,8 +320,6 @@ async def get_account_posts(context, sort:str, account:str, start_author:str='',
posts.append(post) posts.append(post)
return posts return posts
return await _get_posts(db, sort, account, start_author, start_permlink, limit, observer)
@return_error_info @return_error_info
async def get_relationship_between_accounts(context, account1, account2, observer=None): async def get_relationship_between_accounts(context, account1, account2, observer=None):
......
...@@ -11,7 +11,6 @@ from hive.server.common.mutes import Mutes ...@@ -11,7 +11,6 @@ from hive.server.common.mutes import Mutes
from hive.server.condenser_api.objects import ( from hive.server.condenser_api.objects import (
load_accounts, load_accounts,
_mute_votes,
_condenser_post_object) _condenser_post_object)
from hive.server.common.helpers import ( from hive.server.common.helpers import (
ApiError, ApiError,
...@@ -251,7 +250,6 @@ async def _load_discussion(db, author, permlink): ...@@ -251,7 +250,6 @@ async def _load_discussion(db, author, permlink):
if post['author'] not in muted_accounts: if post['author'] not in muted_accounts:
post['active_votes'] = await find_votes_impl(db, row['author'], row['permlink'], VotesPresentation.CondenserApi) post['active_votes'] = await find_votes_impl(db, row['author'], row['permlink'], VotesPresentation.CondenserApi)
post['active_votes'] = _mute_votes(post['active_votes'], muted_accounts)
posts.append(post) posts.append(post)
parent_key = _ref_parent(post) parent_key = _ref_parent(post)
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
from functools import wraps from functools import wraps
import hive.server.condenser_api.cursor as cursor import hive.server.condenser_api.cursor as cursor
from hive.server.condenser_api.objects import _mute_votes, _condenser_post_object from hive.server.condenser_api.objects import _condenser_post_object
from hive.server.common.helpers import ( from hive.server.common.helpers import (
ApiError, ApiError,
return_error_info, return_error_info,
...@@ -13,7 +13,6 @@ from hive.server.common.helpers import ( ...@@ -13,7 +13,6 @@ from hive.server.common.helpers import (
valid_offset, valid_offset,
valid_limit, valid_limit,
valid_follow_type) valid_follow_type)
from hive.server.common.mutes import Mutes
from hive.server.database_api.methods import find_votes_impl, VotesPresentation from hive.server.database_api.methods import find_votes_impl, VotesPresentation
# pylint: disable=too-many-arguments,line-too-long,too-many-lines # pylint: disable=too-many-arguments,line-too-long,too-many-lines
...@@ -84,16 +83,18 @@ async def get_reblogged_by(context, author: str, permlink: str): ...@@ -84,16 +83,18 @@ async def get_reblogged_by(context, author: str, permlink: str):
valid_permlink(permlink)) valid_permlink(permlink))
@return_error_info @return_error_info
async def get_account_reputations(context, account_lower_bound: str = None, limit: int = None): async def get_account_reputations(context, account_lower_bound: str = '', limit: int = 1000):
db = context['db'] db = context['db']
return await _get_account_reputations_impl(db, True, account_lower_bound, limit) return await _get_account_reputations_impl(db, True, account_lower_bound, limit)
async def _get_account_reputations_impl(db, fat_node_style, account_lower_bound, limit): async def _get_account_reputations_impl(db, fat_node_style, account_lower_bound, limit):
"""Enumerate account reputations.""" """Enumerate account reputations."""
if not account_lower_bound:
account_lower_bound = ''
assert isinstance(account_lower_bound, str), "invalid account_lower_bound type" assert isinstance(account_lower_bound, str), "invalid account_lower_bound type"
limit = valid_limit(limit, 1000, 1000) limit = valid_limit(limit, 1000, 1000)
sql = "SELECT * FROM condenser_get_account_reputations( '{}', {}, {} )".format( account_lower_bound, account_lower_bound is None, limit ) sql = "SELECT * FROM condenser_get_account_reputations( (:start)::VARCHAR, :limit )"
rows = await db.query_all(sql, start=account_lower_bound, limit=limit) rows = await db.query_all(sql, start=account_lower_bound, limit=limit)
if fat_node_style: if fat_node_style:
return [dict(account=r[0], reputation=r[1]) for r in rows] return [dict(account=r[0], reputation=r[1]) for r in rows]
...@@ -121,11 +122,6 @@ async def _get_content_impl(db, fat_node_style, author: str, permlink: str, obse ...@@ -121,11 +122,6 @@ async def _get_content_impl(db, fat_node_style, author: str, permlink: str, obse
result = dict(result[0]) result = dict(result[0])
post = _condenser_post_object(result, 0, fat_node_style) post = _condenser_post_object(result, 0, fat_node_style)
post['active_votes'] = await find_votes_impl(db, author, permlink, VotesPresentation.ActiveVotes if fat_node_style else VotesPresentation.CondenserApi) post['active_votes'] = await find_votes_impl(db, author, permlink, VotesPresentation.ActiveVotes if fat_node_style else VotesPresentation.CondenserApi)
if not observer:
post['active_votes'] = _mute_votes(post['active_votes'], Mutes.all())
else:
blacklists_for_user = await Mutes.get_blacklists_for_observer(observer, {'db':db})
post['active_votes'] = _mute_votes(post['active_votes'], blacklists_for_user.keys())
return post return post
...@@ -143,14 +139,11 @@ async def _get_content_replies_impl(db, fat_node_style, author: str, permlink: s ...@@ -143,14 +139,11 @@ async def _get_content_replies_impl(db, fat_node_style, author: str, permlink: s
sql = "SELECT * FROM condenser_get_content_replies(:author, :permlink)" sql = "SELECT * FROM condenser_get_content_replies(:author, :permlink)"
result = await db.query_all(sql, author=author, permlink=permlink) result = await db.query_all(sql, author=author, permlink=permlink)
muted_accounts = Mutes.all()
posts = [] posts = []
for row in result: for row in result:
row = dict(row) row = dict(row)
post = _condenser_post_object(row, get_content_additions=fat_node_style) post = _condenser_post_object(row, get_content_additions=fat_node_style)
post['active_votes'] = await find_votes_impl(db, row['author'], row['permlink'], VotesPresentation.ActiveVotes if fat_node_style else VotesPresentation.CondenserApi) post['active_votes'] = await find_votes_impl(db, row['author'], row['permlink'], VotesPresentation.ActiveVotes if fat_node_style else VotesPresentation.CondenserApi)
post['active_votes'] = _mute_votes(post['active_votes'], muted_accounts)
posts.append(post) posts.append(post)
return posts return posts
...@@ -238,11 +231,9 @@ async def get_posts_by_given_sort(context, sort: str, start_author: str = '', st ...@@ -238,11 +231,9 @@ async def get_posts_by_given_sort(context, sort: str, start_author: str = '', st
sql_result = await db.query_all(sql, tag=tag, author=start_author, permlink=start_permlink, limit=limit ) sql_result = await db.query_all(sql, tag=tag, author=start_author, permlink=start_permlink, limit=limit )
muted_accounts = Mutes.all()
for row in sql_result: for row in sql_result:
post = _condenser_post_object(row, truncate_body) post = _condenser_post_object(row, truncate_body)
post['active_votes'] = await find_votes_impl(db, row['author'], row['permlink'], VotesPresentation.CondenserApi) post['active_votes'] = await find_votes_impl(db, row['author'], row['permlink'], VotesPresentation.CondenserApi)
post['active_votes'] = _mute_votes(post['active_votes'], muted_accounts)
posts.append(post) posts.append(post)
return posts return posts
...@@ -313,8 +304,6 @@ async def get_discussions_by_blog(context, tag: str = None, start_author: str = ...@@ -313,8 +304,6 @@ async def get_discussions_by_blog(context, tag: str = None, start_author: str =
row = dict(row) row = dict(row)
post = _condenser_post_object(row, truncate_body=truncate_body) post = _condenser_post_object(row, truncate_body=truncate_body)
post['active_votes'] = await find_votes_impl(db, post['author'], post['permlink'], VotesPresentation.CondenserApi) post['active_votes'] = await find_votes_impl(db, post['author'], post['permlink'], VotesPresentation.CondenserApi)
post['active_votes'] = _mute_votes(post['active_votes'], Mutes.all())
#posts_by_id[row['post_id']] = post
posts_by_id.append(post) posts_by_id.append(post)
return posts_by_id return posts_by_id
...@@ -380,7 +369,6 @@ async def get_discussions_by_comments(context, start_author: str = None, start_p ...@@ -380,7 +369,6 @@ async def get_discussions_by_comments(context, start_author: str = None, start_p
row = dict(row) row = dict(row)
post = _condenser_post_object(row, truncate_body=truncate_body) post = _condenser_post_object(row, truncate_body=truncate_body)
post['active_votes'] = await find_votes_impl(db, post['author'], post['permlink'], VotesPresentation.CondenserApi) post['active_votes'] = await find_votes_impl(db, post['author'], post['permlink'], VotesPresentation.CondenserApi)
post['active_votes'] = _mute_votes(post['active_votes'], Mutes.all())
posts.append(post) posts.append(post)
return posts return posts
...@@ -445,15 +433,12 @@ async def get_blog(context, account: str, start_entry_id: int = 0, limit: int = ...@@ -445,15 +433,12 @@ async def get_blog(context, account: str, start_entry_id: int = 0, limit: int =
sql = "SELECT * FROM condenser_get_blog(:account, :last, :limit)" sql = "SELECT * FROM condenser_get_blog(:account, :last, :limit)"
result = await db.query_all(sql, account=account, last=start_entry_id, limit=limit) result = await db.query_all(sql, account=account, last=start_entry_id, limit=limit)
muted_accounts = Mutes.all()
out = [] out = []
for row in result: for row in result:
row = dict(row) row = dict(row)
post = _condenser_post_object(row) post = _condenser_post_object(row)
post['active_votes'] = await find_votes_impl(db, row['author'], row['permlink'], VotesPresentation.CondenserApi) post['active_votes'] = await find_votes_impl(db, row['author'], row['permlink'], VotesPresentation.CondenserApi)
post['active_votes'] = _mute_votes(post['active_votes'], muted_accounts)
out.append({"blog": account, out.append({"blog": account,
"entry_id": row['entry_id'], "entry_id": row['entry_id'],
"comment": post, "comment": post,
......
...@@ -4,7 +4,6 @@ import logging ...@@ -4,7 +4,6 @@ import logging
import ujson as json import ujson as json
from hive.utils.normalize import sbd_amount from hive.utils.normalize import sbd_amount
from hive.server.common.mutes import Mutes
from hive.server.common.helpers import json_date, get_hive_accounts_info_view_query_string from hive.server.common.helpers import json_date, get_hive_accounts_info_view_query_string
from hive.server.database_api.methods import find_votes_impl, VotesPresentation from hive.server.database_api.methods import find_votes_impl, VotesPresentation
from hive.utils.account import safe_db_profile_metadata from hive.utils.account import safe_db_profile_metadata
...@@ -19,11 +18,6 @@ async def load_accounts(db, names, lite = False): ...@@ -19,11 +18,6 @@ async def load_accounts(db, names, lite = False):
rows = await db.query_all(sql, names=tuple(names)) rows = await db.query_all(sql, names=tuple(names))
return [_condenser_account_object(row) for row in rows] return [_condenser_account_object(row) for row in rows]
def _mute_votes(votes, muted_accounts):
if not muted_accounts:
return votes
return [v for v in votes if v['voter'] not in muted_accounts]
def _condenser_account_object(row): def _condenser_account_object(row):
"""Convert an internal account record into legacy-steemd style.""" """Convert an internal account record into legacy-steemd style."""
#The member `vote_weight` from `hive_accounts` is removed, so currently the member `net_vesting_shares` is equals to zero. #The member `vote_weight` from `hive_accounts` is removed, so currently the member `net_vesting_shares` is equals to zero.
......
...@@ -2,7 +2,7 @@ from hive.server.condenser_api.methods import _get_account_reputations_impl ...@@ -2,7 +2,7 @@ from hive.server.condenser_api.methods import _get_account_reputations_impl
from hive.server.common.helpers import return_error_info from hive.server.common.helpers import return_error_info
@return_error_info @return_error_info
async def get_account_reputations(context, account_lower_bound: str = None, limit: int = None): async def get_account_reputations(context, account_lower_bound: str = '', limit: int = 1000):
db = context['db'] db = context['db']
return await _get_account_reputations_impl(db, False, account_lower_bound, limit) return await _get_account_reputations_impl(db, False, account_lower_bound, limit)
......
Subproject commit 640732ad7ed82afe9da93183e62b71f7f67b2bd9 Subproject commit 9af47554627a163d3ba2e50ebaf35fb74bdcfddf
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment