diff options
Diffstat (limited to 'extras/appengine/sqlformat/legacy.py')
-rw-r--r-- | extras/appengine/sqlformat/legacy.py | 166 |
1 files changed, 0 insertions, 166 deletions
diff --git a/extras/appengine/sqlformat/legacy.py b/extras/appengine/sqlformat/legacy.py deleted file mode 100644 index 7f6c161..0000000 --- a/extras/appengine/sqlformat/legacy.py +++ /dev/null @@ -1,166 +0,0 @@ -"""Legacy URLs.""" - -# This module reflects the URLs and behavior of the former Django -# application. - -import logging -import os -import time - -from google.appengine.api import memcache - -from flask import Blueprint, make_response, render_template, Response, request - -from pygments import highlight -from pygments.formatters import HtmlFormatter -from pygments.lexers import SqlLexer, PythonLexer, PhpLexer - -import simplejson as json - -import sqlparse - - -legacy = Blueprint('', 'legacy') - - -EXAMPLES_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '../examples')) - - -@legacy.route('/', methods=['POST', 'GET']) -def index(): - data = {'examples': _get_examples()} - extra = {'highlight': True, 'comments': False, - 'keywords': 'upper', 'idcase': '', - 'n_indents': '2', - 'lang': 'sql'} - sql_orig = 'select * from foo join bar on val1 = val2 where id = 123;' - if request.method == 'POST': - oformat = request.form.get('format', 'html') - extra['highlight'] = 'highlight' in request.form - extra['comments'] = 'remove_comments' in request.form - extra['keywords'] = request.form.get('keyword_case', '') - extra['idcase'] = request.form.get('identifier_case', '') - extra['n_indents'] = request.form.get('n_indents', '2') - extra['lang'] = request.form.get('output_format', 'sql') - sql = _get_sql(request.form, request.files) - sql_orig = sql - start = time.time() - data['output'] = _format_sql(sql, request.form, format=oformat) - data['proc_time'] = '%.3f' % (time.time()-start) - if oformat == 'json': - data['errors'] = '' - return make_response(Response(json.dumps(data), - content_type='text/x-json')) - elif oformat == 'text': - return make_response(Response(data['output'], content_type='text/plain')) - data['sql_orig'] = sql_orig - data['extra'] = extra - return render_template('index.html', **data) - - -@legacy.route('/source/') -def source(): - return render_template('source.html') - - -@legacy.route('/about/') -def about(): - return render_template('about.html') - -@legacy.route('/api/') -def api(): - return render_template('api.html') - - -@legacy.route('/format/', methods=['GET', 'POST']) -@legacy.route('/format', methods=['GET', 'POST']) -def format_(): - if request.method == 'POST': - sql = _get_sql(request.form, request.files) - data = request.form - else: - sql = _get_sql(request.args) - data = request.args - formatted = _format_sql(sql, data, format='text') - return make_response(Response(formatted, content_type='text/plain')) - - -@legacy.route('/load_example', methods=['GET', 'POST']) -def load_example(): - fname = request.form.get('fname') - if fname is None: - answer = 'Uups, I\'ve got no filename...' - elif fname not in _get_examples(): - answer = 'Hmm, I think you don\'t want to do that.' - else: - answer = open(os.path.join(EXAMPLES_DIR, fname)).read() - data = json.dumps({'answer': answer}) - return make_response(Response(data, content_type='text/x-json')) - - -def _get_examples(): - examples = memcache.get('legacy_examples') - if examples is None: - examples = os.listdir(EXAMPLES_DIR) - memcache.set('legacy_examples', examples) - return examples - - -def _get_sql(data, files=None): - sql = None - if files is not None and 'datafile' in files: - raw = files['datafile'].read() - try: - sql = raw.decode('utf-8') - except UnicodeDecodeError, err: - logging.error(err) - logging.debug(repr(raw)) - sql = (u'-- UnicodeDecodeError: %s\n' - u'-- Please make sure to upload UTF-8 encoded data for now.\n' - u'-- If you want to help improving this part of the application\n' - u'-- please file a bug with some demo data at:\n' - u'-- http://code.google.com/p/python-sqlparse/issues/entry\n' - u'-- Thanks!\n' % err) - if not sql: - sql = data.get('data') - return sql or '' - - -def _format_sql(sql, data, format='html'): - popts = {} - if data.get('remove_comments'): - popts['strip_comments'] = True - if data.get('keyword_case', 'undefined') not in ('undefined', ''): - popts['keyword_case'] = data.get('keyword_case') - if data.get('identifier_case', 'undefined') not in ('undefined', ''): - popts['identifier_case'] = data.get('identifier_case') - if data.get('n_indents', None) is not None: - val = data.get('n_indents') - try: - popts['indent_width'] = max(1, min(1000, int(val))) - popts['reindent'] = True - except (ValueError, TypeError): - pass - if (not 'indent_width' in popts and - data.get('reindent', '').lower() in ('1', 'true', 't')): - popts['indent_width'] = 2 - popts['reindent'] = True - if data.get('output_format', None) is not None: - popts['output_format'] = data.get('output_format') - logging.debug('Format: %s, POPTS: %r', format, popts) - logging.debug(sql) - sql = sqlparse.format(sql, **popts) - if format in ('html', 'json'): - if data.get('highlight', False): - if popts['output_format'] == 'python': - lexer = PythonLexer() - elif popts['output_format'] == 'php': - lexer = PhpLexer() - else: - lexer = SqlLexer() - sql = highlight(sql, lexer, HtmlFormatter()) - else: - sql = ('<textarea class="resizable" ' - 'style="height: 350px; margin-top: 1em;">%s</textarea>' - % sql) - return sql |