コード例 #1
0
def update_profile(id):
    request_data = request.get_json()

    if not request_data:
        return bad_request("No input data provided")

    try:
        data = ProfileSchema().load(request_data)
    except ValidationError as error:
        return error_response(422, error.messages)

    try:
        user = User.find_by_id(id)
        profile = Profile.find_by_id(user.profile.id)

        profile.firstname = data.get('firstname').title()
        profile.lastname = data.get('lastname').title()
        profile.bio = data.get('bio')

        prof = Profile.find_by_username(data.get('username'))

        if prof is not None:
            if prof.user_id != id:
                return bad_request('Username is already taken.')

        profile.username = data.get('username')
        profile.save()

        response = jsonify({'message': 'Successfully updated your profile'})
        response.status_code = 200

        return response

    except Exception:
        return error_response(500, 'Something went wrong, please try again.')
コード例 #2
0
def check_username():
    data = request.get_json()
    user = Profile.find_by_username(data.get('username'))

    if user is not None:
        if user.id != id:
            return {'res': False}

    return {'res': True}
コード例 #3
0
def check_username(id):
    data = request.get_json()
    profile = Profile.find_by_username(data.get('username'))

    if profile is not None:
        if profile.user_id != id:
            return {'res': False}

    return {'res': True}
コード例 #4
0
def add_user(
    name,
    email,
    username='',
    avatar='',
    bio='',
    is_admin=False,
):

    profile = Profile(name=name, bio=bio, username=username)
    profile.avatar = avatar or profile.set_avatar(email)

    user = User(password='******')
    user.email = email
    user.is_admin = is_admin
    user.profile = profile

    user.save()
    return user
コード例 #5
0
def seed_users(num_of_users):
    """
    Seed the database with users.
    :param num_of_users: Number of users to seed the
    database with, default is 50.
    """
    print('Collecting users...')
    try:
        data = requests.get(
            'https://randomuser.me/api/?'
            f'results={num_of_users}'
            '&inc=name,email,login,picture,dob,location,nat'
        ).json()

        perms = Permission.query.all()

        print('Saving to database...')
        for user in data.get('results'):
            u = User(password='******')
            u.username = user.get('login')['username']
            u.email = user.get('email')
            u.created_on = random_timestamp(
                datetime.datetime(2018, 7, 1), datetime.datetime(2019, 2, 28))

            u.profile = Profile()
            u.profile.name = user.get('name')['first'] + \
                ' ' + user.get('name')['last']
            u.profile.avatar = user.get('picture')['thumbnail']
            u.profile.dob = user.get('dob')['date']
            u.profile.bio = f"Hi, I am {user.get('name')['first']} \
                from {user.get('location')['city']} \
                    {user.get('location')['state']}, {user.get('nat')}. \
                        I am a {user.get('dob')['age']} yrs old, who likes \
                            to tell jokes."
            u.profile.created_on = random_timestamp(
                datetime.datetime(2019, 1, 1), datetime.datetime(2019, 6, 30))

            u.permissions.extend(random.sample(
                perms, k=random.randrange(len(perms))))
            u.save()

        print('Setting up followers/following...')
        users = User.query.all()

        for user in users:
            following = random.sample(users, k=random.randrange(len(users)))
            user.followed.extend(following)
            user.save()

        print(f'Users table seeded with {num_of_users} users...')
    except exc.IntegrityError as error:
        db.session.rollback()
        print(f'Error: {error}')
コード例 #6
0
def add_user(name,
             email,
             username='',
             avatar='',
             bio='',
             is_admin=False,
             is_active=True,
             permissions=[]):

    profile = Profile(name=name, bio=bio)
    profile.avatar = avatar or profile.set_avatar(email)

    user = User(password='******')
    user.email = email
    user.username = username
    user.is_admin = is_admin
    user.is_active = is_active
    user.add_permissions(permissions)
    user.profile = profile

    user.save()
    return user
コード例 #7
0
def get_profile(user, username):
    a_user = Profile.find_by_username(username).user

    if a_user:
        profile = UserSchema(only=(
            'id',
            'profile',
            'followers',
            'following',
        )).dump(a_user)
        if user.profile.username != username:
            profile['isFollowing'] = user.is_following(a_user)
        return jsonify(profile)

    return not_found('User not found.')
コード例 #8
0
def add_user(firstname='', lastname='', username='', email='',
            is_admin=False, is_active=True):
    p = Profile(firstname=firstname, lastname=lastname)
    p.username = username or p.set_username()
    p.avatar = p.set_avatar(email)

    user = User(email=email, password='******', is_admin=is_admin,
                is_active=is_active, profile=p)
    user.save()
    return user
コード例 #9
0
def get_chat_messages(user):
    username = request.args.get('username', '')
    cursor = request.args.get('cursor')
    items_per_page = current_app.config['ITEMS_PER_PAGE']
    a_user = Profile.find_by_username(username).user
    nextCursor = None
    msgs = None

    if not a_user:
        return not_found('User not found.')

    try:
        query = user.get_chat_messages(a_user)
        chat = user.get_chat(a_user)

        if cursor == '0':
            msgs = query.limit(items_per_page + 1).all()
        else:
            cursor = urlsafe_base64(cursor, from_base64=True)
            msgs = query.filter(
                Message.created_on < cursor).limit(items_per_page + 1).all()

        if len(msgs) > items_per_page:
            nextCursor = urlsafe_base64(msgs[items_per_page -
                                             1].created_on.isoformat())

        # check if lrm exist
        if chat:
            lrm = LastReadMessage.find_by_pk(user.id, chat.id)

            if lrm:
                lrm.timestamp = datetime.utcnow()
            else:
                lrm = LastReadMessage()
                lrm.user_id = user.id
                lrm.chat_id = chat.id
                lrm.timestamp = datetime.utcnow()
            lrm.save()
    except Exception as e:
        db.session.rollback()
        print(e)
        return server_error('Something went wrong, please try again.')
    else:
        return {
            'data': MessageSchema(many=True).dump(msgs[:items_per_page]),
            'nextCursor': nextCursor
        }
コード例 #10
0
def get_liked_posts(user, username):
    """Get a users list of liked posts"""
    a_user = Profile.find_by_username(username).user

    if not a_user:
        return not_found('User not found.')

    cursor = request.args.get('cursor')
    items_per_page = current_app.config['ITEMS_PER_PAGE']
    nextCursor = None
    posts = None

    try:
        query = a_user.likes.order_by(Post.created_on.desc())
        if cursor == '0':
            posts = query.limit(items_per_page + 1).all()
        else:
            cursor = urlsafe_base64(cursor, from_base64=True)
            posts = query.filter(
                Post.created_on < cursor).limit(items_per_page + 1).all()
    except (exc.IntegrityError, ValueError) as e:
        db.session.rollback()
        print(e)
        return server_error('Something went wrong, please try again.')

    if len(posts) > items_per_page:
        nextCursor = urlsafe_base64(
            posts[items_per_page - 1].created_on.isoformat())

    liked_posts = []
    for p in posts[:items_per_page]:
        post = p.to_dict(user)

        if p.parent:
            post['parent'] = PostSchema(
                only=('id', 'body', 'author',)).dump(p.parent)
        liked_posts.append(post)

    return {
        'data': liked_posts,
        'nextCursor': nextCursor,
        'total': query.count(),
    }
コード例 #11
0
def add_user():
    request_data = request.get_json()

    if not request_data:
        return bad_request("No input data provided")

    try:
        data = AuthSchema().load(request_data)

        email = data.get('email')
        password = data.get('password')
        name = data.get('name')
        username = data.get('username')

        # check for existing user
        user = User.query.filter((User.email == email)
                                 | (User.username == username)).first()

        if user is not None:
            return bad_request('That user already exists.')

        # add new user to db
        profile = Profile(name=name)
        user = User(password=password)
        user.email = email
        user.username = username
        user.is_active = data.get('is_active') or False
        user.is_admin = data.get('is_admin') or False
        user.profile = profile
        user.save()

        response = jsonify(UserSchema().dump(user))
        response.status_code = 201
        response.headers['Location'] = url_for('admin.get_user', id=user.id)
        return response

    # handle errors
    except ValidationError as err:
        return error_response(422, err.messages)
    except (exc.IntegrityError, ValueError):
        db.session.rollback()
        return server_error('Something went wrong, please try again.')
コード例 #12
0
def get_followers(user, username):
    """Get list of users following a user"""
    a_user = Profile.find_by_username(username).user

    if not a_user:
        return not_found('User not found.')

    cursor = request.args.get('cursor')
    items_per_page = current_app.config['ITEMS_PER_PAGE']
    nextCursor = None
    followers = None

    try:
        query = a_user.followers.order_by(User.id.desc())

        if cursor == '0':
            followers = query.limit(items_per_page + 1).all()
        else:
            cursor = int(urlsafe_base64(cursor, from_base64=True))
            followers = query.filter(
                User.id < cursor).limit(items_per_page + 1).all()

    except (exc.IntegrityError, ValueError):
        db.session.rollback()
        return server_error('Something went wrong, please try again.')
    else:
        if len(followers) > items_per_page:
            nextCursor = urlsafe_base64(str(followers[items_per_page - 1].id))

        user_followers = []
        for a_user in followers[:items_per_page]:
            follower = UserSchema(only=('id', 'profile',)).dump(a_user)
            follower['isFollowing'] = user.is_following(a_user)
            user_followers.append(follower)

        return {
            'data': user_followers,
            'total': query.count(),
            'nextCursor': nextCursor,
        }
コード例 #13
0
def get_user_posts(user, username):
    """Get a users list of posts"""
    a_user = Profile.find_by_username(username).user

    if not a_user:
        return not_found('User not found.')

    cursor = request.args.get('cursor')
    items_per_page = current_app.config['ITEMS_PER_PAGE']
    nextCursor = None
    posts = None

    try:
        query = Post.query.with_parent(a_user).filter(
            Post.comment_id.is_(None)).order_by(Post.created_on.desc())

        if cursor == '0':
            posts = query.limit(items_per_page + 1).all()
        else:
            cursor = urlsafe_base64(cursor, from_base64=True)
            posts = query.filter(
                Post.created_on < cursor).limit(items_per_page + 1).all()
    except (exc.IntegrityError, ValueError) as e:
        db.session.rollback()
        print(e)
        return server_error('Something went wrong, please try again.')

    if len(posts) > items_per_page:
        nextCursor = urlsafe_base64(
            posts[items_per_page - 1].created_on.isoformat())

    return {
        'data': [post.to_dict(user) for post in posts[:items_per_page]],
        'nextCursor': nextCursor,
        'total': query.count(),
    }
コード例 #14
0
def register_user():
    request_data = request.get_json()

    if not request_data:
        return bad_request("No input data provided")

    try:
        data = AuthSchema().load(request_data)
    except ValidationError as err:
        return error_response(422, err.messages)

    email = data.get('email')
    password = data.get('password')
    firstname = data.get('firstname').title()
    lastname = data.get('lastname').title()

    try:
        # check for existing user
        user = User.query.filter(User.email == email).first()

        if user:
            return bad_request('Sorry. That user already exists.')

        # add new user to db
        profile = Profile(firstname=firstname, lastname=lastname)
        profile.username = profile.set_username()
        profile.avatar = profile.set_avatar(email)

        user = User(email=email, password=password, profile=profile)
        user.save()

        response = jsonify({
            'token': user.encode_auth_token(user.id).decode(),
        })
        response.status_code = 201
        response.headers['Location'] = url_for('auth.get_user', id=user.id)
        return response

    # handle errors
    except (exc.IntegrityError, ValueError):
        db.session.rollback()
        return error_response(500, 'Something went wrong, please try again.')
コード例 #15
0
def register_user():
    post_data = request.get_json()

    if not post_data:
        return bad_request("No input data provided")

    try:
        data = AuthSchema(partial=True).load(post_data)
    except ValidationError as err:
        return error_response(422, err.messages)

    name = data.get('name')
    username = data.get('username')
    email = data.get('email')
    password = data.get('password')

    # check for existing user
    user = User.query.filter(User.email == email).first()

    if user:
        return bad_request('That user already exists.')

    profile = Profile()
    profile.name = name
    profile.username = username
    profile.avatar = profile.set_avatar(email)

    user = User(password=password)
    user.email = email
    user.profile = profile

    try:
        user.save()
    except (exc.IntegrityError, ValueError):
        db.session.rollback()
        return server_error('Something went wrong, please try again.')

    response = jsonify({'token': user.encode_auth_token()})
    response.status_code = 201
    response.headers['Location'] = url_for('users.get_user', id=user.id)
    return response