Database setup

Started working on Db models (not functional right now)
Schemas will need to be added to more as we go, but it's functional
Updated the configuration for the other extensions that we are using
Fixed the DB connection scheme in the config
This commit is contained in:
Aaron Kimbrell
2019-03-21 14:17:35 -05:00
parent 05c716d2d9
commit ec28417fef
5 changed files with 182 additions and 14 deletions

View File

@@ -1,6 +1,8 @@
from flask import Flask
from flask_assets import Environment
from webassets import Bundle
from app.models import db, migrate
from app.schemas import ma
from app.configuration import AppConfiguration
@@ -18,21 +20,28 @@ def create_app():
app = Flask(__name__, instance_relative_config=True)
app.config.from_object(config.flask_config)
# register_extensions(app)
register_extensions(app)
register_blueprints(app)
return app
def register_extensions(app):
"""Register extensions for Flask app
Args:
app (Flask): Flask app to register for
"""
db.init_app(app)
migrate.init_app(app=app, db=db)
ma.init_app(app)
assets = Environment(app)
assets.url = app.static_url_path
scss = Bundle('scss/site.scss', filters='libsass', output='site.css')
assets.register('scss_all', scss)
return app
# def register_extensions(app):
# db.init_app(app)
# migrate.init_app(app=app, db=db)
# ma.init_app(app)
def register_blueprints(app):
"""Register blueprints for Flask app

View File

@@ -6,7 +6,7 @@ from distutils.version import LooseVersion
class AppConfiguration(object):
"""Configuration Version"""
CONFIG_VERSION = '1.0'
CONFIG_VERSION = '2.0'
def __init__(self):
"""Creates/Parses the config.ini"""
@@ -33,17 +33,27 @@ class AppConfiguration(object):
config['CONFIG'] = {
'version': self.CONFIG_VERSION
}
config['DATABASE'] = {
'host': 'localhost',
'name': 'msstate_etd',
'user': 'msstate_etd',
'pass': 'password',
'type': 'postgresql'
config['SQLALCHEMY'] = {
'SQLALCHEMY_DATABASE_URI': 'postgresql://user:password@host:port/database',
'SQLALCHEMY_TRACK_MODIFICATIONS': 'False',
}
config['FLASK'] = {
'mode': 'default',
'secret_key': 'SECRET_KEY_NOT_SET'
}
config['FLASK-MAIL'] = {
'MAIL_SERVER': 'smtp.gmail.com',
'MAIL_PORT': '587',
'MAIL_USE_SSL': 'False',
'MAIL_USE_TLS': 'True',
'MAIL_USERNAME': 'yourname@gmail.com',
'MAIL_PASSWORD': 'password',
}
config['FLASK-USER'] = {
'USER_APP_NAME': 'MSState Library ETD',
'USER_EMAIL_SENDER_NAME': 'MSState',
'USER_EMAIL_SENDER_EMAIL': 'yourname@gmail.com',
}
# write the config.
config_path = os.path.dirname(os.path.abspath(__file__))

99
app/models.py Normal file
View File

@@ -0,0 +1,99 @@
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
import enum
from sqlalchemy_utils import ArrowType
from sqlalchemy.sql.expression import func
import arrow
import random
db = SQLAlchemy()
migrate = Migrate()
class SubmissionType(enum.Enum):
worldwide = 1
restricted = 2
embargoed = 3
class User(db.Model):
__tablename__ = 'user'
msuid = db.Column(db.Text, primary_key=True, nullable=False, unique=True)
netid = db.Column(db.Text, nullable=False)
department = db.Column(db.Text, nullable=False)
professor = db.Column(db.Text, nullable=False)
role = db.Column(,nullable=False)
first_name = db.Column(db.Text, nullable=False)
middle_name = db.Column(db.Text, nullable=False)
last_name = db.Column(db.Text, nullable=False)
prim_email = db.Column(db.Text, nullable=False)
sec_email = db.Column(db.Text, nullable=False)
prim_phone = db.Column(db.Text, nullable=False)
sec_phone = db.Column(db.Text, nullable=False)
country = db.Column(db.Text, nullable=False)
administrative_area = db.Column(db.Text, nullable=False)
locality = db.Column(db.Text, nullable=False)
postal_code = db.Column(db.Text, nullable=False)
thoroughfare = db.Column(db.Text, nullable=False)
premise = db.Column(db.Text, nullable=False)
preffirst_name = db.Column(db.Text)
prefmiddle_name = db.Column(db.Text)
preflast_name = db.Column(db.Text)
maiden_name = db.Column(db.Text, nullable=False)
birth_date = db.Column(db.Text, nullable=False)
class Notifications(db.Model):
__tablename__ = 'notifications'
id = db.Column(db.Integer, primary_key=True)
netID = db.Column(db.Text, db.ForeignKey('user.netid'), nullable=False)
text = db.Column(db.Text, nullable=False)
state = db.Column(db.Boolean, default=False)
class Submission(db.Model):
__tablename__ = 'submission'
id = db.Column(db.Integer, primary_key=True)
netid = db.Column(db.Text, db.ForeignKey('user.netid'), nullable=False)
title = db.Column(db.Text)
abstract = db.Column(db.Text)
type = db.Column(db.Text)
release_type = db.Column(Enum(SubmissionType))
ww_length = db.Column(db.Text)
signature_file = db.Column(db.Text)
state = db.Column(db.Boolean, default=False)
approved_date = db.Column(db.Text)
class Revision(db.Model):
__tablename__ = 'revision'
id = db.Column(db.Integer, primary_key=True)
sub_id = db.Column(db.Text)
file = db.Column(db.Text)
rev_num = db.Column(db.Text)
state = db.Column(db.Boolean, default=False)
class Review(db.Model):
__tablename__ = 'review'
id = db.Column(db.Integer, primary_key=True)
rev_id = db.Column(db.Integer)
reviewer_netID = db.Column(db.Text, db.ForeignKey('user.netid'), nullable=False)
# put the checklist for it and figure out how to store checklist in a not dumb way

29
app/schemas.py Normal file
View File

@@ -0,0 +1,29 @@
from flask_marshmallow import Marshmallow
from .models import User, Notifications, Submission, Revision, Review
ma = Marshmallow()
class UserSchema(ma.ModelSchema):
class Meta:
model = User
class NotificationsSchema(ma.ModelSchema):
class Meta:
model = Notifications
class SubmissionSchema(ma.ModelSchema):
class Meta:
model = Submission
class RevisionSchema(ma.ModelSchema):
class Meta:
model = Revision
class ReviewSchema(ma.ModelSchema):
class Meta:
model = Review

View File

@@ -1,10 +1,31 @@
alembic==1.0.8
arrow==0.13.1
asn1crypto==0.24.0
blinker==1.4
cffi==1.12.2
Click==7.0
cryptography==2.6.1
Flask==1.0.2
Flask-Assets==0.12
Flask-Login==0.4.1
Flask-Mail==0.9.1
flask-marshmallow==0.10.0
Flask-Migrate==2.4.0
Flask-SQLAlchemy==2.3.2
Flask-User==1.0.1.5
Flask-WTF==0.14.2
itsdangerous==1.1.0
Jinja2==2.10
libsass==0.17.0
Mako==1.0.7
MarkupSafe==1.1.0
marshmallow==2.19.1
passlib==1.7.1
pycparser==2.19
python-dateutil==2.8.0
python-editor==1.0.4
six==1.12.0
SQLAlchemy==1.3.1
webassets==0.12.1
Werkzeug==0.14.1
WTForms==2.2.1