Esempio n. 1
0
import io
import logging
from http import HTTPStatus

from flask import send_file, jsonify, make_response, Response, current_app as app
from flask.blueprints import Blueprint

from amundsen_application.api.preview.dashboard.dashboard_preview.preview_factory_method import \
    DefaultPreviewMethodFactory, BasePreviewMethodFactory

LOGGER = logging.getLogger(__name__)
PREVIEW_FACTORY: BasePreviewMethodFactory = None  # type: ignore

dashboard_preview_blueprint = Blueprint('dashboard_preview',
                                        __name__,
                                        url_prefix='/api/dashboard_preview/v0')


def initialize_preview_factory_class() -> None:
    """
    Instantiates Preview factory class and assign it to PREVIEW_FACTORY
    :return: None
    """
    global PREVIEW_FACTORY

    PREVIEW_FACTORY = app.config['DASHBOARD_PREVIEW_FACTORY']
    if not PREVIEW_FACTORY:
        PREVIEW_FACTORY = DefaultPreviewMethodFactory()

    LOGGER.info('Using {} for Dashboard'.format(PREVIEW_FACTORY))
Esempio n. 2
0
from flask.ext.login import current_user, login_user, logout_user, \
    login_required
from sqlalchemy.exc import DatabaseError
from ldap3 import LDAPCommunicationError

from sipa.forms import flash_formerrors, LoginForm, AnonymousContactForm
from sipa.model import dormitory_from_name, user_from_ip, premature_dormitories
from sipa.units import dynamic_unit
from sipa.utils import get_user_name, redirect_url
from sipa.utils.exceptions import UserNotFound, InvalidCredentials
from sipa.utils.mail_utils import send_mail
from sipa.utils.git_utils import get_repo_active_branch, get_latest_commits

logger = logging.getLogger(__name__)

bp_generic = Blueprint('generic', __name__)


@bp_generic.before_app_request
def log_request():
    if 'sentry' in current_app.extensions:
        current_app.extensions['sentry'].client.extra_context({
            'current_user':
            get_user_name(current_user),
            'ip_user':
            get_user_name(user_from_ip(request.remote_addr))
        })

    logging.getLogger(__name__ + '.http').debug(
        'Incoming request: %s %s',
        request.method,
Esempio n. 3
0
from flask import request
from flask.blueprints import Blueprint
from flask.templating import render_template
from libs.user_authentication import authenticate_user
from libs.graph_data import get_survey_results
from database.user_models import Participant

mobile_pages = Blueprint('mobile_pages', __name__)


@mobile_pages.route('/graph', methods=['GET', 'POST'])
@authenticate_user
def fetch_graph():
    """ Fetches the patient's answers to the most recent survey, marked by survey ID. The results
    are dumped into a jinja template and pushed to the device. """
    patient_id = request.values['patient_id']
    participant = Participant.objects.get(patient_id=patient_id)
    # See docs in config manipulations for details
    study_object_id = participant.study.object_id
    survey_object_id_set = participant.study.surveys.values_list('object_id', flat=True)
    data = []
    for survey_id in survey_object_id_set:
        data.append(get_survey_results(study_object_id, patient_id, survey_id, 7))
    return render_template("phone_graphs.html", data=data)


#  this is a debugging function, it displays the user graph for a given user without authentication.
# @mobile_pages.route("/fake", methods=["GET"] )
# def fake_survey():
#     patient_id = request.values['patient_id']
#     user = User(patient_id)
Esempio n. 4
0
import json

from flask import jsonify, request
from flask import Response as flask_response
from flask.blueprints import Blueprint

from comment_svc.resources.comments_table import CommentsTable
from comment_svc.models.comment import Comment

comments = Blueprint("comments", __name__)
comments_table = CommentsTable()

# /comments


@comments.route("/comments", methods=["GET"])
def get_comments():
    user = request.args.get("user")
    tag = request.args.get("tag")

    if user and not tag:
        user_comments = comments_table.get_comments_by_user(user)
        return jsonify(user_comments)

    if tag and not user:
        tagged_comments = comments_table.get_comments_by_tag(tag)
        return jsonify(tagged_comments)

    if tag and user:
        tagged_user_comments = comments_table.get_user_comments_by_tag(
            user, tag)
Esempio n. 5
0
from flask_login import current_user
from itsdangerous import BadSignature, SignatureExpired

from golem.core import (environment_manager, settings_manager, test as
                        test_module, page as page_module, suite as
                        suite_module, session, utils, tags_manager,
                        test_directory)
from golem.core.page import Page
from golem.core.project import Project, create_project, delete_project
from golem.report import report
from golem.report import execution_report as exec_report
from golem.report import test_report
from golem.gui import gui_utils
from golem.gui.user_management import Users, Permissions

api_bp = Blueprint('api', __name__, url_prefix='/api')


def auth_required(func):
    @wraps(func)
    def decorated_view(*args, **kwargs):
        if not current_user.is_authenticated:
            token = request.headers.get('token', None)
            if token:
                try:
                    user = Users.verify_auth_token(current_app.secret_key,
                                                   token)
                    request.api_user = user
                except SignatureExpired:
                    abort(401, 'Signature Expired')
                except BadSignature:
Esempio n. 6
0
from mycodo.config import LOGIN_BAN_SECONDS
from mycodo.config import LOGIN_LOG_FILE
from mycodo.databases.models import AlembicVersion
from mycodo.databases.models import Input
from mycodo.databases.models import Misc
from mycodo.databases.models import Role
from mycodo.databases.models import User
from mycodo.mycodo_flask.extensions import db
from mycodo.mycodo_flask.forms import forms_authentication
from mycodo.mycodo_flask.utils import utils_general
from mycodo.utils.utils import test_password
from mycodo.utils.utils import test_username

blueprint = Blueprint(
    'routes_authentication',
    __name__,
    static_folder='../static',
    template_folder='../templates'
)

logger = logging.getLogger(__name__)


@blueprint.context_processor
def inject_hostname():
    """Variables to send with every login page request"""
    return dict(host=socket.gethostname())


@blueprint.route('/create_admin', methods=('GET', 'POST'))
def create_admin():
    if admin_exists():
Esempio n. 7
0
from secrets import randbits
from datetime import datetime
from flask import render_template, redirect, url_for
from flask.blueprints import Blueprint
from flask_login import current_user, login_required
from flask_chirper import db
from flask_chirper.models import User, Post, follower, Message
from flask_chirper.main.forms import MessageForm
from flask_chirper.post.forms import PostForm

main = Blueprint('main', __name__)


@main.route('/home', methods=['GET', 'POST'])
@login_required
def home():
    form = PostForm()
    if form.validate_on_submit():
        post = Post(id=randbits(60),
                    content=form.content.data,
                    author=current_user)
        db.session.add(post)
        db.session.commit()
        return redirect(url_for('main.home'))

    return render_template('home.html', form=form)


@main.route('/explore', methods=['GET', 'POST'])
def explore():
    return render_template('explore.html',
Esempio n. 8
0
from flask.blueprints import Blueprint
import logging
from flask_login import login_required
from flask.templating import render_template

from waitlist.permissions import perm_manager
from waitlist.storage.database import CCVote, Account
from waitlist.base import db
from sqlalchemy.sql.functions import func

bp = Blueprint('settings_ccvote', __name__)
logger = logging.getLogger(__name__)

perm_manager.define_permission('ccvot_result_view')


@bp.route("/")
@login_required
@perm_manager.require('ccvot_result_view')
def index():
    fc_results = db.session.query(Account.username, func.count('*')).join(
        CCVote,
        Account.id == CCVote.fcvoteID).group_by(Account.username).order_by(
            func.count('*')).all()
    lm_results = db.session.query(Account.username, func.count('*')).join(
        CCVote,
        Account.id == CCVote.lmvoteID).group_by(Account.username).order_by(
            func.count('*')).all()

    # unique votes
    unique_votes_query_fc = db.session.query(CCVote.voterID.label("voterID"), CCVote.fcvoteID.label("fcvoteID")) \
Esempio n. 9
0
from droplister_application.authentication.forms import LoginForm, RegistrationForm, PasswordResetForm
#from droplister_application.authentication.mailing import send_email_for_password_retrieving
from droplister_application.authentication.models import User
from droplister_application.authentication.utils import generate_secure_password, get_redirect_target, redirect_back

# from droplister_application.bj.mailing import send_register_confirmation_email
# from droplister_application.bj.models import Country
# from droplister_application.bj.utils import redirect_back, get_redirect_target
# from droplister_application.gallery.utils import handle_web_content_image
# from droplister_application.oauth import OAuthSignIn

__author__ = 'bryan'

authentication_bp = Blueprint('AUTH_BP',
                              __name__,
                              template_folder='templates',
                              static_folder='auth_static',
                              url_prefix='/<lang_code>')


@authentication_bp.url_defaults
def add_language_code(endpoint, values):
    values.setdefault('lang_code', g.get('lang_code', 'en'))


@authentication_bp.url_value_preprocessor
def pull_lang_code(endpoint, values):
    g.lang_code = values.pop('lang_code')


@login_manager.user_loader
from service.add_company_plane_info import add_company_plane_info
from service.get_company_plane_info import get_company_plane_info
from service.delete_company_plane_info import delete_company_plane_info
from service.add_airport_info import add_airport_info
from service.get_airport_info import get_airport_info
from service.delete_airport_info import delete_airport_info
from service.add_company_airline_info import add_company_airline_info
from service.add_flight_info import add_flight_info
from service.get_company_airline_info import get_company_airline_info
from service.get_plane_info import get_plane_info
from service.get_company_flight_infos import get_company_flight_infos
from service.delete_company_airline_info import delete_company_airline_info
from service.delete_flight_info import delete_flight_info
from typing import *

admin_management = Blueprint('admin', __name__, url_prefix='/admin')


@admin_management.route('/admin_login_api', methods=['POST'])
def admin_login_api():
    data = request.get_json(silent=True)
    name = data['name']
    password = data['password']
    if admin_login(name, password):
        return {'success': True, 'info': '管理员登录成功'}
    else:
        return {'success': False, 'info': '您的账号或密码有错误'}


@admin_management.route('/add_company_api', methods=['POST'])
def add_company_api():
Esempio n. 11
0
from mycodo.config import PATH_CAMERAS
from mycodo.databases.models import Camera
from mycodo.databases.models import Input
from mycodo.databases.models import Math
from mycodo.databases.models import Output
from mycodo.databases.models import PID
from mycodo.devices.camera import camera_record
from mycodo.mycodo_client import DaemonControl
from mycodo.mycodo_flask.routes_authentication import clear_cookie_auth
from mycodo.mycodo_flask.utils import utils_general
from mycodo.utils.influx import query_string
from mycodo.utils.system_pi import assure_path_exists
from mycodo.utils.system_pi import str_is_float

blueprint = Blueprint('routes_general',
                      __name__,
                      static_folder='../static',
                      template_folder='../templates')

logger = logging.getLogger(__name__)
influx_db = InfluxDB()

limiter = Limiter()


@blueprint.route('/')
def home():
    """Load the default landing page"""
    if flask_login.current_user.is_authenticated:
        if flask_login.current_user.landing_page == 'live':
            return redirect(url_for('routes_page.page_live'))
        elif flask_login.current_user.landing_page == 'dashboard':
Esempio n. 12
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2017/12/4
# @Author  : wangmengcn@[email protected]

from flask_restful import Api, Resource, abort, request
from flask import make_response, jsonify
from flask.blueprints import Blueprint
from flask_jwt import jwt_required, current_identity

from .user_model import User

bp_user_control = Blueprint(__name__, 'userControl', url_prefix='/api/v1/user')
rest_user_control = Api(bp_user_control)


@rest_user_control.resource('/register')
class UserRegister(Resource):
    """新用户注册"""
    def post(self):
        register_data = request.get_json()
        try:
            username = register_data['username']
            password = register_data['password']
        except Exception as e:
            print(str(e))
            abort(400)

        new_user = User(username, password)
        flag, msg = new_user.gen_user()
        response = {}
Esempio n. 13
0
from flask.blueprints import Blueprint
from flask.templating import render_template
from flask_login.utils import current_user

from api.context_processors import generate_date_from_now, generate_month_year_display, generate_server_signature, \
    get_current_week_number
from extensions import config

main_menu_routes = Blueprint('main_menu', __name__)


@main_menu_routes.route("/", methods=["GET"])
def main_menu():
    return render_template("main_menu.html",
                           company=config.company_name,
                           application=config.app_name,
                           email=config.company_email,
                           user=current_user,
                           calendar_week=get_current_week_number())


@main_menu_routes.context_processor
def faking_processor():
    return dict(generate_date_from_now=generate_date_from_now,
                generate_date_from_month=generate_month_year_display,
                generate_server_signature=generate_server_signature)
Esempio n. 14
0
from mycodo.mycodo_flask.routes_static import inject_variables
from mycodo.mycodo_flask.utils import utils_dashboard
from mycodo.mycodo_flask.utils import utils_general
from mycodo.utils.outputs import output_types
from mycodo.utils.outputs import parse_output_information
from mycodo.utils.system_pi import add_custom_measurements
from mycodo.utils.system_pi import add_custom_units
from mycodo.utils.system_pi import parse_custom_option_values_json
from mycodo.utils.system_pi import parse_custom_option_values_output_channels_json
from mycodo.utils.system_pi import return_measurement_info
from mycodo.utils.widgets import parse_widget_information

logger = logging.getLogger('mycodo.mycodo_flask.routes_dashboard')

blueprint = Blueprint('routes_dashboard',
                      __name__,
                      static_folder='../static',
                      template_folder='../templates')


@blueprint.context_processor
@flask_login.login_required
def inject_dictionary():
    return inject_variables()


@blueprint.route('/save_dashboard_layout', methods=['POST'])
def save_dashboard_layout():
    """Save positions and sizes of widgets of a particular dashboard"""
    if not utils_general.user_has_permission('edit_controllers'):
        return redirect(url_for('routes_general.home'))
    data = request.get_json()
Esempio n. 15
0
# -*- coding: utf-8 -*-
__author__ = 'shn7798'

from flask import redirect
from flask.blueprints import Blueprint

index = Blueprint('index', __name__)


@index.route('/')
def index_page():
    return redirect('/question/')
Esempio n. 16
0
# -*-coding: utf-8-*-
# time: 2015/09/16 22:49
# author: liukaizeng

from flask import render_template
from flask.blueprints import Blueprint
from flask.ext.login import login_required

index_bp = Blueprint('index', __name__, template_folder="../templates")


@index_bp.route('/')
def index():
    context = {"title": "Hello World"}

    return render_template("index/index.html", **context)


@index_bp.route('/test')
@login_required
def hello_world():
    return '<h1 style="color:red;">hello liuqingqing</h1>'
Esempio n. 17
0
"""
Frontend blueprint
"""

import datetime

from flask.blueprints import Blueprint

frontend = Blueprint("frontend",
                     __name__,
                     static_folder="frontend/dist",
                     static_url_path="")


@frontend.route("/")
@frontend.route("/p")
@frontend.route("/p/<path:path>")
def index(path=None):
    response = frontend.send_static_file("index.html")
    del response.headers["Expires"]
    del response.headers["ETag"]
    response.headers["Last-Modified"] = datetime.datetime.now()
    response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
    response.headers["Pragma"] = "no-cache"
    print(response.headers)
    return response
Esempio n. 18
0
import pathlib as pl
import concurrent.futures

import requests

from flask import current_app, request
from flask.blueprints import Blueprint
from flask_socketio import emit

from rooaa.utils.filtration import filter_results

predict = Blueprint("predict", __name__)


@predict.route("/api/v1/prediction", methods=["POST"])
def send_predictions():
    """Getting filtered predictions and sending the results """
    yolo_path = request.form.get("yolo_path")
    dense_path = request.form.get("dense_path")
    socket_id = request.form.get("socket_id")
    pkl_path = yolo_path + "-pkl"

    filtered_text = filter_results(pkl_path=pkl_path, dense_path=dense_path)
    emit("result", filtered_text, namespace="/predict", room=socket_id)
    return "Prediction sent"


def detect_objects(filename):
    """Spawns process to call MLService with input image name"""
    dense_path = str(current_app.config["UPLOAD_PATH"] / pl.Path(filename))
    yolo_path = dense_path + "-yolo"
Esempio n. 19
0
from flask import jsonify, request
from flask.blueprints import Blueprint

from main.service.clientes_service import (obtener_clientes as
                                           obtener_clientes_service, crear,
                                           editar, obtener_cliente_por,
                                           eliminar)
from main.settings import (CODIGO_HTTP)

clientes = Blueprint('clientes', __name__)


@clientes.route('/clientes', methods=['GET'])
def obtener_clientes():
    respuesta = obtener_clientes_service()
    return jsonify(respuesta), CODIGO_HTTP["OK"]


@clientes.route('/clientes/<int:id>', methods=['GET'])
def obtener_cliente(id):
    try:
        cliente = obtener_cliente_por(id)
        return jsonify(cliente), CODIGO_HTTP["OK"]
    except:
        return jsonify({'mensaje':
                        'Cliente no encontrado'}), CODIGO_HTTP["BAD_REQUEST"]


@clientes.route('/clientes', methods=['POST'])
def crear_cliente():
    try:
Esempio n. 20
0
import json
from typing import Tuple

from flask.blueprints import Blueprint
from flask.json import jsonify
from flask.wrappers import Response
from pydantic import ValidationError

from core.use_cases.output import Failure

error = Blueprint("errors", __name__)


@error.app_errorhandler(ValidationError)
def handle_error(error_: ValidationError) -> Tuple[Response, int]:
    return (
        jsonify({
            "error": Failure.PARAMETERS_ERROR,
            "error_message": "validation_error",
            "error_hint": json.loads(error_.json()),
        }),
        400,
    )
Esempio n. 21
0
#-*- coding:utf-8 -*-
from flask.blueprints import Blueprint
from flask.json import jsonify
from flask.globals import request
from recruit_base import dao
from recruit_base import admin_check

admin_resume_api=Blueprint("admin_resume_api", __name__)

@admin_resume_api.route("/get_resume_list", methods=["POST"])
@admin_check
def get_resume_list():
    param = request.values


    escape_char = ["\'", "\"", ";", "="];
    for key in request.values:
        #print request.values[key]
        for e_char in escape_char:
            if e_char in request.values[key]:
                print request.values[key]
                raise Exception

    n_no = request.values['notice_no'] if 'notice_no' in request.values else ''
    search_val = request.values['search[value]'] if 'search[value]' in request.values else ''
    per_page = param.get('length')
        
    return_data = {}
    return_data['draw'] = int(param.get('draw'))
    
  
Esempio n. 22
0
# -*- coding: utf-8 -*-
# time: 2020/3/5 上午10:46
from flask_restful import Resource, Api
from flask.blueprints import Blueprint

common_bp = Blueprint("common", __name__, url_prefix="/api/v1/common")

common_api = Api(common_bp)


@common_api.resource("/test")
class Common(Resource):
    def get(self):
        return {"hello": "world"}
Esempio n. 23
0
# -*- coding: utf-8 -*-
#
# @author: Five
# Created on 2013-5-14
#
from flask.blueprints import Blueprint
from flask.globals import g
from flask_login import login_user, logout_user
import datetime
import random
import string
from mongoengine.errors import NotUniqueError

bp_auth = Blueprint('authorize', __name__)


@no_auth_required()
@bp_auth.route('/signup', methods=['post', 'get'])
@smart_render()
def signup():
    ''' signup user. '''
    email = g.formdata.get('email')
    name = g.formdata.get('name')
    password = g.formdata.get('password')

    # validate input
    if not email or not name or not password:
        raise FriendlyException.fec(error_code.ENP_REQUIRED)

    # generate a verify code.
    verify_code = ''.join(random.sample(string.letters, 6))
Esempio n. 24
0
from flask.blueprints import Blueprint

from commons import to_response as r
from logs.services import LogService

logs = Blueprint('logs', __name__)

service = LogService()


@logs.route('/log', methods=['GET'])
def list_logs():
    return {'data': [r(log) for log in service.list()]}

Esempio n. 25
0
# coding=utf-8
from flask import request, jsonify, redirect, url_for
from flask.views import MethodView
from flask.blueprints import Blueprint
from flask_mako import render_template
from flask_login import current_user, logout_user

from firefly.models.topic import Post

bp = Blueprint("home", __name__, url_prefix="/")


class HomeView(MethodView):
    def get(self):
        posts = Post.objects.all()
        return render_template('index.html', posts=posts)


class CreateView(MethodView):
    def post(self):
        title = request.form.get('title')
        content = request.form.get('content')
        post = Post(title=title, content=content)
        post.save()
        return jsonify(ok=0)


class LoginView(MethodView):
    def get(self):
        if current_user.is_authenticated():
            return redirect(url_for('index'))
Esempio n. 26
0
from flask import request, abort, render_template
from flask.blueprints import Blueprint
from flask_security import login_required

from models.user import User
from models.core import Post
from models.like import LikeItem
from models.collect import CollectItem
from models.contact import Contact
from corelib.utils import AttrDict

bp = Blueprint('account', __name__)


@bp.route('/landing')
def landing():
    type = request.args.get('type')
    type_map = {
        'reset': '重置',
        'confirm': '确认',
        'register': '激活',
        'confirmed': '已确认'
    }
    email = request.args.get('email')
    if not email:
        abort(404)
    if type not in type_map:
        type = 'register'
    action = type_map.get(type)
    return render_template('security/landing.html', **locals())
Esempio n. 27
0
# -*- coding: utf-8 -*-
#
# @author: Five
# Created on 2013-9-8
#
from ifanhao.models import Av
from flask.blueprints import Blueprint
from flask.helpers import url_for, make_response
from flask.templating import render_template


bp_sitemap = Blueprint('sitemap', __name__)

domain = 'http://www.mailoop.com'

@bp_sitemap.route('/sitemap/', methods=['GET'])
@bp_sitemap.route('/sitemap.xml', methods=['GET'])
@bp_sitemap.route('/sitemap_baidu.xml', methods=['GET'])
def sitemap():
    """Generate sitemap.xml. Makes a list of urls and date modified."""
    # user model pages
    avs = Av.query.order_by(Av.published_on).all()

    pages = []
    for av in avs:
        url = url_for('avs.get_av', code=av.code)
        modified_time = av.published_on.date().isoformat()
        pages.append([domain + url, modified_time])

    sitemap_xml = render_template('sitemap.xml', pages=pages)
    response = make_response(sitemap_xml)
Esempio n. 28
0
from mycodo.databases.models import User
from mycodo.mycodo_flask.forms import forms_settings
from mycodo.mycodo_flask.routes_static import inject_variables
from mycodo.mycodo_flask.utils import utils_general
from mycodo.mycodo_flask.utils import utils_settings
from mycodo.utils.inputs import load_module_from_file
from mycodo.utils.inputs import parse_input_information
from mycodo.utils.system_pi import add_custom_measurements
from mycodo.utils.system_pi import add_custom_units
from mycodo.utils.system_pi import all_conversions
from mycodo.utils.system_pi import cmd_output

logger = logging.getLogger('mycodo.mycodo_flask.settings')

blueprint = Blueprint('routes_settings',
                      __name__,
                      static_folder='../static',
                      template_folder='../templates')


@blueprint.context_processor
@flask_login.login_required
def inject_dictionary():
    return inject_variables()


@blueprint.route('/settings/alerts', methods=('GET', 'POST'))
@flask_login.login_required
def settings_alerts():
    """ Display alert settings """
    if not utils_general.user_has_permission('view_settings'):
        return redirect(url_for('routes_general.home'))
Esempio n. 29
0
from flask import request, render_template, redirect, url_for
from flask.blueprints import Blueprint
from flask_login import current_user, login_required

from cmdbmix.forms.cmdb import IdcAddForm, IdcEditForm
from cmdbmix.models.cmdb import Idc
from cmdbmix.utils import load_data_to_model, get_page_args, load_data_to_form

idc_bp = Blueprint('idc', __name__)


@idc_bp.route('/idc_manager', methods=['GET'])
@login_required
def idc_manager():
    page, per_page = get_page_args(request)
    pagination = Idc.query.paginate(page, per_page=per_page)
    return render_template('cmdb/idc.html', pagination=pagination)


@idc_bp.route('/idc_manager/add_idc', methods=['GET', 'POST'])
@login_required
def add_idc():
    form = IdcAddForm()
    if form.validate_on_submit():
        idc = Idc()
        load_data_to_model(idc, form).save()
        return redirect(url_for('idc.idc_manager'))
    return render_template('cmdb/add_idc.html', form=form)


@idc_bp.route('/idc_manager/edit_idc/<int:idc_id>', methods=['GET', 'POST'])
Esempio n. 30
0
from flask.app import Flask
from flask.blueprints import Blueprint
from flask.globals import request
from flask.helpers import url_for
from flask.templating import render_template
from sqlalchemy.engine import create_engine
from sqlalchemy.orm import scoped_session
from sqlalchemy.orm.session import sessionmaker
from werkzeug.utils import redirect
import os
import time

log = CPLog(__name__)

app = Flask(__name__, static_folder = 'nope')
web = Blueprint('web', __name__)


def get_session(engine = None):
    return Env.getSession(engine)

def addView(route, func, static = False):
    web.add_url_rule(route + ('' if static else '/'), endpoint = route if route else 'index', view_func = func)

""" Web view """
@web.route('/')
@requires_auth
def index():
    return render_template('index.html', sep = os.sep, fireEvent = fireEvent, env = Env)

""" Api view """