Exemplo n.º 1
0
def sql_select():
    statement = request.args['sql']
    params = request.args['params']
    bind = request.args.get('bind')
    bind = bind if bind != '' else None

    # Validate hash
    hash = hashlib.sha1(current_app.config['SECRET_KEY'] + statement +
                        params).hexdigest()
    if hash != request.args['hash']:
        return abort(406)

    # Make sure it is a select statement
    if not statement.lower().strip().startswith('select'):
        return abort(406)

    params = json.loads(params)

    engine = SQLAlchemy().get_engine(current_app, bind)

    result = engine.execute(statement, params)
    return g.debug_toolbar.render(
        'panels/sqlalchemy_select.html', {
            'result': result.fetchall(),
            'headers': result.keys(),
            'sql': format_sql(statement, params),
            'duration': float(request.args['duration']),
        })
Exemplo n.º 2
0
    def content(self):
        queries = get_queries()

        if not queries and not is_available():
            return self.render(
                "panels/sqlalchemy_error.html",
                {
                    "json_available": json_available,
                    "sqlalchemy_available": sqlalchemy_available,
                    "extension_used": extension_used(),
                    "recording_enabled": recording_enabled(),
                },
            )

        data = []
        for query in queries:
            data.append({
                "duration":
                query.duration,
                "sql":
                format_sql(query.statement, query.parameters),
                "signed_query":
                dump_query(query.statement, query.parameters),
                "context_long":
                query.context,
                "context":
                format_fname(query.context),
            })
        return self.render("panels/sqlalchemy.html", {"queries": data})
Exemplo n.º 3
0
    def content(self):
        queries = get_debug_queries()
        data = []
        for query in queries:
            is_select = query.statement.strip().lower().startswith('select')
            _params = ''
            try:
                _params = json.dumps(query.parameters)
            except TypeError:
                pass  # object not JSON serializable

            hash = hashlib.sha1(current_app.config['SECRET_KEY'] +
                                query.statement + _params).hexdigest()

            data.append({
                'duration': query.duration,
                'sql': format_sql(query.statement, query.parameters),
                'raw_sql': query.statement,
                'hash': hash,
                'params': _params,
                'is_select': is_select,
                'context_long': query.context,
                'context': format_fname(query.context)
            })
        return self.render('panels/sqlalchemy.html', {'queries': data})
Exemplo n.º 4
0
def sql_select():
    statement = request.args['sql']
    params = request.args['params']

    # Validate hash
    hash = hashlib.sha1(
        current_app.config['SECRET_KEY'] + statement + params).hexdigest()
    if hash != request.args['hash']:
        return abort(406)

    # Make sure it is a select statement
    if not statement.lower().strip().startswith('select'):
        return abort(406)

    params = json.loads(params)

    engine = SQLAlchemy().get_engine(current_app)

    result = engine.execute(statement, params)
    return g.debug_toolbar.render('panels/sqlalchemy_select.html', {
        'result': result.fetchall(),
        'headers': result.keys(),
        'sql': format_sql(statement, params),
        'duration': float(request.args['duration']),
    })
Exemplo n.º 5
0
    def content(self):
        queries = get_queries()

        if not queries and not is_available():
            return self.render(
                'panels/sqlalchemy_error.html', {
                    'json_available': json_available,
                    'sqlalchemy_available': sqlalchemy_available,
                    'extension_used': extension_used(),
                    'recording_enabled': recording_enabled(),
                })

        data = []
        for query in queries:
            data.append({
                'duration':
                query.duration,
                'sql':
                format_sql(query.statement, query.parameters),
                'signed_query':
                dump_query(query.statement, query.parameters),
                'context_long':
                query.context,
                'context':
                format_fname(query.context)
            })
        return self.render('panels/sqlalchemy.html', {'queries': data})
Exemplo n.º 6
0
def sql_explain():
    statement = request.args["sql"]
    params = request.args["params"]
    bind = request.args.get("bind")
    bind = bind if bind != "" else None

    # Validate hash
    hash = hashlib.sha1(current_app.config["SECRET_KEY"] + statement + params).hexdigest()
    if hash != request.args["hash"]:
        return abort(406)

    # Make sure it is a select statement
    if not statement.lower().strip().startswith("select"):
        return abort(406)

    params = json.loads(params)

    engine = SQLAlchemy().get_engine(current_app, bind)

    if engine.driver == "pysqlite":
        query = "EXPLAIN QUERY PLAN %s" % statement
    else:
        query = "EXPLAIN %s" % statement

    result = engine.execute(query, params)
    return g.debug_toolbar.render(
        "panels/sqlalchemy_explain.html",
        {
            "result": result.fetchall(),
            "headers": result.keys(),
            "sql": format_sql(statement, params),
            "duration": float(request.args["duration"]),
        },
    )
Exemplo n.º 7
0
def test_format_sql_pygments():
    sql = 'select 1'
    html = format_sql(sql, {})
    assert isinstance(html, Markup)
    assert html.startswith('<div')
    assert 'select' in html
    assert '1' in html
Exemplo n.º 8
0
def sql_explain():
    statement = request.args['sql']
    params = request.args['params']

    # Validate hash
    hash = hashlib.sha1(current_app.config['SECRET_KEY'] + statement +
                        params).hexdigest()
    if hash != request.args['hash']:
        return abort(406)

    # Make sure it is a select statement
    if not statement.lower().strip().startswith('select'):
        return abort(406)

    params = json.loads(params)

    engine = SQLAlchemy().get_engine(current_app)

    if engine.driver == 'pysqlite':
        query = 'EXPLAIN QUERY PLAN %s' % statement
    else:
        query = 'EXPLAIN %s' % statement

    result = engine.execute(query, params)
    return g.debug_toolbar.render(
        'panels/sqlalchemy_explain.html', {
            'result': result.fetchall(),
            'headers': result.keys(),
            'sql': format_sql(statement, params),
            'duration': float(request.args['duration']),
        })
Exemplo n.º 9
0
    def content(self):
        if not json_available or not sqlalchemy_available:
            msg = ['Missing required libraries:', '<ul>']
            if not json_available:
                msg.append('<li>simplejson</li>')
            if not sqlalchemy_available:
                msg.append('<li>Flask-SQLAlchemy</li>')
            msg.append('</ul>')
            return '\n'.join(msg)

        queries = get_debug_queries()
        data = []
        for query in queries:
            data.append({
                'duration':
                query.duration,
                'sql':
                format_sql(query.statement, query.parameters),
                'signed_query':
                dump_query(query.statement, query.parameters),
                'context_long':
                query.context,
                'context':
                format_fname(query.context)
            })
        return self.render('panels/sqlalchemy.html', {'queries': data})
Exemplo n.º 10
0
    def content(self):
        if not json_available or not sqlalchemy_available:
            msg = ['Missing required libraries:', '<ul>']
            if not json_available:
                msg.append('<li>simplejson</li>')
            if not sqlalchemy_available:
                msg.append('<li>Flask-SQLAlchemy</li>')
            msg.append('</ul>')
            return '\n'.join(msg)

        queries = get_debug_queries()
        data = []
        for query in queries:
            is_select = query.statement.strip().lower().startswith('select')
            _params = ''
            try:
                _params = json.dumps(query.parameters)
            except TypeError:
                pass  # object not JSON serializable

            hash = hashlib.sha1(current_app.config['SECRET_KEY'] +
                                query.statement + _params).hexdigest()

            data.append({
                'duration': query.duration,
                'sql': format_sql(query.statement, query.parameters),
                'raw_sql': query.statement,
                'hash': hash,
                'params': _params,
                'is_select': is_select,
                'context_long': query.context,
                'context': format_fname(query.context)
            })
        return self.render('panels/sqlalchemy.html', {'queries': data})
Exemplo n.º 11
0
def test_format_sql_pygments():
    sql = 'select 1'
    html = format_sql(sql, {})
    assert isinstance(html, Markup)
    assert html.startswith('<div')
    assert 'select' in html
    assert '1' in html
Exemplo n.º 12
0
    def content(self):
        queries = get_debug_queries()
        data = []
        for query in queries:
            is_select = query.statement.strip().lower().startswith('select')
            _params = ''
            try:
                _params = json.dumps(query.parameters)
            except TypeError:
                pass # object not JSON serializable


            hash = hashlib.sha1(
                current_app.config['SECRET_KEY'] +
                query.statement + _params).hexdigest()

            data.append({
                'duration': query.duration,
                'sql': format_sql(query.statement, query.parameters),
                'raw_sql': query.statement,
                'hash': hash,
                'params': _params,
                'is_select': is_select,
                'context_long': query.context,
                'context': format_fname(query.context)
            })
        return self.render('panels/sqlalchemy.html', { 'queries': data})
Exemplo n.º 13
0
def test_format_sql_pygments_non_ascii():
    sql = b"select 'abc \xff xyz'"
    html = format_sql(sql, {})
    assert isinstance(html, Markup)
    assert html.startswith('<div')
    assert 'select' in html
    assert 'abc' in html
    assert 'xyz' in html
Exemplo n.º 14
0
def test_format_sql_pygments_non_ascii():
    sql = b"select 'abc \xff xyz'"
    html = format_sql(sql, {})
    assert isinstance(html, Markup)
    assert html.startswith('<div')
    assert 'select' in html
    assert 'abc' in html
    assert 'xyz' in html
Exemplo n.º 15
0
def sqla_sql_select():
    statement, params = load_query(request.args['query'])
    engine = SQLADebugPanel._engine
    result = engine.execute(statement, params)
    template = _jinja_env.get_template('select.html')
    return template.render({
        'result': result.fetchall(),
        'headers': result.keys(),
        'sql': format_sql(statement, params),
        'duration': float(request.args['duration']),
    })
Exemplo n.º 16
0
def sql_select():
    statement, params = load_query(request.args['query'])
    engine = SQLAlchemy().get_engine(current_app)

    result = engine.execute(statement, params)
    return g.debug_toolbar.render('panels/sqlalchemy_select.html', {
        'result': result.fetchall(),
        'headers': result.keys(),
        'sql': format_sql(statement, params),
        'duration': float(request.args['duration']),
    })
Exemplo n.º 17
0
def sql_select():
    statement, params = load_query(request.args['query'])
    engine = SQLAlchemy().get_engine(current_app)

    result = engine.execute(statement, params)
    return g.debug_toolbar.render(
        'panels/sqlalchemy_select.html', {
            'result': result.fetchall(),
            'headers': result.keys(),
            'sql': format_sql(statement, params),
            'duration': float(request.args['duration']),
        })
Exemplo n.º 18
0
        def sql_select():
            statement = request.args['sql']
            params = request.args['params']
            params = json.loads(params)

            db = SQLAlchemy()
            result = db.engine.execute(statement, params)
            return render_template('panels/sqlalchemy_select.html', **{
                'result': result.fetchall(),
                'headers': result.keys(),
                'sql': format_sql(statement, params),
                'duration': float(request.args['duration']),
                })
Exemplo n.º 19
0
        def sql_select():
            statement = request.args['sql']
            params = request.args['params']
            params = json.loads(params)

            db = SQLAlchemy()
            result = db.engine.execute(statement, params)
            return render_template(
                'panels/sqlalchemy_select.html', **{
                    'result': result.fetchall(),
                    'headers': result.keys(),
                    'sql': format_sql(statement, params),
                    'duration': float(request.args['duration']),
                })
Exemplo n.º 20
0
def sql_explain():
    statement, params = load_query(request.args['query'])
    engine = SQLAlchemy().get_engine(current_app)

    if engine.driver == 'pysqlite':
        query = 'EXPLAIN QUERY PLAN %s' % statement
    else:
        query = 'EXPLAIN %s' % statement

    result = engine.execute(query, params)
    return g.debug_toolbar.render('panels/sqlalchemy_explain.html', {
        'result': result.fetchall(),
        'headers': result.keys(),
        'sql': format_sql(statement, params),
        'duration': float(request.args['duration']),
    })
Exemplo n.º 21
0
def sql_select(explain=False):
    statement, params = load_query(request.args['query'])
    engine = SQLAlchemy().get_engine(current_app)

    if explain:
        if engine.driver == 'pysqlite':
            statement = 'EXPLAIN QUERY PLAN\n%s' % statement
        else:
            statement = 'EXPLAIN\n%s' % statement

    result = engine.execute(statement, params)
    return g.debug_toolbar.render('panels/sqlalchemy_select.html', {
        'result': result.fetchall(),
        'headers': result.keys(),
        'sql': format_sql(statement, params),
        'duration': float(request.args['duration']),
    })
Exemplo n.º 22
0
def sqla_sql_explain():
    statement, params = load_query(request.args['query'])
    engine = SQLADebugPanel._engine

    if engine.driver == 'pysqlite':
        query = 'EXPLAIN QUERY PLAN %s' % statement
    else:
        query = 'EXPLAIN %s' % statement

    result = engine.execute(query, params)
    template = _jinja_env.get_template('explain.html')
    return template.render({
        'result': result.fetchall(),
        'headers': result.keys(),
        'sql': format_sql(statement, params),
        'duration': float(request.args['duration']),
    })
Exemplo n.º 23
0
def sql_analyze():
    statement, params = load_query(request.args['query'])
    engine = SQLAlchemy().get_engine(current_app)

    if engine.driver == 'pysqlite':
        query = 'EXPLAIN ANALYZE QUERY PLAN %s' % statement
    else:
        query = 'EXPLAIN ANALYZE %s' % statement

    result = engine.execute(query, params)
    return g.debug_toolbar.render(
        'panels/sqlalchemy_explain.html', {
            'result': result.fetchall(),
            'headers': result.keys(),
            'sql': format_sql(statement, params),
            'duration': float(request.args['duration']),
        })
Exemplo n.º 24
0
 def _after_cursor_execute(cls, conn, cursor, statement, parameters,
                           context, executemany):
     start_time = cls._locals()['QUERY_TIMER']
     end_time = time.time()
     if 'DEBUG_STATEMENTS' not in cls._locals():
         cls._locals()['DEBUG_STATEMENTS'] = []
     cls._locals()['DEBUG_STATEMENTS'].append({
         'duration':
         end_time - start_time,
         'sql':
         format_sql(statement, parameters),
         'signed_query':
         dump_query(statement, parameters),
         'context_long':
         _calling_context(cls.package_names + [current_app.import_name]),
         'context':
         _calling_context(cls.package_names + [current_app.import_name]),
     })
Exemplo n.º 25
0
def sql_select(explain=False):
    statement, params = load_query(request.args["query"])
    engine = SQLAlchemy().get_engine(current_app)

    if explain:
        if engine.driver == "pysqlite":
            statement = "EXPLAIN QUERY PLAN\n%s" % statement
        else:
            statement = "EXPLAIN\n%s" % statement

    result = engine.execute(statement, params)
    return g.debug_toolbar.render(
        "panels/sqlalchemy_select.html",
        {
            "result": result.fetchall(),
            "headers": result.keys(),
            "sql": format_sql(statement, params),
            "duration": float(request.args["duration"]),
        },
    )
Exemplo n.º 26
0
    def content(self):
        queries = get_queries()

        if not queries and not is_available():
            return self.render('panels/sqlalchemy_error.html', {
                'sqlalchemy_available': sqlalchemy_available,
                'extension_used': extension_used(),
                'recording_enabled': recording_enabled(),
            })

        data = []
        for query in queries:
            data.append({
                'duration': query.duration,
                'sql': format_sql(query.statement, query.parameters),
                'signed_query': dump_query(query.statement, query.parameters),
                'context_long': query.context,
                'context': format_fname(query.context)
            })
        return self.render('panels/sqlalchemy.html', {'queries': data})
Exemplo n.º 27
0
        def sql_explain():
            statement = request.args['sql']
            params = request.args['params']
            params = json.loads(params)

            db = SQLAlchemy()
            if db.engine.driver == 'pysqlite':
                query = 'EXPLAIN QUERY PLAN %s' % statement
            elif db.engine.driver == 'psycopg2':
                query = 'EXPLAIN VERBOSE %s' % statement
            else:
                query = 'EXPLAIN %s' % statement

            result = db.engine.execute(query, params)
            return render_template('panels/sqlalchemy_explain.html', **{
                'result': result.fetchall(),
                'headers': result.keys(),
                'sql': format_sql(statement, params),
                'duration': float(request.args['duration']),
                })
Exemplo n.º 28
0
        def sql_explain():
            statement = request.args['sql']
            params = request.args['params']
            params = json.loads(params)

            db = SQLAlchemy()
            if db.engine.driver == 'pysqlite':
                query = 'EXPLAIN QUERY PLAN %s' % statement
            elif db.engine.driver == 'psycopg2':
                query = 'EXPLAIN VERBOSE %s' % statement
            else:
                query = 'EXPLAIN %s' % statement

            result = db.engine.execute(query, params)
            return render_template(
                'panels/sqlalchemy_explain.html', **{
                    'result': result.fetchall(),
                    'headers': result.keys(),
                    'sql': format_sql(statement, params),
                    'duration': float(request.args['duration']),
                })
Exemplo n.º 29
0
def sql_select(explain=False):
    statement, params = load_query(request.args['query'])
    database = current_app.extensions.get('peewee').database.obj

    if explain:
        if isinstance(database, SqliteDatabase):
            statement = 'EXPLAIN QUERY PLAN\n%s' % statement
        else:
            statement = 'EXPLAIN\n%s' % statement

    result = database.execute_sql(statement, params)
    headers = []
    data = list(result.fetchall())
    if data:
        headers = ['' for _ in range(len(data[0]))]
    return g.debug_toolbar.render('panels/sqlalchemy_select.html', {
        'result': data,
        'headers': headers,
        'sql': format_sql(statement, params),
        'duration': float(request.args['duration']),
    })
Exemplo n.º 30
0
    def content(self):
        if not json_available or not sqlalchemy_available:
            msg = ['Missing required libraries:', '<ul>']
            if not json_available:
                msg.append('<li>simplejson</li>')
            if not sqlalchemy_available:
                msg.append('<li>Flask-SQLAlchemy</li>')
            msg.append('</ul>')
            return '\n'.join(msg)

        queries = get_debug_queries()
        data = []
        for query in queries:
            data.append({
                'duration': query.duration,
                'sql': format_sql(query.statement, query.parameters),
                'signed_query': dump_query(query.statement, query.parameters),
                'context_long': query.context,
                'context': format_fname(query.context)
            })
        return self.render('panels/sqlalchemy.html', {'queries': data})
Exemplo n.º 31
0
    def content(self):
        if not json_available or not sqlalchemy_available:
            msg = ["Missing required libraries:", "<ul>"]
            if not json_available:
                msg.append("<li>simplejson</li>")
            if not sqlalchemy_available:
                msg.append("<li>Flask-SQLAlchemy</li>")
            msg.append("</ul>")
            return "\n".join(msg)

        queries = get_debug_queries()
        data = []
        for query in queries:
            is_select = query.statement.strip().lower().startswith("select")
            _params = ""
            try:
                _params = json.dumps(query.parameters)
            except TypeError:
                pass  # object not JSON serializable

            hash = hashlib.sha1(current_app.config["SECRET_KEY"] + query.statement + _params).hexdigest()

            bind = ""
            if hasattr(query, "bind") and query.bind is not None:
                bind = query.bind

            data.append(
                {
                    "duration": query.duration,
                    "sql": format_sql(query.statement, query.parameters),
                    "raw_sql": query.statement,
                    "hash": hash,
                    "params": _params,
                    "is_select": is_select,
                    "context_long": query.context,
                    "context": format_fname(query.context),
                    "bind": bind,
                }
            )
        return self.render("panels/sqlalchemy.html", {"queries": data})
Exemplo n.º 32
0
    def content(self):
        if not json_available or not sqlalchemy_available:
            msg = ['Missing required libraries:', '<ul>']
            if not json_available:
                msg.append('<li>simplejson</li>')
            if not sqlalchemy_available:
                msg.append('<li>Flask-SQLAlchemy</li>')
            msg.append('</ul>')
            return '\n'.join(msg)

        queries = get_debug_queries()
        data = []
        for query in queries:
            is_select = query.statement.strip().lower().startswith('select')
            _params = ''
            try:
                _params = json.dumps(query.parameters)
            except TypeError:
                pass # object not JSON serializable


            hash = hashlib.sha1(
                current_app.config['SECRET_KEY'] +
                query.statement + _params).hexdigest()

            data.append({
                'duration': query.duration,
                'sql': format_sql(query.statement, query.parameters),
                'raw_sql': query.statement,
                'hash': hash,
                'params': _params,
                'is_select': is_select,
                'context_long': query.context,
                'context': format_fname(query.context)
            })
        return self.render('panels/sqlalchemy.html', { 'queries': data})
Exemplo n.º 33
0
def test_format_sql_no_pygments_escape_html(no_pygments):
    sql = 'select x < 1'
    formatted = format_sql(sql, {})
    assert not isinstance(formatted, Markup)
    assert Markup('%s') % formatted == 'select x &lt; 1'
Exemplo n.º 34
0
def test_format_sql_no_pygments(no_pygments):
    sql = 'select 1'
    assert format_sql(sql, {}) == sql
Exemplo n.º 35
0
def test_format_sql_no_pygments_non_ascii(no_pygments):
    sql = b"select '\xff'"
    formatted = format_sql(sql, {})
    assert formatted.startswith(u"select '")
Exemplo n.º 36
0
def test_format_sql_no_pygments_escape_html(no_pygments):
    sql = 'select x < 1'
    formatted = format_sql(sql, {})
    assert not isinstance(formatted, Markup)
    assert Markup('%s') % formatted == 'select x &lt; 1'
Exemplo n.º 37
0
def test_format_sql_no_pygments(no_pygments):
    sql = 'select 1'
    assert format_sql(sql, {}) == sql
Exemplo n.º 38
0
def test_format_sql_no_pygments_non_ascii(no_pygments):
    sql = b"select '\xff'"
    formatted = format_sql(sql, {})
    assert formatted.startswith(u"select '")