示例#1
0
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
示例#2
0
文件: cafes.py 项目: valley51/zerqu
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
示例#3
0
文件: cafes.py 项目: valley51/zerqu
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)
示例#4
0
    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()
示例#5
0
文件: cafes.py 项目: valley51/zerqu
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
示例#6
0
文件: cafes.py 项目: valley51/zerqu
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))
示例#7
0
文件: users.py 项目: valley51/zerqu
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)