pgadmin4/web/pgadmin/misc/sql/__init__.py
2023-01-02 11:53:55 +05:30

81 lines
2.6 KiB
Python

##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2023, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
"""A blueprint module providing utility functions for the application."""
import sqlparse
from flask import request, url_for
from flask_security import login_required
from pgadmin.utils import PgAdminModule
from pgadmin.utils.ajax import make_json_response
from pgadmin.utils.preferences import Preferences
MODULE_NAME = 'sql'
class SQLModule(PgAdminModule):
def get_exposed_url_endpoints(self):
"""
Returns:
list: URL endpoints
"""
return [
'sql.format', 'sql.format'
]
# Initialise the module
blueprint = SQLModule(MODULE_NAME, __name__, url_prefix='/misc/sql')
def sql_format(sql):
"""
This function takes a SQL statement, formats it, and returns it
"""
p = Preferences.module('sqleditor')
use_spaces = p.preference('use_spaces').get()
output = sqlparse.format(sql,
keyword_case=p.preference(
'keyword_case').get(),
identifier_case=p.preference(
'identifier_case').get(),
strip_comments=p.preference(
'strip_comments').get(),
reindent=p.preference(
'reindent').get(),
reindent_aligned=p.preference(
'reindent_aligned').get(),
use_space_around_operators=p.preference(
'spaces_around_operators').get(),
comma_first=p.preference(
'comma_first').get(),
wrap_after=p.preference(
'wrap_after').get(),
indent_tabs=not use_spaces,
indent_width=p.preference(
'tab_size').get() if use_spaces else 1)
return output
@blueprint.route("/format", methods=['POST'], endpoint="format")
@login_required
def sql_format_wrapper():
"""
This endpoint takes a SQL statement, formats it, and returns it
"""
sql = ''
if request.data:
sql = sql_format(request.get_json()['sql'])
return make_json_response(
data={'sql': sql},
status=200
)