Added Flask-Demo and Flask AppBuilder tutorial
This commit is contained in:
54
fab/mvstubs.py
Normal file
54
fab/mvstubs.py
Normal 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()
|
||||
Reference in New Issue
Block a user