Example #1
0
def configure_admin_panel(app):
    # Admin panel
    LOGIN_ENABLED = app.config['LOGIN_ENABLED']
    if LOGIN_ENABLED:
        from conekt.controllers.admin.views import MyAdminIndexView

        from conekt.controllers.admin.views.ecc import ECCView
        from conekt.controllers.admin.views.sequences import AddSequenceDescriptionsView
        from conekt.controllers.admin.views.expression_profiles import AddExpressionProfilesView
        from conekt.controllers.admin.views.expression_networks import AddCoexpressionNetworkView
        from conekt.controllers.admin.views.expression_networks import ExpressionNetworkMethodAdminView
        from conekt.controllers.admin.views.expression_specificity import AddSpecificityView
        from conekt.controllers.admin.views.expression_specificity import ConditionTissueAdminView
        from conekt.controllers.admin.views.expression_specificity import ExpressionSpecificityMethodAdminView
        from conekt.controllers.admin.views.go_interpro import AddInterProView
        from conekt.controllers.admin.views.go_interpro import AddGOView
        from conekt.controllers.admin.views.go_interpro import AddFunctionalDataView
        from conekt.controllers.admin.views.go_interpro import GOEnrichmentView
        from conekt.controllers.admin.views.go_interpro import PredictGOView
        from conekt.controllers.admin.views.families import AddFamiliesView, AddFamilyAnnotationView
        from conekt.controllers.admin.views.families import GeneFamilyMethodAdminView
        from conekt.controllers.admin.views.species import AddSpeciesView
        from conekt.controllers.admin.views.species import SpeciesAdminView
        from conekt.controllers.admin.views.trees import AddTreesView
        from conekt.controllers.admin.views.expression_clusters import BuildNeighorhoodToClustersView
        from conekt.controllers.admin.views.expression_clusters import BuildCoexpressionClustersView
        from conekt.controllers.admin.views.expression_clusters import AddCoexpressionClustersView
        from conekt.controllers.admin.views.expression_clusters import ClusterSimilaritiesView
        from conekt.controllers.admin.views.expression_clusters import CoexpressionClusteringMethodAdminView
        from conekt.controllers.admin.views.clades import AddCladesView
        from conekt.controllers.admin.views.clades import CladesAdminView
        from conekt.controllers.admin.views.xrefs import AddXRefsFamiliesView
        from conekt.controllers.admin.views.xrefs import AddXRefsView
        from conekt.controllers.admin.views.controls import ControlsView
        from conekt.controllers.admin.views.news import NewsAdminView
        from conekt.controllers.admin.views.trees import TreeMethodAdminView
        from conekt.controllers.admin.views.trees import ReconcileTreesView

        from conekt.models.users import User
        from conekt.models.species import Species
        from conekt.models.gene_families import GeneFamilyMethod
        from conekt.models.expression.coexpression_clusters import CoexpressionClusteringMethod
        from conekt.models.expression.networks import ExpressionNetworkMethod
        from conekt.models.expression.specificity import ExpressionSpecificityMethod
        from conekt.models.condition_tissue import ConditionTissue
        from conekt.models.clades import Clade
        from conekt.models.news import News
        from conekt.models.trees import TreeMethod

        admin = Admin(template_mode='bootstrap3', base_template='admin/my_base.html')

        admin.init_app(app, index_view=MyAdminIndexView(template='admin/home.html'))

        # Add views used to build the database

        admin.add_view(AddSpeciesView(name='Species', endpoint='admin.add.species', url='add/species/', category='Add'))
        admin.add_view(AddSequenceDescriptionsView(name='Sequence Descriptions',
                                                   endpoint='admin.add.sequence_descriptions',
                                                   url='add/sequence_descriptions/', category='Add'))

        admin.add_menu_item(MenuLink("------------", class_name="divider", url='#'), target_category='Add')
        admin.add_menu_item(MenuLink("Functional Annotation", class_name="disabled", url="#"), target_category='Add')

        admin.add_view(AddFunctionalDataView(name='GO and InterPro definitions',
                                             endpoint='admin.add.functional_data',
                                             url='add/functional_data/', category='Add'))

        admin.add_view(AddGOView(name='GO Genes',
                                 endpoint='admin.add.go_sequences',
                                 url='add/go/', category='Add'))

        admin.add_view(AddInterProView(name='InterPro Genes',
                                       endpoint='admin.add.interpro_sequences',
                                       url='add/interpro/', category='Add'))

        admin.add_menu_item(MenuLink("------------", class_name="divider", url='#'), target_category='Add')
        admin.add_menu_item(MenuLink("Expression", class_name="disabled", url="#"), target_category='Add')

        admin.add_view(AddExpressionProfilesView(name='Expression profiles',
                                                 endpoint='admin.add.expression_profiles',
                                                 url='add/expression_profiles/', category='Add'))

        admin.add_view(AddCoexpressionNetworkView(name='Coexpression network',
                                                  endpoint='admin.add.coexpression_network',
                                                  url='add/coexpression_network/', category='Add'))

        admin.add_view(AddCoexpressionClustersView(name='Coexpression clusters',
                                                   endpoint='admin.add.coexpression_clusters',
                                                   url='add/coexpression_clusters/', category='Add'))

        admin.add_view(AddSpecificityView(name='Expression Specificity',
                                          endpoint='admin.add.expression_specificity',
                                          url='add/expression_specificity/', category='Add'))

        admin.add_menu_item(MenuLink("------------", class_name="divider", url='#'), target_category='Add')
        admin.add_menu_item(MenuLink("Comparative Genomics", class_name="disabled", url="#"), target_category='Add')

        admin.add_view(AddFamiliesView(name='Gene Families',
                                       endpoint='admin.add.families',
                                       url='add/families/', category='Add'))

        admin.add_view(AddTreesView(name='Trees',
                                    endpoint='admin.add.trees',
                                    url='add/trees/', category='Add'))

        admin.add_view(AddCladesView(name='Clades',
                                     endpoint='admin.add.clades',
                                     url='add/clades/', category='Add'))

        admin.add_menu_item(MenuLink("------------", class_name="divider", url='#'), target_category='Add')
        admin.add_menu_item(MenuLink("Misc.", class_name="disabled", url="#"), target_category='Add')

        admin.add_view(AddXRefsView(name='XRefs Genes',
                                    endpoint='admin.add.xrefs',
                                    url='add/xrefs/', category='Add'))

        admin.add_view(AddXRefsFamiliesView(name='XRefs Families',
                                            endpoint='admin.add.xrefs_families',
                                            url='add/xrefs_families/', category='Add'))

        # Build Menu
        admin.add_menu_item(MenuLink("Update Counts", url="/admin_controls/update/counts", class_name="confirmation"),
                            target_category='Build')
        admin.add_menu_item(MenuLink("------------", class_name="divider", url='#'), target_category='Build')
        admin.add_menu_item(MenuLink("Assign Clades", url="/admin_controls/update/clades", class_name="confirmation"),
                            target_category='Build')

        admin.add_view(AddFamilyAnnotationView(name='Family-wise annotation',
                                               endpoint='admin.add.family_annotation',
                                               url='build/family_annotation/', category='Build'))

        admin.add_view(ReconcileTreesView(name='Reconcile Trees', endpoint='admin.reconcile_trees',
                                          url='build/reconciled_trees', category='Build'))

        admin.add_view(ECCView(name='Expression Context Conservations (ECC)', endpoint='admin.ecc',
                               url='build/ecc/', category='Build'))
        admin.add_menu_item(MenuLink("------------", class_name="divider", url='#'), target_category='Build')
        admin.add_menu_item(MenuLink("Co-expression Clusters", class_name="disabled", url="#"), target_category='Build')

        admin.add_view(ClusterSimilaritiesView(name='Cluster Similarities', endpoint='admin.clustersimilarities',
                                               url='build/cluster_similarities/',
                                               category='Build'))
        admin.add_view(GOEnrichmentView(name='Cluster GO Enrichment', endpoint='admin.goenrichment',
                                        url='build/go_enrichment/',
                                        category='Build'))
        admin.add_view(BuildCoexpressionClustersView(name='HCCA Clusters',
                                                     endpoint='admin.build.hcca_clusters',
                                                     url='build/hcca_clusters/', category='Build'))
        admin.add_view(BuildNeighorhoodToClustersView(name='Neighborhood to clusters',
                                                      endpoint='admin.build.neighborhood_to_clusters',
                                                      url='build/neighborhood_to_clusters/', category='Build'))
        admin.add_menu_item(MenuLink("------------", class_name="divider", url='#'), target_category='Build')
        admin.add_view(PredictGOView(name='Predict GO from neighborhood', endpoint='admin.predict.go',
                                     url='predict/go', category='Build'))

        # Control panel
        admin.add_view(ControlsView(name='Controls', endpoint='admin.controls', url='controls/'))

        # CRUD for various database tables
        admin.add_view(NewsAdminView(News, db.session,
                                     endpoint='admin.news',
                                     url='news', category='Browse'))
        admin.add_view(SpeciesAdminView(Species, db.session, url='species', category='Browse'))
        admin.add_view(CladesAdminView(Clade, db.session, url='clades', category='Browse', name='Clades'))
        admin.add_view(ConditionTissueAdminView(ConditionTissue, db.session, url='condition_tissue/',
                                                category="Browse", name='Condition to Tissue'))

        admin.add_menu_item(MenuLink("------------", class_name="divider", url='#'), target_category='Browse')
        admin.add_menu_item(MenuLink("Methods", class_name="disabled", url="#"), target_category='Browse')

        admin.add_view(GeneFamilyMethodAdminView(GeneFamilyMethod, db.session, url='families', category="Browse",
                                                 name='Gene Families'))
        admin.add_view(TreeMethodAdminView(TreeMethod, db.session, url='trees', category="Browse",
                                           name='Tree Methods'))
        admin.add_view(ExpressionNetworkMethodAdminView(ExpressionNetworkMethod, db.session, url='networks',
                                                        category="Browse", name='Expression Networks'))
        admin.add_view(CoexpressionClusteringMethodAdminView(CoexpressionClusteringMethod, db.session, url='clusters',
                                                             category="Browse", name='Coexpression Clustering'))
        admin.add_view(ExpressionSpecificityMethodAdminView(ExpressionSpecificityMethod, db.session, url='specificity',
                                                            category="Browse", name='Expression Specificity'))
Example #2
0
    @expose('/')
    def index(self):
        return self.render('send_email.html')

    can_delete = False

    def is_accessible(self):
        return current_user.has_roles('Admin')


# these are the views needed to display tables in the Admin section

admin.add_view(MyModelView(User, db.session))
admin.add_view(MyModelView6(Role, db.session))
admin.add_view(MyModelView2(Employee, db.session))
admin.add_view(MyModelView5(Todo, db.session))
admin.add_view(AdminViewStore(Store, db.session))
admin.add_view(AdminViewClass(Course, db.session))
admin.add_view(AdminViewClass4(Grade, db.session))
admin.add_menu_item(MenuLink(name='Main Site', url='/', category="Links"))
admin.add_view(hreditor(hrfiles, db.session))
admin.add_view(MyModelView8(Incidentnumbers, db.session, category="Paul"))
admin.add_view(MyModelView9(Saltlog, db.session))
admin.add_view(MyModelViewReclaim(reclaimtank, db.session, category="Paul"))
admin.add_view(MyModelView10(cwmaintenance, db.session, category="Paul"))
#admin.add_view(MyModelView11(Employee, db.session))
admin.add_view(EmailView(name='Email', endpoint='email'))
#admin.add_sub_category(name = "Links", parent_name="Team")

from flaskblog import routes
Example #3
0
def create_app(config, register_blueprints=True):
    app = Flask(__name__)
    app.config.from_object(config)

    convention = {
        "ix": 'ix_%(column_0_label)s',
        "uq": "uq_%(table_name)s_%(column_0_name)s",
        "ck": "ck_%(table_name)s_%(constraint_name)s",
        "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
        "pk": "pk_%(table_name)s"
    }
    MetaData(naming_convention=convention)
    db.init_app(app)

    #app.config['PROFILE'] = True
    #app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[30])

    # This needs to be after db is instantiated for migrate to discover
    from portal.user.models import Role, User
    from portal.account.models import Account
    from portal.vps.models import Vps
    from portal.vendor.models import Vendor
    from portal.transfer.models import Transfer
    from portal.bank_account.models import BankAccount
    from portal.permission.models import Permission
    Migrate(app, db)

    db_adapter = SQLAlchemyAdapter(db, User)
    UserManager(db_adapter, app)

    Compress(app)

    #DebugToolbarExtension(app)

    cache.init_app(app, config={'CACHE_TYPE': 'simple'})

    babel = Babel(app)
    # Monkeypatching Flask-babel
    babel.domain = 'flask_user'
    babel.translation_directories = 'translations'
    # All the translation should be done using Flask_Babelex's lazy_gettext as
    # opposed to flask_admin.babel's. The latter is referencing the domain
    # flask_admin.

    @babel.localeselector
    def get_locale():
        if request.args.get('lang'):
            session['lang'] = request.args.get('lang')
        return session.get('lang', 'en')

    class JSONEncoder(BaseEncoder):
        """so/questions/26124581/flask-json-serializable-error-because-of-flask-babel
        """
        def default(self, o):
            if isinstance(o, _LazyString):
                return text_type(o)
            return BaseEncoder.default(self, o)

    app.json_encoder = JSONEncoder

    @app.route('/')
    def default_page():
        if is_authenticated():
            return redirect(url_for('user.member_page'))
        return redirect(url_for('user.home_page'))

    def get_account_view_endpoint(suffix=None):
        """Returns 'ROLE_account.X' based on current_user
        """
        if not is_authenticated():
            raise Exception("Attempt to call get_account_view_endpoint without authentication")

        assert len(current_user.roles) == 1, 'User has more than 1 role!'
        if suffix:
            return '%s_account.%s' % (current_user.roles[0].name, suffix)
        return '%s_account' % current_user.roles[0].name

    class RegexConverter(BaseConverter):
        def __init__(self, url_map, *items):
            super(RegexConverter, self).__init__(url_map)
            self.regex = items[0]

    app.url_map.converters['regex'] = RegexConverter

    @app.context_processor
    def inject_admin_views():
        return dict(is_heroku=issubclass(config, HerokuConfig),     # isinstance doesn't work
                    admin_view=root.index_view, h=admin_helpers, get_url=url_for,
                    get_account_view_endpoint=get_account_view_endpoint)

    @app.template_filter()
    def format_currency(value):
        try:
            return "{:,.2f}".format(value)
        except ValueError:
            return value

    @app.template_filter()
    def to_hktz(value):
        if value:
            return value.astimezone(pytz.timezone('Asia/Hong_Kong'))

    @app.template_filter()
    def format_datetime(value):
        if value:
            return value.strftime('%m/%d %H:%M')

    if register_blueprints:     # prevent cyclical imports
        from portal.user.views import user_blueprint
        from portal.access.views import access_blueprint
        from portal.api.eve import eve_blueprint
        from portal.api.prometheus import prometheus_blueprint

        app.register_blueprint(user_blueprint, url_prefix='/user')
        app.register_blueprint(access_blueprint, url_prefix='/access')
        app.register_blueprint(eve_blueprint, url_prefix='/eve')
        app.register_blueprint(prometheus_blueprint, url_prefix='/prometheus')

        root = Admin(app, name='Portal', url='/', template_mode='bootstrap3')

        root.add_menu_item(RoleBasedMenuLink(name=lazy_gettext('Budget'),
                                             endpoint='user.budget',
                                             roles=[RolesEnum.CLIENT.value]))
        root.add_menu_item(RoleBasedMenuLink(name=lazy_gettext('Appointments'),
                                             endpoint='user.appointments',
                                             roles=[RolesEnum.CLIENT.value]))

        from portal.admin.views import UserModelView, RoleModelView
        root.add_view(UserModelView(User, db.session,
                                    category=lazy_gettext('User'), endpoint='admin_user'))
        root.add_view(RoleModelView(Role, db.session,
                                    category=lazy_gettext('User'), endpoint='admin_role'))

        from portal.account.views import account_blueprint, AdminAccountModelView, \
            TechnicianAccountModelView, SupportAccountModelView, ClientAccountModelView
        app.register_blueprint(account_blueprint, url_prefix='/account')

        ac = lazy_gettext('Account')

        root.add_view(AdminAccountModelView(
            Account, db.session, category=ac,
            name=lazy_gettext('Account (Admin)'), endpoint='admin_account'))
        root.add_view(SupportAccountModelView(
            Account, db.session, category=ac,
            name=lazy_gettext('Account (Support)'), endpoint='support_account'))
        root.add_view(TechnicianAccountModelView(
            Account, db.session, category=ac,
            name=lazy_gettext('Account (Technician)'), endpoint='technician_account'))
        root.add_view(ClientAccountModelView(
            Account, db.session, category=ac,
            name=lazy_gettext('Account (Client)'), endpoint='client_account'))

        root.add_link(UsernameBasedMenuLink(
            name=lazy_gettext('Batch Add'), category=ac,
            url='/account/handson_batch', usernames=['vincent', 'kevin', 'liang', 'bang']))

        from portal.vps.views import VpsModelView
        c = lazy_gettext('Vps')
        v = VpsModelView(Vps, db.session, endpoint='vps', category=c)
        root.add_view(v)
        root.add_link(RoleBasedMenuLink(
            name=lazy_gettext('Create'), category=c,
            endpoint='vps.create_view', roles=v.get_accessible_roles()))

        c = lazy_gettext('Vendor')
        from portal.vendor.views import VendorModelView
        v = VendorModelView(Vendor, db.session, endpoint='vendor', category=c)
        root.add_view(v)

        from portal.permission.views import PermissionModelView
        v = PermissionModelView(Permission, db.session, endpoint='permission', category=c)
        root.add_view(v)

        c = lazy_gettext('Finance')
        from portal.bank_account.views import BankAccountModelView
        v = BankAccountModelView(BankAccount, db.session, endpoint='bank_account', category=c)
        root.add_view(v)

        from portal.transfer.views import TransferModelView
        v = TransferModelView(Transfer, db.session, endpoint='transfer', category=c)
        root.add_view(v)

    return app
Example #4
0
    def __repr__(self):
        return '<%r>' % self.name


class MyModelView(ModelView):
    def is_accessible(self):
        if current_user.is_authenticated and session.get('role') == "admin":
            return True

    column_exclude_list = 'tokens'
    column_display_pk = True


admin.add_view(MyModelView(User, db.session))
admin.add_view(MyModelView(Request, db.session))
admin.add_menu_item(MenuLink(name='Real Home Page', url='/'))
admin.add_menu_item(MenuLink(name='Requests', url='/requests'))

# Adding request for testing purposes
req1 = Request(start_date='2019.01.20', finish_date='2019.01.22', sum=2)
cat0 = Category(name='Default', days=20)
cat1 = Category(name='Young', days=25)
cat2 = Category(name='Middle age', days=30)
cat3 = Category(name='Old', days=35)

stat1 = Status(name='Pending')
stat2 = Status(name='Approved')
stat3 = Status(name='Declined')

db.session.add(req1)
db.session.add(cat0)
Example #5
0

class CategoryModelView(MyModelView):
    column_editable_list = ['title']
    column_labels = dict(title='Название', dishes='Блюда')
    
    form_args = {
        'title': {
            'label': 'Название',
            'validators': [DataRequired(message="Необходимо ввести название категории")]
        },
        'dishes': {
            'label': 'Блюда',
        },
    }


admin = Admin(app, "Панель управления", "/sadmin/")

admin.add_view(UserModelView(User, db.session, "Пользователи", "Магазин"))
admin.add_view(OrderModelView(Order, db.session, "Заказы", "Магазин"))
admin.add_view(DishModelView(Dish, db.session, "Товары", "Магазин"))
admin.add_view(CategoryModelView(Category, db.session, "Категории", "Магазин"))

admin.add_menu_item(MyMenuLink("Перейти на сайт", "/"), "Управление")
admin.add_menu_item(MyMenuLink("Войти в аккаунт", "/account/"), "Управление")
admin.add_menu_item(MyMenuLink("Вход/выход", "/logout"), "Управление")

admin.add_menu_item(MyMenuLink("Создать/обновить БД", "/upgradedb/gdrgr/"), "База данных")
admin.add_menu_item(MyMenuLink("Загрузить данные в чистую БД", "/loaddb/"), "База данных")