11import asyncio
22import os
33
4- import yaml
54from hypercorn import Config
65from hypercorn .asyncio import serve
7- from piccolo .apps .user .tables import BaseUser
86from piccolo .engine import PostgresEngine
9- from piccolo .engine .sqlite import SQLiteEngine
107from piccolo .table import create_db_tables
118from piccolo .table_reflection import TableStorage
129from piccolo_admin .endpoints import TableConfig , create_admin
1310from piccolo_api .encryption .providers import XChaCha20Provider
1411from piccolo_api .mfa .authenticator .provider import AuthenticatorProvider
15- from piccolo_api .mfa .authenticator .tables import (
16- AuthenticatorSecret as AuthenticatorSecret_ ,
17- )
18- from piccolo_api .session_auth .tables import SessionsBase
19-
20- with open ("config.yaml" ) as stream :
21- try :
22- admin_config = yaml .safe_load (stream )
23- BASE_CONFIG = admin_config .get ("tables" )
24- except yaml .YAMLError as exc :
25- raise exc
26-
27- DB = SQLiteEngine ()
28-
29-
30- class Sessions (SessionsBase , db = DB ):
31- pass
32-
33-
34- class User (BaseUser , tablename = "piccolo_user" , db = DB ):
35- pass
36-
37-
38- class AuthenticatorSecret (AuthenticatorSecret_ , db = DB ):
39- pass
12+ from tables import AuthenticatorSecret , Sessions , User
13+ from utils import additional_config
4014
4115
4216async def main ():
@@ -72,79 +46,55 @@ async def main():
7246 await storage .reflect (schema_name = "public" )
7347
7448 # additional configuration of admin tables
75- if BASE_CONFIG is not None :
76- tables_to_show = [table .lower () for table in BASE_CONFIG ]
77- found_tables = [
78- table
79- for table in storage .tables .values ()
80- if table ._meta .tablename in tables_to_show
81- ]
49+ if additional_config .tables is not None :
8250 admin_tables = []
83- for table in found_tables :
84- capitalize_table_name = table ._meta .tablename .capitalize ()
85- # visible columns
86- try :
87- visible_columns = [
88- column
89- for column in table ._meta .columns
90- if column ._meta .name
91- in BASE_CONFIG [capitalize_table_name ].get (
92- "visible_columns" , None
93- )
94- ]
95- except TypeError :
96- visible_columns = None
97- # visible filters
98- try :
99- visible_filters = [
100- column
101- for column in table ._meta .columns
102- if column ._meta .name
103- in BASE_CONFIG [capitalize_table_name ].get (
104- "visible_filters" , None
51+ for config in additional_config .tables :
52+ for table in storage .tables .values ():
53+ if table ._meta .tablename == config .table_name :
54+ # visible columns
55+ if config .visible_columns :
56+ visible_columns = [
57+ table ._meta .get_column_by_name (column_name )
58+ for column_name in config .visible_columns
59+ ]
60+ else :
61+ visible_columns = table ._meta .columns
62+ # visible filters
63+ if config .visible_filters :
64+ visible_filters = [
65+ table ._meta .get_column_by_name (column_name )
66+ for column_name in config .visible_filters
67+ ]
68+ else :
69+ visible_filters = table ._meta .columns
70+ # rich text columns
71+ if config .rich_text_columns :
72+ rich_text_columns = [
73+ table ._meta .get_column_by_name (column_name )
74+ for column_name in config .rich_text_columns
75+ ]
76+ else :
77+ rich_text_columns = None
78+ # link column
79+ if config .link_column :
80+ link_column = table ._meta .get_column_by_name (
81+ config .link_column
82+ )
83+ else :
84+ link_column = None
85+ # menu_group
86+ menu_group = config .menu_group
87+
88+ admin_tables .append (
89+ TableConfig (
90+ table_class = table ,
91+ visible_columns = visible_columns ,
92+ visible_filters = visible_filters ,
93+ rich_text_columns = rich_text_columns ,
94+ link_column = link_column ,
95+ menu_group = menu_group ,
96+ )
10597 )
106- ]
107- except TypeError :
108- visible_filters = None
109- # rich text columns
110- try :
111- rich_text_columns = [
112- column
113- for column in table ._meta .columns
114- if column ._meta .name
115- in BASE_CONFIG [capitalize_table_name ].get (
116- "rich_text_columns" , None
117- )
118- ]
119- except TypeError :
120- rich_text_columns = None
121- # link column
122- try :
123- link_column = [
124- column
125- for column in table ._meta .columns
126- if column ._meta .name
127- == BASE_CONFIG [capitalize_table_name ].get (
128- "link_column" , None
129- )
130- ][0 ]
131- except IndexError :
132- link_column = None
133- # menu_group
134- menu_group = BASE_CONFIG [capitalize_table_name ].get (
135- "menu_group" , None
136- )
137-
138- admin_tables .append (
139- TableConfig (
140- table_class = table ,
141- visible_columns = visible_columns ,
142- visible_filters = visible_filters ,
143- rich_text_columns = rich_text_columns ,
144- link_column = link_column ,
145- menu_group = menu_group ,
146- )
147- )
14898 else :
14999 admin_tables = storage .tables .values ()
150100
@@ -170,7 +120,7 @@ async def main():
170120 secret_table = AuthenticatorSecret ,
171121 ),
172122 ],
173- sidebar_links = admin_config . get ( " sidebar_links" , None ) ,
123+ sidebar_links = additional_config . sidebar_links or {} ,
174124 )
175125
176126 # Server
0 commit comments