[READ-ONLY] Mirror of https://github.com/mrgnw/scripts.
0

Configure Feed

Select the types of activity you want to include in your feed.

scripts / glot
1.6 kB 60 lines
1#!/usr/bin/env python3 2 3import argparse 4from pathlib import Path 5import sqlglot 6from sqlglot.optimizer import optimize 7from watchdog.observers import Observer 8from watchdog.events import FileSystemEventHandler 9 10 11class SqlFileChangeHandler(FileSystemEventHandler): 12 def __init__(self, src, tgt): 13 self.src_path = Path(f'{src}.sql').resolve() 14 self.tgt_path = Path(f'{tgt}.sql').resolve() 15 self.src = src 16 self.tgt = tgt 17 18 def on_modified(self, event): 19 if Path(event.src_path).resolve() == self.src_path: 20 self.transpile_and_format_sql() 21 22 def transpile_and_format_sql(self): 23 with open(self.src_path, 'r') as file: 24 sql = file.read() 25 26 optimized = optimize(sqlglot.parse_one(sql)).sql(pretty=True) 27 transpiled = '\n'.join(sqlglot.transpile(optimized, read=self.src, write=self.tgt, pretty=True)) 28 29 with open(self.tgt_path, 'w') as file: 30 file.write(transpiled) 31 32 print(f'\t{self.src_path.name}{self.tgt_path.name}') 33 34 35def main(): 36 parser = argparse.ArgumentParser(description='Monitor and transpile SQL files.') 37 parser.add_argument('src_dialect', default='duckdb', nargs='?', help='Source SQL dialect') 38 parser.add_argument('tgt_dialect', default='mysql', nargs='?', help='Target SQL dialect') 39 40 args = parser.parse_args() 41 src = args.src_dialect 42 tgt = args.tgt_dialect 43 Path(f'{src}.sql').touch() 44 45 event_handler = SqlFileChangeHandler(src, tgt) 46 observer = Observer() 47 observer.schedule(event_handler, path=Path(src).parent) 48 observer.start() 49 50 print(f'Monitoring {src}.sql for changes...') 51 try: 52 while True: 53 pass 54 except KeyboardInterrupt: 55 observer.stop() 56 observer.join() 57 58 59if __name__ == '__main__': 60 main()