def is_keyword(value): test = value.upper() return KEYWORDS_COMMON.get(test, KEYWORDS.get(test, tokens.Name)), value
import logging import re from pygments import highlight from pygments.lexers import SqlLexer from pygments.formatters import HtmlFormatter import sqlparse logger = logging.getLogger("zentral.utils.sql") # monkey patch sqlparse to have file, path and last not considered as keywords try: from sqlparse.keywords import KEYWORDS, KEYWORDS_PLPGSQL except ImportError: logger.error("Could not monkey patch sqlparse") else: KEYWORDS.pop("FILE", None) KEYWORDS.pop("LAST", None) KEYWORDS_PLPGSQL.pop("PATH", None) # SQL → HTML def format_sql(query): if not query: return "" sql_lexer = SqlLexer() html_formatter = HtmlFormatter() reindent = len(query) > 80 query = sqlparse.format(query, reindent=reindent, keyword_case='upper') return highlight(query, sql_lexer, html_formatter)