Added Flask-Demo and Flask AppBuilder tutorial

This commit is contained in:
2025-10-31 22:19:57 -04:00
parent 897ee0714f
commit 895dbbb811
9 changed files with 547 additions and 0 deletions

54
fab/mvstubs.py Normal file
View File

@@ -0,0 +1,54 @@
"""Generate a basic ModelView class for each table in the database."""
import socket
import psycopg
# Determine whether connecting from on/off campus
try:
socket.gethostbyname("data.cs.jmu.edu")
HOST = "data.cs.jmu.edu"
except socket.gaierror:
HOST = "localhost"
# Get all tables and their columns
with psycopg.connect(
host=HOST, user="tamassno", dbname="sec2", password="113880616"
) as conn:
with conn.cursor() as cur:
cur.execute(
"""
SELECT table_name, column_name
FROM information_schema.columns
WHERE table_schema = 'tamassno'
AND table_name NOT LIKE 'ab_%'
ORDER BY table_name, ordinal_position;
"""
)
schema = cur.fetchall()
# Build a dictionary of results by table
tables: dict[str, list[str]] = {}
for table_name, column_name in schema:
tables.setdefault(table_name, []).append(column_name)
# Generate Flask-AppBuilder ModelView classes
for table, columns in tables.items():
name = table.capitalize()
print(f"class {name}(ModelView):")
print(f" datamodel = SQLAInterface(models.{name})")
print(f" route_base = '/{table}'")
print(f" list_title = '{name}s'")
print(f" list_columns = {columns}")
print()
# Generate code to add each view to the app
for table in tables:
name = table.capitalize()
print("appbuilder.add_view(")
print(f" {name},")
print(f' "{name}s",')
print(' icon="fa-database",')
print(' category="Admin",')
print(")")
print()