Beispiel #1
0
app = Flask(__name__)

app.jinja_env.auto_reload = True
app.config['TEMPLATES_AUTO_RELOAD'] = True

app.config['SECRET_KEY'] = os.getenv('SECRET_KEY') or 'you-will-never-guess'
app.config['CAS_SERVER'] = 'https://fed.princeton.edu/cas'
app.config['CAS_AFTER_LOGIN'] = '******'
cas = CAS(app)
bootstrap = Bootstrap(app)

dummy = "mongodb://*****:*****@ds237989.mlab.com:37989/heroku_cqcm2pgv"
MONGODB_URI = os.getenv('MONGODB_URI') or dummy
app.config['MONGODB_SETTINGS'] = {'db': 'users', 'host': MONGODB_URI}

db = MongoEngine(app)

from app.models import User
admin = Admin(app, 'TigerMenu Alerts')


class UserView(ModelView):
    def is_accessible(self):
        return cas.username == "ax2"


admin.add_view(UserView(User))

from app import routes
Beispiel #2
0
from flask import Flask
from config import Configuration
from flask_sqlalchemy import SQLAlchemy

from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager

from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView

from flask_sslify import SSLify


app = Flask(__name__)
app.config.from_object(Configuration)
sslify = SSLify(app)

db = SQLAlchemy(app)

migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)

from models import *

admin = Admin(app)
admin.add_view(ModelView(User, db.session))
admin.add_view(ModelView(Clothes, db.session))
Beispiel #3
0
def configure_admin(app, admin_models):
    admin = Admin(app, name="Store backend")
    for admin_view in admin_models:
        admin.add_view(admin_view(Product, db.session))
Beispiel #4
0
        return self._feed_user_choices(form)

    def edit_form(self, obj):
        form = super(TweetView, self).edit_form(obj)
        return self._feed_user_choices(form)

    # Correct user_id reference before saving
    def on_model_change(self, form, model, is_created):
        user_id = model.get('user_id')
        model['user_id'] = ObjectId(user_id)

        return model


# Flask views
@app.route('/')
def index():
    return '<a href="/admin/">Click me to get to Admin!</a>'


if __name__ == '__main__':
    # Create admin
    admin = Admin(app, name='Example: PyMongo')

    # Add views
    admin.add_view(UserView(db.user, 'User'))
    admin.add_view(TweetView(db.tweet, 'Tweets'))

    # Start app
    app.run(debug=True)
class BookView(ModelView):
    can_create = False
    can_delete = False
    can_edit = False
    column_list = ['title', 'author', 'is_checked_out']
    list_template = 'custom_list.html'

    # def __init__(self, *args, **kwargs):
    #     super().__init__(*args, **kwargs)
    #     self.static_folder = 'static'

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.static_folder = 'static'

    def get_query(self):
        return self.session.query(
            self.model).filter(self.model.is_checked_out == True)


admin = Admin(app,
              name='Hogwarts Library',
              template_mode='bootstrap3',
              index_view=BookView(Book,
                                  db.session,
                                  name='Check In',
                                  url='/admin',
                                  endpoint='admin'))

from . import routes
Beispiel #6
0
if os.getenv('APP_MODE') == "PRODUCTION":
    votr.config.from_object('production_settings')
else:
    votr.config.from_object('config')

db.init_app(votr)  # Initialize the database
# db.create_all(app=votr)  # Create the database

migrate = Migrate(votr, db, render_as_batch=True)

# create celery object
celery = make_celery(votr)

admin = Admin(votr,
              name='Dashboard',
              index_view=TopicView(Topics,
                                   db.session,
                                   url='/admin',
                                   endpoint='admin'))
admin.add_view(AdminView(Users, db.session))
admin.add_view(AdminView(Polls, db.session))
admin.add_view(AdminView(Options, db.session))
admin.add_view(AdminView(UserPolls, db.session))


@votr.route('/')
def home():
    return render_template('index.html')


@votr.route('/signup', methods=['GET', 'POST'])
def signup():
Beispiel #7
0
def create_app(config=None, env=None):
    app = Flask(__name__)
    app.config.from_object('config')

    db.init_app(app)

    users_ds = SQLAlchemyUserDatastore(db, User, Role)
    security = Security(app, users_ds)

    admin = Admin(app,
                  'Quiz',
                  base_template='',
                  index_view=UserView(User, db.session, url='/admin'),
                  template_mode='bootstrap3')

    admin.add_view(QuestionView(Question, db.session, url='/admin/question'))
    admin.add_view(AnswerView(Answer, db.session, url='/admin/Answer'))

    @app.route('/')
    def root():
        return render_template('index.html')

    @app.route('/game')
    def game():
        session['score'] = 0
        return redirect('/game/1', 302)

    @app.route('/answer/<int:qid>/<int:aid>')
    def answer(qid, aid):
        if 'score' not in session:
            session['score'] = 0

        q = Question.query.filter_by(id=qid).all()

        if len(q) < 1:
            return jsonify({"err": "Invalid question id"})

        q = q[0]

        a = Answer.query.filter_by(id=aid).all()
        if len(a) < 1:
            return jsonify({"err": "Invalid answer id"})

        if a[0].correct:
            session['score'] += 10

        return jsonify({"correct": a[0].correct})

    @app.route('/game/<int:idx>')
    def gamebyid(idx):
        if 'score' not in session:
            session['score'] = 0

        q = Question.query.filter_by(id=idx).all()[0]
        a = q.answers
        random.shuffle(a)
        return render_template('game.html',
                               question=q,
                               answers=a,
                               score=session['score'])

    @app.before_first_request
    def before_first_request():
        print("[*] Migrating database ")
        db.drop_all()
        print("[DB]: Cleaned up")
        db.create_all()
        print("[DB]: Schema deployed")

        users_ds.find_or_create_role(name='admin', description='Administrator')
        users_ds.find_or_create_role(name='user', description='user')

        password = utils.hash_password(config.SECRET_KEY)
        users_ds.create_user(email='*****@*****.**', password=password)

        db.session.commit()

        # Add admin role to user
        users_ds.add_role_to_user('*****@*****.**', 'admin')
        db.session.commit()

        # Load questions and correct answers from file
        q = [Question(body=q) for q in open("q.txt", "r").read().splitlines()]
        a = [
            Answer(body=a, correct=True)
            for a in open("a.txt", "r").read().splitlines()
        ]

        for question in q:
            db.session.add(question)

        db.session.commit()

        for answer in a:
            db.session.add(answer)
            q[a.index(answer)].answers.append(answer)

        db.session.commit()

        # Load false answers from file

        for l in open("f.txt", "r").read().splitlines():
            data = l.split(",")
            answers = [Answer(body=a, correct=False) for a in data[0:3]]
            for a in answers:
                db.session.add(answer)
                q[int(data[3]) - 1].answers.append(a)

        db.session.commit()

    return app
Beispiel #8
0
def create_app_test():
    app = Flask(__name__)

    # import configuration
    # cfg = os.path.join(os.getcwd(), 'app', 'config', config_name + '.py')
    app.config.from_object(config_test.Config)
    # app.config.from_pyfile(cfg)
    app.secret_key = Config.SECRET_KEY

    # initialize extensions
    bootstrap.init_app(app)
    db.init_app(app)

    # login manager for admin
    lm.init_app(app)

    babel.init_app(app)
    # print(babel.list_translations())
    # print(babel.default_locale)
    # print(babel.default_timezone)
    # print(babel.translation_directories)
    csrf.init_app(app)
    mail.init_app(app)

    # admin page
    admin = Admin(app,
                  "Administration",
                  base_template='my_master.html',
                  index_view=MyAdminIndexView(),
                  template_mode="bootstrap3")
    admin.add_view(SkilvitAdminModelView(PatientDB, db.session))
    admin.add_view(SkilvitAdminModelView(PraticienDB, db.session))
    admin.add_view(
        SkilvitAdminModelView(RelationPatientPraticienDB, db.session))
    admin.add_view(
        SkilvitAdminModelView(DemandeConnexionPatientPraticienDB, db.session))
    admin.add_view(SkilvitAdminModelView(SituationDB, db.session))
    admin.add_view(SkilvitAdminModelView(TacheDB, db.session))
    admin.add_view(SkilvitAdminModelView(QuestionnaireDB, db.session))
    admin.add_view(SkilvitAdminModelView(AnnotationEntree, db.session))
    admin.add_view(SkilvitAdminModelView(SuiviPatient, db.session))
    admin.add_view(SkilvitAdminModelView(AlimentationDB, db.session))
    admin.add_view(SkilvitAdminModelView(SommeilDB, db.session))
    admin.add_view(SkilvitAdminModelView(GlycemieDB, db.session))
    admin.add_view(SkilvitAdminModelView(ActivitePhysiqueDB, db.session))
    admin.add_view(SkilvitAdminModelView(Anamnese, db.session))
    admin.add_view(SkilvitAdminModelView(MasseDB, db.session))
    admin.add_view(SkilvitAdminModelView(PriseMedicamentDB, db.session))

    # migration
    migrate.init_app(app, db)
    moment.init_app(app)

    @lm.user_loader
    def load_user(user_id):
        return PatientDB.query.get(int(user_id))

    # import blueprints
    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)
    print("application lancée")
    return app
Beispiel #9
0
from datetime import datetime
from flask import g, redirect, request, url_for
from flask_admin import Admin, AdminIndexView, expose
from flask_admin.contrib.sqla import ModelView
from flask_admin.menu import MenuLink

from app import app, db 
from models import Book, LPElement, User

class AdminAuthentication(object):
  def is_accessible(self):
    return g.user.is_authenticated and g.user.is_admin()

class BaseModelView(AdminAuthentication, ModelView):
  pass

class IndexView(AdminIndexView):
  @expose('/')
  def index(self):
    if not (g.user.is_authenticated and g.user.is_admin()):
      return redirect(url_for('login', next=request.path))
    return self.render('admin/index.html', now=datetime.utcnow())

admin = Admin(app, 'Searchinator Admin', index_view=IndexView())
admin.add_view(ModelView(Book, db.session))
admin.add_view(ModelView(LPElement, db.session))
admin.add_view(ModelView(User, db.session))
admin.add_link(MenuLink(name='Back to App', url='/'))
Beispiel #10
0
from flask_admin.contrib.sqla import ModelView

from flask_login import LoginManager, current_user

from config import Config

app = Flask(__name__)
app.config.from_object(Config)

db = SQLAlchemy(app)
migrate = Migrate(app, db)

login = LoginManager(app)

from models import Project
admin = Admin(app, base_template='custom_admin.html')


def prefix_name(obj, file_data):
    parts = os.path.splitext(file_data.filename)
    return secure_filename("file-%s%s" % parts)


class ProjectModelView(ModelView):

    form_extra_fields = {
        "photo": form.FileUploadField("photo", base_path="static/img")
    }

    def _change_path_data(self, _form):
        try:
Beispiel #11
0
# src/__init__.py

import os

from flask import Flask
from flask_admin import Admin
from flask_cors import CORS
from flask_sqlalchemy import SQLAlchemy
from werkzeug.middleware.proxy_fix import ProxyFix  # new

# instantiate the extensions
db = SQLAlchemy()
cors = CORS()
admin = Admin(template_mode="bootstrap3")


def create_app(script_info=None):

    # instantiate the app
    app = Flask(__name__)
    app.wsgi_app = ProxyFix(app.wsgi_app,
                            x_for=1,
                            x_proto=1,
                            x_host=1,
                            x_port=1)  # new

    # set config
    app_settings = os.getenv("APP_SETTINGS")
    app.config.from_object(app_settings)

    # set up extensions
Beispiel #12
0
class InitialPanAdminView(AdminMixinDelegator, AdminIndexView):
    pass


"""method "generate_slug()" in admin-pannel don't works without this method. flask-admin works differently
    compared to the class of our model Post and Tag"""

class ModifyedModelViewMethod(ModelView):

    def on_model_change(self, form, model, is_created):
        model.generate_slug()
        return super(ModifyedModelViewMethod, self).on_model_change(form,model,is_created)

class PostAdminView(AdminView, ModifyedModelViewMethod): #Repair problem with "generate_slug" function
    form_columns = ['title', 'body','tags','created'] #wich fields to show
class TagAdminView(AdminView, ModifyedModelViewMethod):
    form_columns = ['tagname', 'posts'] #wich fields to show

admin=Admin(app, "Back_to_Blog",url='/', index_view=InitialPanAdminView(name='HomeBookmark'))
admin.add_view(PostAdminView(Post, db.session))
admin.add_view(TagAdminView(Tag, db.session))

################# ###########################


###Flask-security

user_datastore=SQLAlchemyUserDatastore(db, User, Role)
security=Security(app, user_datastore)

Beispiel #13
0
        return redirect(url_for('admin.login_view'))


class FileManager(FileAdmin):
    def is_accessible(self):
        if current_user.is_authenticated:
            return True
        return False

    def inaccessible_callback(self, name, **kwargs):
        return redirect(url_for('admin.login_view'))


admin = Admin(app,
              name='管理中心',
              base_template='admin/my_master.html',
              index_view=MyAdminIndexView(name='首页',
                                          template='admin/index.html',
                                          url='/admin'))
admin.add_view(HashView(Search_Hash, db.session, name='磁力Hash'))
admin.add_view(KeywordsView(Search_Keywords, db.session, name='首页推荐'))
admin.add_view(TagsView(Search_Tags, db.session, name='搜索记录'))
admin.add_view(StatusreportView(Search_Statusreport, db.session, name='爬取统计'))
admin.add_view(FileManager(file_path, '/uploads/', name='文件管理'))
admin.add_view(UserView(User, db.session, name='用户管理'))


@manager.command
def init_db():
    db.create_all()
    db.session.commit()
Beispiel #14
0
    
    form_ajax_refs = {
        'author': {
            'fields': (User.name, User.email),
        },
    }
    
class UserModelView(SlugModelView):
    column_list = ['email', 'name', 'active', 'created_timestamp']
    column_filters = ('email', 'name', 'active')
    column_searchable_list = ['email', 'name']
    form_columns = ['email', 'password', 'name', 'active']
    
    form_extra_fields = {
        'password': PasswordField('New password'),
    }
    def on_model_change(self, form, model, is_created):
        if form.password.data:
            model.password_hash = User.make_password(form.password.data)
            return super(UserModelView, self).on_model_change(form, model, is_created)


admin = Admin(app, 'Blog Admin', index_view=IndexView())
admin.add_view(EntryModelView(Entry, db.session))
admin.add_view(ModelView(Tag, db.session))
admin.add_view(UserModelView(User, db.session))
admin.add_view(
    BlogFileAdmin(app.config['STATIC_DIR'], '/static/', name='Static Files'))


Beispiel #15
0
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt
from flask_login import LoginManager
from flask_mail import Mail
from loginpage.config import Config
from flask_admin import Admin

db = SQLAlchemy()
bcrypt = Bcrypt()
login_manager = LoginManager()
login_manager.login_view = 'users.login'
login_manager.login_message_category = 'info'
mail = Mail()
# admin = Admin(template_mode='bootstrap3')
admin = Admin(name='Dashboard')
# user_manager = UserManager()
# security = Security()
# appbuilder = AppBuilder()


def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(Config)

    from loginpage.models import User, Post, Role, db, MyModelView, MyPostView, MyUserView, MyAdminIndexView
    db.init_app(app)
    with app.app_context():
        db.create_all()

    admin.init_app(app, index_view=MyAdminIndexView())
Beispiel #16
0

class BaseModelView(ModelView):
    def on_model_change(self, form, model, is_created):
        model.generate_slug()
        return super(BaseModelView, self).on_model_change(form, model, is_created)


class AdminView(AdminMixin, ModelView):
    pass

class HomeAdminView(AdminMixin, AdminIndexView):
    pass


class PostAdminView(AdminMixin, BaseModelView):
    form_columns = ['title', 'body', 'tags']

class TagAdminView(AdminMixin, BaseModelView):
    form_columns = ['name', 'posts']


admin = Admin(app, 'FlaskApp',  url='/', index_view=HomeAdminView(name='Home'))
admin.add_view(PostAdminView(Post, db.session))
admin.add_view(TagAdminView(Tag, db.session))


# Flask security

user_datastore = SQLAlchemyUserDatastore(db, User, Role)
security = Security(app, user_datastore)
Beispiel #17
0
        return current_user.is_authenticated

    #跳转
    def inaccessible_callback(self, name, **kwargs):
        return redirect(url_for('security.login', next=request.url))

    #后台首页
    @expose('/')
    def index(self):
        return self.render('admin/index.html')

# admin = Admin(name='chahua3287',index_view=MyAdminIndexView())



admin = Admin(name='home',template_mode="bootstrap3",
              index_view= MyAdminIndexView())
from .user import UserModelView
from .shop import ShopModelView

admin.add_view(UserModelView(User, db.session, name = u'用户管理'))
admin.add_view(ShopModelView(Shop_Info, db.session, name = u'商铺管理'))
admin.add_view(ModelView(Role, db.session))
admin.add_view(ModelView(Addr,db.session))
admin.add_view(ModelView(Product_Category,db.session))
admin.add_view(ModelView(Product_info,db.session))
admin.add_view(ModelView(Brand_info,db.session))
admin.add_view(ModelView(Sku_price,db.session))
admin.add_link(AuthenticatedMenuLink(name = 'logout',
                                     endpoint='security.logout'))
admin.add_view(ModelView(Cart_master,db.session))
admin.add_view(ModelView(Cart_detail,db.session))
Beispiel #18
0
from flask_admin import Admin
from app.admin.view import MyView, UserAdmin, ArticleAdmin
from app.models.auth import User
from app.models.article import Article
from app.models.base import db

admin = Admin(name='后台管理系统',
              index_view=MyView(name='导航栏'),
              base_template='admin/my_master.html')

admin.add_view(UserAdmin(User, db.session, name='用户信息'))
admin.add_view(ArticleAdmin(Article, db.session, name='文章'))

class UserTools(ModelView):
    """User tools"""
    can_create = False
    can_delete = True
    page_size = 50
    column_list = ['email', 'active', 'roles']
    form_edit_rules = ['email', 'active', 'roles']
    column_searchable_list = ['email']


class VacationTools(ModelView):
    """Vacation Tools"""
    can_create = False
    can_delete = False
    column_searchable_list = [
        User.email, AvaliableVacationDay.avaliable_day, State.name
    ]


admin = Admin(app, name="Vacation Manager", index_view=MyAdminIndexView())
admin.add_link(MenuLink(name='Home Page', url='/', category='Go To'))
admin.add_link(MenuLink(name='Logout', url='/logout', category='Go To'))
admin.add_view(UserTools(User, db.session))
admin.add_view(VacationTools(UserAvaliableVacationDays, db.session))

user_manager = UserManager(app, db, User)
# pylint: disable=wrong-import-position
from vacation_manager import routes, models
Beispiel #20
0
                      static_url_path='/static/site',
                      static_folder='qr_hunt/static')
app.register_blueprint(blueprint)

qrcode = QRcode(app)


class Controller(ModelView):
    def is_accessible(self):
        return current_user.is_admin

    def not_auth(self):
        return "You Are Not Authorized to Use Admin Pannel"


admin = Admin(app, name='Control Panel')
admin.add_view(Controller(User, db.session))
admin.add_view(Controller(Cluestack, db.session))
admin.add_view(Controller(Clue, db.session))


@login.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))


@app.route('/')
@app.route('/home')
def home():
    # generate urls and display only the once done
    if current_user.is_authenticated:
Beispiel #21
0
    column_filters = ['course']
    page_size = 25
    form_choices = {
        "status": [('набирается', 'набирается'), ("набрана", "набрана"),
                   ("идет", "идет"), ("в архиве", "в архиве")],
        "course": [("python", "python"), ("vue", "vue"), ("django", "django"),
                   ("php", "php"), ("html", "html")]
    }

    def is_accessible(self):
        return current_user.is_authenticated


class UserView(ModelView):
    column_exclude_list = ['password']
    column_searchable_list = ['name', 'mail']
    form_choices = {
        "role": [('user', 'Пользователь'), ("admin", "Адмнистратор")]
    }

    def is_accessible(self):
        return current_user.is_authenticated


admin = Admin(app, template_mode='bootstrap3', index_view=DashboardView())

admin.add_view(UserView(User, db.session))
admin.add_view(GroupView(Group, db.session))
admin.add_view(ApplicantView(Applicant, db.session))
admin.add_view(MailsView(name='Письма', endpoint='mail'))
Beispiel #22
0
# views templates folder. Any folder in app.channels can contain templates
folders = []
channels_folder = os.path.dirname(os.path.realpath(__file__)) + "/channels"
for root, dirs, files in os.walk(channels_folder):
    for d in dirs:
        folders.append("%s/%s" % (channels_folder, d))

portal_loader = jinja2.ChoiceLoader([
    app.jinja_loader,
    jinja2.FileSystemLoader(folders),
])
app.jinja_loader = portal_loader

from app.controller import DashboardController

controller = DashboardController()

from app.models import User

admin = Admin(app, name='dashboard', template_mode='bootstrap3')
admin.add_view(ModelView(User, db.session))

from app.views import DashboardView

DashboardView.register(app, route_base='/')


@app.before_request
def before_request():
    controller.before_request()
Beispiel #23
0
security = Security(app, user_datastore, confirm_register_form=ExtendedRegisterForm)


# register blueprints
app.register_blueprint(gateway_blueprint)
app.register_blueprint(job_management_blueprint)
app.register_blueprint(talent_management_blueprint)

# FIXME don't leave this in this state -- here because I want to temporarily disable something in feeds controller...
from app_src.feed_module.controllers import feed_blueprint
app.register_blueprint(feed_blueprint)


# creates the admin panel
# FIXME build this elsewhere...
admin = Admin(app, name='SHOW ME WHAT YOU GOT! v0.0.1-ALPHA', template_mode='bootstrap3', url="/peekaboo")

user_modelview_with_roles = UserView(User, db.session)
admin.add_view(user_modelview_with_roles)

app_role_modelview = AppRoleView(Role, db.session)
admin.add_view(app_role_modelview)

job_role_modelview = JobRoleView(OfferingRole, db.session)
admin.add_view(job_role_modelview)

job_level_modelview = JobLevelView(OfferingLevel, db.session)
admin.add_view(job_level_modelview)

job_locations_modelview = JobLocationsView(OfferingLocation, db.session)
admin.add_view(job_locations_modelview)
Beispiel #24
0
from flask import Flask
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from config import Config

app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate = Migrate(app, db)
app.config['FLASK_ADMIN_SWATCH'] = 'cerulean'
admin = Admin(app, name='homeserver', template_mode='bootstrap3')

from src.controllers.bvg import bvg_endpoints
from src.controllers.weather import weather_endpoints
from src.controllers.gkeep import gkeep_endpoints
from src.controllers.cryptocurrencies import crypto_endpoints
from src.controllers.home import home_endpoints
from src.models.configuration import Configuration
from src.models.cryptocurrencies import CryptoWalletConfig, CryptoWalletManualAssets, ETHBlockchainAddresses

admin.add_view(ModelView(Configuration, db.session))
admin.add_view(ModelView(CryptoWalletConfig, db.session))
admin.add_view(ModelView(CryptoWalletManualAssets, db.session))
admin.add_view(ModelView(ETHBlockchainAddresses, db.session))

app.register_blueprint(bvg_endpoints)
app.register_blueprint(weather_endpoints)
app.register_blueprint(gkeep_endpoints)
app.register_blueprint(crypto_endpoints)
Beispiel #25
0
from flask import redirect, url_for, request
from flask_admin import Admin
from flask_admin.contrib import sqla
from flask.ext.login import current_user

admin = Admin(name='jazzband', template_mode='bootstrap3')


class JazzbandModelView(sqla.ModelView):
    def is_accessible(self):
        if not current_user.is_authenticated:
            return False
        return bool(current_user.is_roadie)

    def inaccessible_callback(self, name, **kwargs):
        # redirect to login page if user doesn't have access
        return redirect(url_for('account.login', next=request.url))
                    full_url,
                    '%s_%s' % (api_name, callback.__name__),
                    self.auth_wrapper(callback, provider),
                    methods=provider.allowed_methods,
                    strict_slashes=False,
                )


default_auth = AppAuthentication(app_auth=True)
data_api = DataRestAPI(app,
                       prefix="/data/api/v0.1",
                       default_auth=default_auth,
                       name="data_api")

admin = Admin(app,
              name="NZ ORCiD Hub",
              template_mode="bootstrap3",
              base_template="admin/master.html")

SENTRY_DSN = app.config.get("SENTRY_DSN")
if SENTRY_DSN:
    sentry_sdk.init(
        SENTRY_DSN,
        integrations=[FlaskIntegration(),
                      RqIntegration(),
                      RedisIntegration()],
        debug=app.debug,
        environment=app.config.get("ENV"),
        attach_stacktrace=True,
        traces_sample_rate=app.config["SENTRY_TRACES_SAMPLE_RATE"],
        with_locals=True,
        send_default_pii=True)
Beispiel #27
0
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView

db = SQLAlchemy()
admin = Admin(template_mode='bootstrap3')

app = Flask(__name__)
app.config['SECRET_KEY'] = '123456790'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db.init_app(app)
admin.init_app(app)

####################################################################
# model


class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(128))
    text = db.Column(db.Text)
    date = db.Column(db.Date)

    def __str__(self):
        return "{}".format(self.title)


####################################################################
# form
Beispiel #28
0
def test_modal_edit():
    # bootstrap 2 - test edit_modal
    app_bs2 = Flask(__name__)
    admin_bs2 = Admin(app_bs2, template_mode="bootstrap2")

    edit_modal_on = MockModelView(Model,
                                  edit_modal=True,
                                  endpoint="edit_modal_on")
    edit_modal_off = MockModelView(Model,
                                   edit_modal=False,
                                   endpoint="edit_modal_off")
    create_modal_on = MockModelView(Model,
                                    create_modal=True,
                                    endpoint="create_modal_on")
    create_modal_off = MockModelView(Model,
                                     create_modal=False,
                                     endpoint="create_modal_off")
    admin_bs2.add_view(edit_modal_on)
    admin_bs2.add_view(edit_modal_off)
    admin_bs2.add_view(create_modal_on)
    admin_bs2.add_view(create_modal_off)

    client_bs2 = app_bs2.test_client()

    # bootstrap 2 - ensure modal window is added when edit_modal is enabled
    rv = client_bs2.get('/admin/edit_modal_on/')
    eq_(rv.status_code, 200)
    data = rv.data.decode('utf-8')
    ok_('fa_modal_window' in data)

    # bootstrap 2 - test edit modal disabled
    rv = client_bs2.get('/admin/edit_modal_off/')
    eq_(rv.status_code, 200)
    data = rv.data.decode('utf-8')
    ok_('fa_modal_window' not in data)

    # bootstrap 2 - ensure modal window is added when create_modal is enabled
    rv = client_bs2.get('/admin/create_modal_on/')
    eq_(rv.status_code, 200)
    data = rv.data.decode('utf-8')
    ok_('fa_modal_window' in data)

    # bootstrap 2 - test create modal disabled
    rv = client_bs2.get('/admin/create_modal_off/')
    eq_(rv.status_code, 200)
    data = rv.data.decode('utf-8')
    ok_('fa_modal_window' not in data)

    # bootstrap 3
    app_bs3 = Flask(__name__)
    admin_bs3 = Admin(app_bs3, template_mode="bootstrap3")

    admin_bs3.add_view(edit_modal_on)
    admin_bs3.add_view(edit_modal_off)
    admin_bs3.add_view(create_modal_on)
    admin_bs3.add_view(create_modal_off)

    client_bs3 = app_bs3.test_client()

    # bootstrap 3 - ensure modal window is added when edit_modal is enabled
    rv = client_bs3.get('/admin/edit_modal_on/')
    eq_(rv.status_code, 200)
    data = rv.data.decode('utf-8')
    ok_('fa_modal_window' in data)

    # bootstrap 3 - test modal disabled
    rv = client_bs3.get('/admin/edit_modal_off/')
    eq_(rv.status_code, 200)
    data = rv.data.decode('utf-8')
    ok_('fa_modal_window' not in data)

    # bootstrap 3 - ensure modal window is added when edit_modal is enabled
    rv = client_bs3.get('/admin/create_modal_on/')
    eq_(rv.status_code, 200)
    data = rv.data.decode('utf-8')
    ok_('fa_modal_window' in data)

    # bootstrap 3 - test modal disabled
    rv = client_bs3.get('/admin/create_modal_off/')
    eq_(rv.status_code, 200)
    data = rv.data.decode('utf-8')
    ok_('fa_modal_window' not in data)
Beispiel #29
0
#!/usr/bin/env python
# encoding: utf-8
import os
import time

from flask import current_app

from flask_admin import Admin
from flask_login import LoginManager
from flask_mail import Mail
from flask_jwt import JWT
from flask_redis import FlaskRedis
from raven.contrib.flask import Sentry
from slackclient import SlackClient

from application.services.theme import _reload_template, _get_template_name


sc = SlackClient("xoxb-68385490752-9gPeX5F6krKS84C1LO6moByC")
jwt = JWT()
mail = Mail()
admin = Admin()
redis = FlaskRedis()
login_manager = LoginManager()
sentry = Sentry()
Beispiel #30
0
def start_api(HOST="0.0.0.0", PORT=None):

    with app.app_context():
        db.init_app(app)
        db.create_all()
        # populate the database
        for i in range(300):
            secret = hashlib.sha256(bytes(i)).hexdigest()
            reader = Person(name="Reader " + str(i),
                            email="reader_email" + str(i),
                            password=secret)
            author = Person(name="Author " + str(i),
                            email="author_email" + str(i))
            book = Book(title="book_title" + str(i))
            review = Review(reader_id=reader.id,
                            book_id=book.id,
                            review="review " + str(i))
            publisher = Publisher(name="name" + str(i))
            publisher.books.append(book)
            reader.books_read.append(book)
            author.books_written.append(book)
            for obj in [reader, author, book, publisher, review]:
                db.session.add(obj)

            db.session.commit()

        swagger_host = HOST
        if PORT and PORT != 80:
            swagger_host += ":{}".format(PORT)

        custom_swagger = {
            "info": {
                "title": "New Title"
            },
            "securityDefinitions": {
                "ApiKeyAuth": {
                    "type": "apiKey",
                    "in": "header",
                    "name": "My-ApiKey"
                }
            }
        }  # Customized swagger will be merged

        api = SAFRSAPI(
            app,
            host=swagger_host,
            port=PORT,
            prefix=OAS_PREFIX,
            api_spec_url=OAS_PREFIX + "/swagger",
            custom_swagger=custom_swagger,
            schemes=["http", "https"],
            description=description,
        )

        # Flask-Admin Config
        admin = Admin(app, url="/admin")

        for model in [Person, Book, Review, Publisher]:
            # add the flask-admin view
            admin.add_view(sqla.ModelView(model, db.session))
            # Create an API endpoint
            api.expose_object(model)