pyfedi/app/api/alpha/utils/community.py

62 lines
1.9 KiB
Python

from app import cache
from app.api.alpha.views import community_view
from app.utils import authorise_api_user
from app.models import Community, CommunityMember
from app.utils import communities_banned_from
@cache.memoize(timeout=3)
def cached_community_list(type, user_id):
if type == 'Subscribed' and user_id is not None:
communities = Community.query.filter_by(banned=False).join(CommunityMember).filter(CommunityMember.user_id == user_id)
banned_from = communities_banned_from(user_id)
if banned_from:
communities = communities.filter(Community.id.not_in(banned_from))
else:
communities = Community.query.filter_by(banned=False)
return communities.all()
def get_community_list(auth, data):
type = data['type_'] if data and 'type_' in data else "All"
page = int(data['page']) if data and 'page' in data else 1
limit = int(data['limit']) if data and 'limit' in data else 10
if auth:
try:
user_id = authorise_api_user(auth)
except Exception as e:
raise e
else:
user_id = None
communities = cached_community_list(type, user_id)
start = (page - 1) * limit
end = start + limit
communities = communities[start:end]
communitylist = []
for community in communities:
communitylist.append(community_view(community=community, variant=2, stub=True, user_id=user_id))
list_json = {
"communities": communitylist
}
return list_json
def get_community(auth, data):
if not data or ('id' not in data and 'name' not in data):
raise Exception('missing_parameters')
if 'id' in data:
community = int(data['id'])
elif 'name' in data:
community = data['name']
try:
community_json = community_view(community=community, variant=3)
return community_json
except:
raise