diff options
| author | Andi Albrecht <albrecht.andi@gmail.com> | 2011-07-29 21:03:28 +0200 |
|---|---|---|
| committer | Andi Albrecht <albrecht.andi@gmail.com> | 2011-07-29 21:03:28 +0200 |
| commit | 92c142623d9b4ad806f51dd79e3842396ac464d8 (patch) | |
| tree | e56384484801edcd417901e485474914a98ea4a1 /extras/appengine/sqlformat/templates | |
| parent | c918cc9dc30b3a7684a96feae95fc5c05638360e (diff) | |
| download | sqlparse-92c142623d9b4ad806f51dd79e3842396ac464d8.tar.gz | |
Replace Django by Flask in App Engine frontend (fixes issue11).
--HG--
rename : extras/appengine/Makefile => extras/appengine-django/Makefile
rename : extras/appengine/README => extras/appengine-django/README
rename : extras/appengine/__init__.py => extras/appengine-django/__init__.py
rename : extras/appengine/app.yaml => extras/appengine-django/app.yaml
rename : extras/appengine/examples/customers.sql => extras/appengine-django/examples/customers.sql
rename : extras/appengine/examples/multiple_inserts.sql => extras/appengine-django/examples/multiple_inserts.sql
rename : extras/appengine/examples/pg_view.sql => extras/appengine-django/examples/pg_view.sql
rename : extras/appengine/examples/subquery.sql => extras/appengine-django/examples/subquery.sql
rename : extras/appengine/examples/subquery2.sql => extras/appengine-django/examples/subquery2.sql
rename : extras/appengine/index.yaml => extras/appengine-django/index.yaml
rename : extras/appengine/main.py => extras/appengine-django/main.py
rename : extras/appengine/settings.py => extras/appengine-django/settings.py
rename : extras/appengine/sqlformat/__init__.py => extras/appengine-django/sqlformat/__init__.py
rename : extras/appengine/sqlformat/urls.py => extras/appengine-django/sqlformat/urls.py
rename : extras/appengine/sqlformat/views.py => extras/appengine-django/sqlformat/views.py
rename : extras/appengine/static/bg_options.png => extras/appengine-django/static/bg_options.png
rename : extras/appengine/static/bgfieldset.png => extras/appengine-django/static/bgfieldset.png
rename : extras/appengine/static/bgfooter.png => extras/appengine-django/static/bgfooter.png
rename : extras/appengine/static/bgtop.png => extras/appengine-django/static/bgtop.png
rename : extras/appengine/static/blank.gif => extras/appengine-django/static/blank.gif
rename : extras/appengine/static/canvas.html => extras/appengine-django/static/canvas.html
rename : extras/appengine/static/hotkeys.js => extras/appengine-django/static/hotkeys.js
rename : extras/appengine/static/img_loading.gif => extras/appengine-django/static/img_loading.gif
rename : extras/appengine/static/jquery.textarearesizer.compressed.js => extras/appengine-django/static/jquery.textarearesizer.compressed.js
rename : extras/appengine/static/loading.gif => extras/appengine-django/static/loading.gif
rename : extras/appengine/static/lynx_screenshot.png => extras/appengine-django/static/lynx_screenshot.png
rename : extras/appengine/static/pygments.css => extras/appengine-django/static/pygments.css
rename : extras/appengine/static/resize-grip.png => extras/appengine-django/static/resize-grip.png
rename : extras/appengine/static/robots.txt => extras/appengine-django/static/robots.txt
rename : extras/appengine/static/rpc_relay.html => extras/appengine-django/static/rpc_relay.html
rename : extras/appengine/static/script.js => extras/appengine-django/static/script.js
rename : extras/appengine/static/sitemap.xml => extras/appengine-django/static/sitemap.xml
rename : extras/appengine/static/sqlformat_client_example.py => extras/appengine-django/static/sqlformat_client_example.py
rename : extras/appengine/static/styles.css => extras/appengine-django/static/styles.css
rename : extras/appengine/templates/404.html => extras/appengine-django/templates/404.html
rename : extras/appengine/templates/500.html => extras/appengine-django/templates/500.html
rename : extras/appengine/templates/about.html => extras/appengine-django/templates/about.html
rename : extras/appengine/templates/api.html => extras/appengine-django/templates/api.html
rename : extras/appengine/templates/index.html => extras/appengine-django/templates/index.html
rename : extras/appengine/templates/master.html => extras/appengine-django/templates/master.html
rename : extras/appengine/templates/python-client-example.html => extras/appengine-django/templates/python-client-example.html
rename : extras/appengine/templates/source.html => extras/appengine-django/templates/source.html
Diffstat (limited to 'extras/appengine/sqlformat/templates')
| -rw-r--r-- | extras/appengine/sqlformat/templates/about.html | 46 | ||||
| -rw-r--r-- | extras/appengine/sqlformat/templates/api.html | 52 | ||||
| -rw-r--r-- | extras/appengine/sqlformat/templates/index.html | 120 | ||||
| -rw-r--r-- | extras/appengine/sqlformat/templates/master.html | 103 | ||||
| -rw-r--r-- | extras/appengine/sqlformat/templates/python-client-example.html | 17 | ||||
| -rw-r--r-- | extras/appengine/sqlformat/templates/source.html | 60 |
6 files changed, 398 insertions, 0 deletions
diff --git a/extras/appengine/sqlformat/templates/about.html b/extras/appengine/sqlformat/templates/about.html new file mode 100644 index 0000000..2d4e03e --- /dev/null +++ b/extras/appengine/sqlformat/templates/about.html @@ -0,0 +1,46 @@ +{% extends "master.html" %} + +{% block title %}About{% endblock %} + +{% block main %} +<h1>About this Application</h1> +<p> + This application is a online SQL formatting tool. +</p> +<p> + Basically it's a playground for a Python module to parse and format + SQL statements. Sometimes it's easier to combine the available + options and to see the resulting output using a web front-end than + on the command line ;-) +</p> +<p> + To get started, enter a SQL statement in the text box on the top, + choose some options and click on "Format SQL" (Ctrl+F) + to see the result. +</p> +<p> + <em>Note:</em> The SQL formatter and parser is in an early stage + of development. If you're looking for a mature tool, try one of + <a href="http://www.google.com/search?q=online+sql+formatter">these</a>. +</p> +<h2>Using it from the Command Line</h2> +<p> + There are three ways to use this SQL formatter from the command line: +</p> +<ol> + <li>Grab the <a href="/source/">sources</a> and use the module in your + Python scripts.</li> + <li> + Write a little script in your favorite language that sends a POST + request to this application.<br/> + Read the <a href="/api/">API Documentation</a> for more information. + </li> + <li>Use + <a href="/static/lynx_screenshot.png" + alt="Lynx Screenshot" target="_blank" + title="Screenshot: sqlformat.appspot.com on Lynx">Lynx + </a> + </li> +</ol> + +{% endblock %} diff --git a/extras/appengine/sqlformat/templates/api.html b/extras/appengine/sqlformat/templates/api.html new file mode 100644 index 0000000..79bf118 --- /dev/null +++ b/extras/appengine/sqlformat/templates/api.html @@ -0,0 +1,52 @@ +{% extends "master.html" %} + +{% block title %}API{% endblock %} + +{% block main %} +<h1>API Documentation</h1> + +<p> + Using the API for this application is pretty simple. Just send a + <code>POST</code> request to +</p> +<p> + <code>http://sqlformat.appspot.com/format/</code> +</p> + +<h2>Options</h2> +<p> + The <code>POST</code> request accepts various options to control + formatting. Only the <em>data</em> option is required. All others + are optional. +</p> + +<dl> + <dt>data</dt> + <dd>The SQL statement to format.</dd> + <dt>remove_comments</dt> + <dd>Set to 1 to remove comments.</dd> + <dt>keyword_case</dt> + <dd>How to convert keywords. Allowed values are 'lower', 'upper', + 'capitalize'.</dd> + <dt>identifier_case</dt> + <dd>How to convert identifiers. Allowed values are 'lower', 'upper', + 'capitalize'.</dd> + <dt>n_indents</dt> + <dd>An integer indicating the indendation depth.</dd> + <dt>right_margin</dt> + <dd>An integer indicating the maximum line length.</dd> + <dt>output_format</dt> + <dd>Transfer the statement into another programming language. + Allowed values are 'python', 'php'</dd> +</dl> + +<h2>Example</h2> +<p> + Here's a example in Python: +</p> +{% include "python-client-example.html" %} +<p> + <a href="/static/sqlformat_client_example.py">Download sqlformat_example_client.py</a> +</p> + +{% endblock %} diff --git a/extras/appengine/sqlformat/templates/index.html b/extras/appengine/sqlformat/templates/index.html new file mode 100644 index 0000000..22d6fdb --- /dev/null +++ b/extras/appengine/sqlformat/templates/index.html @@ -0,0 +1,120 @@ +{% extends "master.html" %} + +{% block main %} + +{% if output %} + <a href="#output" class="skip">Jump to formatted query</a> +{% endif %} + +<form method="post" action="" id="form_options" enctype="multipart/form-data"> + <div id="input"> + <div> + <strong>Type your SQL here:</strong><br /> + <textarea id="id_data" rows="10" cols="40" name="data" class="resizable">{{ sql_orig }}</textarea> + </div> + <div style="margin-top: .5em;"> + <strong>...or upload a file:</strong> + <input type="file" name="datafile" id="id_datafile" /> + </div> + <div id="examples" style="margin-top: .5em;"></div> + <div id="actions" style="margin-top: .5em;"> + <input type="submit" value="Format SQL" id="btn_format" /> + </div> + {% if output %}<a name="output"></a> + <div id="response">{{output|safe}}</div> + {% else %} + <div id="response"></div> + {% endif %} + <div id="proc_time"> + {% if proc_time %}Processed in {{proc_time}} seconds.{% endif %} + </div> + <div style="margin-top: 1em;"> + <script type="text/javascript"> + <!-- + google_ad_client = "pub-8870624642249726"; + /* 468x60, Erstellt 07.03.09 */ + google_ad_slot = "9840041509"; + google_ad_width = 468; + google_ad_height = 60; + //--> + </script> + <script type="text/javascript" + src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> + </script> + </div> + + </div> + <div id="options"> + <h1 class="skip">Options</h1> + <fieldset><legend id="general"><strong>General Options</strong></legend> + <div id="general_content" class="content"> + <input type="checkbox" id="id_remove_comments" name="remove_comments" value="1" {% if extra.comments %}checked="checked"{% endif %}/> + <label for="id_remove_comments">Remove comments</label> + <br /> + <input type="checkbox" id="id_highlight" name="highlight" value="1" {% if extra.highlight %}checked="checked"{% endif %} /> + <label for="id_highlight">Enable syntax highlighting</label> + </div> + </fieldset> + <fieldset><legend id="kwcase"> + <strong>Keywords & Identifiers</strong></legend> + <div> + Keywords: <select id="id_keyword_case" name="keyword_case"> + <option value="">Unchanged</option> + <option value="lower" {% if extra.keywords == 'lower' %}selected="selected"{% endif %}>Lower case</option> + <option value="upper" {% if extra.keywords == 'upper' %}selected="selected"{% endif %}>Upper case</option> + <option value="capitalize" {% if extra.keywords == 'capitalize' %}selected="selected"{% endif %}>Capitalize</option> + </select> + </div> + <div> + Identifiers: <select name="identifier_case" id="id_identifier_case"> + <option value="">Unchanged</option> + <option value="lower" {% if extra.idcase == 'lower' %}selected="selected"{% endif %}>Lower case</option> + <option value="upper" {% if extra.idcase == 'upper' %}selected="selected"{% endif %}>Upper case</option> + <option value="capitalize" {% if extra.idcase == 'capitalize' %}selected="selected"{% endif %}>Capitalize</option> + </select> + </div> + </fieldset> + <fieldset><legend id="indent"><strong>Indentation & Margins</strong> + </legend> + <div id="indent_content" class="content"> + <label for="id_n_indents">Indentation: </label> + <input name="n_indents" value="{{extra.n_indents}}" maxlength="2" type="text" id="id_n_indents" size="2" /> spaces + <div class="help">Empty field means leave indentation unchanged.</div> + </div> + </fieldset> + <fieldset><legend id="output"><strong>Output Format</strong></legend> + <label for="id_output_format">Language: </label> + <select name="output_format" id="id_output_format"> + <option value="sql" {% if extra.lang == 'sql' %}selected="selected"{% endif %}>SQL</option> + <option value="python" {% if extra.lang == 'python' %}selected="selected"{% endif %}>Python</option> + <option value="php" {% if extra.lang == 'php' %}selected="selected"{% endif %}>PHP</option> + </select> + </fieldset> + + <div class="dev">This software is in development.</div> + + <div> + <g:plusone size="medium"></g:plusone> + <a href="http://flattr.com/thing/350724/SQLFormat-Online-SQL-formatting-service" target="_blank"> + <img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /> + </a> + </div> + <div style="padding-top: 15px;"> + <a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="andialbrecht">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> + </div> + </div> + <div class="clearfix"></div> +</form> + +<script language="javascript"> +html = '<strong>...or select an example:</strong> '; +html = html + '<select onchange="load_example();" id="sel_example">'; +html = html + '<option value="">-- Choose Example --</option>'; +{% for ex in examples %} + html = html + '<option value="{{ex}}">{{ex}}</option>'; +{% endfor %} +html = html + '</select>'; +$('#examples').html(html); +</script> +{% endblock %} + diff --git a/extras/appengine/sqlformat/templates/master.html b/extras/appengine/sqlformat/templates/master.html new file mode 100644 index 0000000..88a9d36 --- /dev/null +++ b/extras/appengine/sqlformat/templates/master.html @@ -0,0 +1,103 @@ +<html> + <head> + <title>{% block title %}SQLFormat - Online SQL Formatter{% endblock %}</title> + <meta name="keywords" content="SQL, format, parse, python, beautify, pretty, online, formatting, formatter" /> + <meta name="description" content="Easy to use web service to format SQL statements." /> + <link rel="stylesheet" href="/static/pygments.css" /> + <link rel="stylesheet" href="/static/styles.css" /> + <script src="http://www.google.com/jsapi"></script> + <script> + google.load("jquery", "1.2.6"); + </script> + <script src="/static/hotkeys.js"></script> + <script src="/static/script.js"></script> + </head> + <body> + + <div id="help"> + <p>Keyboard Shortcuts</p> + <p> + <span class="shortcut">H</span> - Show / hide this help window<br/> + <span class="shortcut">Ctrl+F</span> - Format SQL and display result<br/> + <span class="shortcut">O</span> - Show / hide options<br/> + <span class="shortcut">T</span> - Set focus on SQL input<br/> + </p> + </div> + + <div id="header"> + <div id="header-inner"> + {% if user %}<img src="{{userimg}}" border="0" align="right" style="padding-top:.4em;"/>{% endif %} + <h1> + <a href="/"> + <span class="q">S<span class="q2">Q</span>L</span>Format + </a> + </h1> + <div id="slogan">Online SQL formatting service</div> + <div id="topmenu"> + <a href="/">Home</a> + | + <a href="/about/">About</a> + | + <a href="/source/">Source Code</a> + | + <a href="/api/">API</a> +<!-- + | + {% if user %} + <a href="{{logout_url}}">Sign out</a> + {% else %} + <a href="{{login_url}}">Sign in</a> + <span style="color: #babdb6;">with your Google account + to save preferred settings.</span> + {% endif %} +--> + </div> + </div> + </div> + + <div id="main"> + <div id="main-inner"> + {% block main %}MAIN CONTENT GOES HERE{% endblock %} + </div> + </div> + + <div id="footer"> + <div id="footer-inner"> + <div style="float: left; font-size: .85em;"> + <div>© 2011 Andi Albrecht + <code><albrecht dot andi gmail></code> + </div> + <div> + <a href="/">Home</a> + | + <a href="/about/">About</a> + | + <a href="/source/">Source Code</a> + | + <a href="/api/">API</a> + | + <a href="http://andialbrecht.wordpress.com/">Blog</a> + </div> + </div> + <div style="float: right;"> + <img src="http://code.google.com/appengine/images/appengine-silver-120x30.gif" + alt="Powered by Google App Engine" /> + </div> + <div class="clearfix"></div> + </div> + </div> + + <script type="text/javascript"> + var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); + document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); + </script> + <script type="text/javascript"> + try { + var pageTracker = _gat._getTracker("UA-3535525-2"); + pageTracker._trackPageview(); + } catch(err) {}</script> + <script>init();</script> + <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script> + + </body> +</html> diff --git a/extras/appengine/sqlformat/templates/python-client-example.html b/extras/appengine/sqlformat/templates/python-client-example.html new file mode 100644 index 0000000..68bf820 --- /dev/null +++ b/extras/appengine/sqlformat/templates/python-client-example.html @@ -0,0 +1,17 @@ +<div class="highlight example"><pre><span class="c">#!/usr/bin/env python</span> + +<span class="k">import</span> <span class="nn">urllib</span> +<span class="k">import</span> <span class="nn">urllib2</span> + +<span class="n">payload</span> <span class="o">=</span> <span class="p">(</span> + <span class="p">(</span><span class="s">'data'</span><span class="p">,</span> <span class="s">'select * from foo join bar on val1 = val2 where id = 123;'</span><span class="p">),</span> + <span class="p">(</span><span class="s">'format'</span><span class="p">,</span> <span class="s">'text'</span><span class="p">),</span> + <span class="p">(</span><span class="s">'keyword_case'</span><span class="p">,</span> <span class="s">'upper'</span><span class="p">),</span> + <span class="p">(</span><span class="s">'reindent'</span><span class="p">,</span> <span class="bp">True</span><span class="p">),</span> + <span class="p">(</span><span class="s">'n_indents'</span><span class="p">,</span> <span class="mf">2</span><span class="p">),</span> + <span class="p">)</span> + +<span class="n">response</span> <span class="o">=</span> <span class="n">urllib2</span><span class="o">.</span><span class="n">urlopen</span><span class="p">(</span><span class="s">'http://sqlformat.appspot.com/format/'</span><span class="p">,</span> + <span class="n">urllib</span><span class="o">.</span><span class="n">urlencode</span><span class="p">(</span><span class="n">payload</span><span class="p">))</span> +<span class="k">print</span> <span class="n">response</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> +</pre></div> diff --git a/extras/appengine/sqlformat/templates/source.html b/extras/appengine/sqlformat/templates/source.html new file mode 100644 index 0000000..a0ed89d --- /dev/null +++ b/extras/appengine/sqlformat/templates/source.html @@ -0,0 +1,60 @@ +{% extends "master.html" %} + +{% block title %}Source code{% endblock %} + +{% block main %} +<div id="response"> + <h1>Source Code</h1> + + <h2>Python Module</h2> + <p> + The sources for the SQL parser and formatter module are + hosted on Google Code. + To clone the repository run: + <p> + <code class="pre"> hg clone http://python-sqlparse.googlecode.com/hg/ python-sqlparse</code> + </p> + <p> + <a href="http://python-sqlparse.googlecode.com">Visit the project page</a> + | + <a href="http://code.google.com/p/python-sqlparse/source/browse/">Browse the sources online</a> + | + <a href="http://python-sqlparse.googlecode.com/svn/docs/api/index.html"> API Documentation</a> + </p> + <p> + Some relevant parts of the Python module contain code from the + <a href="http://pygments.org/">pygments</a> syntax highlighter. + The underlying Python module uses a non-validating SQL parser. + This approach makes it possible to parse even syntactically incorrect + SQL statements. + </p> + + <p> + Currently the parser module is used by + <a href="http://crunchyfrog.googlecode.com/">CrunchyFrog</a> - a + database front-end for Gnome. + </p> + + <p> + The <code>sqlparse</code> module is released under the terms of the + <a href="http://www.opensource.org/licenses/bsd-license.php">New BSD License</a>. + </p> + + <h2>App Engine Application</h2> + <p> + The source code for this App Engine application is available in the + <code>examples</code> directory of the Python module + (but it's really nothing special ;-). + </p> + + <h2>Contributing</h2> + <p> + Please file bug reports and feature requests on the project site at + <a href="http://code.google.com/p/python-sqlparse/issues/entry">http://code.google.com/p/python-sqlparse/issues/entry</a> + or if you have code to contribute upload it to + <a href="http://codereview.appspot.com">http://codereview.appspot.com</a> + and add albrecht.andi@googlemail.com as reviewer. + </p> + +</div> +{% endblock %} |
