def get_following_cafe_ids(user_id): q = db.session.query(Cafe.id).filter_by(status=Cafe.STATUS_OFFICIAL) official = {cafe_id for cafe_id, in q} following = CafeMember.get_user_following_cafe_ids(user_id) q = db.session.query(Cafe.id).filter_by(user_id=user_id) mine = {cafe_id for cafe_id, in q} return official | following | mine
def create_cafe_topic(slug): cafe = Cafe.cache.first_or_404(slug=slug) if not current_user.is_active: raise InvalidAccount(description='Your account is not active') if cafe.permission == Cafe.PERMISSION_PUBLIC: CafeMember.get_or_create(cafe.id, current_user.id) form = TopicForm.create_api_form() topic = form.create_topic(current_user.id) with db.auto_commit(): cafe.create_cafe_topic(topic.id, current_user.id) data = dict(topic) data['user'] = dict(current_user) data['content'] = topic.html return jsonify(data), 201
def list_cafes(): data, cursor = cursor_query(Cafe) data = list(iter_items_with_users(data)) if not current_user or request.args.get('cursor'): return jsonify(data=data, cursor=cursor) cafe_ids = CafeMember.get_user_following_cafe_ids(current_user.id) following = Cafe.cache.get_many(cafe_ids) following = list(iter_items_with_users(following)) return jsonify(following=following, data=data, cursor=cursor)
def create_membership(self, permission, total): item = Cafe( name=u'hello', slug='hello', user_id=2, permission=permission ) db.session.add(item) db.session.commit() for i in range(total): username = '******' % i user = User(username=username, email='*****@*****.**' % username) db.session.add(user) db.session.commit() member = CafeMember(cafe_id=item.id, user_id=user.id) member.role = random.choice([ CafeMember.ROLE_VISITOR, CafeMember.ROLE_SUBSCRIBER, CafeMember.ROLE_MEMBER, CafeMember.ROLE_ADMIN, ]) db.session.add(member) db.session.commit()
def join_cafe(slug): cafe = Cafe.cache.first_or_404(slug=slug) ident = (cafe.id, current_user.id) item = CafeMember.query.get(ident) if item and item.role != CafeMember.ROLE_VISITOR: return '', 204 if item: item.created_at = datetime.datetime.utcnow() else: item = CafeMember(cafe_id=cafe.id, user_id=current_user.id) if cafe.user_id == current_user.id: item.role = CafeMember.ROLE_ADMIN else: item.role = CafeMember.ROLE_SUBSCRIBER try: with db.auto_commit(): db.session.add(item) except IntegrityError: raise Conflict(description='You already joined the cafe') return '', 204
def list_cafe_users(slug): cafe = Cafe.cache.first_or_404(slug=slug) members, pagination = pagination_query( CafeMember, CafeMember.user_id, cafe_id=cafe.id ) user_ids = [o.user_id for o in members] users = User.cache.get_dict(user_ids) data = [] for item in members: key = str(item.user_id) if key in users: rv = dict(item) rv['user'] = dict(users[key]) data.append(rv) admin_ids = CafeMember.get_cafe_admin_ids(cafe.id) admin_ids.add(cafe.user_id) admins = User.cache.get_many(admin_ids) return jsonify(admins=admins, data=data, pagination=dict(pagination))
def view_user_cafes(username): user = User.cache.first_or_404(username=username) cafe_ids = CafeMember.get_user_following_cafe_ids(user.id) cafes = Cafe.cache.get_many(cafe_ids) data = list(iter_items_with_users(cafes)) return jsonify(data=data)