Ejemplo n.º 1
0
    def test_override_defaults(self, html):
        ext, flags = 0, 0

        md = Misaka(autolink=True)
        result = md.render(TEST_MD, autolink=False)

        html.assert_called_with(TEST_MD, extensions=ext, render_flags=flags)
        self.assertIsInstance(result, Markup)
        self.assertEqual(result, misaka.html(TEST_MD,
            extensions=ext, render_flags=flags))
Ejemplo n.º 2
0
    def test_set_defaults(self, html):
        ext, flags = EXT_TABLES, HTML_SMARTYPANTS

        md = Misaka(smartypants=True, tables=True)
        result = md.render(TEST_MD)

        html.assert_called_with(TEST_MD, extensions=ext, render_flags=flags)
        self.assertIsInstance(result, Markup)
        self.assertEqual(result, misaka.html(TEST_MD,
            extensions=ext, render_flags=flags))
Ejemplo n.º 3
0
def init(app):
    md = Misaka(autolink=True,
                tables=True,
                fenced_code=True,
                no_intra_emphasis=True,
                strikethrough=True,
                escape=True,
                wrap=True,
                toc=True)
    md.init_app(app)
    app.secret_key = Config.secret_key
Ejemplo n.º 4
0
def create_app(config='dev'):
    """ Flask application factory
    :param str config: type of app to build, either "prod" or "dev"
    """
    # Create flask application
    app = Flask(__name__)
    app.config.from_object('settings')
    app.config['ENV'] = config
    app.jinja_env.trim_blocks = True

    # Debug toolbar (when debug=true)
    debug_toolbar = DebugToolbarExtension(app)
    app.config['DEBUG_TB_PROFILER_ENABLED'] = True
    app.config['DEBUG_TB_INTERCEPT_REDIRECTS'] = False

    # Register Blueprints
    app.register_blueprint(views_base.base)
    app.register_blueprint(views_blog.blog)

    # Flask-Assets; bundles all css/js files in minifed file
    assets = Environment(app)
    css_all = Bundle('css/bootstrap-flatly.min.css', 'css/highlightjs.min.css', 'css/font-awesome.css', 'css/main.css',
                     filters='cssmin', output='gen/style.css')
    js_all = Bundle('js/vendor/jquery.min.js', 'js/vendor/bootstrap.min.js', 'js/vendor/showdown-gfm.min.js',
                    'js/vendor/highlight.min.js', 'js/main.js', filters='jsmin', output='gen/libs.js')
    assets.register('css_all', css_all)
    assets.register('js_all', js_all)
    if app.config['DEBUG']:
        assets.debug = True
        app.config['ASSETS_DEBUG'] = True

    # Set up Flask-User
    babel = Babel(app)
    db_adapter = SQLAlchemyAdapter(db, User)
    user_manager = UserManager(db_adapter, app)  # Init Flask-User and bind to app

    # Init the cache
    cache.init_app(app)

    Moment(app)  # moment.js
    Misaka(app, autolink=True,  # Misaka Markdown
           fenced_code=True, lax_html=True, strikethrough=True,
           superscript=True, tables=True, wrap=True)

    # Init Admin page
    admin = Admin(app, index_view=AdminMain(endpoint='admin'))
    admin.add_view(PostAdminView())
    admin.add_view(NewPostView())
    admin.add_view(ModelView(Comment, db.session))
    static_path = os.path.join(BASE_DIR, 'app', 'static')
    admin.add_view(FileAdminView(static_path, '/static/', name='Static Files'))

    # Initialize DB
    db.init_app(app)

    return app
Ejemplo n.º 5
0
def configure(app):
    # Markdown(app)
    Misaka(app,
           fenced_code=True,
           autolink=True,
           no_intra_emphasis=True,
           strikethrough=True,
           superscript=True,
           tables=True,
           hard_wrap=True,
           safelink=True)
    CsrfProtect(app)
    if app.config.get('GRAVATAR'):
        from flask.ext.gravatar import Gravatar
        Gravatar(app, **app.config.get('GRAVATAR'))
Ejemplo n.º 6
0
def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)
    db.init_app(app)
    moment.init_app(app)
    Misaka(app)
    login_manager.init_app(app)
    app.jinja_env.globals['momentjs'] = momentjs

    from views.home import home as home_blueprint
    app.register_blueprint(home_blueprint)

    from views.post import post as post_blueprint
    app.register_blueprint(post_blueprint)

    from views.auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint)

    return app
Ejemplo n.º 7
0
def make_app(debug=False, **app_options):
    global db, app, admin

    app = Flask(__name__)

    logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)
    logg.debug("creating flask app %s", __name__)
    try:
        import arguments.config
        app.config.from_object(arguments.config)
    except ImportError:
        pass

    if app_options:
        app.config.update(app_options)

    app.config["RESTFUL_JSON"] = {'ensure_ascii': False}
    app.config["SECRET_KEY"] = "dev"
    app.config["DEBUG"] = debug
    logg.debug("app config is:\n%s", pformat(dict(app.config)))

    if debug:
        app.debug = True
        from werkzeug.debug import DebuggedApplication
        app.wsgi_app = DebuggedApplication(app.wsgi_app, True)

    app.jinja_env.add_extension('arguments.helper.templating.PyJadeExtension')

    # initialize extensions
    # flask-sqlalchemy
    db = SQLAlchemy(app)
    import arguments.database.datamodel

    # flask-admin
    admin = Admin(app, name="Arguments", template_mode="bootstrap3")

    # markdown via flask-misaka
    # TODO: markdown options should be configurable
    markdown_opts = dict(
        autolink=True,
        fenced_code=True,
        no_intra_emphasis=True,
        strikethrough=True,
        tables=True,
        safelink=True,
        escape=True,
        smartypants=True
    )
    Misaka(app, **markdown_opts)

    # user management provided by flask_login
    login_manager = LoginManager(app)
    login_manager.login_view = 'ekklesia.login'

    # XXX: for testing: just use first user from the DB as anon user
    # login_manager.anonymous_user = lambda: User.query.first()

    from arguments.database.datamodel import User

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

    # i18n via flask-babelex
    babel = Babel(app)

    @babel.localeselector
    def get_locale():
        return session["locale"]

    # OAuth2 using flask-dance
    init_oauth_ext(app)

    # ajax lib flask-sijax
    path = os.path.join('.', os.path.dirname(__file__), 'static/js/sijax/')
    app.config['SIJAX_STATIC_PATH'] = path
    app.config['SIJAX_JSON_URI'] = '/static/js/sijax/json2.js'
    flask_sijax.Sijax(app)

    @app.before_request
    def set_locale():
        locale = session.get("locale")
        if locale:
            logg.debug("locale from session: %s", locale)
        else:
            locale = request.accept_languages.best_match(['de', 'en', 'fr'])
            logg.debug("locale from request: %s", locale)
            session["locale"] = locale
        g.locale = locale

    import arguments.views
    import arguments.views.admin
    # import arguments_rest.api
    
    # needed when running behind a reverse proxy.
    app.wsgi_app = ProxyFix(app.wsgi_app)
    return app
Ejemplo n.º 8
0
''' Flask is instantiated here, as are the extensions we will be using
which include:
	- Flask-Login
	- Flask-Misaka
	- Flask-Uploads
	- Flask-Cache
'''
from flask import Flask
from flask.ext.cache import Cache
from flask.ext.uploads import UploadSet, IMAGES
from flask.ext.mongoengine import MongoEngine
from flask.ext.login import LoginManager
from flask.ext.misaka import Misaka

app = Flask(__name__)
db = MongoEngine()

app.config['MONGODB_DB'] = 'chris_blog'
app.config['MONGODB_HOST'] = 'localhost'
app.config['MONGODB_PORT'] = 27017

# extensions
login_manager = LoginManager()
md = Misaka(space_headers=True, no_intra_emphasis=True, fenced_code=True)
photos = UploadSet('photos', IMAGES)
cache = Cache()

from blog import views, forms
Ejemplo n.º 9
0
 def test_init(self):
     md = Misaka()
     app2 = Flask(__name__)
     md.init_app(app2)
     self.assertIn("markdown", app2.jinja_env.filters)
from flask.ext.assets import Environment
from flask.ext.misaka import Misaka
from werkzeug.contrib.cache import SimpleCache
from bs4 import BeautifulSoup
import pygments, pygments.lexers, pygments.formatters
import misaka

app = Flask(__name__.split('.')[0])

app.config.from_object('config')

assets = Environment(app)

menu = Menu(app)

misaka_instance = Misaka(app)

cache = SimpleCache()

logger = logging.getLogger('app')


class MarkdownRenderer(misaka.HtmlRenderer):
    def blockcode(self, text, lang):
        if not lang:
            return '\n<pre><code>%s</code></pre>\n' % Markup.escape(text)
        lexer = pygments.lexers.get_lexer_by_name(lang, stripall=True)
        formatter = pygments.formatters.HtmlFormatter()
        rendered = pygments.highlight(text, lexer, formatter)
        return rendered
Ejemplo n.º 11
0
app = Flask(__name__, instance_relative_config=True)
app.config.from_object('settings')
app.config.from_pyfile('settings.py')

# Setup debugtoolbar, if we're in debug mode.
if app.debug:
    from flask.ext.debugtoolbar import DebugToolbarExtension
    toolbar = DebugToolbarExtension(app)

# Flask extensions
db = SQLAlchemy(app)
login_manager = LoginManager(app)
oid = OpenID(app)
workshopzips = UploadSet('workshopZips', 'zip')
modimages = UploadSet('modImages', IMAGES)
markdown = Misaka(app, escape=True, wrap=True)
sentry = Sentry(app)

# Setup steamodd
steam.api.key.set(app.config['STEAM_API_KEY'])
steam.api.socket_timeout.set(5)

# Setup Flask-Uploads
configure_uploads(app, [workshopzips, modimages])

# Views
import views

# Blueprints
from .tf2.views import tf2 as tf2_blueprint
from .users.views import users as users_blueprint
Ejemplo n.º 12
0
from functools import wraps
from flask import request, Response
from flask.ext.bcrypt import Bcrypt
from werkzeug.security import generate_password_hash, check_password_hash
from flask import session, redirect, url_for, escape, request
from werkzeug.utils import secure_filename
import os, json, re, random




app = Flask(__name__)
Misaka(app=app, escape    = True,
                no_images = True,
                wrap      = True,
                autolink  = True,
                no_intra_emphasis = True,
                space_headers     = True,
                                fenced_code                = True)

app.config.from_pyfile('config.py')

db = SQLAlchemy(app)

from config import *
from util import *

db.create_all()
db.session.commit()

@app.route('/')
Ejemplo n.º 13
0
from flask.ext.pagedown import PageDown
from config import config
from flask.ext.login import LoginManager
from flask.ext.misaka import Misaka
from flask.ext.cors import CORS

from admin import am
from .db import db

# for login
login_manager = LoginManager()
bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
pagedown = PageDown()
md = Misaka()
cors = CORS()


def create_app(conf):
    app = Flask(__name__)

    app.config.from_object(conf)
    bootstrap.init_app(app)
    mail.init_app(app)
    moment.init_app(app)
    db.init_app(app)
    pagedown.init_app(app)
    md.init_app(app)
    cors.init_app(app)
    login_manager.init_app(app)
Ejemplo n.º 14
0
#!/usr/bin/env python

import codecs
from flask import Flask
from flask import render_template
from flask.ext.misaka import Misaka
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.script import Server, Manager
from flask.ext.migrate import Migrate, MigrateCommand

md = Misaka()
app = Flask(__name__)
md.init_app(app)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///uwcalgo.db'

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

manager = Manager(app)
manager.add_command('db', MigrateCommand)
manager.add_command('runserver', Server(debug=True))


class Solution(db.Model):
    __tablename__ = 'solutions'
    member_id = db.Column(db.Integer, db.ForeignKey('member.id'), primary_key=True)
    problem_id = db.Column(db.Integer, db.ForeignKey('problem.id'), primary_key=True)
    url = db.Column(db.String(200), nullable=True)
    problem = db.relationship('Problem')

Ejemplo n.º 15
0
from flaskext.bcrypt import Bcrypt
bcrypt = Bcrypt()

# for the Gravatar service
from flaskext.gravatar import Gravatar
gravatar = Gravatar(size=35,
                    rating='g',
                    default='mm',
                    force_default=False,
                    force_lower=False)

from flask.ext.misaka import Misaka
md = Misaka(fenced_code=True,
            superscript=True,
            strikethrough=True,
            hard_wrap=True,
            autolink=True)

from flask.ext.cache import Cache
cache = Cache()  # cache cache :)


def github_oauth(app):
    from rauth.service import OAuth2Service

    github = OAuth2Service(
        name='github',
        base_url='https://api.github.com/',
        authorize_url='https://github.com/login/oauth/authorize',
        access_token_url='https://github.com/login/oauth/access_token',
Ejemplo n.º 16
0
from flask import Flask
from flask.ext.misaka import Misaka
from flask.ext import login
from aggrerate.loginCode import flogin

app = Flask(__name__)

# The secret key is used when creating session cookies
app.secret_key = 'aggrerate_secret_key'

Misaka(app, smartypants=True)

login_manager = login.LoginManager()
login_manager.anonymous_user = flogin.getAnonymousUser


@login_manager.user_loader
def load_user(userid):
    return flogin.User.get(userid)


login_manager.setup_app(app)


@app.context_processor
def utility_processor():
    def current_user():
        if login.current_user.is_authenticated():
            return login.current_user
        else:
            return None
Ejemplo n.º 17
0
from data import *
from g import USER,_site_info,admin_url,static_url,admin_static
import json
from flask import Flask,render_template,session,request,session,\
        url_for, redirect,Response,jsonify,g,Blueprint,flash,get_template_attribute,abort
from functools import wraps
from flask.ext.misaka import Misaka
from config import IMG_DET_SAVE
from werkzeug import secure_filename
from os import  path
from admin import *
import itertools
dw = DataWrapper()

Misaka(app)

@app.before_request
def before_request():
    g.user = USER
    g.info = _site_info
    g.admin_url = admin_url
    g.static_url = static_url
    g.admin_static = admin_static


@app.route('/')
@app.route('/page/<int:pid>')
def index(pid=1):
    per_page = 2
    p = dw.get_article_by_page(pid, per_page)
Ejemplo n.º 18
0
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.misaka import Misaka

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
misaka = Misaka(app)

app.secret_key = '/xcbq^/x0c$/x9f/xd9/xe72/xb33uX/xfb/xd3x/x0f/xf3aH/xf9e/x06e'

from app import views
from app import models
Ejemplo n.º 19
0
import os

from flask import Flask, g, render_template
from flask.ext.misaka import Misaka
from lib import db, filters
from themes import themes

from flask.ext.cors import CORS

theme = os.environ.get('THEME', 'new')
blog = Flask(__name__,
             static_folder=themes[theme]['static'],
             template_folder=themes[theme]['templates'])
CORS(blog)
Misaka(blog, tables=True)

blog.config['FREEZER_RELATIVE_URLS'] = True
blog.config['MONGODB_DATABASE_URI'] = 'mongodb://localhost:27017'
blog.config['BASE_DIR'] = os.path.abspath(os.path.dirname(__file__))

blog.jinja_env.filters['human_readable_date'] = filters.human_readable_date
blog.jinja_env.filters['clean_date'] = filters.clean_date
blog.jinja_env.filters['urlencode'] = filters.urlencode
blog.jinja_env.filters['urldecode'] = filters.urldecode
blog.jinja_env.filters['md'] = filters.md

blog.secret_key = 'test'


@blog.errorhandler(404)
Ejemplo n.º 20
0
import os, time, random
from datetime import datetime
from threading import Thread
import eventlet

import bSerial

from settings import APP_ROOT

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
app.debug = True
app.config['DATA_FOLDER'] = 'data/'

#Markdown(app)
Misaka(app, fenced_code=True)
socketio = SocketIO(app)

#namespace = '/test'
namespace = ''

thread = None #second thread used by background_thread()
ser = None

#see: https://github.com/miguelgrinberg/Flask-SocketIO/issues/192
eventlet.monkey_patch()

#b = bSerial.bSerial(socketio)

def background_thread():
    """Example of how to send server generated events to clients."""
Ejemplo n.º 21
0
def init(app):
    md = Misaka(autolink=True,tables=True,fenced_code=True,no_intra_emphasis=True,strikethrough=True,escape=True,wrap=True, toc=True)
    md.init_app(app)
    app.secret_key = Config.secret_key
Ejemplo n.º 22
0
from pybossa.util import Facebook

facebook = Facebook()

from pybossa.util import Twitter

twitter = Twitter()

from pybossa.util import Google

google = Google()

# Markdown support
from flask.ext.misaka import Misaka

misaka = Misaka()

# Babel
from flask.ext.babel import Babel

babel = Babel()

# Uploader
uploader = None

# Exporters
json_exporter = None
csv_exporter = None

# CSRF protection
from flask_wtf.csrf import CsrfProtect
Ejemplo n.º 23
0
sys.setdefaultencoding("utf-8")

# 导入扩展模块
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.login import LoginManager
from flask.ext.misaka import Misaka
from flask.ext.mail import Mail

# 初始化blog应用,并从config中设定配置
blog = Flask(__name__)
blog.config.from_object('config')

# 初始化数据库
db = SQLAlchemy(blog)

# 设定登录管理
lm = LoginManager()
lm.setup_app(blog)

# 设定markdown
md = Misaka()
md.init_app(blog)

# 使用邮件服务器发送邮件
mail = Mail()
mail.init_app(blog)

# 导入模型Models和视图Views
from app import views, models