コード例 #1
0
ファイル: sqla.py プロジェクト: Shu-Ji/webpy-debug-toolbar
    def POST(self, type):
        i = web.input()
        statement = i['sql']
        params = i['params']

        # Validate hash
        hash = hashlib.sha1(
            web.config.SECRET_KEY + statement + params).hexdigest()
        if hash != i['hash']:
            raise web.notacceptable()

        # Make sure it is a select statement
        if not statement.lower().strip().startswith('select'):
            raise web.notacceptable()

        params = json.loads(params)

        engine = web.config.engine

        if type == 'explain':
            if engine.driver == 'pysqlite':
                statement = 'EXPLAIN QUERY PLAN %s' % statement
            else:
                statement = 'EXPLAIN %s' % statement
            
        result = engine.execute(statement, params)
        debugtoolbar = web.config.debug_toolbar
        return debugtoolbar.render('panels/sqla_result.html', {
            'result': result.fetchall(),
            'headers': result.keys(),
            'sql': format_sql(statement, params),
            'duration': float(i['duration']),
            'type': type,
        })
コード例 #2
0
ファイル: sqla.py プロジェクト: Shu-Ji/webpy-debug-toolbar
    def content(self):
        data = []
        for query in web.config.debug_toolbar_queries:
            statement, parameters, duration, context = query
            is_select = statement.strip().lower().startswith('select')
            _params = ''
            try:
                _params = json.dumps(parameters)
            except TypeError:
                pass # object not JSON serializable

            hash = hashlib.sha1(
                web.config.SECRET_KEY +
                statement + _params).hexdigest()

            data.append({
                'duration': duration,
                'sql': format_sql(statement, parameters),
                'raw_sql': statement,
                'hash': hash,
                'params': _params,
                'is_select': is_select,
            })
        web.config.debug_toolbar_queries = []
        return self.render('panels/sqlalchemy.html', {'queries': data})