def create_app(settings): app = Flask(__name__) # Import settings from file for name in dir(settings): value = getattr(settings, name) if not (name.startswith('_') or isinstance(value, ModuleType) or isinstance(value, FunctionType)): app.config[name] = value # Additional settings app.installed_apps = _get_apps_full_names(settings.INSTALLED_APPS) app.secret_key = app.config.get('SESSION_SECRET') # Markdown md = Markdown(app) # TODO: We might want to expose Markdown extensions to the config # file. md.register_extension(nixheaders.makeExtension) # Flask-Funnel Funnel(app) # SeaSurf csrf.init_app(app) # Register error handlers register_error_handlers(app) # Register template filters register_filters(app) for a in app.installed_apps: # Register blueprints app.register_blueprint( getattr(__import__('%s.views' % a, fromlist=['blueprint']), 'blueprint')) @app.context_processor def inject_page(): return dict(page=int(request.args.get('page', 1))) @app.context_processor def globals(): db = get_session(app) ctx = dict() # Projects, teams and current user ctx['projects'] = db.query(Project).order_by(Project.name) ctx['teams'] = db.query(Team).order_by(Team.name) ctx['weeks'] = get_weeks() ctx['current_user'] = None if session and 'user_id' in session: user = db.query(User).get(session['user_id']) if user: ctx['current_user'] = user # Time stuff ctx['today'] = date.today() ctx['yesterday'] = date.today() - timedelta(1) # CSRF def csrf_field(): return ('<div style="display: none;">' '<input type="hidden" name="_csrf_token" value="%s">' '</div>' % csrf._get_token()) ctx['csrf'] = csrf_field return ctx @app.before_request def validate_user(): db = get_session(app) if session and 'email' in session and not 'user_id' in session: user = db.query(User).filter_by(email=session['email']).first() if not user: if request.endpoint not in ('users.new_profile', 'users.authenticate', 'users.logout', 'static'): return redirect(url_for('users.new_profile')) @app.teardown_request def teardown_request(exception=None): # Remove the database session if it exists if hasattr(app, 'db_session'): app.db_session.close() return app
def create_app(config_mode=None, config_file=None): """Create webapp instance""" # Flask application app = Flask(__name__) Bootstrap(app) md = Markdown(app, extensions=['toc']) md.register_extension(TableExtension) if config_mode: app.config.from_object(getattr(config, config_mode)) elif config_file: app.config.from_pyfile(config_file) else: app.config.from_envvar('APP_SETTINGS', silent=True) table = app.config['TABLE'] @app.before_request def before_request(): # set g variables stream = file(app.config['INFO_PATH'], 'r') [setattr(g, k, v) for k, v in yaml.safe_load(stream).items()] g.site = app.config['SITE'] g.valid_until = (d.today() + timedelta(days=g.days_valid)).strftime( "%B %d, %Y") # Views @app.route('/<style>/') @app.route('/<style>/<source>/') def index(style, source=None): source = source or request.args.get('source') if source: parent = p.dirname(p.dirname(__file__)) path = p.join(parent, source) stream = file(path, 'r') items = yaml.safe_load(stream).items() [setattr(g, k, v) for k, v in items] return render_template('%s.html' % style).replace('<table>', table) @app.route('/render/<style>/') @app.route('/render/<style>/<otype>/') def render(style, otype=None): otype = otype or request.args.get('type', 'html') source = request.args.get('source') if source: parent = p.dirname(p.dirname(__file__)) path = p.join(parent, source) stream = file(path, 'r') items = yaml.safe_load(stream).items() [setattr(g, k, v) for k, v in items] if otype.startswith('html'): html = render_template('%s.html' % style).replace('<table>', table) html_doc = HTML(string=html) stylesheets = find_stylesheets( html_doc.root_element, html_doc.media_type, html_doc.url_fetcher, ) urls = [sheet.base_url for sheet in stylesheets] style_urls = filter(lambda x: x.endswith('css'), urls) styles = _get_styles(app, style_urls) kwargs = {'styles': styles} if source: [setattr(g, k, v) for k, v in items] return render_template('%s.html' % style, **kwargs).replace( '<table>', table) elif otype.startswith('md'): h = html2text.HTML2Text() # h.ignore_links = True h.ignore_emphasis = True h.body_width = 65 return h.handle(render_template('%s.html' % style)) elif otype.startswith('pdf'): kwargs = {'to_print': True} return render_pdf(url_for('index', style=style)) elif otype.startswith('png'): kwargs = {'to_print': True} html = render_template('%s.html' % style, **kwargs).replace( '<table>', table) html_doc = HTML(string=html) return Response(html_doc.write_png(), mimetype='image/png') else: pass return app
app.config.from_object('config') #Load default bootstrap templates Bootstrap(app) #Initialize the login system loginManager = LoginManager() loginManager.init_app(app) loginManager.login_view = 'login' #Set the default view for logging in #Initialize the database connection db = MongoEngine(app) #Initialize the markdown engine markdown = Markdown(app) markdown.register_extension(AttrListExtension) #Initialize the celery object celery = make_celery(app) #Before each request we should store our current user (provided by flask-login) #in the global object g (which is accessable inside templates) @app.before_request def beforeRequest(): g.user = current_user #Add the custom converters we have made here from app.helpers.converters import BoolConverter, TimeConverter app.url_map.converters['bool'] = BoolConverter app.url_map.converters['time'] = TimeConverter
app.config.from_object('config') #Load default bootstrap templates Bootstrap(app) #Initialize the login system loginManager = LoginManager() loginManager.init_app(app) loginManager.login_view = 'login' #Set the default view for logging in #Initialize the database connection db = MongoEngine(app) #Initialize the markdown engine markdown = Markdown(app) markdown.register_extension(AttrListExtension) #Initialize the celery object celery = make_celery(app) #Before each request we should store our current user (provided by flask-login) #in the global object g (which is accessable inside templates) @app.before_request def beforeRequest(): g.user = current_user #Add the custom converters we have made here from app.helpers.converters import BoolConverter, TimeConverter
def create_app(settings): app = Flask(__name__) # Import settings from file for name in dir(settings): value = getattr(settings, name) if not (name.startswith('_') or isinstance(value, ModuleType) or isinstance(value, FunctionType)): app.config[name] = value # Additional settings app.installed_apps = _get_apps_full_names(settings.INSTALLED_APPS) app.secret_key = app.config.get('SESSION_SECRET') # Markdown md = Markdown(app) # TODO: We might want to expose Markdown extensions to the config # file. md.register_extension(nixheaders.makeExtension) # Flask-Funnel Funnel(app) # SeaSurf csrf.init_app(app) # Register error handlers register_error_handlers(app) # Register template filters register_filters(app) for a in app.installed_apps: # Register blueprints app.register_blueprint( getattr(__import__('%s.views' % a, fromlist=['blueprint']), 'blueprint')) @app.context_processor def inject_page(): return dict(page=int(request.args.get('page', 1))) @app.context_processor def globals(): db = get_session(app) ctx = dict() # Projects, teams and current user ctx['projects'] = db.query(Project).order_by(Project.name) ctx['teams'] = db.query(Team).order_by(Team.name) ctx['weeks'] = get_weeks() ctx['current_user'] = None if session and 'user_id' in session: user = db.query(User).get(session['user_id']) if user: ctx['current_user'] = user # Time stuff ctx['today'] = date.today() ctx['yesterday'] = date.today() - timedelta(1) # CSRF def csrf_field(): return ('<div style="display: none;">' '<input type="hidden" name="_csrf_token" value="%s">' '</div>' % csrf._get_token()) ctx['csrf'] = csrf_field return ctx @app.before_request def validate_user(): db = get_session(app) if session and 'email' in session and not 'user_id' in session: user = db.query(User).filter_by(email=session['email']).first() if not user: if request.endpoint not in ('users.new_profile', 'users.authenticate', 'users.logout', 'static'): return redirect(url_for('users.new_profile')) @app.teardown_request def teardown_request(exception=None): # Remove the database session if it exists if hasattr(app, 'db_session'): app.db_session.close() return app
# Admin # ----- import admin # Mail # ---- mail = Mail(app) # Markdown # -------- md = Markdown(app, extensions=['admonition']) from ext_markdown import SanskritExtension md.register_extension(SanskritExtension) # Sanskrit # -------- ctx = Context(app.config) ctx.connect() try: simple_query = query.SimpleQuery(ctx) simple_analyzer = analyze.SimpleAnalyzer(ctx) except sqlalchemy.exc.ProgrammingError: simple_query = None simple_analyzer = None # Logging
def create_app(name, config_object, override=None): """App factory. The factory pattern makes unit testing much saner. :param name: the name of the app :param config_object: path to config object """ app = Flask(name) app.json_encoder = LSOJSONEncoder try: app.config.from_object(config_object) except ImportError: print 'ImportError with config object:', config_object pass if override: app.config.update(override) # Needed to locate templates and assets in various contexts (runserver, # testing, ...) # TODO: surely there's a way to avoid this? LSO_PATH = os.path.dirname(__file__) app.template_folder = os.path.join(LSO_PATH, 'templates') app.static_folder = os.path.join(LSO_PATH, 'static') # Template filters for _filter in template_filters: app.add_template_filter(_filter) # URL converters add_converters(app) # Extensions lso.admin.admin.init_app(app) assets.init_app(app) assets.app = app # TODO: remove hack assets.url = '/static' assets.directory = app.config['STATIC_DEST'] cache.init_app(app) lso.database.db.init_app(app) mail.init_app(app) md = Markdown(app, extensions=['admonition']) from ext_markdown import SanskritExtension md.register_extension(SanskritExtension) # security.init_app(app) # 'sanskrit' package global ctx, simple_query, simple_analyzer ctx = sanskrit.Context(app.config) ctx.connect() try: simple_query = sanskrit.query.SimpleQuery(ctx) simple_analyzer = sanskrit.analyze.SimpleAnalyzer(ctx) except (sqlalchemy.exc.ProgrammingError, sqlalchemy.exc.OperationalError): simple_query = None simple_analyzer = None # Debug toolbar if app.debug: from flask.ext.debugtoolbar import DebugToolbarExtension toolbar = DebugToolbarExtension(app) # Blueprints if app.debug: import debug app.register_blueprint(debug.debug) else: do_logging(app) import views app.register_blueprint(views.main) register_blueprints(app, 'dicts', 'guide', 'ref', 'site', 'texts', 'tools', #'users' ) return app