示例#1
0
def create_bill():
    data = request.get_json() or {}

    # Request verification
    if 'id' in data:
        return errors.bad_request(
            'Your request is invalid',
            'The address id is automatically assigned by the system')

    # Update database
    bill = Bill()
    bill.from_json(data)

    db.session.add(bill)
    db.session.commit()

    # Build response
    response = jsonify(bill.to_json())
    response.status_code = 201
    response.headers['Location'] = url_for('api.get_bill', id=bill.id)

    # Logging
    logger.add(request.authorization.username, 'Create bill ({})'.format(bill))

    return response
示例#2
0
def remove_fleet_car(fleet_id, user_id):
    data = request.get_json() or {}

    # Request verification
    if not all(k in data for k in ('fleet_id', 'car_id')):
        return errors.bad_request(
            'Your request is invalid',
            'You need to specify at least fleet- and car id')

    if not Fleet.query.get(id).first():
        return errors.bad_request('Your request is invalid',
                                  'Cannot find given fleet id')

    if not Car.query.get(data['car_id']).first():
        return errors.bad_request('Your request is invalid',
                                  'Cannot find given car id')

    if not Fleet.query.get(id).first() in Car.query.get(
            data['car_id']).first().fleets:
        return errors.bad_request(
            'Your request is invalid',
            'The given car is not in the specified fleet')

    # Update database
    car = Car.query.get(data['car_id'])
    car.fleets.remove(Fleet.query.get(id))

    db.session.add(car)
    db.session.commit()

    # Logging
    logger.add(request.authorization.username,
               'Remove car from fleet ({})'.format(car))

    return info.ok('The user has been removed')
示例#3
0
def add_fleet_user(id):
    data = request.get_json() or {}

    # Request verification
    if not all(k in data for k in ('fleet_id', 'user_id')):
        return errors.bad_request(
            'Your request is invalid',
            'You need to specify at least fleet- and user id')

    if not Fleet.query.get(id).first():
        return errors.bad_request('Your request is invalid',
                                  'Cannot find given fleet id')

    if not User.query.get(data['user_id']).first():
        return errors.bad_request('Your request is invalid',
                                  'Cannot find given user id')

    if Fleet.query.get(id).first() in User.query.get(
            data['user_id']).first().fleets:
        return errors.bad_request(
            'Your request is invalid',
            'The given user is already in the specified fleet')

    # Update database
    user = User.query.get(data['user_id'])
    user.fleets.add(Fleet.query.get(id))

    db.session.add(user)
    db.session.commit()

    # Logging
    logger.add(request.authorization.username,
               'Add user to fleet ({})'.format(user))

    return info.ok('The user has been added')
示例#4
0
def create_journey():
    data = request.get_json() or {}

    # Request verification
    # Should we do a pre-check to require all fields?

    if 'id' or 'user_id' in data:
        return errors.bad_request(
            'Your request is invalid',
            'The journey- and creator id is automatically assigned by the system'
        )

    # Update database
    journey = Journey
    journey.from_json(data)
    journey.user_id = User.query.get(request.authorization.username).id

    db.session.add(journey)
    db.session.commit()

    # Build response
    response = jsonify(journey.to_json())
    response.status_code = 201
    response.headers['Location'] = url_for('api.get_address', id=journey.id)

    # Logging
    logger.add(request.authorization.username,
               'Create journey ({})'.format(journey))

    return response
示例#5
0
def create_user():
    data = request.get_json() or {}

    # Request verification
    if not all(k in data for k in ('id', 'email', 'password')):
        return errors.bad_request(
            'Your request is invalid',
            'You need to specify at least id, email and password')

    if User.query.filter_by(id=data['id']).first():
        return errors.bad_request('Your request is invalid',
                                  'The given user id is already in use')

    if User.query.filter_by(email=data['email']).first():
        return errors.bad_request('Your request is invalid',
                                  'The given email address is already in use')

    # Update database
    user = User()
    user.from_json(data)

    db.session.add(user)
    db.session.commit()

    # Build response
    response = jsonify(user.to_json())
    response.status_code = 201
    response.headers['Location'] = url_for('api.get_user', id=user.id)

    # Logging
    logger.add(request.authorization.username, 'Create user ({})'.format(user))

    return response
示例#6
0
def create_address():
    data = request.get_json() or {}

    # Request verification
    if 'id' in data:
        return errors.bad_request(
            'Your request is invalid',
            'The address id is automatically assigned by the system')

    if 'user_id' in data:
        return errors.bad_request(
            'Your request is invalid',
            'The address creator is automatically assigned by the system')

    # Update database
    address = Address()
    address.from_json(data)
    address.user_id = User.query.get(request.authorization.username).id

    db.session.add(address)
    db.session.commit()

    # Build response
    response = jsonify(address.to_json())
    response.status_code = 201
    response.headers['Location'] = url_for('api.get_address', id=address.id)

    # Logging
    logger.add(request.authorization.username,
               'Create address ({})'.format(address))

    return response
示例#7
0
def create_car():
    data = request.get_json() or {}

    # Request verification
    if 'id' not in data:
        return errors.bad_request('Your request is invalid',
                                  'You need to specify at least the car id')

    if Car.query.filter_by(id=data['id']).first():
        return errors.bad_request('Your request is invalid',
                                  'The given car id is already in use')

    # Update database
    car = Car()
    car.from_json(data)

    db.session.add(car)
    db.session.commit()

    # Build response
    response = jsonify(car.to_json())
    response.status_code = 201
    response.headers['Location'] = url_for('api.get_car', id=car.id)

    # Logging
    logger.add(request.authorization.username, 'Create car ({})'.format(car))

    return response
示例#8
0
def create_fleet():
    data = request.get_json() or {}

    # Request verification
    if 'id' in data:
        return errors.bad_request(
            'Your request is invalid',
            'The fleet id is automatically assigned by the system')

    if 'name' not in data:
        return errors.bad_request(
            'Your request is invalid',
            'You need to specify at least the fleet name')

    if Fleet.query.filter_by(name=data['name']).first():
        return errors.bad_request('Your request is invalid',
                                  'The given fleet name is already in use')

    # Update database
    fleet = Fleet()
    fleet.from_json(data)

    db.session.add(fleet)
    db.session.commit()

    # Build response
    response = jsonify(fleet.to_json())
    response.status_code = 201
    response.headers['Location'] = url_for('api.get_fleet', id=fleet.id)

    # Logging
    logger.add(request.authorization.username,
               'Create fleet ({})'.format(fleet))

    return response
示例#9
0
def get_bill_picture(id):
    pic = Bill.query.get(id).picture

    # Logging
    logger.add(request.authorization.username,
               'Get bill picture ({})'.format(id))

    return '<img src="' + pic.decode('utf-8') + '"/>'
示例#10
0
def get_bills():
    page = request.args.get('page', 1, type=int)
    per_page = min(request.args.get('per_page', 10, type=int), 100)
    data = Bill.to_json_collection(Bill.query, page, per_page, 'api.get_bills')

    # Logging
    logger.add(request.authorization.username,
               'Get all bills ({})'.format('/bills'))

    return jsonify(data)
示例#11
0
def get_fleet_cars(id):
    page = request.args.get('page', 1, type=int)
    per_page = min(request.args.get('per_page', 10, type=int), 100)
    data = Car.to_json_collection(
        Fleet.query.get_or_404(id).cars, page, per_page, 'api.get_fleet_cars')

    # Logging
    logger.add(request.authorization.username,
               'Get fleet cars ({})'.format(id))

    return jsonify(data)
示例#12
0
def get_addresses():
    page = request.args.get('page', 1, type=int)
    per_page = min(request.args.get('per_page', 10, type=int), 100)
    data = Address.to_json_collection(Address.query, page, per_page,
                                      'api.get_addresses')

    # Logging
    logger.add(request.authorization.username,
               'Request all addresses (/addresses)')

    return jsonify(data)
示例#13
0
def get_user_logs(id):
    page = request.args.get('page', 1, type=int)
    per_page = min(request.args.get('per_page', 10, type=int), 100)
    data = Log.to_json_collection(User.query.get(id).logs,
                                  page,
                                  per_page,
                                  'api.get_user_logs',
                                  id=id)

    # Logging
    logger.add(request.authorization.username, 'Get user logs ({})'.format(id))

    return jsonify(data)
示例#14
0
def get_car_journeys(id):
    page = request.args.get('page', 1, type=int)
    per_page = min(request.args.get('per_page', 10, type=int), 100)
    data = Journey.to_json_collection(Car.query.get(id).journeys,
                                      page,
                                      per_page,
                                      'api.get_car_journeys',
                                      id=id)

    # Logging
    logger.add(request.authorization.username,
               'Create car journeys ({})'.format(id))

    return jsonify(data)
示例#15
0
def delete_fleet(id):
    try:
        Fleet.query.get_or_404(id).delete()
        db.session.commit()

        # Logging
        logger.add(request.authorization.username,
                   'Delete fleet ({})'.format(id))

        return info.ok('The fleet has been deleted')

    except Exception:
        return errors.bad_request(
            'The specified fleet cannot be deleted',
            'Fleets with references to other resources like cars or users cannot be deleted'
        )
示例#16
0
def delete_car(id):
    try:
        Car.query.get_or_404(id).delete()
        db.session.commit()

        # Logging
        logger.add(request.authorization.username,
                   'Delete car ({})'.format(id))

        return info.ok('The user has been deleted')

    except Exception:
        return errors.bad_request(
            'The specified car cannot be deleted',
            'Cars with references to other resources like journeys or pools cannot be deleted'
        )
示例#17
0
def delete_address(id):
    try:
        Address.query.get_or_404(id).delete()
        db.session.commit()

        # Logging
        logger.add(request.authorization.username,
                   'Delete address ({})'.format(id))

        return info.ok('The address has been deleted')

    except Exception:
        return errors.bad_request(
            'The specified address cannot be deleted',
            'Addresses with references to other resources like journeys or users cannot be deleted'
        )
示例#18
0
def update_car(id):
    car = Car.query.get_or_404(id)
    data = request.get_json() or {}

    # Request verification
    if 'id' in data and data['id'] != car.id:
        return errors.bad_request('Your request is invalid',
                                  'The user id cannot be changed')

    # Update database
    car.from_json(data)
    db.session.commit()

    # Logging
    logger.add(request.authorization.username, 'Update car ({})'.format(car))

    return info.ok('The car has been updated')
示例#19
0
def update_user(id):
    user = User.query.get_or_404(id)
    data = request.get_json() or {}

    # Request verification
    if 'id' in data and data['id'] != user.id:
        return errors.bad_request('Your request is invalid',
                                  'The user id cannot be changed')

    if 'email' in data and data['email'] != user.email and User.query.filter_by(
            email=data['email']).first():
        return errors.bad_request('Your request is invalid',
                                  'The given email address is already in use')

    # Update database
    user.from_json(data)
    db.session.commit()

    # Logging
    logger.add(request.authorization.username, 'Update user ({})'.format(user))

    return info.ok('The user has been updated')
示例#20
0
def update_address(id):
    address = Address.query.get_or_404(id)
    data = request.get_json() or {}

    # Request verification
    if 'id' in data and data['id'] != address.id:
        return errors.bad_request('Your request is invalid',
                                  'The address id cannot be changed')

    if 'user_id' in data:
        return errors.bad_request(
            'Your request is invalid',
            'The address creator is automatically assigned by the system')

    # Update database
    address.from_json(data)
    db.session.commit()

    # Logging
    logger.add(request.authorization.username,
               'Update address ({})'.format(address))

    return info.ok('The address has been updated')
示例#21
0
def update_fleet(id):
    fleet = Fleet.query.get_or_404(id)
    data = request.get_json() or {}

    # Request verification
    if 'id' in data and data['id'] != fleet.id:
        return errors.bad_request('Your request is invalid',
                                  'The fleet id cannot be changed')

    if 'name' in data and data['name'] != fleet.name and Fleet.query.filter_by(
            name=data['name']).first():
        return errors.bad_request('Your request is invalid',
                                  'The given fleet name is already in use')

    # Update database
    fleet.from_json(data)
    db.session.commit()

    # Logging
    logger.add(request.authorization.username,
               'Update fleet ({})'.format(fleet))

    return info.ok('The fleet has been updated')
示例#22
0
def get_address(id):
    # Logging
    logger.add(request.authorization.username,
               'Request address ({})'.format(id))

    return jsonify(Address.query.get_or_404(id).to_json())
示例#23
0
def get_journey(id):
    # Logging
    logger.add(request.authorization.username, 'Get journey ({})'.format(id))

    return jsonify(Journey.query.get_or_404(id).to_json())
示例#24
0
def get_user_journeys_journey(user_id, journey_id):
    # Logging
    logger.add(request.authorization.username,
               'Get user journey ({})'.format(id))

    return jsonify(Journey.query.get(journey_id).to_json())
示例#25
0
def get_bill(id):
    # Logging
    logger.add(request.authorization.username, 'Get bill ({})'.format(id))

    return jsonify(Bill.query.get_or_404(id).to_json())
示例#26
0
def get_role(id):
    # Logging
    logger.add(request.authorization.username, 'Get role ({})'.format(id))

    return jsonify(Role.query.get_or_404(id).to_json())
示例#27
0
def get_fleet(id):
    # Logging
    logger.add(request.authorization.username, 'Get fleet ({})'.format(id))

    return jsonify(Fleet.query.get_or_404(id))