from subprocess import run from flask_sqlalchemy import SQLAlchemy from flask import Flask from datetime import datetime from constants import DB_NAME, DB_USER, DB_PW def create_database(): script = "database/mariadb_setup.sh" output = run([script, DB_NAME, DB_USER, DB_PW]) if output.returncode != 0: print("Error: couldn't create database") exit() def create_connection(): host = "localhost:3306" connection_uri = "mysql+pymysql://{user}:{pw}@{url}/{db}".format( user=DB_USER, pw=DB_PW, url=host, db=DB_NAME ) app = Flask(__name__) app.config["SQLALCHEMY_DATABASE_URI"] = connection_uri app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False db = SQLAlchemy(app) return db db = create_connection() class Glacier(db.Model): uid = db.Column(db.Integer, primary_key=True) country = db.Column(db.String(60)) name = db.Column(db.String(60)) def __init__(self, uid, country, name): self.uid = uid self.country = country self.name = name class Annual_Data(db.Model): glacier = db.relationship("Glacier", backref=db.backref("posts", lazy=True)) uid = db.Column( db.Integer, db.ForeignKey("glacier.uid"), nullable=False, primary_key=True ) surface = db.Column(db.Integer) volume = db.Column(db.Integer) thickness = db.Column(db.Integer) year = db.Column(db.Integer, primary_key=True) def __init__(self, surface, volume, thickness, year): self.surface = surface self.volume = volume self.thickness = thickness self.year = year class Annual_Change(db.Model): glacier = db.relationship("Glacier", backref=db.backref("posts", lazy=True)) uid = db.Column( db.Integer, db.ForeignKey("glacier.uid"), nullable=False, primary_key=True ) surface_change = db.Column(db.Integer) volume_change = db.Column(db.Integer) thickness_change = db.Column(db.Integer) year = db.Column(db.Integer, primary_key=True) def __init__(self, surface_change, volume_change, thickness_change, year): self.surface_change = surface_change self.volume_change = volume_change self.thickness_change = thickness_change self.year = year class User(db.Model): uid = db.Column(db.Integer, primary_key=True) registration_date = db.Column(db.DateTime, nullable=False) username = db.Column(db.String(20), nullable=False, unique=True) password = db.Column(db.String(60)) def __init__(self, uid, username, password): self.uid = uid self.registration_date = datetime.today() self.username = username self.password = password def create_tables(): db.create_all() def main(): create_database() create_tables() if __name__ == "__main__": main()