def setup_db(): if not os.path.exists('./aetel.db'): print('Creating database...') user_datastore = SQLAlchemySessionUserDatastore(db_session, User, Role) init_db() print('Creating admin role...') admin_role = user_datastore.find_or_create_role( name='admin', description='Administrator') member_role = user_datastore.find_or_create_role( name='member', description='Miembro Activo') db_session.commit() print('Adding admin to database...') user_datastore.create_user(email='*****@*****.**', password='******', dni='00000001A', year=99, degree='AA', school='00', first_name='Michael Ignatius', last_name='Thomas Malloc', telegram="aetelbot", roles=[admin_role, member_role]) db_session.commit() user_datastore.create_user(email='*****@*****.**', password='******', dni='00000002A', year=99, degree='AA', school='00', first_name='kek', last_name='kek', telegram="kekkek", roles=['member']) db_session.commit() setup_fake_data() print('Database created.') else: print('Database already exists.')
def create_app(config_file): # create and configure the app app = Flask(__name__, instance_relative_config=True) # set logger and log-handler and log-level so that Gunicorn and Flask share guni_logger = logging.getLogger('gunicorn.error') app.logger.handlers = guni_logger.handlers app.logger.setLevel(guni_logger.level) # ensure the instance folder exists try: os.makedirs(app.instance_path) except OSError as e: # already exists pass app.config.from_pyfile(config_file) user_store = SQLAlchemySessionUserDatastore(db.session, user.User, role.Role) # TODO w/ user_store can create_role() etc. # https://pythonhosted.org/Flask-Security/api.html#flask_security.datastore.SQLAlchemyUserDatastore security = Security(app, user_store, register_form=ButtRegisterForm) with app.app_context(): db.init_app(app) migrate.init_app(app, db) ''' The application factory runs when `flask db upgrade` is called in entrypoint. At this stage we don't have `roles` relations available. So we let `user_store` fail silently on first try. This allows the `db upgrade` to set up all relations, which enables us to create these roles once gunicorn starts. ''' try: # create arcsi roles: # `admin` => access to whole service, # `host` => acces to their show, # `guest` => acces to their episode user_store.find_or_create_role(name='admin', description='Radio staff') user_store.find_or_create_role(name='host', description='Show host') user_store.find_or_create_role(name='guest', description='Episode guest') db.session.commit() except ProgrammingError as err: pass from arcsi import api from arcsi import view app.register_blueprint(api.arcsi) app.register_blueprint(view.router) return app
from manager.user import User, Role # Include these so that all the associated postgres tables get created. from manager.question import Question from manager.answer import Answer, Answerset from manager.feedback import Feedback with app.app_context(): user_datastore = SQLAlchemySessionUserDatastore(db.session, User, Role) security = Security(app, user_datastore) # this sets some app.config # Create any database tables that don't exist yet. db.create_all() # Create the Roles "admin" and "end-user" -- unless they already exist user_datastore.find_or_create_role(name='admin', description='Administrator') user_datastore.find_or_create_role(name='user', description='End user') admin_email = os.environ['ADMIN_EMAIL'] # create admin user if not user_datastore.get_user(admin_email): user_datastore.create_user( email=admin_email, username='******', password=os.environ['ADMIN_PASSWORD'], active=True, confirmed_at=datetime.now(), ) # Commit any database changes; the User and Roles must exist before we can add a Role to the User db.session.commit()
secondary='roles_users', backref=db.backref('users', lazy='dynamic')) # borrows = db.relationship('Borrow', secondary='borrow_users', # backref=db.backref('users', lazy='dynamic')) class Book(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), nullable=False) author = db.Column(db.String(80), nullable=False) number = db.Column(db.Integer, nullable=False) summary = db.Column(db.Integer, nullable=False) max_time = db.Column(db.Integer, nullable=False) class Borrow(db.Model): id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, nullable=False) book_id = db.Column(db.Integer, nullable=False) start_time = db.Column(db.DateTime, nullable=False) end_time = db.Column(db.DateTime, nullable=False) user_datastore = SQLAlchemySessionUserDatastore(db.session, User, Role) security = Security(app, user_datastore) db.create_all() user_datastore.find_or_create_role(name='User') user_datastore.find_or_create_role(name='Admin') db.session.commit()