예제 #1
0
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
예제 #2
0
파일: __init__.py 프로젝트: nerevu/proposer
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0
파일: main.py 프로젝트: Ms2ger/standup
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
예제 #6
0
# 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
예제 #7
0
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