brilliance-admin 0.43.1__py3-none-any.whl → 0.43.7__py3-none-any.whl
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.
- brilliance_admin/integrations/sqlalchemy/__init__.py +1 -0
- brilliance_admin/integrations/sqlalchemy/auth.py +2 -2
- brilliance_admin/integrations/sqlalchemy/autocomplete.py +6 -2
- brilliance_admin/integrations/sqlalchemy/fields.py +14 -10
- brilliance_admin/integrations/sqlalchemy/fields_schema.py +21 -12
- brilliance_admin/integrations/sqlalchemy/table/base.py +4 -4
- brilliance_admin/integrations/sqlalchemy/table/create.py +3 -3
- brilliance_admin/integrations/sqlalchemy/table/delete.py +1 -1
- brilliance_admin/integrations/sqlalchemy/table/list.py +4 -4
- brilliance_admin/integrations/sqlalchemy/table/retrieve.py +17 -5
- brilliance_admin/integrations/sqlalchemy/table/update.py +5 -5
- brilliance_admin/locales/en.yml +13 -10
- brilliance_admin/locales/ru.yml +14 -10
- brilliance_admin/schema/category.py +2 -3
- brilliance_admin/schema/group.py +2 -2
- brilliance_admin/schema/table/fields/base.py +37 -8
- brilliance_admin/schema/table/fields_schema.py +2 -1
- brilliance_admin/static/{index-D9axz5zK.js → index-BnnESruI.js} +130 -130
- brilliance_admin/templates/index.html +1 -1
- brilliance_admin/translations.py +3 -3
- brilliance_admin/utils.py +3 -3
- {brilliance_admin-0.43.1.dist-info → brilliance_admin-0.43.7.dist-info}/METADATA +18 -15
- {brilliance_admin-0.43.1.dist-info → brilliance_admin-0.43.7.dist-info}/RECORD +26 -26
- {brilliance_admin-0.43.1.dist-info → brilliance_admin-0.43.7.dist-info}/WHEEL +0 -0
- {brilliance_admin-0.43.1.dist-info → brilliance_admin-0.43.7.dist-info}/licenses/LICENSE +0 -0
- {brilliance_admin-0.43.1.dist-info → brilliance_admin-0.43.7.dist-info}/top_level.txt +0 -0
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
<link rel="icon" href="{{ favicon_image }}" />
|
|
14
14
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
15
15
|
<title>{{ title }}</title>
|
|
16
|
-
<script type="module" crossorigin src="/admin/static/index-
|
|
16
|
+
<script type="module" crossorigin src="/admin/static/index-BnnESruI.js"></script>
|
|
17
17
|
<link rel="stylesheet" crossorigin href="/admin/static/index-vlBToOhT.css">
|
|
18
18
|
</head>
|
|
19
19
|
|
brilliance_admin/translations.py
CHANGED
|
@@ -63,14 +63,14 @@ class LanguageManager(abc.ABC):
|
|
|
63
63
|
|
|
64
64
|
builtin_locales_dir = resources.files("brilliance_admin").joinpath("locales")
|
|
65
65
|
self.phrases.load_folder(builtin_locales_dir)
|
|
66
|
-
logger.
|
|
66
|
+
logger.debug('Language manager builtin dir loaded: %s', builtin_locales_dir)
|
|
67
67
|
|
|
68
68
|
if locales_dir:
|
|
69
69
|
self.phrases.load_folder(locales_dir)
|
|
70
|
-
logger.
|
|
70
|
+
logger.debug('Language manager locales_dir loaded: %s', locales_dir)
|
|
71
71
|
|
|
72
72
|
langs = ', '.join(self.phrases.data.keys())
|
|
73
|
-
logger.
|
|
73
|
+
logger.debug('Language manager setup completed; languages: %s', langs)
|
|
74
74
|
|
|
75
75
|
def get_text(self, text, language) -> str:
|
|
76
76
|
if not isinstance(text, TranslateText):
|
brilliance_admin/utils.py
CHANGED
|
@@ -42,8 +42,8 @@ class DataclassBase:
|
|
|
42
42
|
adapter = TypeAdapter(type(self))
|
|
43
43
|
return adapter.dump_python(self, *args, **kwargs)
|
|
44
44
|
|
|
45
|
-
def to_dict(self, keep_none=True) -> dict:
|
|
46
|
-
data = self.model_dump()
|
|
45
|
+
def to_dict(self, *args, keep_none=True, **kwargs) -> dict:
|
|
46
|
+
data = self.model_dump(*args, **kwargs)
|
|
47
47
|
return {
|
|
48
48
|
k: v for k, v in data.items()
|
|
49
49
|
if v is not None and not keep_none
|
|
@@ -150,4 +150,4 @@ class YamlI18n:
|
|
|
150
150
|
if isinstance(node, str):
|
|
151
151
|
return node
|
|
152
152
|
|
|
153
|
-
|
|
153
|
+
return slug
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: brilliance-admin
|
|
3
|
-
Version: 0.43.
|
|
4
|
-
Summary: Simple and lightweight admin panel framework powered by FastAPI and Vue3 Vuetify together
|
|
3
|
+
Version: 0.43.7
|
|
4
|
+
Summary: Simple and lightweight admin panel framework powered by FastAPI and Vue3 Vuetify together. Some call it heavenly in its brilliance.
|
|
5
5
|
License-Expression: AGPL-3.0
|
|
6
6
|
Requires-Python: >=3.10
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
@@ -76,9 +76,11 @@ Focused on simplified, but rich configuration.
|
|
|
76
76
|
* **SQLAlchemy** - schema autogeneration for tables + CRUD operations + authorization
|
|
77
77
|
|
|
78
78
|
**Planned:**
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
79
|
+
* Dashboard features
|
|
80
|
+
* Role-based access permissions system via interface
|
|
81
|
+
* Backend interface for storing and viewing action history in the admin interface
|
|
82
|
+
* Nested data support for creation and detail views (inline editing), nested CRUD workflows
|
|
83
|
+
* Django ORM integration
|
|
82
84
|
|
|
83
85
|
## How to use it
|
|
84
86
|
|
|
@@ -202,13 +204,14 @@ auth = sqlalchemy.SQLAlchemyJWTAdminAuthentication(
|
|
|
202
204
|
|
|
203
205
|
## Comparison of Similar Projects
|
|
204
206
|
|
|
205
|
-
| Criterion | Brilliance Admin | Django Admin
|
|
206
|
-
|
|
207
|
-
| Base framework | FastAPI | Django | FastAPI | Starlette / FastAPI |
|
|
208
|
-
| Rendering model | Prebuilt Vue 3 + Vuetify SPA + Jinja2 | Server-side Django templates | Server-side Jinja2 templates + Tabler UI | Server-side Jinja2 templates + Tabler UI |
|
|
209
|
-
| Frontend architecture | Separate frontend (SPA) | Classic server-rendered UI | Server-rendered UI with JS interactivity | Server-rendered UI with JS interactivity |
|
|
210
|
-
| Data source | Any source + SQLAlchemy | Django ORM | Tortoise ORM | Any source + SQLAlchemy, MongoDB |
|
|
211
|
-
| Multiple databases per model | Yes | Database routers | No (global engine) | Yes (session per ModelView) |
|
|
212
|
-
| Schema generation | User-defined format | From Django models | From ORM models | User-defined format |
|
|
213
|
-
| Async support | Yes | No | Yes | Yes |
|
|
214
|
-
| API-first approach | Yes | No | Partially | Partially |
|
|
207
|
+
| Criterion | Brilliance Admin | Django Admin | FastAPI Admin | Starlette Admin | SQLAdmin |
|
|
208
|
+
|---------|------------------|---------------------|---------------|-----------------|----------|
|
|
209
|
+
| Base framework | FastAPI | Django | FastAPI | Starlette / FastAPI | FastAPI / Starlette |
|
|
210
|
+
| Rendering model | Prebuilt Vue 3 + Vuetify SPA + Jinja2 | Server-side Django templates | Server-side Jinja2 templates + Tabler UI | Server-side Jinja2 templates + Tabler UI | Server-side Jinja2 templates + Bootstrap |
|
|
211
|
+
| Frontend architecture | Separate frontend (SPA) | Classic server-rendered UI | Server-rendered UI with JS interactivity | Server-rendered UI with JS interactivity | Server-rendered UI |
|
|
212
|
+
| Data source | Any source + SQLAlchemy | Django ORM | Tortoise ORM | Any source + SQLAlchemy, MongoDB | SQLAlchemy |
|
|
213
|
+
| Multiple databases per model | Yes | Database routers | No (global engine) | Yes (session per ModelView) | No (single engine per Admin) |
|
|
214
|
+
| Schema generation | User-defined format | From Django models | From ORM models | User-defined format | From SQLAlchemy models |
|
|
215
|
+
| Async support | Yes | No | Yes | Yes | Yes |
|
|
216
|
+
| API-first approach | Yes | No | Partially | Partially | No |
|
|
217
|
+
| Built-in Localization | Yes | Yes | No | No | No |
|
|
@@ -2,8 +2,8 @@ brilliance_admin/__init__.py,sha256=qxGzLVhFNm2FKL2lVt7bEFb6pTPqyXEQvUsDfyfv6SM,
|
|
|
2
2
|
brilliance_admin/auth.py,sha256=d57XRfLJIbOosLP1-0SCFkePPT8M5WhLcwxu4yW92RA,673
|
|
3
3
|
brilliance_admin/docs.py,sha256=fKeJKuiCCi1jHRmNcmkuDD6_2di7bwc6-w8V1VCTu0s,1231
|
|
4
4
|
brilliance_admin/exceptions.py,sha256=7_L3qVTwdLrzmDJjGv2yqCOVECP35wh0NyTvgjP7ETc,913
|
|
5
|
-
brilliance_admin/translations.py,sha256=
|
|
6
|
-
brilliance_admin/utils.py,sha256=
|
|
5
|
+
brilliance_admin/translations.py,sha256=I_iSfj05Qv5fbZqDvnnHZGUFsi1wk-J0EXSftKBLw5Q,3850
|
|
6
|
+
brilliance_admin/utils.py,sha256=RB88GC3qeysP1PpUGiXSgUZRpdxHGLB0FRgramScLaA,4584
|
|
7
7
|
brilliance_admin/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
8
|
brilliance_admin/api/routers.py,sha256=GXz-GFXRH5VbDH1r5O9LLnnmaMhbQq4RctzVEubHnsk,810
|
|
9
9
|
brilliance_admin/api/utils.py,sha256=ezvHK49OlpCdT9fLB41Y1nswZDLdzC3zTcQtGtuTYUk,999
|
|
@@ -16,35 +16,35 @@ brilliance_admin/api/views/schema.py,sha256=MS9v9Qy3cRO9gGs4uW2PNRBS6Uw48sLRGRe4
|
|
|
16
16
|
brilliance_admin/api/views/settings.py,sha256=2A9suZQONEtW9LkFban29Fe5ipQaaGT0CzpxnbuotJQ,1166
|
|
17
17
|
brilliance_admin/api/views/table.py,sha256=29vLEwueHWBS8Dq6nBvujwy4CTs9v8ZcM1ErF9lYgIc,5932
|
|
18
18
|
brilliance_admin/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
|
-
brilliance_admin/integrations/sqlalchemy/__init__.py,sha256=
|
|
20
|
-
brilliance_admin/integrations/sqlalchemy/auth.py,sha256=
|
|
21
|
-
brilliance_admin/integrations/sqlalchemy/autocomplete.py,sha256=
|
|
22
|
-
brilliance_admin/integrations/sqlalchemy/fields.py,sha256=
|
|
23
|
-
brilliance_admin/integrations/sqlalchemy/fields_schema.py,sha256=
|
|
19
|
+
brilliance_admin/integrations/sqlalchemy/__init__.py,sha256=AmQHOvegS6_uaE4xYDHzRMdA9PyHn0cCt1s1IWc9G2U,318
|
|
20
|
+
brilliance_admin/integrations/sqlalchemy/auth.py,sha256=NvOLKeeSJuNTzFhisNO9R3sEmGRS8IQrCwghPrtuzaw,4924
|
|
21
|
+
brilliance_admin/integrations/sqlalchemy/autocomplete.py,sha256=Q2BDwPL3d7FErqYkO-s6Q6pDg2PTZ1RUUAWc9tbllT8,1436
|
|
22
|
+
brilliance_admin/integrations/sqlalchemy/fields.py,sha256=piLGzX24GwCuWEBo7Jy0_8pMeiWc8tl9nj6Qt6ehYaY,9390
|
|
23
|
+
brilliance_admin/integrations/sqlalchemy/fields_schema.py,sha256=7WkOrt5dVvrsZppNZEZS8QaQPMSrfcWChwOaOFSRVOg,11419
|
|
24
24
|
brilliance_admin/integrations/sqlalchemy/table/__init__.py,sha256=g_in2pLTi8UQnT5uNFA8mLW5mxlT84irQ7yVaP_OSS4,605
|
|
25
|
-
brilliance_admin/integrations/sqlalchemy/table/base.py,sha256
|
|
26
|
-
brilliance_admin/integrations/sqlalchemy/table/create.py,sha256=
|
|
27
|
-
brilliance_admin/integrations/sqlalchemy/table/delete.py,sha256=
|
|
28
|
-
brilliance_admin/integrations/sqlalchemy/table/list.py,sha256
|
|
29
|
-
brilliance_admin/integrations/sqlalchemy/table/retrieve.py,sha256=
|
|
30
|
-
brilliance_admin/integrations/sqlalchemy/table/update.py,sha256=
|
|
31
|
-
brilliance_admin/locales/en.yml,sha256=
|
|
32
|
-
brilliance_admin/locales/ru.yml,sha256=
|
|
25
|
+
brilliance_admin/integrations/sqlalchemy/table/base.py,sha256=-osqhTvqE7YcBxsAjqIUMWyYk1df04GIDmdvtieTXcg,4885
|
|
26
|
+
brilliance_admin/integrations/sqlalchemy/table/create.py,sha256=QY_Hbn4iu6Kq7reFsEUC-isCvcDK6vU4n5F0Bo1EOEs,2714
|
|
27
|
+
brilliance_admin/integrations/sqlalchemy/table/delete.py,sha256=toH9at-MAWO46K_4YmvkOqXX2-cFANVVhAURiZ-dwWQ,738
|
|
28
|
+
brilliance_admin/integrations/sqlalchemy/table/list.py,sha256=WPH4GoLrIU-TcGMrNoq46i3sJIz6vV76UaacmtG3Ytk,6720
|
|
29
|
+
brilliance_admin/integrations/sqlalchemy/table/retrieve.py,sha256=O6mJ_XxfLJ59Hx_V5VdAZNxObkY6p5L7gZED8QGXfy0,2744
|
|
30
|
+
brilliance_admin/integrations/sqlalchemy/table/update.py,sha256=RfIXTQHHEoZCrOtVeOxZ3ql0-is5czsgVAfO_1_gF7w,3578
|
|
31
|
+
brilliance_admin/locales/en.yml,sha256=hq4ktzZZYmfbI7RVHHwvkUD9qjETMW1Fq2DQPCQAPao,1159
|
|
32
|
+
brilliance_admin/locales/ru.yml,sha256=ySYstybcfNhWUgdYeTnepaddgOlPTu4cIAWKLAVYLeo,1770
|
|
33
33
|
brilliance_admin/schema/__init__.py,sha256=X-izShvv84jkFU47WfpUwtvRh3NOv570iUB3NRNEIDU,248
|
|
34
34
|
brilliance_admin/schema/admin_schema.py,sha256=fKVtaLkFkDF8ZkjIftackZ4rfCDcqLvci8PO6ZLycgc,6393
|
|
35
|
-
brilliance_admin/schema/category.py,sha256=
|
|
36
|
-
brilliance_admin/schema/group.py,sha256=
|
|
35
|
+
brilliance_admin/schema/category.py,sha256=YIRjIwnBcH2QpKQ-9YZFvOajEaYKAqsk91kl8BsviQU,4112
|
|
36
|
+
brilliance_admin/schema/group.py,sha256=sp_i98v4W5TaERQxosYpqQmHuGbAfr0zzoJNTWNzbTE,2282
|
|
37
37
|
brilliance_admin/schema/graphs/__init__.py,sha256=qvmZv9QWdiutPtN5VYQLYbsjY2SOg8p_XRaz2rUlIxY,44
|
|
38
38
|
brilliance_admin/schema/graphs/category_graphs.py,sha256=2nj_oiAoGXwGhc-gNVNFMNKDCkCdUWVn6u9CRCsb2DA,1513
|
|
39
39
|
brilliance_admin/schema/table/__init__.py,sha256=vuRw8HBuak2LaTZi2dNn5YOrJPalQps-O3Ht-d0AZV4,378
|
|
40
40
|
brilliance_admin/schema/table/admin_action.py,sha256=0ymRL9DKkBK-AF6wKy7K9R4hkmblh55eHuZA_rjO1Lk,2018
|
|
41
41
|
brilliance_admin/schema/table/category_table.py,sha256=BNdxspZ9Di6_bX0QQEGxgZLlddC7GIAWjBYha6bLtZo,6449
|
|
42
|
-
brilliance_admin/schema/table/fields_schema.py,sha256=
|
|
42
|
+
brilliance_admin/schema/table/fields_schema.py,sha256=Tlnxpzb1RgMKLDqFpRD3t6x9lDEAf--hnmzRC3vHZpo,8350
|
|
43
43
|
brilliance_admin/schema/table/table_models.py,sha256=xidraifRYbXGkiVLn6dJ96dkOhW8-22ynE-fbiOjfAU,1018
|
|
44
44
|
brilliance_admin/schema/table/fields/__init__.py,sha256=RW-sIFTAaSQo4mMR6iWtnefogWPjmg6KAsDwe9mKW1k,291
|
|
45
|
-
brilliance_admin/schema/table/fields/base.py,sha256=
|
|
45
|
+
brilliance_admin/schema/table/fields/base.py,sha256=fllUue5ZWj8qA8FGm72zyLHDNyGCkWHLxzpTx6dLLXQ,8507
|
|
46
46
|
brilliance_admin/schema/table/fields/function_field.py,sha256=4fm9kS8zpBG5oqp9sA81NQDHiqvU0BQmpf-wjkTuuwM,1780
|
|
47
|
-
brilliance_admin/static/index-
|
|
47
|
+
brilliance_admin/static/index-BnnESruI.js,sha256=_ogTWbz9PSzFhjEgdvIJI6PvfgQdtAyTgqg1Z4EZ1eQ,3202453
|
|
48
48
|
brilliance_admin/static/index-vlBToOhT.css,sha256=hoVCpcStTHdAVRm37k1umrNdXjOwIIveu9lxk4ocpEc,983028
|
|
49
49
|
brilliance_admin/static/materialdesignicons-webfont-CYDMK1kx.woff2,sha256=5S1g9kJnzaoIQitQurXUW9NeZisDua91F5zq4ArF_Is,385360
|
|
50
50
|
brilliance_admin/static/materialdesignicons-webfont-CgCzGbLl.woff,sha256=SNPuxqtw3HoZCPm6LyCOClhxi57hbj9qvbXbT0Yfolg,561776
|
|
@@ -66,9 +66,9 @@ brilliance_admin/static/tinymce/plugins/accordion/css/accordion.css,sha256=u5UQk
|
|
|
66
66
|
brilliance_admin/static/tinymce/plugins/codesample/css/prism.css,sha256=exAdMtHbvwW7-DEs567MX65Fq1aJQTfREP5pw8gW-AY,1736
|
|
67
67
|
brilliance_admin/static/tinymce/plugins/customLink/plugin.js,sha256=illBNpnHDkBsLG6wo_jDPF6z7CGnO1MQWUoDwZKy6vQ,5589
|
|
68
68
|
brilliance_admin/static/tinymce/plugins/customLink/css/link.css,sha256=gh5nvY8Z92hJfCEBPnIm4jIPCcKKbJnab-30oIfX7Hc,56
|
|
69
|
-
brilliance_admin/templates/index.html,sha256=
|
|
70
|
-
brilliance_admin-0.43.
|
|
71
|
-
brilliance_admin-0.43.
|
|
72
|
-
brilliance_admin-0.43.
|
|
73
|
-
brilliance_admin-0.43.
|
|
74
|
-
brilliance_admin-0.43.
|
|
69
|
+
brilliance_admin/templates/index.html,sha256=pDpY8Xmn39Y9b85MEy_ytbwa8Cz9-2EsOvTu3qP8bNQ,1294
|
|
70
|
+
brilliance_admin-0.43.7.dist-info/licenses/LICENSE,sha256=PjeDRXGbVLtKul5Xpfco_6CyB6bYGWVVPrO0oubquuM,727
|
|
71
|
+
brilliance_admin-0.43.7.dist-info/METADATA,sha256=eyl-GfxMxDkszSfjqKbNx2rIOlPC1XA6yDXJV7xCSpY,7860
|
|
72
|
+
brilliance_admin-0.43.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
73
|
+
brilliance_admin-0.43.7.dist-info/top_level.txt,sha256=almFFSWrVYieI3i54hYL0fMUaeuIYiazS2Kx4wtK-ns,17
|
|
74
|
+
brilliance_admin-0.43.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|