Esempio n. 1
0
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.')
Esempio n. 2
0
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
Esempio n. 3
0
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()
Esempio n. 4
0
                            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()