brilliance-admin 0.40.0__tar.gz → 0.41.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. brilliance_admin-0.41.0/PKG-INFO +155 -0
  2. brilliance_admin-0.41.0/README.md +125 -0
  3. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/schema/admin_schema.py +10 -4
  4. brilliance_admin-0.41.0/admin_panel/static/favicon.jpg +0 -0
  5. brilliance_admin-0.40.0/admin_panel/static/index-SCeDXvci.js → brilliance_admin-0.41.0/admin_panel/static/index-BeniOHDv.js +134 -134
  6. brilliance_admin-0.40.0/admin_panel/static/index-BrXRRuaE.css → brilliance_admin-0.41.0/admin_panel/static/index-vlBToOhT.css +1 -1
  7. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/templates/index.html +2 -2
  8. brilliance_admin-0.41.0/brilliance_admin.egg-info/PKG-INFO +155 -0
  9. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/brilliance_admin.egg-info/SOURCES.txt +6 -3
  10. brilliance_admin-0.41.0/example/README.md +32 -0
  11. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/example/main.py +3 -0
  12. brilliance_admin-0.41.0/example/static/logo.png +0 -0
  13. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/pyproject.toml +2 -2
  14. brilliance_admin-0.41.0/tests/test_index_context_data.py +32 -0
  15. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/uv.lock +1 -1
  16. brilliance_admin-0.40.0/PKG-INFO +0 -87
  17. brilliance_admin-0.40.0/README.md +0 -57
  18. brilliance_admin-0.40.0/admin_panel/static/favicon.ico +0 -0
  19. brilliance_admin-0.40.0/brilliance_admin.egg-info/PKG-INFO +0 -87
  20. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/.configs/docker/Dockerfile +0 -0
  21. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/.configs/docker/docker-compose.yml +0 -0
  22. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/.configs/nginx/example.conf +0 -0
  23. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/.env +0 -0
  24. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/.github/workflows/certbot.yml +0 -0
  25. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/.github/workflows/deploy.yml +0 -0
  26. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/.github/workflows/install-docker.yml +0 -0
  27. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/.gitignore +0 -0
  28. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/.isort.cfg +0 -0
  29. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/.python-version +0 -0
  30. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/LICENSE +0 -0
  31. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/__init__.py +0 -0
  32. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/api/__init__.py +0 -0
  33. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/api/routers.py +0 -0
  34. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/api/utils.py +0 -0
  35. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/api/views/__init__.py +0 -0
  36. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/api/views/auth.py +0 -0
  37. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/api/views/autocomplete.py +0 -0
  38. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/api/views/graphs.py +0 -0
  39. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/api/views/index.py +0 -0
  40. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/api/views/schema.py +0 -0
  41. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/api/views/settings.py +0 -0
  42. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/api/views/table.py +0 -0
  43. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/auth.py +0 -0
  44. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/docs.py +0 -0
  45. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/exceptions.py +0 -0
  46. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/integrations/__init__.py +0 -0
  47. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/integrations/sqlalchemy/__init__.py +0 -0
  48. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/integrations/sqlalchemy/auth.py +0 -0
  49. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/integrations/sqlalchemy/autocomplete.py +0 -0
  50. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/integrations/sqlalchemy/fields.py +0 -0
  51. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/integrations/sqlalchemy/fields_schema.py +0 -0
  52. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/integrations/sqlalchemy/table/__init__.py +0 -0
  53. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/integrations/sqlalchemy/table/base.py +0 -0
  54. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/integrations/sqlalchemy/table/create.py +0 -0
  55. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/integrations/sqlalchemy/table/delete.py +0 -0
  56. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/integrations/sqlalchemy/table/list.py +0 -0
  57. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/integrations/sqlalchemy/table/retrieve.py +0 -0
  58. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/integrations/sqlalchemy/table/update.py +0 -0
  59. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/schema/__init__.py +0 -0
  60. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/schema/category.py +0 -0
  61. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/schema/graphs/__init__.py +0 -0
  62. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/schema/graphs/category_graphs.py +0 -0
  63. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/schema/group.py +0 -0
  64. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/schema/table/__init__.py +0 -0
  65. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/schema/table/admin_action.py +0 -0
  66. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/schema/table/category_table.py +0 -0
  67. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/schema/table/fields/__init__.py +0 -0
  68. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/schema/table/fields/base.py +0 -0
  69. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/schema/table/fields/function_field.py +0 -0
  70. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/schema/table/fields_schema.py +0 -0
  71. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/schema/table/table_models.py +0 -0
  72. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/materialdesignicons-webfont-CYDMK1kx.woff2 +0 -0
  73. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/materialdesignicons-webfont-CgCzGbLl.woff +0 -0
  74. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/materialdesignicons-webfont-D3kAzl71.ttf +0 -0
  75. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/materialdesignicons-webfont-DttUABo4.eot +0 -0
  76. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/tinymce/dark-first/content.min.css +0 -0
  77. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/tinymce/dark-first/skin.min.css +0 -0
  78. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/tinymce/dark-slim/content.min.css +0 -0
  79. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/tinymce/dark-slim/skin.min.css +0 -0
  80. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/tinymce/img/example.png +0 -0
  81. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/tinymce/img/tinymce.woff2 +0 -0
  82. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/tinymce/lightgray/content.min.css +0 -0
  83. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/tinymce/lightgray/fonts/tinymce.woff +0 -0
  84. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/tinymce/lightgray/skin.min.css +0 -0
  85. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/tinymce/plugins/accordion/css/accordion.css +0 -0
  86. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/tinymce/plugins/accordion/plugin.js +0 -0
  87. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/tinymce/plugins/codesample/css/prism.css +0 -0
  88. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/tinymce/plugins/customLink/css/link.css +0 -0
  89. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/tinymce/plugins/customLink/plugin.js +0 -0
  90. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/tinymce/tinymce.min.js +0 -0
  91. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/static/vanilla-picker-B6E6ObS_.js +0 -0
  92. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/translations.py +0 -0
  93. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/admin_panel/utils.py +0 -0
  94. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/brilliance_admin.egg-info/dependency_links.txt +0 -0
  95. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/brilliance_admin.egg-info/requires.txt +0 -0
  96. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/brilliance_admin.egg-info/top_level.txt +0 -0
  97. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/example/__init__.py +0 -0
  98. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/example/phrases.py +0 -0
  99. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/example/sections/__init__.py +0 -0
  100. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/example/sections/currency.py +0 -0
  101. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/example/sections/graphs.py +0 -0
  102. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/example/sections/merchant.py +0 -0
  103. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/example/sections/models.py +0 -0
  104. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/example/sections/payments.py +0 -0
  105. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/example/sections/terminal.py +0 -0
  106. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/example/sections/users.py +0 -0
  107. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/example/sqlite.py +0 -0
  108. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/example/utils.py +0 -0
  109. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/setup.cfg +0 -0
  110. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/tests/__init__.py +0 -0
  111. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/tests/conftest.py +0 -0
  112. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/tests/test_action.py +0 -0
  113. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/tests/test_payments_fields_schema.py +0 -0
  114. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/tests/test_sqlalcmeny_auth.py +0 -0
  115. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/tests/test_sqlalcmeny_crud.py +0 -0
  116. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/tests/test_sqlalcmeny_filters.py +0 -0
  117. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/tests/test_sqlalcmeny_schema.py +0 -0
  118. {brilliance_admin-0.40.0 → brilliance_admin-0.41.0}/tests/test_translations.py +0 -0
@@ -0,0 +1,155 @@
1
+ Metadata-Version: 2.4
2
+ Name: brilliance-admin
3
+ Version: 0.41.0
4
+ Summary: General-purpose admin panel framework powered by FastAPI. Some call it heavenly in its brilliance.
5
+ License-Expression: AGPL-3.0
6
+ Requires-Python: >=3.10
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+ Requires-Dist: asgiref>=3.11.0
10
+ Requires-Dist: fastapi>=0.115.8
11
+ Requires-Dist: jinja2>=3.1.6
12
+ Provides-Extra: example
13
+ Requires-Dist: uvicorn>=0.34.0; extra == "example"
14
+ Requires-Dist: faker>=38.2.0; extra == "example"
15
+ Requires-Dist: pyjwt>=2.10.1; extra == "example"
16
+ Requires-Dist: structlog>=25.5.0; extra == "example"
17
+ Requires-Dist: rich>=14.2.0; extra == "example"
18
+ Provides-Extra: tests
19
+ Requires-Dist: pytest>=8.4.2; extra == "tests"
20
+ Requires-Dist: pytest-asyncio>=1.2.0; extra == "tests"
21
+ Requires-Dist: httpx>=0.28.1; extra == "tests"
22
+ Requires-Dist: pytest-mock>=3.15.1; extra == "tests"
23
+ Requires-Dist: sqlalchemy>=2.0.41; extra == "tests"
24
+ Requires-Dist: aiosqlite>=0.22.1; extra == "tests"
25
+ Requires-Dist: factory-boy>=3.3.3; extra == "tests"
26
+ Requires-Dist: pyjwt>=2.10.1; extra == "tests"
27
+ Provides-Extra: scalar
28
+ Requires-Dist: scalar-fastapi>=1.5.0; extra == "scalar"
29
+ Dynamic: license-file
30
+
31
+ <div align="center">
32
+ <img src="https://github.com/brilliance-admin/backend-python/blob/main/example/static/logo.png?raw=true"
33
+ alt="Brilliance Admin"
34
+ width="600">
35
+ </div>
36
+
37
+ <div align="center">
38
+
39
+ [![PyPI](https://img.shields.io/pypi/v/brilliance-admin)](https://pypi.org/project/brilliance-admin/)
40
+ [![License](https://img.shields.io/pypi/l/brilliance-admin)](https://github.com/brilliance-admin/backend-python/blob/main/LICENSE)
41
+ [![CI](https://github.com/brilliance-admin/backend-python/actions/workflows/deploy.yml/badge.svg)](https://github.com/brilliance-admin/backend-python/actions)
42
+
43
+ </div>
44
+
45
+ General-purpose admin panel framework powered by FastAPI. Some call it heavenly in its brilliance.
46
+
47
+ - Serves a prebuilt SPA frontend as static files
48
+ - Generates schemas for frontend sections on the backend
49
+ - Provides a backend-driven API for admin interfaces
50
+ - Designed for fast data management and data viewing from any sources
51
+ - Inspired by Django Admin and Django REST Framework
52
+ - Focused on minimal boilerplate and simplified backend-controlled configuration
53
+
54
+ ### [Live Demo](https://brilliance-admin.com/) | [Example App](https://github.com/brilliance-admin/backend-python/tree/main/example) | Documentation (todo)
55
+
56
+
57
+ ### Features:
58
+
59
+ * Tables with full CRUD support, including filtering, sorting, and pagination.
60
+ * Ability to define custom table actions with forms, response messages, and file uploads.
61
+ * SQLAlchemy integration with automatic field generation from models.
62
+ * Authorization via any account data source.
63
+ * Localization support with language selection in the interface.
64
+
65
+ ## How to use it
66
+
67
+ Installation:
68
+ ``` shell
69
+ pip install brilliance-admin
70
+ ```
71
+
72
+ You need to generate `AdminSchema` instance:
73
+ ``` python
74
+ from admin_panel import schema
75
+
76
+ admin_schema = schema.AdminSchema(
77
+ title='Admin Panel',
78
+ auth=YourAdminAuthentication(),
79
+ groups=[
80
+ schema.Group(
81
+ slug='example',
82
+ title='Example',
83
+ icon='mdi-star',
84
+ categories=[
85
+ CategoryExample(),
86
+ ]
87
+ ),
88
+ ],
89
+ )
90
+
91
+ admin_app = admin_schema.generate_app()
92
+
93
+ # Your FastAPI app
94
+ app = FastAPI()
95
+ app.mount('/admin', admin_app)
96
+ ```
97
+
98
+ ### SQLAlchemy integration
99
+ Brilliance Admin supports automatic schema generation from SQLAlchemy and provides a ready-made CRUD implementation for tables.
100
+
101
+ ``` python
102
+ from admin_panel import sqlalchemy
103
+ from admin_panel.translations import TranslateText as _
104
+
105
+ from your_project.models import Terminal
106
+
107
+
108
+ class TerminalAdmin(sqlalchemy.SQLAlchemyAdmin):
109
+ db_async_session = async_sessionmaker
110
+ model = Terminal
111
+ title = _('terminals')
112
+ icon = 'mdi-console-network-outline'
113
+
114
+ ordering_fields = ['id']
115
+ search_fields = ['id', 'title']
116
+
117
+ table_schema = sqlalchemy.SQLAlchemyFieldsSchema(
118
+ model=Terminal,
119
+ list_display=['id', 'merchant_id'],
120
+ )
121
+ table_filters = sqlalchemy.SQLAlchemyFieldsSchema(
122
+ model=Terminal,
123
+ fields=['id', 'created_at'],
124
+ created_at=schema.DateTimeField(range=True),
125
+ )
126
+
127
+
128
+ category = TerminalAdmin()
129
+ ```
130
+
131
+ Now, the `TerminalAdmin` instance can be passed to `categories`.
132
+
133
+ ### Can be used both via inheritance and instancing
134
+
135
+ For `SQLAlchemyFieldsSchema`
136
+
137
+ ``` python
138
+ class TerminalTableSchema(sqlalchemy.SQLAlchemyFieldsSchema):
139
+ model = Terminal
140
+ fields = ['id', 'created_at']
141
+
142
+ created_at=schema.DateTimeField(range=True)
143
+
144
+
145
+ class TerminalAdmin(sqlalchemy.SQLAlchemyAdmin):
146
+ table_schema = TerminalTableSchema()
147
+ ```
148
+
149
+ And `SQLAlchemyAdmin` category schema itself
150
+
151
+ > If `table_schema` is not specified, it will be generated automatically and will include all discovered fields and relationships of the table in the output.
152
+
153
+ ``` python
154
+ category = sqlalchemy.SQLAlchemyAdmin(db_async_session=async_sessionmaker, model=Terminal)
155
+ ```
@@ -0,0 +1,125 @@
1
+ <div align="center">
2
+ <img src="https://github.com/brilliance-admin/backend-python/blob/main/example/static/logo.png?raw=true"
3
+ alt="Brilliance Admin"
4
+ width="600">
5
+ </div>
6
+
7
+ <div align="center">
8
+
9
+ [![PyPI](https://img.shields.io/pypi/v/brilliance-admin)](https://pypi.org/project/brilliance-admin/)
10
+ [![License](https://img.shields.io/pypi/l/brilliance-admin)](https://github.com/brilliance-admin/backend-python/blob/main/LICENSE)
11
+ [![CI](https://github.com/brilliance-admin/backend-python/actions/workflows/deploy.yml/badge.svg)](https://github.com/brilliance-admin/backend-python/actions)
12
+
13
+ </div>
14
+
15
+ General-purpose admin panel framework powered by FastAPI. Some call it heavenly in its brilliance.
16
+
17
+ - Serves a prebuilt SPA frontend as static files
18
+ - Generates schemas for frontend sections on the backend
19
+ - Provides a backend-driven API for admin interfaces
20
+ - Designed for fast data management and data viewing from any sources
21
+ - Inspired by Django Admin and Django REST Framework
22
+ - Focused on minimal boilerplate and simplified backend-controlled configuration
23
+
24
+ ### [Live Demo](https://brilliance-admin.com/) | [Example App](https://github.com/brilliance-admin/backend-python/tree/main/example) | Documentation (todo)
25
+
26
+
27
+ ### Features:
28
+
29
+ * Tables with full CRUD support, including filtering, sorting, and pagination.
30
+ * Ability to define custom table actions with forms, response messages, and file uploads.
31
+ * SQLAlchemy integration with automatic field generation from models.
32
+ * Authorization via any account data source.
33
+ * Localization support with language selection in the interface.
34
+
35
+ ## How to use it
36
+
37
+ Installation:
38
+ ``` shell
39
+ pip install brilliance-admin
40
+ ```
41
+
42
+ You need to generate `AdminSchema` instance:
43
+ ``` python
44
+ from admin_panel import schema
45
+
46
+ admin_schema = schema.AdminSchema(
47
+ title='Admin Panel',
48
+ auth=YourAdminAuthentication(),
49
+ groups=[
50
+ schema.Group(
51
+ slug='example',
52
+ title='Example',
53
+ icon='mdi-star',
54
+ categories=[
55
+ CategoryExample(),
56
+ ]
57
+ ),
58
+ ],
59
+ )
60
+
61
+ admin_app = admin_schema.generate_app()
62
+
63
+ # Your FastAPI app
64
+ app = FastAPI()
65
+ app.mount('/admin', admin_app)
66
+ ```
67
+
68
+ ### SQLAlchemy integration
69
+ Brilliance Admin supports automatic schema generation from SQLAlchemy and provides a ready-made CRUD implementation for tables.
70
+
71
+ ``` python
72
+ from admin_panel import sqlalchemy
73
+ from admin_panel.translations import TranslateText as _
74
+
75
+ from your_project.models import Terminal
76
+
77
+
78
+ class TerminalAdmin(sqlalchemy.SQLAlchemyAdmin):
79
+ db_async_session = async_sessionmaker
80
+ model = Terminal
81
+ title = _('terminals')
82
+ icon = 'mdi-console-network-outline'
83
+
84
+ ordering_fields = ['id']
85
+ search_fields = ['id', 'title']
86
+
87
+ table_schema = sqlalchemy.SQLAlchemyFieldsSchema(
88
+ model=Terminal,
89
+ list_display=['id', 'merchant_id'],
90
+ )
91
+ table_filters = sqlalchemy.SQLAlchemyFieldsSchema(
92
+ model=Terminal,
93
+ fields=['id', 'created_at'],
94
+ created_at=schema.DateTimeField(range=True),
95
+ )
96
+
97
+
98
+ category = TerminalAdmin()
99
+ ```
100
+
101
+ Now, the `TerminalAdmin` instance can be passed to `categories`.
102
+
103
+ ### Can be used both via inheritance and instancing
104
+
105
+ For `SQLAlchemyFieldsSchema`
106
+
107
+ ``` python
108
+ class TerminalTableSchema(sqlalchemy.SQLAlchemyFieldsSchema):
109
+ model = Terminal
110
+ fields = ['id', 'created_at']
111
+
112
+ created_at=schema.DateTimeField(range=True)
113
+
114
+
115
+ class TerminalAdmin(sqlalchemy.SQLAlchemyAdmin):
116
+ table_schema = TerminalTableSchema()
117
+ ```
118
+
119
+ And `SQLAlchemyAdmin` category schema itself
120
+
121
+ > If `table_schema` is not specified, it will be generated automatically and will include all discovered fields and relationships of the table in the output.
122
+
123
+ ``` python
124
+ category = sqlalchemy.SQLAlchemyAdmin(db_async_session=async_sessionmaker, model=Terminal)
125
+ ```
@@ -33,7 +33,6 @@ class AdminSettingsData(DataclassBase):
33
33
  description: str | TranslateText | None
34
34
  login_greetings_message: str | TranslateText | None
35
35
  navbar_density: str
36
- logo_image: str | None
37
36
  languages: Dict[str, str] | None
38
37
 
39
38
 
@@ -52,9 +51,12 @@ class AdminSchema:
52
51
  title: str | TranslateText | None = 'Admin'
53
52
  description: str | TranslateText | None = None
54
53
  login_greetings_message: str | TranslateText | None = None
54
+
55
+ logo_image: str | None = None
56
+ favicon_image: str = '/admin/static/favicon.jpg'
57
+
55
58
  navbar_density: str = 'default'
56
59
 
57
- favicon_image: str = '/admin/static/favicon.ico'
58
60
  backend_prefix = None
59
61
  static_prefix = None
60
62
 
@@ -107,7 +109,6 @@ class AdminSchema:
107
109
  description=self.description,
108
110
  login_greetings_message=self.login_greetings_message,
109
111
  navbar_density=self.navbar_density,
110
- logo_image=None,
111
112
  languages=languages,
112
113
  )
113
114
 
@@ -171,11 +172,16 @@ class AdminSchema:
171
172
  if not static_prefix:
172
173
  static_prefix = urljoin(str(request.base_url), '/admin/static/')
173
174
 
175
+ logo_image = self.logo_image
176
+ if logo_image and logo_image.startswith('/'):
177
+ logo_image = urljoin(str(request.base_url), logo_image)
178
+
174
179
  settings_json = {
175
180
  'backend_prefix': backend_prefix,
176
181
  'static_prefix': static_prefix,
177
- 'version': importlib.metadata.version('admin-panel'),
182
+ 'version': importlib.metadata.version('brilliance-admin'),
178
183
  'api_timeout_ms': 1000 * 5,
184
+ 'logo_image': logo_image,
179
185
  }
180
186
  data = AdminIndexContextData(
181
187
  title=str(self.title),