from flask_admin import Admin from flask_admin.menu import MenuLink from apollo_main_db.apollo import models as ap_models from src.db import db from src.redis_db import redis_clients from src.utils import is_authenticated from src.views import ApolloCopiesView, ApolloGoVersionView, ApolloNPSSurveyQuestionsView, ApolloNPSSurveyResultsView, \ ApolloNPSSurveyView, ApolloUserCarouselVersionView, ApolloVersionCarouselSlideView, ApolloVersionCarouselView, \ HomeView, RedisCliView, UserOnboardingView class LoginMenuLink(MenuLink): def is_accessible(self): return not is_authenticated() class LogoutMenuLink(MenuLink): def is_accessible(self): return is_authenticated() def init_app(app): app.config["FLASK_ADMIN_SWATCH"] = "flatly" admin = Admin( app, index_view=HomeView(name="🏠 Home", template="index.html", url="/"), name="Data + Analytics CMS", template_mode="bootstrap3", ) admin.add_view( ApolloCopiesView(ap_models.ApolloCopies, db.session, name="Splash Screen Copy", url="version-changelog") ) admin.add_view( ApolloGoVersionView(ap_models.ApolloGoVersion, db.session, name="Published AGO Versions", url="stores-version") ) admin.add_view( ApolloVersionCarouselView( ap_models.ApolloVersionCarousel, db.session, name="Carousel Versions", url="carousel-version", category="Carousel", ) ) admin.add_view( ApolloVersionCarouselSlideView( ap_models.ApolloVersionCarouselSlide, db.session, name="Carousel Slides", url="carousel-slides", category="Carousel", ) ) admin.add_view( ApolloUserCarouselVersionView( ap_models.ApolloUserVersionCarousel, db.session, name="Viewed Carousels", url="carousel-user", category="Carousel", ) ) admin.add_view( UserOnboardingView(ap_models.ApolloUserOnboarding, db.session, name="Onboarding", url="user-onboarding") ) admin.add_view( ApolloNPSSurveyResultsView( ap_models.NPSSurveyResult, db.session, name="Results", url="nps/results", category="NPS" ) ) admin.add_view( ApolloNPSSurveyQuestionsView( ap_models.NPSSurveyQuestion, db.session, name="Questions", url="nps/questions", category="NPS" ) ) admin.add_view( ApolloNPSSurveyView(ap_models.NPSSurvey, db.session, name="Survey", url="nps/survey", category="NPS") ) for name, client in redis_clients.items(): admin.add_view(RedisCliView(client, name=name, endpoint=f"rediscliview/{name}", category="⚠️ Cache management")) admin.add_link(LogoutMenuLink(name="Logout", category="", url="/logout")) admin.add_link(LoginMenuLink(name="Login", category="", url="/login"))