from fastapi import FastAPI, Form from isbnlib import meta from sqlalchemy import create_engine, Column, Integer, String, TEXT from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker # Declare Base and setup tables Base = declarative_base() class User(Base): __tablename__ = 'User' id = Column(Integer, primary_key=True, autoincrement=True) Username = Column(String(50)) FirstName = Column(String(50)) LastName = Column(String(50)) Email = Column(String(50)) class Book(Base): __tablename__ = 'Book' id = Column(Integer, primary_key=True, autoincrement=True) userid = Column(Integer) Title = Column(TEXT) Author = Column(TEXT) # Connect to database and establish a session engine = create_engine('mysql+pymysql://library:jdSCAd6KEqfbpzh9NT4x@db.dandembinski.com:3306/Library') engine.connect() Session = sessionmaker(bind=engine) session = Session() # Initialize FastAPI and setup routes app = FastAPI() @app.get('/') async def root(): return {"message": "Hello World"} @app.post('/checkin/') async def checkin(isbn: str = Form(...)): info = await getMeta(isbn) session.add(Book(userid=1, Title=info['Title'], Author=info['Authors'])) session.commit() return {"Checked in": info['Title']} @app.get('/checkout/{isbn}') async def checkout(isbn): return {"Checked Out": isbn} @app.get('/getbooks/{userid}') async def getbooks(userid): books = [] result = session.query(Book).filter(Book.userid == userid) for each in result: books.append(each) return books @app.post('/lookup') async def lookup(isbn: str = Form(...)): info = await getMeta(isbn) return {"Title": info['Title']} async def getMeta(isbn): info = meta(isbn, service='wiki') return info