Merge remote-tracking branch 'origin/Database' into auth

This commit is contained in:
Jordan Stremming
2019-03-21 14:19:47 -05:00
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