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.
Files changed (26) hide show
  1. brilliance_admin/integrations/sqlalchemy/__init__.py +1 -0
  2. brilliance_admin/integrations/sqlalchemy/auth.py +2 -2
  3. brilliance_admin/integrations/sqlalchemy/autocomplete.py +6 -2
  4. brilliance_admin/integrations/sqlalchemy/fields.py +14 -10
  5. brilliance_admin/integrations/sqlalchemy/fields_schema.py +21 -12
  6. brilliance_admin/integrations/sqlalchemy/table/base.py +4 -4
  7. brilliance_admin/integrations/sqlalchemy/table/create.py +3 -3
  8. brilliance_admin/integrations/sqlalchemy/table/delete.py +1 -1
  9. brilliance_admin/integrations/sqlalchemy/table/list.py +4 -4
  10. brilliance_admin/integrations/sqlalchemy/table/retrieve.py +17 -5
  11. brilliance_admin/integrations/sqlalchemy/table/update.py +5 -5
  12. brilliance_admin/locales/en.yml +13 -10
  13. brilliance_admin/locales/ru.yml +14 -10
  14. brilliance_admin/schema/category.py +2 -3
  15. brilliance_admin/schema/group.py +2 -2
  16. brilliance_admin/schema/table/fields/base.py +37 -8
  17. brilliance_admin/schema/table/fields_schema.py +2 -1
  18. brilliance_admin/static/{index-D9axz5zK.js → index-BnnESruI.js} +130 -130
  19. brilliance_admin/templates/index.html +1 -1
  20. brilliance_admin/translations.py +3 -3
  21. brilliance_admin/utils.py +3 -3
  22. {brilliance_admin-0.43.1.dist-info → brilliance_admin-0.43.7.dist-info}/METADATA +18 -15
  23. {brilliance_admin-0.43.1.dist-info → brilliance_admin-0.43.7.dist-info}/RECORD +26 -26
  24. {brilliance_admin-0.43.1.dist-info → brilliance_admin-0.43.7.dist-info}/WHEEL +0 -0
  25. {brilliance_admin-0.43.1.dist-info → brilliance_admin-0.43.7.dist-info}/licenses/LICENSE +0 -0
  26. {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-D9axz5zK.js"></script>
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
 
@@ -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.info('Language manager builtin dir loaded: %s', builtin_locales_dir)
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.info('Language manager locales_dir loaded: %s', locales_dir)
70
+ logger.debug('Language manager locales_dir loaded: %s', locales_dir)
71
71
 
72
72
  langs = ', '.join(self.phrases.data.keys())
73
- logger.info('Language manager setup completed; languages: %s', langs)
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
- raise KeyError(f'translation key not found: {slug}')
153
+ return slug
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: brilliance-admin
3
- Version: 0.43.1
4
- Summary: Simple and lightweight admin panel framework powered by FastAPI and Vue3 Vuetify together.. Some call it heavenly in its brilliance.
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
- * Role-based access control system
80
- * Nested data support for creation and detail views
81
- * Django ORM inegration
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/Unfold | FastAPI Admin | Starlette 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=9IHS7ld0dghjIvHgko4ueRMoJ53VcblcFCEkgxQEG4A,3847
6
- brilliance_admin/utils.py,sha256=C5Rc7DUC9HnGIu4R9rdNGGtvZ3vrkWBNoDr-ijCPD3w,4593
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=tIegMU2eIW_zA-PdblCXCjenHAY4sGBUWKuz97ns4gE,275
20
- brilliance_admin/integrations/sqlalchemy/auth.py,sha256=99O7zmhcKWB3cWGTbMd3OSyIJ81Vcfz7byDK6oLinm8,4910
21
- brilliance_admin/integrations/sqlalchemy/autocomplete.py,sha256=baRroMwGg35uR5zt-aiQc2-ugX4hpwNf79R6bZH9UX0,1416
22
- brilliance_admin/integrations/sqlalchemy/fields.py,sha256=AayeFmwKA5JooiCok7wPLJNSDQCiy5p-iQjrr9HMMSw,9412
23
- brilliance_admin/integrations/sqlalchemy/fields_schema.py,sha256=fZu7I77POvcUHBVc7i0yKGZcAzDumVGMpsbX7TMByo4,10914
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=nZzHk56NyhfTll9vX9j5zzA557mLdQ-u-GccTFXIFSs,4873
26
- brilliance_admin/integrations/sqlalchemy/table/create.py,sha256=z40PuKJYZ6goJdhsANVuEyTW1gh0PipCBdBSe5Ii5Tw,2693
27
- brilliance_admin/integrations/sqlalchemy/table/delete.py,sha256=Awv50IG7DQsYrHVlk4dtYBMwexmlO92xhMBgrgEDBgs,731
28
- brilliance_admin/integrations/sqlalchemy/table/list.py,sha256=--KVTLbuCr1fD79q0LXqlu6CuiYA3QhQj6rrdP7jR14,6692
29
- brilliance_admin/integrations/sqlalchemy/table/retrieve.py,sha256=b-Kyft1ecG2nAj8krTumyeY2LaONBGgBwyfLayL-ilw,2140
30
- brilliance_admin/integrations/sqlalchemy/table/update.py,sha256=AGEEbEsgKre784Dg4_kTKB6NfMwdAwNiMjm0ZKeg-LE,3543
31
- brilliance_admin/locales/en.yml,sha256=lCM58SoP4HExXFCTHpl8pYw82tH_8TvlrcCXZDXYb5c,1129
32
- brilliance_admin/locales/ru.yml,sha256=hXZwS71Z_aAyK9DB14pwmbtLI5xn6PvsnuLIZlEexbM,1661
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=Y2DuDmSve_-Lnx3zOQlbVcslywJhcwV49z1bOhSKIGs,4105
36
- brilliance_admin/schema/group.py,sha256=Gdz3ME_EfQP_CFPou6OOJZWGWXKIYgB3zNX_oWsClwE,2240
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=PvNHIYqDeLvM2qy32vCmLQ6VORl7bJQhSVcGUP1LIEw,8276
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=gocPyNZvLFpv_3VXA8ptCcZKK8uVFlTiwzgiuOnN1FI,7791
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-D9axz5zK.js,sha256=KB_EHC9hoBK_LinkeMaE897Ws4Tl8xlJ8c_smbis_VE,3202111
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=ZLJ_TKUvBDIo_hYfbW43ov0S_bFrzBF-283XP6BKtDI,1294
70
- brilliance_admin-0.43.1.dist-info/licenses/LICENSE,sha256=PjeDRXGbVLtKul5Xpfco_6CyB6bYGWVVPrO0oubquuM,727
71
- brilliance_admin-0.43.1.dist-info/METADATA,sha256=SgnEDyBA7AYrXHFP-T0K906C-rurqdqKHDkgr6Tl72s,7459
72
- brilliance_admin-0.43.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
73
- brilliance_admin-0.43.1.dist-info/top_level.txt,sha256=almFFSWrVYieI3i54hYL0fMUaeuIYiazS2Kx4wtK-ns,17
74
- brilliance_admin-0.43.1.dist-info/RECORD,,
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,,