mirror of
https://github.com/HerculesWS/Hercules
synced 2026-08-15 12:23:13 -04:00
46 lines
1.8 KiB
Python
46 lines
1.8 KiB
Python
import os
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
def lint_sql_files_with_sqlfluff(sql_directory_path):
|
|
"""
|
|
Lint all .sql files in the given directory and its subdirectories using SQLFluff.
|
|
|
|
Args:
|
|
sql_directory_path (str): Path to the directory containing SQL files.
|
|
"""
|
|
sql_directory = Path(sql_directory_path)
|
|
if not sql_directory.exists() or not sql_directory.is_dir():
|
|
print(f"Error: {sql_directory_path} is not a valid directory.")
|
|
return
|
|
|
|
sql_file_list = list(sql_directory.rglob('*.sql'))
|
|
if not sql_file_list:
|
|
print(f"No .sql files found in {sql_directory_path}.")
|
|
return
|
|
|
|
for sql_file_path in sql_file_list:
|
|
print(f"\nLinting {sql_file_path} with SQLFluff...\n")
|
|
try:
|
|
lint_process = subprocess.run(['sqlfluff', 'lint', '--dialect', 'mysql', '--verbose', str(sql_file_path)], capture_output=True, text=True, timeout=120)
|
|
if lint_process.returncode != 0:
|
|
print(f"Errors in {sql_file_path}:")
|
|
if lint_process.stdout:
|
|
print(f"STDOUT:\n{lint_process.stdout}")
|
|
if lint_process.stderr:
|
|
print(f"STDERR:\n{lint_process.stderr}")
|
|
print()
|
|
else:
|
|
print(f"{sql_file_path} is valid!\n")
|
|
except subprocess.TimeoutExpired:
|
|
print(f"Linting timed out for {sql_file_path}.")
|
|
except FileNotFoundError:
|
|
print("Error: SQLFluff is not installed or not in PATH.")
|
|
break
|
|
except Exception as e:
|
|
print(f"Unexpected error linting {sql_file_path}: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
# Specify the directory containing your .sql files
|
|
sql_directory_path = './sql-files'
|
|
lint_sql_files_with_sqlfluff(sql_directory_path)
|