JoshuaOndieki/ridemyway-api

View on GitHub
ridemyway/resources.py

Summary

Maintainability
A
0 mins
Test Coverage
"""
    Flask RestFul resources
"""

import json

from flask_restful import Resource, reqparse
from flask import current_app as app

from ridemyway.controllers.ride_controller import RideController
from ridemyway.controllers.ride_request_controller import RequestController
from .utils import errors


rides = RideController()
ride_requests = RequestController()


class Rides(Resource):
    """
        Rides Resource
    """

    def __init__(self):
        self.parser = reqparse.RequestParser()
        self.parser.add_argument('departure',
                                 help='This field cannot be blank',
                                 required=True)
        self.parser.add_argument('origin',
                                 help='This field cannot be blank',
                                 required=True)
        self.parser.add_argument('destination',
                                 help='This field cannot be blank',
                                 required=True)
        self.parser.add_argument('cost',
                                 help='This field cannot be blank',
                                 required=True)
        self.parser.add_argument('vehicle_number_plate',
                                 help='This field cannot be blank',
                                 required=True)
        self.parser.add_argument('capacity',
                                 help='This field cannot be blank',
                                 required=True)

    def post(self):
        """
            Creates a ride
        """
        data = self.parser.parse_args()
        create_ride_errors = errors.create_ride(**data)
        if create_ride_errors:
            return json.loads(json.dumps(create_ride_errors)), 400
        self.response = rides.create_ride(**data)
        return self.response, 201

    def get(self):
        """
            Fetches all rides
        """
        self.fetched_rides = rides.fetch_all()
        return(self.fetched_rides), 200


class Ride(Resource):
    """
        Ride Resource
    """

    def __init__(self):
        pass

    def get(self, ride_id):
        """
            Fetches a single ride
        """
        self.id = ride_id
        return rides.fetch_one(self.id)


class Request(Resource):
    """
        Request resource
    """

    def __init__(self):
        pass

    def post(self, ride_id):
        """
            Creates a ride request
        """
        self.id = ride_id
        return ride_requests.create_request(ride_id=self.id)


class All(Resource):
    """
        All Resource
    """

    def __init__(self):
        pass

    def get(self):
        """
            Returns:
                All database items
        """
        self.all = app.database

        return {'data': self.all}, 201