Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
generate_keywords.py64 linesDownload Raw Back to psycopg3
1##########################################################################2#3# pgAdmin 4 - PostgreSQL Tools4#5# Copyright (C) 2013 - 2024, The pgAdmin Development Team6# This software is released under the PostgreSQL Licence7#8# This allows us to generate to keywords.py for PostgreSQL for used by9# qtIdent and qtTypeIdent functions for scanning the keywords type.10#11# In order to generate keywords.py for specific version of PostgreSQL, put12# pg_config executable in the PATH.13#14##########################################################################15 16import os17import re18 19if __name__ == '__main__':20    include_dir = os.popen('pg_config --includedir').read().rstrip()21    version = os.popen('pg_config --version').read().rstrip()22 23    keywords_file = open('keywords.py', 'w')24 25    keywords_file.write("""##########################################################################26#27# pgAdmin 4 - PostgreSQL Tools28#29# Copyright (C) 2013 - 2024, The pgAdmin Development Team30# This software is released under the PostgreSQL Licence31#32##########################################################################33""")34    keywords_file.write('# ScanKeyword function for ' + version)35    keywords_file.write('\n\ndef ScanKeyword(key):')36    keywords_file.write('\n    keywordDict = {\n')37 38    idx = 039 40    with open(include_dir + "/postgresql/server/parser/kwlist.h", "rb") as ins:41 42        pattern = re.compile(r'"([^"]+)",\s*[^,]*\s*,\s*(.*)$')43        keyword_types = [44            'UNRESERVED_KEYWORD', 'COL_NAME_KEYWORD',45            'TYPE_FUNC_NAME_KEYWORD', 'RESERVED_KEYWORD'46        ]47 48        for line in ins:49            line = line.decode().rstrip()50            if line[0:11] == 'PG_KEYWORD(' and line[-1] == ')':51                match = pattern.match(line[11:-1])52                if idx != 0:53                    keywords_file.write(", ")54                else:55                    keywords_file.write("        ")56                keywords_file.write(57                    '"' + match.group(1) + '": ' +58                    str(keyword_types.index(match.group(2)))59                )60                idx += 161    keywords_file.write('\n        }\n')62    keywords_file.write(63        '    return (key in keywordDict and keywordDict[key]) or None')64 
codekingpro/portable-devtools · Team Ai