from pydantic import BaseModel, EmailStr import databases import sqlalchemy import ormantic as orm from os import environ database = databases.Database(environ.get( "DATABASE_URL", "sqlite:///memes.sqlite")) metadata = sqlalchemy.MetaData() class Token(BaseModel): access_token: str token_type: str class TokenData(BaseModel): username: str = None class User(orm.Model): username: orm.String(max_length=100, unique=True) email: orm.String(max_length=100) full_name: orm.String(max_length=100) disabled: orm.Boolean() = False class UserInDB(User): hashed_password: orm.String(max_length=100) id: orm.Integer(primary_key=True) = None class Mapping: table_name = "User" metadata = metadata database = database class TicketCollection(orm.Model): name: orm.String(max_length=100) price: orm.Integer() = 0 description: orm.String(max_length=1000) = "" requires_student: orm.Boolean() = False id: orm.Integer(primary_key=True) = None class TicketCollectionDB(TicketCollection): user: orm.ForeignKey(UserInDB) class Mapping: table_name = "TicketCollection" metadata = metadata database = database class Ticket(orm.Model): id: orm.Integer(primary_key=True) = None owner: orm.String(max_length=100) email: orm.String(max_length=100, allow_null=True) = None validated: orm.Boolean() = False class TicketDB(Ticket): collection: orm.ForeignKey(TicketCollectionDB) class Mapping: table_name = "Tickets" metadata = metadata database = database class NewTicket(BaseModel): owner: str email: EmailStr = None class NewCollection(BaseModel): name: str price: float description: str = "" requires_student: bool = False class NewUser(BaseModel): username: str password: str email: EmailStr name: str # Create the database engine = sqlalchemy.create_engine(str(database.url)) metadata.create_all(engine)