Exemple #1
0
def add_participants(username, trip_id):
    if not request.json or 'participants' not in request.json:
        return make_response(jsonify({'error': 'Missing required parameter'}),
                             422)
    participants = request.json.get('participants')

    e = create_engine("sqlite:///trip_communicator.db")
    Ses = sessionmaker(bind=e)
    session = Ses()

    trip = session.query(Trip).filter(
        and_(Trip.trip_id == trip_id, Trip.owner_name == username)).first()
    if trip is not None:
        for p in participants:
            participant = add_participant_from_response(session, p, trip)
            if participant is not None:
                session.add(participant)

        commit_and_close(session)
        return make_response(jsonify({'Response': 'OK'}), 201)

    commit_and_close(session)
    return make_response(
        jsonify(
            {'Error': 'User is not the owner of trip or trip doesn\'t exist'}),
        403)
Exemple #2
0
def get_users():
    e = create_engine("sqlite:///trip_communicator.db")
    Ses = sessionmaker(bind=e)
    session = Ses()

    users = session.query(User).all()
    r = [u.convert_to_json() for u in users]
    commit_and_close(session)
    return make_response(jsonify({'Users': r}), 201)
Exemple #3
0
def get_participants(trip_id):
    e = create_engine("sqlite:///trip_communicator.db")
    Ses = sessionmaker(bind=e)
    session = Ses()

    trip = session.query(Trip).filter_by(trip_id=trip_id).first()
    if trip is None:
        commit_and_close(session)
        return make_response(jsonify({'Response': 'Incorrect trip_id '}), 400)
    participants = session.query(Participant).filter_by(
        trip_id=trip.trip_id).all()
    commit_and_close(session)
    return make_response(
        jsonify({"Participants": [p.convert_to_json() for p in participants]}),
        201)
Exemple #4
0
def join_chat(username, trip_id):
    e = create_engine("sqlite:///trip_communicator.db")
    Ses = sessionmaker(bind=e)
    session = Ses()

    participant = session.query(Participant).filter(
        and_(Participant.trip_id == trip_id,
             Participant.username == username)).first()
    owner = session.query(Trip).filter(
        and_(Trip.trip_id == trip_id, Trip.owner_name == username)).first()

    if participant is None and owner is None:
        commit_and_close(session)
        return make_response(
            jsonify({'Response': 'Can not join to this chat'}), 403)

    return make_response(jsonify({'Response': 'OK'}), 201)
Exemple #5
0
def update_trip(username, trip_id):
    if request.json is None:
        return make_response(jsonify({'error': 'Missing required parameter'}),
                             422)

    e = create_engine("sqlite:///trip_communicator.db")
    Ses = sessionmaker(bind=e)
    session = Ses()

    user = session.query(User).filter_by(username=username).first()
    if user is None:
        commit_and_close(session)
        return make_response(jsonify({'error': 'Incorrect username'}), 400)

    trip = session.query(Trip).filter_by(trip_id=trip_id).first()

    datetime_format = '%Y-%m-%d'
    isChanged = False

    if trip is not None and trip.is_owner(user):

        if 'date_from' in request.json:
            isChanged = True
            trip.date_from = datetime.strptime(request.json['date_from'],
                                               datetime_format).date()
        if 'date_to' in request.json:
            isChanged = True
            trip.date_to = datetime.strptime(request.json['date_to'],
                                             datetime_format).date()
        if 'trip_name' in request.json:
            isChanged = True
            trip.trip_name = request.json['trip_name']
        if 'participants' in request.json:
            isChanged = True
            update_participants(request.json['participants'], trip, session)
        commit_and_close(session)
        if isChanged:
            return make_response(jsonify({'Response': 'OK'}), 201)
        return make_response(
            jsonify({'error': 'Missing at least one required parameter'}), 422)

    return make_response(
        jsonify({
            'Response':
            'User is not the owner of trip or trip doesn\'t exist'
        }), 403)
Exemple #6
0
def delete_user(username):
    e = create_engine("sqlite:///trip_communicator.db")
    Ses = sessionmaker(bind=e)
    session = Ses()

    user = session.query(User).filter_by(username=username).first()
    if user is None:
        commit_and_close(session)
        return make_response(jsonify({'Response': 'Incorrect username'}), 400)
    trips = session.query(Trip).filter_by(owner_name=username).all()
    for trip in trips:
        session.query(Participant).filter_by(trip_id=trip.trip_id).delete()
    session.query(Trip).filter_by(owner_name=username).delete()
    session.query(User).filter_by(username=username).delete()
    session.query(Participant).filter_by(username=username).delete()

    commit_and_close(session)
    return make_response(jsonify({'Response': 'OK'}), 201)
Exemple #7
0
def add_user():
    if not request.json or ('username' not in request.json
                            or 'password' not in request.json):
        return make_response(jsonify({'error': 'Missing required parameter'}),
                             422)
    username = request.json.get('username')
    password = request.json.get('password')

    e = create_engine("sqlite:///trip_communicator.db")
    Ses = sessionmaker(bind=e)
    session = Ses()

    if session.query(User).filter_by(username=username).first() is not None:
        commit_and_close(session)
        return make_response(jsonify({'error': 'Bad Request'}), 400)
    user = User(username, password)
    session.add(user)
    commit_and_close(session)

    return make_response(jsonify({'username': username}), 201)
Exemple #8
0
def get_user_trips(username):
    e = create_engine("sqlite:///trip_communicator.db")
    Ses = sessionmaker(bind=e)
    session = Ses()

    user = session.query(User).filter_by(username=username).first()
    if user is None:
        commit_and_close(session)
        return make_response(jsonify({'Response': 'Incorrect username'}), 400)
    trips = session.query(Trip).filter(Trip.owner_name == username).all()
    participants = []
    for t in trips:
        participants.append(
            session.query(Participant).filter(
                Participant.trip_id == t.trip_id).all())

    return make_response(
        jsonify([
            trips[i].convert_to_json_for_user(participants[i])
            for i in range(len(trips))
        ]), 201)
Exemple #9
0
def change_password(username):
    if not request.json or ('new_password' not in request.json
                            or 'password' not in request.json):
        return make_response(jsonify({'error': 'Missing required parameter'}),
                             422)

    current_password = request.json.get('password')
    new_password = request.json.get('new_password')

    e = create_engine("sqlite:///trip_communicator.db")
    Ses = sessionmaker(bind=e)
    session = Ses()

    user = session.query(User).filter_by(username=username).first()
    if user is None:
        commit_and_close(session)
        return make_response(jsonify({'Response': 'Incorrect username'}), 400)

    if user.verify_password(current_password):
        user.hash_password(new_password)
        commit_and_close(session)
        return make_response(jsonify({'Response': 'OK'}), 201)
    commit_and_close(session)
    return make_response(jsonify({'Response': 'Incorrect current password'}),
                         403)
Exemple #10
0
def add_trip(username):
    if not request.json or ('trip_name' not in request.json
                            or 'date_from' not in request.json
                            or 'date_to' not in request.json
                            or 'participants' not in request.json):
        return make_response(jsonify({'error': 'Missing required parameter'}),
                             422)

    datetime_format = '%Y-%m-%d'  # The format
    participants = request.json.get('participants')
    date_from = datetime.strptime(request.json.get('date_from'),
                                  datetime_format).date()
    date_to = datetime.strptime(request.json.get('date_to'),
                                datetime_format).date()
    trip_name = request.json.get('trip_name')

    e = create_engine("sqlite:///trip_communicator.db")
    Ses = sessionmaker(bind=e)
    session = Ses()

    user = session.query(User).filter_by(username=username).first()
    if user is None:
        commit_and_close(session)
        return make_response(jsonify({'Response': 'Incorrect username'}), 400)

    trip = Trip(trip_name, date_from, date_to, user)
    session.add(trip)
    session.commit()
    for p in participants:
        participant = add_participant_from_response(session, p, trip)
        if participant is not None:
            session.add(participant)
    owner_participant = Participant(user, trip)
    session.add(owner_participant)
    session.commit()
    trip_id = trip.trip_id

    session.close()
    return make_response(jsonify({'Trip id': trip_id}), 201)
Exemple #11
0
def authenticate_user():
    if not request.json or ('username' not in request.json
                            or 'password' not in request.json):
        return make_response(jsonify({'error': 'Missing required parameter'}),
                             422)

    username = request.json.get('username')
    password = request.json.get('password')

    e = create_engine("sqlite:///trip_communicator.db")
    Ses = sessionmaker(bind=e)
    session = Ses()

    user = session.query(User).filter_by(username=username).first()
    if user is None:
        commit_and_close(session)
        return make_response(jsonify({'error': 'Bad Request'}), 400)
    if not user.verify_password(password):
        commit_and_close(session)
        return make_response(jsonify({'Response': 'Wrong password'}), 401)
    commit_and_close(session)
    return make_response(jsonify({'Response': 'OK'}), 201)
Exemple #12
0
def delete_trip(username, trip_id):
    e = create_engine("sqlite:///trip_communicator.db")
    Ses = sessionmaker(bind=e)
    session = Ses()

    user = session.query(User).filter_by(username=username).first()
    if user is None:
        commit_and_close(session)
        return make_response(jsonify({'Response': 'Incorrect username'}), 400)
    trip = session.query(Trip).filter_by(trip_id=trip_id).first()

    if trip is not None and trip.is_owner(user):
        session.query(Trip).filter_by(trip_id=trip_id).delete()
        session.query(Participant).filter_by(trip_id=trip_id).delete()
        commit_and_close(session)
        return make_response(jsonify({'Response': 'OK'}), 201)
    else:
        commit_and_close(session)
        return make_response(
            jsonify({
                'Response':
                'User is not the owner of trip or trip doesn\'t exist'
            }), 403)