from random import randrange
from datetime import date
import os, base64
import json
from __init__ import app, db
from sqlalchemy.exc import IntegrityError
class Schedule(db.Model):
__tablename__ = 'f1schedule' # table name is plural, class name is singular
# Define the User schema with "vars" from object
id = db.Column(db.Integer, primary_key=True)
_raceName = db.Column(db.String(255), unique=True, nullable=False)
_date = db.Column(db.String, unique=False, nullable=False)
_circuit = db.Column(db.String(255), unique=False, nullable=False)
_location = db.Column(db.String(255), unique=False, nullable=False)
def __init__(self, raceName, date, circuit, location):
self._raceName = raceName
self._date = date
self._circuit = circuit
self._location = location
def __str__(self):
return f"{self.raceName} on {self._date} at {self._circuit} in {self._location}."
def __cmp__(self, other):
return self._raceName == other._raceName
@property
def raceName(self):
return (self._raceName)
@raceName.setter
def raceName(self, raceName):
self._raceName = raceName
@property
def date(self):
return (self._date)
@date.setter
def date(self, date):
self._date = date
@property
def circuit(self):
return (self._circuit)
@circuit.setter
def circuit(self, circuit):
self._circuit = circuit
@property
def location(self):
return (self._location)
@location.setter
def location(self, location):
self._location = location
def create(self): # Create
try:
db.session.add(self)
db.session.commit()
return self
except IntegrityError:
db.session.remove()
return None
def read(self): # Read
return {
"id": self.id,
"raceName": self._raceName,
"date": self._date,
"circuit": self._circuit,
"location": self._location,
}
def update(self, raceName="", date="", circuit="", location=""): # Update
"""only updates values with length"""
if len(raceName) > 0:
self._raceName = raceName
if len(date) > 0:
self._date = date
if len(circuit) > 0:
self._circuit = circuit
if len(location) > 0:
self._location = location
db.session.commit()
return self
def delete(self): # Delete
db.session.delete(self)
db.session.commit()
def initSchedule():
"""Create database and tables"""
db.create_all()
"""Tester data for table"""
u1 = Schedule('Monaco Grand Prix', '(2023,5,28)', 'Monaco Circuit', 'Monaco')
u2 = Schedule('Singapore Grand Prix', '(2023,9,17)','Marina Bay Street Circuit', 'Singapore')
u3 = Schedule('Bahrain Grand Prix', '(2023,3,31)','Bahrain International Circuit','Bahrain')
u4 = Schedule('Australian Grand Prix','(2023,3,24)','Albert Park Circuit', 'Melbourne')
# raceName, date, circuit, location
users = [u1, u2, u3, u4]
"""Builds sample user/note(s) data"""
for user in users:
try:
'''add user/post data to table'''
user.create()
except IntegrityError:
'''fails with bad or duplicate data'''
db.session.remove()
print(f"Records exist, duplicate email, or error: {user.uid}")
from flask import Blueprint, request, jsonify
from flask_restful import Api, Resource # used for REST API building
from datetime import datetime
from model.schedule import Schedule
# variable name, prefix, and name to match variable
schedule_api = Blueprint('schedule_api', __name__,
url_prefix='/api/f1schedule/')
# API docs https://flask-restful.readthedocs.io/en/latest/api.html
api = Api(schedule_api)
class UserAPI:
class _Create(Resource): # alter to support your needs
def post(self):
pass
class _Read(Resource):
def get(self):
schedules = Schedule.query.all() # read/extract all users from database
json_ready = [schedule.read() for schedule in schedules] # prepare output in json
return jsonify(json_ready)
class _Update(Resource):
def update(self):
body = request.get_json()
id = body.get('circuit')
driver = ''
numChamps = ''
races = ''
try:
driver = body.get("date")
except:
pass
try:
numChamps = body.get("location")
except:
pass
try:
races = body.get("raceName")
except:
pass
team = Schedule.query.get(id)
team.update(driver, numChamps, races)
class _Delete(Resource):
def delete(self):
body = request.get_json()
id = body.get('id')
team = Schedule.query.get(id)
team.delete()
return f"{team.read()} Has been deleted"
# building RESTapi endpoint
api.add_resource(_Create, '/create')
api.add_resource(_Read, '/')
Video Link