mirror of
https://github.com/aronwk-aaron/MSState-Library-ETD.git
synced 2026-01-29 00:49:25 -06:00
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:
@@ -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
|
||||
|
||||
|
||||
@@ -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
99
app/models.py
Normal 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
29
app/schemas.py
Normal 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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user