brilliance-admin 0.43.7__tar.gz → 0.44.1__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.
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/.configs/docker/docker-compose.yml +19 -14
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/.github/workflows/certbot.yml +12 -3
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/.gitignore +1 -0
- brilliance_admin-0.44.1/LICENSE +21 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/PKG-INFO +48 -108
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/README.md +43 -105
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/api/views/table.py +2 -1
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/locales/en.yml +4 -2
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/locales/ru.yml +1 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/schema/__init__.py +2 -2
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/schema/admin_schema.py +21 -19
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/schema/category.py +85 -10
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/schema/graphs/category_graphs.py +2 -3
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/category_table.py +4 -2
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/fields/base.py +21 -6
- brilliance_admin-0.43.7/brilliance_admin/static/index-vlBToOhT.css → brilliance_admin-0.44.1/brilliance_admin/static/index-P_wdMBbz.css +1 -1
- brilliance_admin-0.43.7/brilliance_admin/static/index-BnnESruI.js → brilliance_admin-0.44.1/brilliance_admin/static/index-rBvEkjGg.js +57 -57
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/templates/index.html +2 -2
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/utils.py +38 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin.egg-info/PKG-INFO +48 -108
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin.egg-info/SOURCES.txt +2 -4
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin.egg-info/requires.txt +2 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/locales/en.yml +1 -1
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/locales/ru.yml +1 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/main.py +23 -12
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/sections/merchant.py +2 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/sections/models.py +19 -1
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/sqlite.py +7 -1
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/pyproject.toml +5 -3
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/tests/test_action.py +1 -1
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/tests/test_payments_fields_schema.py +2 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/tests/test_settings.py +1 -1
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/tests/test_sqlalcmeny_auth.py +2 -2
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/tests/test_sqlalcmeny_crud.py +3 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/tests/test_sqlalcmeny_schema.py +12 -1
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/uv.lock +549 -444
- brilliance_admin-0.43.7/.env +0 -0
- brilliance_admin-0.43.7/LICENSE +0 -17
- brilliance_admin-0.43.7/brilliance_admin/schema/group.py +0 -67
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/.configs/docker/Dockerfile +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/.configs/nginx/example.conf +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/.github/workflows/deploy.yml +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/.github/workflows/install-docker.yml +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/.isort.cfg +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/.python-version +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/__init__.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/api/__init__.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/api/routers.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/api/utils.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/api/views/__init__.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/api/views/auth.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/api/views/autocomplete.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/api/views/graphs.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/api/views/index.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/api/views/schema.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/api/views/settings.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/auth.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/docs.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/exceptions.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/integrations/__init__.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/__init__.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/auth.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/autocomplete.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/fields.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/fields_schema.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/table/__init__.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/table/base.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/table/create.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/table/delete.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/table/list.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/table/retrieve.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/table/update.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/schema/graphs/__init__.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/__init__.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/admin_action.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/fields/__init__.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/fields/function_field.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/fields_schema.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/table_models.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/materialdesignicons-webfont-CYDMK1kx.woff2 +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/materialdesignicons-webfont-CgCzGbLl.woff +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/materialdesignicons-webfont-D3kAzl71.ttf +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/materialdesignicons-webfont-DttUABo4.eot +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/dark-first/content.min.css +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/dark-first/skin.min.css +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/dark-slim/content.min.css +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/dark-slim/skin.min.css +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/img/example.png +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/img/tinymce.woff2 +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/lightgray/content.min.css +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/lightgray/fonts/tinymce.woff +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/lightgray/skin.min.css +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/plugins/accordion/css/accordion.css +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/plugins/accordion/plugin.js +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/plugins/codesample/css/prism.css +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/plugins/customLink/css/link.css +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/plugins/customLink/plugin.js +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/tinymce.min.js +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/static/vanilla-picker-B6E6ObS_.js +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin/translations.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin.egg-info/dependency_links.txt +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/brilliance_admin.egg-info/top_level.txt +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/README.md +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/__init__.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/sections/__init__.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/sections/currency.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/sections/graphs.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/sections/payments.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/sections/terminal.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/sections/users.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/static/favicon.ico +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/static/favicon.jpg +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/static/logo-outline.png +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/static/logo.png +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/example/utils.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/screenshots/PC-graphs.jpeg +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/screenshots/PC-table.jpeg +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/screenshots/iPad-edit.jpeg +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/screenshots/iPhone 15-edit.jpeg +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/screenshots/iPhone 15-login.jpeg +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/screenshots/websitemockupgenerator.png +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/setup.cfg +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/tests/__init__.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/tests/conftest.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/tests/test_sqlalcmeny_filters.py +0 -0
- {brilliance_admin-0.43.7 → brilliance_admin-0.44.1}/tests/test_translations.py +0 -0
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
name: brilliance
|
|
2
2
|
|
|
3
|
-
volumes:
|
|
4
|
-
db_data:
|
|
5
|
-
|
|
6
3
|
services:
|
|
7
4
|
backend:
|
|
8
5
|
build:
|
|
@@ -12,24 +9,32 @@ services:
|
|
|
12
9
|
- ./../../:/app
|
|
13
10
|
- ~/.ssh/id_rsa:/root/.ssh/id_rsa:delegated
|
|
14
11
|
- ~/.ssh/known_hosts:/root/.ssh/known_hosts:delegated
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
environment:
|
|
13
|
+
POSTGRES_DB: brilliance
|
|
14
|
+
POSTGRES_USER: brilliance
|
|
15
|
+
POSTGRES_PASSWORD: brilliance
|
|
16
|
+
POSTGRES_HOST: postgres
|
|
17
17
|
tmpfs:
|
|
18
18
|
- /tmp
|
|
19
19
|
ports:
|
|
20
20
|
- 8082:8082
|
|
21
21
|
command: uv run uvicorn example.main:app --host 0.0.0.0 --port 8082 --reload --proxy-headers --forwarded-allow-ips='*'
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
timeout: 2s
|
|
26
|
-
retries: 5
|
|
22
|
+
depends_on:
|
|
23
|
+
postgres:
|
|
24
|
+
condition: service_healthy
|
|
27
25
|
|
|
28
26
|
postgres:
|
|
29
27
|
image: postgres:alpine
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
environment:
|
|
29
|
+
POSTGRES_DB: brilliance
|
|
30
|
+
POSTGRES_USER: brilliance
|
|
31
|
+
POSTGRES_PASSWORD: brilliance
|
|
32
|
+
tmpfs:
|
|
33
|
+
- /var/lib/postgresql/data
|
|
34
34
|
ports:
|
|
35
35
|
- 5432:5432
|
|
36
|
+
healthcheck:
|
|
37
|
+
test: ['CMD', 'pg_isready', '-h', 'localhost', '-p', '5432', '-U', 'brilliance']
|
|
38
|
+
interval: 2s
|
|
39
|
+
timeout: 2s
|
|
40
|
+
retries: 10
|
|
@@ -7,20 +7,29 @@ jobs:
|
|
|
7
7
|
setup-https:
|
|
8
8
|
runs-on: ubuntu-latest
|
|
9
9
|
steps:
|
|
10
|
-
- name: Setup HTTPS with certbot
|
|
10
|
+
- name: Setup HTTPS with certbot (snap)
|
|
11
11
|
uses: appleboy/ssh-action@master
|
|
12
12
|
with:
|
|
13
13
|
host: ${{ vars.SERVER_HOST }}
|
|
14
14
|
username: deploy
|
|
15
15
|
key: ${{ secrets.SERVER_SSH_KEY }}
|
|
16
16
|
script: |
|
|
17
|
-
|
|
17
|
+
sudo apt remove -y certbot python3-certbot-nginx || true
|
|
18
|
+
|
|
19
|
+
if ! command -v snap >/dev/null 2>&1; then
|
|
18
20
|
sudo apt update
|
|
19
|
-
sudo apt install -y
|
|
21
|
+
sudo apt install -y snapd
|
|
20
22
|
fi
|
|
23
|
+
|
|
24
|
+
sudo snap install core || sudo snap refresh core
|
|
25
|
+
sudo snap install --classic certbot || true
|
|
26
|
+
sudo ln -sf /snap/bin/certbot /usr/bin/certbot
|
|
27
|
+
|
|
21
28
|
sudo certbot --nginx \
|
|
22
29
|
-d brilliance-admin.com \
|
|
23
30
|
-d www.brilliance-admin.com \
|
|
31
|
+
-d docs.brilliance-admin.com \
|
|
32
|
+
--expand \
|
|
24
33
|
--non-interactive \
|
|
25
34
|
--agree-tos \
|
|
26
35
|
-m admin@brilliance-admin.com \
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Brilliance Admin
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: brilliance-admin
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: Simple and lightweight
|
|
5
|
-
License-Expression:
|
|
3
|
+
Version: 0.44.1
|
|
4
|
+
Summary: Simple and lightweight data managment framework powered by FastAPI and Vue3 Vuetify all-in-one. Some call it heavenly in its brilliance.
|
|
5
|
+
License-Expression: MIT
|
|
6
6
|
Requires-Python: >=3.10
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
License-File: LICENSE
|
|
@@ -16,6 +16,8 @@ Requires-Dist: faker>=38.2.0; extra == "example"
|
|
|
16
16
|
Requires-Dist: pyjwt>=2.10.1; extra == "example"
|
|
17
17
|
Requires-Dist: structlog>=25.5.0; extra == "example"
|
|
18
18
|
Requires-Dist: rich>=14.2.0; extra == "example"
|
|
19
|
+
Requires-Dist: asyncpg>=0.31.0; extra == "example"
|
|
20
|
+
Requires-Dist: pydantic-settings>=2.12.0; extra == "example"
|
|
19
21
|
Provides-Extra: tests
|
|
20
22
|
Requires-Dist: pytest>=8.4.2; extra == "tests"
|
|
21
23
|
Requires-Dist: pytest-asyncio>=1.2.0; extra == "tests"
|
|
@@ -37,58 +39,69 @@ Dynamic: license-file
|
|
|
37
39
|
[](https://pypi.org/project/brilliance-admin/)
|
|
38
40
|
[](https://github.com/brilliance-admin/backend-python/actions)
|
|
39
41
|
|
|
40
|
-
Simple and lightweight
|
|
42
|
+
Simple and lightweight data managment framework powered by `FastAPI` and `Vue3` `Vuetify` all-in-one. \
|
|
41
43
|
Integrated with `SQLAlchemy`. Inspaired by Django Admin and DRF.\
|
|
42
44
|
_Some call it heavenly in its brilliance._
|
|
43
45
|
|
|
44
|
-
### [Live Demo](https://brilliance-admin.com/) | [Demo Sources](https://github.com/brilliance-admin/backend-python/tree/main/example) | Documentation
|
|
46
|
+
### [Live Demo](https://brilliance-admin.com/) | [Demo Sources](https://github.com/brilliance-admin/backend-python/tree/main/example) | [Documentation](https://docs.brilliance-admin.com/)
|
|
45
47
|
|
|
46
48
|
<img src="https://github.com/brilliance-admin/backend-python/blob/main/screenshots/websitemockupgenerator.png?raw=true"
|
|
47
49
|
alt="Preview">
|
|
48
50
|
|
|
49
51
|
</div>
|
|
50
52
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
-
|
|
53
|
+
### Brilliance Admin provides
|
|
54
|
+
|
|
55
|
+
A quick way to create a data management interface using:
|
|
56
|
+
|
|
57
|
+
- Admin page - endpoint with a prebuilt SPA [frontend Vue3 + Vuetify](https://github.com/brilliance-admin/frontend) <br>
|
|
58
|
+
This endpoint can be added to any ASGI compatable backend. For existing project or standalone admin app.
|
|
59
|
+
- API to fetch the UI JSON schema
|
|
60
|
+
- API methods for that UI to work with (to read and modify data)
|
|
61
|
+
|
|
62
|
+
## Key ideas
|
|
63
|
+
|
|
64
|
+
- **API Oriented** <br>
|
|
65
|
+
Data generation/updating API separated from rendering fontend with zero hardcode, this makes it possible to have a single frontend with multiple backend implementations in different languages and makes test coverage easier.
|
|
66
|
+
- **Rich visualization** <br>
|
|
56
67
|
Providing rich and convenient ways to display and manage data (tables, charts, etc) from any data source.
|
|
57
|
-
- **
|
|
58
|
-
|
|
59
|
-
|
|
68
|
+
- **UI JSON Schema** <br>
|
|
69
|
+
Represents the data describing the structure of entire admin panel UI. <br>
|
|
70
|
+
You only need to specify what should be rendered. The frontend will display it and automatically request data from the backend for rendering or updates.
|
|
71
|
+
- **ORM** <br>
|
|
72
|
+
Automatic generation from ORM for schema UI frontend and backend methods for CRUD operations.
|
|
73
|
+
- **Minimal boilerplate** <br>
|
|
60
74
|
Focused on simplified, but rich configuration.
|
|
61
75
|
|
|
62
|
-
|
|
63
|
-
- After authentication, the user receives the admin panel schema, and the frontend renders it
|
|
64
|
-
- The frontend communicates with the backend via API to fetch and modify data
|
|
65
|
-
|
|
66
|
-
### Features:
|
|
76
|
+
## Features
|
|
67
77
|
|
|
68
78
|
* Tables with full CRUD support, including filtering, sorting, and pagination.
|
|
69
79
|
* Ability to define custom table actions with forms, response messages, and file downloads.
|
|
70
80
|
* Graphs via ChartJS
|
|
71
81
|
* Localization support
|
|
72
82
|
* Adapted for different screen sizes and mobile devices
|
|
73
|
-
*
|
|
83
|
+
* Auth via any account data source
|
|
74
84
|
|
|
75
85
|
**Integrations:**
|
|
86
|
+
|
|
76
87
|
* **SQLAlchemy** - schema autogeneration for tables + CRUD operations + authorization
|
|
77
88
|
|
|
78
89
|
**Planned:**
|
|
90
|
+
|
|
79
91
|
* Dashboard features
|
|
80
92
|
* Role-based access permissions system via interface
|
|
81
93
|
* Backend interface for storing and viewing action history in the admin interface
|
|
82
94
|
* Nested data support for creation and detail views (inline editing), nested CRUD workflows
|
|
83
95
|
* Django ORM integration
|
|
96
|
+
* Support for Oauth providers
|
|
84
97
|
|
|
85
|
-
##
|
|
86
|
-
|
|
87
|
-
Installation:
|
|
98
|
+
## Installation:
|
|
88
99
|
``` shell
|
|
89
100
|
pip install brilliance-admin
|
|
90
101
|
```
|
|
91
102
|
|
|
103
|
+
## Usage example
|
|
104
|
+
|
|
92
105
|
You need to generate `AdminSchema` instance:
|
|
93
106
|
``` python
|
|
94
107
|
from brilliance_admin import schema
|
|
@@ -101,11 +114,9 @@ class CategoryExample(schema.CategoryTable):
|
|
|
101
114
|
admin_schema = schema.AdminSchema(
|
|
102
115
|
title='Admin Panel',
|
|
103
116
|
auth=YourAdminAuthentication(),
|
|
104
|
-
|
|
105
|
-
schema.
|
|
117
|
+
categories=[
|
|
118
|
+
schema.Category(
|
|
106
119
|
slug='example',
|
|
107
|
-
title='Example',
|
|
108
|
-
icon='mdi-star',
|
|
109
120
|
categories=[
|
|
110
121
|
CategoryExample(),
|
|
111
122
|
]
|
|
@@ -115,98 +126,27 @@ admin_schema = schema.AdminSchema(
|
|
|
115
126
|
|
|
116
127
|
admin_app = admin_schema.generate_app()
|
|
117
128
|
|
|
118
|
-
# Your FastAPI app
|
|
129
|
+
# Your FastAPI app (Any ASGI framework can be used)
|
|
119
130
|
app = FastAPI()
|
|
120
131
|
app.mount('/admin', admin_app)
|
|
121
132
|
```
|
|
122
133
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
Supports automatic schema generation for CRUD tables:
|
|
126
|
-
|
|
127
|
-
``` python
|
|
128
|
-
category = sqlalchemy.SQLAlchemyAdmin(db_async_session=async_sessionmaker, model=Terminal)
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
> [!NOTE]
|
|
132
|
-
> If `table_schema` is not specified, it will be generated automatically with all discovered fields and relationships
|
|
133
|
-
|
|
134
|
-
Now, the `category` instance can be passed to `categories`.
|
|
135
|
-
|
|
136
|
-
### DRF class style schema
|
|
137
|
-
|
|
138
|
-
``` python
|
|
139
|
-
from brilliance_admin import sqlalchemy
|
|
140
|
-
from brilliance_admin.translations import TranslateText as _
|
|
141
|
-
|
|
142
|
-
from your_project.models import Terminal
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
class TerminalFiltersSchema(sqlalchemy.SQLAlchemyFieldsSchema):
|
|
146
|
-
model = Terminal
|
|
147
|
-
fields = ['id', 'created_at']
|
|
148
|
-
created_at = schema.DateTimeField(range=True)
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
class TerminalSchema(sqlalchemy.SQLAlchemyFieldsSchema):
|
|
152
|
-
model = Terminal
|
|
153
|
-
list_display = ['id', 'merchant_id']
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
class TerminalAdmin(sqlalchemy.SQLAlchemyAdmin):
|
|
157
|
-
db_async_session = async_sessionmaker
|
|
158
|
-
model = Terminal
|
|
159
|
-
title = _('terminals')
|
|
160
|
-
icon = 'mdi-console-network-outline'
|
|
161
|
-
|
|
162
|
-
ordering_fields = ['id']
|
|
163
|
-
search_fields = ['id', 'title']
|
|
164
|
-
|
|
165
|
-
table_schema = TerminalSchema()
|
|
166
|
-
table_filters = TerminalFiltersSchema()
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
category = TerminalAdmin()
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
### Can be used both via inheritance and instancing
|
|
134
|
+
For more details, check out our [how-to-start documentation](https://docs.brilliance-admin.com/how-to-start/)
|
|
173
135
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
Availiable for `SQLAlchemyAdmin` and `SQLAlchemyFieldsSchema`
|
|
177
|
-
|
|
178
|
-
``` python
|
|
179
|
-
category = sqlalchemy.SQLAlchemyAdmin(
|
|
180
|
-
db_async_session=async_sessionmaker,
|
|
181
|
-
model=Terminal,
|
|
182
|
-
|
|
183
|
-
table_schema = sqlalchemy.SQLAlchemyFieldsSchema(
|
|
184
|
-
model=Terminal,
|
|
185
|
-
list_display=['id', 'merchant_id'],
|
|
186
|
-
),
|
|
187
|
-
table_filters = sqlalchemy.SQLAlchemyFieldsSchema(
|
|
188
|
-
model=Terminal,
|
|
189
|
-
fields=['id', 'created_at'],
|
|
190
|
-
created_at=schema.DateTimeField(range=True),
|
|
191
|
-
),
|
|
192
|
-
)
|
|
193
|
-
```
|
|
136
|
+
## Comparison of Similar Projects
|
|
194
137
|
|
|
195
|
-
|
|
138
|
+
The project closest in concept is [React Admin](https://github.com/marmelab/react-admin). <br>
|
|
139
|
+
It is an SPA frontend that store the schema UI inside and works with separate API backend providers.
|
|
196
140
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
secret='auth_secret',
|
|
200
|
-
db_async_session=async_session,
|
|
201
|
-
user_model=User,
|
|
202
|
-
)
|
|
203
|
-
```
|
|
141
|
+
The key difference of Brilliance Admin is that its all-in-one. <br>
|
|
142
|
+
It is more focused on rapid setup for data management, without the need to work with frontend configuration, while it still available.
|
|
204
143
|
|
|
205
|
-
## Comparison of Similar Projects
|
|
144
|
+
## Comparison of Similar Python Projects
|
|
206
145
|
|
|
207
146
|
| Criterion | Brilliance Admin | Django Admin | FastAPI Admin | Starlette Admin | SQLAdmin |
|
|
208
|
-
|
|
209
|
-
| Base framework | FastAPI | Django | FastAPI | Starlette
|
|
147
|
+
|---------|------------------|--------------|---------------|-----------------|----------|
|
|
148
|
+
| Base framework | FastAPI | Django | FastAPI | Starlette | FastAPI |
|
|
149
|
+
| ASGI compatible | Yes | Partial | Yes | Yes | Yes |
|
|
210
150
|
| 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
151
|
| 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
152
|
| Data source | Any source + SQLAlchemy | Django ORM | Tortoise ORM | Any source + SQLAlchemy, MongoDB | SQLAlchemy |
|
|
@@ -6,58 +6,69 @@
|
|
|
6
6
|
[](https://pypi.org/project/brilliance-admin/)
|
|
7
7
|
[](https://github.com/brilliance-admin/backend-python/actions)
|
|
8
8
|
|
|
9
|
-
Simple and lightweight
|
|
9
|
+
Simple and lightweight data managment framework powered by `FastAPI` and `Vue3` `Vuetify` all-in-one. \
|
|
10
10
|
Integrated with `SQLAlchemy`. Inspaired by Django Admin and DRF.\
|
|
11
11
|
_Some call it heavenly in its brilliance._
|
|
12
12
|
|
|
13
|
-
### [Live Demo](https://brilliance-admin.com/) | [Demo Sources](https://github.com/brilliance-admin/backend-python/tree/main/example) | Documentation
|
|
13
|
+
### [Live Demo](https://brilliance-admin.com/) | [Demo Sources](https://github.com/brilliance-admin/backend-python/tree/main/example) | [Documentation](https://docs.brilliance-admin.com/)
|
|
14
14
|
|
|
15
15
|
<img src="https://github.com/brilliance-admin/backend-python/blob/main/screenshots/websitemockupgenerator.png?raw=true"
|
|
16
16
|
alt="Preview">
|
|
17
17
|
|
|
18
18
|
</div>
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
-
|
|
20
|
+
### Brilliance Admin provides
|
|
21
|
+
|
|
22
|
+
A quick way to create a data management interface using:
|
|
23
|
+
|
|
24
|
+
- Admin page - endpoint with a prebuilt SPA [frontend Vue3 + Vuetify](https://github.com/brilliance-admin/frontend) <br>
|
|
25
|
+
This endpoint can be added to any ASGI compatable backend. For existing project or standalone admin app.
|
|
26
|
+
- API to fetch the UI JSON schema
|
|
27
|
+
- API methods for that UI to work with (to read and modify data)
|
|
28
|
+
|
|
29
|
+
## Key ideas
|
|
30
|
+
|
|
31
|
+
- **API Oriented** <br>
|
|
32
|
+
Data generation/updating API separated from rendering fontend with zero hardcode, this makes it possible to have a single frontend with multiple backend implementations in different languages and makes test coverage easier.
|
|
33
|
+
- **Rich visualization** <br>
|
|
25
34
|
Providing rich and convenient ways to display and manage data (tables, charts, etc) from any data source.
|
|
26
|
-
- **
|
|
27
|
-
|
|
28
|
-
|
|
35
|
+
- **UI JSON Schema** <br>
|
|
36
|
+
Represents the data describing the structure of entire admin panel UI. <br>
|
|
37
|
+
You only need to specify what should be rendered. The frontend will display it and automatically request data from the backend for rendering or updates.
|
|
38
|
+
- **ORM** <br>
|
|
39
|
+
Automatic generation from ORM for schema UI frontend and backend methods for CRUD operations.
|
|
40
|
+
- **Minimal boilerplate** <br>
|
|
29
41
|
Focused on simplified, but rich configuration.
|
|
30
42
|
|
|
31
|
-
|
|
32
|
-
- After authentication, the user receives the admin panel schema, and the frontend renders it
|
|
33
|
-
- The frontend communicates with the backend via API to fetch and modify data
|
|
34
|
-
|
|
35
|
-
### Features:
|
|
43
|
+
## Features
|
|
36
44
|
|
|
37
45
|
* Tables with full CRUD support, including filtering, sorting, and pagination.
|
|
38
46
|
* Ability to define custom table actions with forms, response messages, and file downloads.
|
|
39
47
|
* Graphs via ChartJS
|
|
40
48
|
* Localization support
|
|
41
49
|
* Adapted for different screen sizes and mobile devices
|
|
42
|
-
*
|
|
50
|
+
* Auth via any account data source
|
|
43
51
|
|
|
44
52
|
**Integrations:**
|
|
53
|
+
|
|
45
54
|
* **SQLAlchemy** - schema autogeneration for tables + CRUD operations + authorization
|
|
46
55
|
|
|
47
56
|
**Planned:**
|
|
57
|
+
|
|
48
58
|
* Dashboard features
|
|
49
59
|
* Role-based access permissions system via interface
|
|
50
60
|
* Backend interface for storing and viewing action history in the admin interface
|
|
51
61
|
* Nested data support for creation and detail views (inline editing), nested CRUD workflows
|
|
52
62
|
* Django ORM integration
|
|
63
|
+
* Support for Oauth providers
|
|
53
64
|
|
|
54
|
-
##
|
|
55
|
-
|
|
56
|
-
Installation:
|
|
65
|
+
## Installation:
|
|
57
66
|
``` shell
|
|
58
67
|
pip install brilliance-admin
|
|
59
68
|
```
|
|
60
69
|
|
|
70
|
+
## Usage example
|
|
71
|
+
|
|
61
72
|
You need to generate `AdminSchema` instance:
|
|
62
73
|
``` python
|
|
63
74
|
from brilliance_admin import schema
|
|
@@ -70,11 +81,9 @@ class CategoryExample(schema.CategoryTable):
|
|
|
70
81
|
admin_schema = schema.AdminSchema(
|
|
71
82
|
title='Admin Panel',
|
|
72
83
|
auth=YourAdminAuthentication(),
|
|
73
|
-
|
|
74
|
-
schema.
|
|
84
|
+
categories=[
|
|
85
|
+
schema.Category(
|
|
75
86
|
slug='example',
|
|
76
|
-
title='Example',
|
|
77
|
-
icon='mdi-star',
|
|
78
87
|
categories=[
|
|
79
88
|
CategoryExample(),
|
|
80
89
|
]
|
|
@@ -84,98 +93,27 @@ admin_schema = schema.AdminSchema(
|
|
|
84
93
|
|
|
85
94
|
admin_app = admin_schema.generate_app()
|
|
86
95
|
|
|
87
|
-
# Your FastAPI app
|
|
96
|
+
# Your FastAPI app (Any ASGI framework can be used)
|
|
88
97
|
app = FastAPI()
|
|
89
98
|
app.mount('/admin', admin_app)
|
|
90
99
|
```
|
|
91
100
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
Supports automatic schema generation for CRUD tables:
|
|
95
|
-
|
|
96
|
-
``` python
|
|
97
|
-
category = sqlalchemy.SQLAlchemyAdmin(db_async_session=async_sessionmaker, model=Terminal)
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
> [!NOTE]
|
|
101
|
-
> If `table_schema` is not specified, it will be generated automatically with all discovered fields and relationships
|
|
102
|
-
|
|
103
|
-
Now, the `category` instance can be passed to `categories`.
|
|
104
|
-
|
|
105
|
-
### DRF class style schema
|
|
106
|
-
|
|
107
|
-
``` python
|
|
108
|
-
from brilliance_admin import sqlalchemy
|
|
109
|
-
from brilliance_admin.translations import TranslateText as _
|
|
110
|
-
|
|
111
|
-
from your_project.models import Terminal
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
class TerminalFiltersSchema(sqlalchemy.SQLAlchemyFieldsSchema):
|
|
115
|
-
model = Terminal
|
|
116
|
-
fields = ['id', 'created_at']
|
|
117
|
-
created_at = schema.DateTimeField(range=True)
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
class TerminalSchema(sqlalchemy.SQLAlchemyFieldsSchema):
|
|
121
|
-
model = Terminal
|
|
122
|
-
list_display = ['id', 'merchant_id']
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
class TerminalAdmin(sqlalchemy.SQLAlchemyAdmin):
|
|
126
|
-
db_async_session = async_sessionmaker
|
|
127
|
-
model = Terminal
|
|
128
|
-
title = _('terminals')
|
|
129
|
-
icon = 'mdi-console-network-outline'
|
|
130
|
-
|
|
131
|
-
ordering_fields = ['id']
|
|
132
|
-
search_fields = ['id', 'title']
|
|
133
|
-
|
|
134
|
-
table_schema = TerminalSchema()
|
|
135
|
-
table_filters = TerminalFiltersSchema()
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
category = TerminalAdmin()
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### Can be used both via inheritance and instancing
|
|
101
|
+
For more details, check out our [how-to-start documentation](https://docs.brilliance-admin.com/how-to-start/)
|
|
142
102
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
Availiable for `SQLAlchemyAdmin` and `SQLAlchemyFieldsSchema`
|
|
146
|
-
|
|
147
|
-
``` python
|
|
148
|
-
category = sqlalchemy.SQLAlchemyAdmin(
|
|
149
|
-
db_async_session=async_sessionmaker,
|
|
150
|
-
model=Terminal,
|
|
151
|
-
|
|
152
|
-
table_schema = sqlalchemy.SQLAlchemyFieldsSchema(
|
|
153
|
-
model=Terminal,
|
|
154
|
-
list_display=['id', 'merchant_id'],
|
|
155
|
-
),
|
|
156
|
-
table_filters = sqlalchemy.SQLAlchemyFieldsSchema(
|
|
157
|
-
model=Terminal,
|
|
158
|
-
fields=['id', 'created_at'],
|
|
159
|
-
created_at=schema.DateTimeField(range=True),
|
|
160
|
-
),
|
|
161
|
-
)
|
|
162
|
-
```
|
|
103
|
+
## Comparison of Similar Projects
|
|
163
104
|
|
|
164
|
-
|
|
105
|
+
The project closest in concept is [React Admin](https://github.com/marmelab/react-admin). <br>
|
|
106
|
+
It is an SPA frontend that store the schema UI inside and works with separate API backend providers.
|
|
165
107
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
secret='auth_secret',
|
|
169
|
-
db_async_session=async_session,
|
|
170
|
-
user_model=User,
|
|
171
|
-
)
|
|
172
|
-
```
|
|
108
|
+
The key difference of Brilliance Admin is that its all-in-one. <br>
|
|
109
|
+
It is more focused on rapid setup for data management, without the need to work with frontend configuration, while it still available.
|
|
173
110
|
|
|
174
|
-
## Comparison of Similar Projects
|
|
111
|
+
## Comparison of Similar Python Projects
|
|
175
112
|
|
|
176
113
|
| Criterion | Brilliance Admin | Django Admin | FastAPI Admin | Starlette Admin | SQLAdmin |
|
|
177
|
-
|
|
178
|
-
| Base framework | FastAPI | Django | FastAPI | Starlette
|
|
114
|
+
|---------|------------------|--------------|---------------|-----------------|----------|
|
|
115
|
+
| Base framework | FastAPI | Django | FastAPI | Starlette | FastAPI |
|
|
116
|
+
| ASGI compatible | Yes | Partial | Yes | Yes | Yes |
|
|
179
117
|
| 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 |
|
|
180
118
|
| Frontend architecture | Separate frontend (SPA) | Classic server-rendered UI | Server-rendered UI with JS interactivity | Server-rendered UI with JS interactivity | Server-rendered UI |
|
|
181
119
|
| Data source | Any source + SQLAlchemy | Django ORM | Tortoise ORM | Any source + SQLAlchemy, MongoDB | SQLAlchemy |
|
|
@@ -8,7 +8,8 @@ from brilliance_admin.exceptions import AdminAPIException, APIError
|
|
|
8
8
|
from brilliance_admin.schema import AdminSchema
|
|
9
9
|
from brilliance_admin.schema.table.admin_action import ActionData, ActionResult
|
|
10
10
|
from brilliance_admin.schema.table.category_table import CategoryTable
|
|
11
|
-
from brilliance_admin.schema.table.table_models import
|
|
11
|
+
from brilliance_admin.schema.table.table_models import (
|
|
12
|
+
CreateResult, ListData, RetrieveResult, TableListResult, UpdateResult)
|
|
12
13
|
from brilliance_admin.translations import LanguageContext
|
|
13
14
|
from brilliance_admin.utils import get_logger
|
|
14
15
|
|
|
@@ -3,16 +3,18 @@ delete_confirmation_text: "Are you sure you want to delete those records?\nThis
|
|
|
3
3
|
deleted_successfully: 'The entries were successfully deleted.'
|
|
4
4
|
|
|
5
5
|
errors:
|
|
6
|
+
pk_not_found: 'The "%(pk_name)s" field was not found in the submitted data.'
|
|
7
|
+
record_not_found: 'No record found for %(pk_name)s=%(pk)s.'
|
|
6
8
|
db_error_create: 'Error creating a record in the database.'
|
|
7
9
|
db_error_update: 'Error updating the record in the database.'
|
|
8
10
|
db_error_retrieve: 'Error retrieving the record from the database.'
|
|
9
11
|
db_error_list: 'Failed to retrieve table data from the database.'
|
|
10
|
-
pk_not_found: 'The "%(pk_name)s" field was not found in the submitted data.'
|
|
11
|
-
record_not_found: 'No record found for %(pk_name)s=%(pk)s.'
|
|
12
12
|
connection_refused_error: 'Database connection error: %(error)s'
|
|
13
13
|
filters_exception: 'An unknown technical error occurred while filtering data.'
|
|
14
14
|
method_not_allowed: 'Error, method not allowed. This action is not permitted.'
|
|
15
15
|
filter_error: 'An error occurred during filtering: {error}'
|
|
16
|
+
serialize_field_error: 'Serialize error: %(error)s'
|
|
17
|
+
bad_type_error: 'Invalid data type: %(type)s but %(expected)s expected'
|
|
16
18
|
|
|
17
19
|
search_help: 'Available search fields: %(fields)s'
|
|
18
20
|
sqlalchemy_search_help: |
|
|
@@ -14,6 +14,7 @@ errors:
|
|
|
14
14
|
method_not_allowed: 'Ошибка, данный метод недоступен.'
|
|
15
15
|
filter_error: 'Проишла ошибка при фильтрации: %(error)s'
|
|
16
16
|
serialize_field_error: 'Ошибка чтения данных: %(error)s'
|
|
17
|
+
bad_type_error: 'Некорректный тип данных: %(type)s; ожидается %(expected)s'
|
|
17
18
|
|
|
18
19
|
search_help: 'Доступные поля для поиска: %(fields)s'
|
|
19
20
|
sqlalchemy_search_help: |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# pylint: disable=wildcard-import, unused-wildcard-import, unused-import
|
|
2
2
|
# flake8: noqa: F405
|
|
3
3
|
from .admin_schema import AdminSchema, AdminSchemaData
|
|
4
|
-
from .category import
|
|
4
|
+
from .category import CategoryGroup, CategoryLink
|
|
5
5
|
from .graphs import *
|
|
6
|
-
from .group import Group
|
|
7
6
|
from .table import *
|
|
7
|
+
from .table.category_table import CategoryTable
|